2011-10-24 40 views
1

我正在研究一个项目,该项目有可能拥有大量用户,每个用户都将管理他们自己的唯一数据集。我认为数据可以以两种方式之一存储。构建数据库以进行缩放的最佳方法

1)为每个用户创建一个完全不同的数据库,使得它们的数据是从每个人充分分开别人的

2)分享在相同的数据库中的数据,并且使用一个USER_ID字段查询级别分离它。

对于每个用户,模式将始终相同。

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

我有兴趣从过去曾经处理过这种情况的人那里听到这样的情况,以及这两种情况都有哪些缺陷。

回答

1

选项2应该是你最好的选择。数据库通常设计用于处理数百万行和大量数据。所以,只要你正确地设计你的模式,并有适当的索引,填充因子等,选项2将引导你到你正在寻找的扩展。正如DarthVader所说,了解更多关于数据库设计的知识。

1

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

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

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

2

除了您已经确定的缩放比例外,还有其他一些问题可能会影响您的决定 - “大量用户”也意味着您最好澄清的数字范围。

其他业务问题:

  • 安全性 - 依靠USER_ID领域内你的代码依赖于那里是没有错误或漏洞,允许用户查看/ maniuplate其他用户的数据。

  • 升级 - 可以双向使用,但可以一次升级所有人(单个数据库)或分割 - 允许您在不同的时间升级不同的用户组。

  • 备份/恢复 - 根据恢复要求和SLA,您可能会发现,在备份/恢复时,让每个人都在单个数据库中会产生太多问题。如果一个客户想要恢复他们的数据,那么当它与所有其他客户的数据相结合时,运营开销并不是微不足道的。同样,拥有大量数据库=大量的单独备份。

  • 可伸缩性 - 能够将不同用户的数据库放置在单独的服务器上,可以帮助扩展,而不需要大型的数据库服务器。但是,这又是一个管理开销。

应用程序的多租户和它的数据源不是一个简单的问题/答案 - 了解更多关于有多少用户是在这种情况下,“大”可能是,与运营问题为你提供指导相结合。

+0

*我相当有信心,我可以处理任一选项的安全性。 *我可以看到任何升级方式的优点,但我认为我会立即升级所有人,无论选择哪种数据模型。 *我认为备份具有优点/缺点,无论使用何种数据模型。 我可以看到正反两方面的方法。这对我来说纯粹是一个可扩展性问题。 –

+0

如果没有计划的话,操作上的限制,特别是升级/备份/恢复周围的操作限制可能会成为一个麻烦。如果没有所有的信息,那么提供一个“正确的”答案是不太可能的 - 或者对SO的领域的解决方案100%确定无疑。 – Andrew

+0

您可以用任何一种机制进行扩展,其中一些最大的数据以分片/映射缩减方式保存,同样,单个数据库服务器上存在数十亿行数据集(硬件并不便宜)。 – Andrew

相关问题