在Rails中处理分片数据库的最佳方法是什么?是应该在应用程序层,活动记录层,数据库驱动程序层,代理层或其他方面处理分片?各自的优点和缺点是什么?
FiveRuns有一个名为DataFabric的gem ,它可以进行应用程序级分片和主/从复制.可能值得一试.
我假设有分片我们谈的是水平分区而不是垂直分区(这里是维基百科上的差异).
首先,在考虑水平分区之前,尽可能地拉伸垂直分区.在Rails中很容易让不同的模型指向不同的机器,对于大多数Rails站点,这将带给你足够的空间.
对于水平分区,在理想的世界中,这将在Rails 中的应用层处理.虽然它并不难,但它在Rails中并不是微不足道的,当你需要它的时候,通常你的应用程序已经超出了可行的程度,因为你的ActiveRecord调用遍布整个地方.并且没有人,开发人员或管理人员喜欢在您需要之前进行操作,因为每个人都希望处理用户现在将使用的功能,而不是在流量爆炸后可能无法发挥多年的分区.
ActiveRecord层 ......从我能看到的内容来看并不容易.需要大量的猴子修补到Rails内部.
在Spock,我们最终使用自定义MySQL代理处理它,并在SourceForge上将其作为Spock Proxy开源.ActiveRecord认为它正在与一台MySQL数据库机器进行通信,当它与代理进行通信时,代理会与一个或多个MySQL数据库进行通信,对结果进行合并/排序,并将它们返回给ActiveRecord.只需对Rails代码进行一些更改即可.请查看Spock Proxy SourceForge页面,了解更多详细信息以及我们走这条路线的原因.
对于那些喜欢我没有听说过分片的人:
http://highscalability.com/unorthodox-approach-database-design-coming-shard