2013-07-03 84 views
1

我正在帮助客户将PHP/MySQL应用程序迁移到AWS。 我们遇到的一个问题是他们已经构建了这个应用程序来使用大量的数据库。他们为每个用户创建一个新的数据库(具有相同的模式)。他们期望拥有数以万计的用户。MySQL - 使用具有相同模式而不是一个大型数据库的多个数据库

我不太了解MySQL,但是这个设置对我来说似乎并不好。我唯一的猜测是开发人员这样做是为了避免拥有大量数据的表。然而,我只能想到缺点(维持这个系统将是一场噩梦,非常难以扩展,难以扩展等)。

无论如何,这种类型的模式通常在MySQL社区中使用吗?有什么好处?

我试图说服他们应该重新构建数据库模式。

* [编辑] *

在我们知道这种方法的另一个缺点其间。我们原本打算将Amazon RDS用于数据存储。但是,RDS目前每个实例最多支持30个数据库。所以现在排除了RDS。 RDS具有这个限制的事实已经非常明显,我的理解是拥有如此庞大数量的数据库并不是MySQL的常见做法。

谢谢!

+0

[关于许多数据库与许多表的性能相关的问题](http://stackoverflow.com/questions/696682/mysql-many-tables-or-many-databases) – Mike

+0

@Mike:我想象一下,规范化替代方法不是在同一个数据库中创建许多表,而是在现有表中包含额外的列以指示每个记录与哪个用户关联。因此,我不相信这个链接是100%相关的...... – eggyal

回答

2

这是我读过的最可怕的想法之一(我读过很多)。一旦数据库数量不能与数据库中的表一样扩大,另一方面不可能将用户连接到彼此或至少共享共同的属性和选项。它基本上破坏了数据库本身的目的。

我在这里的建议是超出原来的范围:你的直觉知道比你想象的更多,更多地听它!

+1

你有没有任何经验或数据与“数据库不缩放以及数据库中的表”的想法? [你可以做跨数据库连接,并且很好。](http://stackoverflow.com/questions/2132654/querying-multiple-databases-at-once) – Mike

+1

完全同意。即使每个客户的单独表格都不好,如果您认为这是一个好主意,您需要重新评估您的模式。 –

+0

当然,我的SQL是生锈的,但即使如此,它仍然是一个坏主意,因为数据库旨在分离问题的不同分支,而不是不同的数据集。此外,您必须将数据库标题中的user_id字符串与快速整数相反地进行管理,并且在删除用户时可能会遇到问题。如果每个用户的大量唯一数据进来可能导致数据库超载,那么可以考虑将这些数据外包到由数据库链接的单独数据文件中。 – havarc

0

这个想法对我来说似乎也很奇怪!数据库被设计为处理大型数据集!如果真的担心数据量,通常更好的做法是将表分隔到不同的数据库上 - 托管在不同的物理服务器上,因为这样可以跨硬件传播数据库级进程以提高性能

另外,不知道他们计划如何托管此应用程序,但许多托管服务提供商将按照数据库实例向您收费!

这会给你带来的另一个问题是它会使报告变得更加困难 - 我不想试图在查询中包含来自10,000个数据库的表!

相关问题