Far*_*mov 10 database-design sql-server
我知道 Shopify 只为所有商店使用一个数据库。但是他们如何处理拥有如此大数据的数据库呢?为 50.000 多家商店使用单个数据库是个好主意吗?
Aar*_*and 23
请注意:我是从 SQL Server 的角度来回答的,所以我提到了一些特定于 SQL Server 的概念,但我相信所有这些概念在其他主要 RDBMS 平台中都有等价物,具有相似的优点和局限性。
当我想到其他潜在的利弊时,我也可能会继续编辑这个答案。
嗯,这真的取决于架构、数量等。商店存储的究竟是什么?它与存储大约 50,000 只猫或 50,000 种产品或 50,000 个翼形坚果的数据有何不同?
如果确实可以按客户完全隔离数据(不包括查找表,例如邮政编码或特定于应用程序的表,可以进入单个中央数据库):
如果一个客户超过了应用程序,没有简单的方法来提取他们的数据并将其移动到另一个实例、服务器等以进行横向扩展,除非您提前计划并在类似的东西上进行分区CustomerID
并拥有 50,000 个文件组(您是有限的无论如何,到 15,000 个分区,或者如果您使用的是较旧版本的 SQL Server,则为 1,000个分区,并且文件组过多可能是灾难性的)。另请注意,分区需要企业版。
如果事实证明您的所有客户对于这个实例来说都太大了,那么横向扩展意味着获得新硬件并将整个数据库移到那里(并且可能会再次这样做)。
删除客户可能同样痛苦,因为您必须从非常大的表中删除一些行,这不会很便宜。
您可能拥有广泛分布的客户数据(一个客户有 10 亿行,另一个客户有 5,000 行)。这可能导致诸如参数嗅探和涉及基数和计划质量的有害性能(因为您可能会针对非常不同的数据集对相同的查询重复使用相同的计划)。
您的所有客户都受到完全相同的 SLA 和 HA/DR 计划的约束。您要么让整个数据库处于完整恢复模式并进行 n 分钟日志备份,要么处于简单状态并依赖完整+差异备份。如果由于客户错误而必须恢复,或者需要将数据库恢复到某个时间点,这会影响到每个客户。
数据检索中可能会出现错误——例如,where 子句中的错误可能导致一个客户看到另一个客户的数据,或所有其他客户的数据。
可能会有法律影响(有些公司会严格要求您不要将他们的数据与任何其他公司,尤其是竞争对手的数据放在同一个数据库中)。
如果任何客户数据的安全性很重要,那么使用数据库分离比在表内分离更容易实现这一点。
将每个客户放在单独的数据库中的一些优势(或至少有多个数据库,每个数据库都用于一组客户):
DROP DATABASE
.一些缺点:
归档时间: |
|
查看次数: |
2252 次 |
最近记录: |