假设我有一张表(我们称之为BigTable
),每天可以体验5,000,000 次插入(可能有同样多的 SELECT)。插入的每一行大约为 50kb。
这些每日 INSERT 平均分配给 5 个客户端(该表有一个名为 的 FK ClientID
)。永远不需要跨多个客户端选择或连接数据。
随着这张表的增长,我担心数据库性能,所以我想出了两个解决方案。
解决方案 1:
- 分区
BigTable
依据ClientID
- 将每个分区存储在服务器上的单独硬盘上(使用 Azure 博客存储)。
- 将 1 个月前的所有数据(存档数据,但仍需要可查询)分区到另一组 READONLY 分区中。
本质上,这意味着它们自己的存储设备上的以下分区:
- 主要(所有数据不包括
BigTable
) - ClientA
BigTable
(每天 5,000,000 行 / 5 个客户 x 30 天 = 30,000,000 行) - ClientB
BigTable
(30,000,000 行) - ClientC
BigTable
(30,000,000 行) - ClientD
BigTable
(30,000,000 行) - ClientE
BigTable
(30,000,000 行) - 客户A的
BigTable
档案 - 客户B的
BigTable
档案 - ClientC的
BigTable
档案 - ClientD的
BigTable
档案 - ClientE的
BigTable
档案
存档表中的行数将为 (5,000,000) x (DB 天数) - (30,000,000)。这仍然是一个巨大的表格,但只会用于绘制奇怪的报告。
SQL Server 将托管在 14GB、8 核的 Azure VM 上。
解决方案 2:
另一种选择是为每个客户端托管单独的数据库。这意味着每个人都将拥有自己的专用 SQL Server 机器。归档数据仍会进行分区。
由于数据的物理分离,此选项不是最佳选择。必须管理对多个数据库的更新可能会带来很大的问题。为每个客户端建立单独的数据库连接也是开发人员的考虑因素。
有人可以就这些选项提出建议吗?