构建数据库以进行扩展的最佳方法

时间:2011-10-24 20:09:16

标签: mysql sql database

我正在开发一个项目,该项目有可能拥有大量用户,每个用户都将管理自己独特的数据集。我认为数据可以以两种方式之一存储。

1)为每个用户创建一个完全不同的数据库,以便他们的数据与每个用户完全分开

2)在同一数据库中共享数据,并使用user_id字段在查询级别对其进行隔离。

每个用户的架构始终相同。

主要的是系统需要能够扩展,我不确定是否有数千个不同的数据库,或者在同一个表中存储数百万条记录会更好地扩展。

我有兴趣听到过去曾经处理过这种情况的任何人,以及任何一种选择可能存在的陷阱。

3 个答案:

答案 0 :(得分:2)

除了您已经确定的扩展方面之外,还有一些其他问题可能会导致您的决定 - “大量用户”也可能意味着您最好澄清这样一系列数字。

其他运营问题:

  • 安全性 - 依赖代码中的user_id字段依赖于没有错误或缺陷,允许用户查看/处理其他用户的数据。

  • 升级 - 两种方式,但您可以一次升级所有人(单个数据库)或拆分 - 允许自己在不同时间升级不同的用户组。

  • 备份/还原 - 根据还原要求和SLA,您可能会发现让单个数据库中的每个人在备份/还原时都会产生太多问题。如果单个客户端想要恢复其数据,那么当它与所有其他客户端的数据结合时的操作开销并非易事。同样,拥有大量数据库=大量单独备份。

  • 可扩展性 - 能够将不同用户的数据库放在单独的服务器上可以帮助扩展,而不需要大型的铁DB服务器。但同样,这是管理费用。

应用程序及其数据源的多租户不是一个简单的问题/答案 - 在这种情况下可以更多地了解有多少用户“大”,并结合操作方面的问题为您提供指导。

答案 1 :(得分:1)

不要为每个用户创建单独的数据库。那不好。

如果您有百万用户怎么办?

为属于同一上下文的用户和实体创建表。你不能扩展这样的应用程序。在学习可伸缩性之前。您需要了解数据库设计以及数据库的工作原理。

答案 2 :(得分:1)

选项2应该是您最好的选择。数据库通常设计用于处理数百万行和大量数据。因此,只要您正确设计架构并具有适当的索引,填充因子等,选项2将引导您进行所需的缩放。正如DarthVader所说,了解有关数据库设计的更多信息。