在Rails中处理分片数据库的最好方法是什么?是否应该在应用层、活动记录层、数据库驱动器层、代理层或其他层处理分片?每种方法的优缺点是什么?
发布于 2008-09-07 08:47:31
FiveRuns有一个名为DataFabric的gem,它执行应用程序级别的分片和主/从复制。这可能值得一查。
发布于 2008-09-11 01:56:42
我假设对于分片,我们谈论的是水平分区而不是垂直分区(here are the differences on Wikipedia。
首先,在考虑水平分区之前,尽可能地扩展垂直分区。在Rails中,让不同的模型指向不同的机器是很容易的,对于大多数Rails站点来说,这已经足够了。
对于水平分区,在理想情况下,这将在Rails中的应用程序层中处理。但是,虽然这并不难,但在Rails中并不是微不足道的,当您需要它的时候,您的应用程序通常已经超出了可行的范围,因为您的ActiveRecord调用随处可见。没有人,开发人员或管理人员,喜欢在你需要它之前工作,因为每个人都更愿意在用户现在使用的功能上工作,而不是在你的流量爆炸后几年内不会发挥作用的分区。
ActiveRecord layer...据我所知并不容易。将需要大量的猴子补丁到Rails内部。
在Spock,我们最终使用定制的MySQL proxy来处理这个问题,并将其作为Spock Proxy在SourceForge上开源。ActiveRecord认为它是在与一台MySQL数据库机器对话,而实际上它是在与代理对话,然后代理与一个或多个MySQL数据库对话,合并/排序结果,并将结果返回给ActiveRecord。只需要对Rails代码进行少量更改。请查看Spock代理SourceForge页面,了解更多详细信息以及我们选择此路线的原因。
发布于 2008-09-04 19:31:47
对于像我这样没有听说过分片的人:
http://highscalability.com/unorthodox-approach-database-design-coming-shard
https://stackoverflow.com/questions/44145
复制相似问题