1

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

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

我已经进行了一些研究,MySQL Proxy 成为主要候选者,但我无法找到任何关于使其按上述方式执行的具体信息。

任何人?

4

2 回答 2

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/ 。

于 2009-04-26T15:10:01.107 回答
2

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

于 2009-04-27T20:13:29.090 回答