使用可伸缩性选项设置多个MySQL数据库

时间:2009-04-26 14:56:31

标签: mysql scalability mysql-proxy

我需要建立一个MySQL环境,支持随着时间的推移添加许多独特的数据库(实际上是数千个)。 我假设在某些时候我需要开始添加MySQL服务器,并希望我的环境事先为这个案例做好准备,以便轻松过渡到第2,第3,第100台服务器。

只是为了让它变得有趣,如果对解决方案进行建模,那么查询数据库的应用程序会将所有查询发送到单个地址并接收结果,这将非常方便。它应该不知道服务器的数量和位置。数据库名称是唯一的,可用于确定哪个服务器拥有数据库。

我做了一些研究,并且MySQL Proxy作为主要候选者弹出,但是我还没有找到任何关于如上所述使其执行的具体内容。

任何?

2 个答案:

答案 0 :(得分:5)

好问题。我知道有几家公司已经做到了这一点(Facebook成为最大的公司)。没有人感到高兴,但也有其他类型的傻瓜。

您需要考虑更多事项 - 当某些数据库或服务器出现故障时会发生什么?当您需要进行跨数据库查询时会发生什么(即使您现在不这么认为,也会如此)。

以下是FriendFeed解决方案:http://bret.appspot.com/entry/how-friendfeed-uses-mysql

它有点“后退”,因为它们基本上使用MySQL作为美化的键值存储。我不确定他们为什么不切断中间人并使用类似BerkeleyDB的东西来存储他们的对象。可能是连接管理?看起来MySQL的开销太高,无法支付可以轻松添加的东西(着名的最后一句话)。

你真正想要的(我认为)是一个分布式无共享数据库。有些是基于MySQL和PostgreSQL等开源技术构建的,但没有一个是免费提供的。如果您有购买心情,请查看以下公司:GreenplumAsterDataNetezzaVertica

还有大量各种分布式键值存储解决方案。由于缺乏更好的参考,这是一个起点:http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/

答案 1 :(得分:2)

您的问题听起来与我们面临的问题类似 - 您扮演的是白标,每个客户都需要拥有自己独立的数据库。假设这个概念与您的概念相似,我们所做的就是利用一个“主”数据库来存储客户端的主机名和数据库名称(可以在应用程序层中缓存)。客户端访问的服务器然后可以动态地将其数据源转移到所需的数据库。这使我们可以扩展到数千个分散在服务器上的客户端数据库。