我正在开发一个项目,该项目有可能拥有大量用户,每个用户都将管理自己独特的数据集。我认为数据可以以两种方式之一存储。
1)为每个用户创建一个完全不同的数据库,以便他们的数据与每个用户完全分开
2)在同一数据库中共享数据,并使用user_id字段在查询级别对其进行隔离。
每个用户的架构始终相同。
主要的是系统需要能够扩展,我不确定是否有数千个不同的数据库,或者在同一个表中存储数百万条记录会更好地扩展。
我有兴趣听到过去曾经处理过这种情况的任何人,以及任何一种选择可能存在的陷阱。
答案 0 :(得分:2)
除了您已经确定的扩展方面之外,还有一些其他问题可能会导致您的决定 - “大量用户”也可能意味着您最好澄清这样一系列数字。
其他运营问题:
安全性 - 依赖代码中的user_id字段依赖于没有错误或缺陷,允许用户查看/处理其他用户的数据。
升级 - 两种方式,但您可以一次升级所有人(单个数据库)或拆分 - 允许自己在不同时间升级不同的用户组。
备份/还原 - 根据还原要求和SLA,您可能会发现让单个数据库中的每个人在备份/还原时都会产生太多问题。如果单个客户端想要恢复其数据,那么当它与所有其他客户端的数据结合时的操作开销并非易事。同样,拥有大量数据库=大量单独备份。
可扩展性 - 能够将不同用户的数据库放在单独的服务器上可以帮助扩展,而不需要大型的铁DB服务器。但同样,这是管理费用。
应用程序及其数据源的多租户不是一个简单的问题/答案 - 在这种情况下可以更多地了解有多少用户“大”,并结合操作方面的问题为您提供指导。
答案 1 :(得分:1)
不要为每个用户创建单独的数据库。那不好。
如果您有百万用户怎么办?
为属于同一上下文的用户和实体创建表。你不能扩展这样的应用程序。在学习可伸缩性之前。您需要了解数据库设计以及数据库的工作原理。
答案 2 :(得分:1)
选项2应该是您最好的选择。数据库通常设计用于处理数百万行和大量数据。因此,只要您正确设计架构并具有适当的索引,填充因子等,选项2将引导您进行所需的缩放。正如DarthVader所说,了解有关数据库设计的更多信息。