小编cyr*_*sly的帖子

SQL-Server多租户数据分区建议

我很感激有关分区(或不分区)多租户业务应用程序的设计注意事项的意见。所有数据表都使用一个复合键,类似于:

CREATE TABLE SomeTable(
  TenantId SMALLINT NOT NULL,
  ID INT NOT NULL,
  SomeData ...,
  CONSTRAINT [PK_SomeTable] PRIMARY KEY CLUSTERED (TenantID, ID)
)
Run Code Online (Sandbox Code Playgroud)

几乎所有读取都以特定的租户 ID 为键。写入由租户 ID 随机输入,但 3-5 天内的任何数据在此之后往往永远不会改变。

问题

  1. 如果我不分区,是 (tenantID, id) 或 (id,tenantid) 更好的选择。假设读取都是由租户 ID 进行的,写入是由租户 ID 随机写入的,并且每晚有足够的停机时间来运行维护计划。
  2. 为每个租户 ID 创建单独的分区有什么优点和缺点?
  3. 如果tenantID 是第一个键,分区会减少页面碎片吗?
  4. 如果分区在主文件中,是否会改变参数?
  5. 如果有 10 或 1000 个分区,它会改变参数吗?
  6. 答案是否取决于我使用的是 SQL 2016 还是 SQL Azure?

database-design sql-server partitioning azure-sql-database multi-tenant

5
推荐指数
1
解决办法
2986
查看次数