首页 / 知识

数据库分片和Rails

2023-04-14 05:27:00

数据库分片和Rails

Database sharding and Rails

在Rails中处理分片数据库的最佳方法是什么? 分片应在应用程序层,活动记录层,数据库驱动程序层,代理层还是其他任何层处理? 各自的优缺点是什么?


FiveRuns有一个名为DataFabric的gem,它可以进行应用程序级分片和主/从复制。可能值得一试。


我假设使用碎片是在谈论水平分区,而不是垂直分区(这是Wikipedia上的区别)。

首先,在考虑水平分区之前,将垂直分区尽可能扩展。在Rails中,将不同的模型指向不同的机器很容易,对于大多数Rails站点,这将带给您足够的帮助。

对于水平分区,在理想情况下,这将在Rails的应用程序层进行处理。但是,尽管这并不困难,但在Rails中却并不琐碎,并且到了您需要的时候,通常您的应用程序已经超出了可行的范围,因为到处都是ActiveRecord调用。开发人员或管理人员没有人喜欢在需要它之前进行开发,因为每个人都希望开发用户现在将要使用的功能,而不是进行分区,因为分区可能在您的流量激增多年后才开始发挥作用。

ActiveRecord层...从我所看到的并不容易。将需要大量的猴子修补到Rails内部。

在Spock,我们最终使用自定义的MySQL代理进行了处理,并将其作为Spock Proxy在SourceForge上开源。 ActiveRecord认为它正在与一台MySQL数据库计算机通信,而实际上它正在与代理服务器通信,然后代理服务器与一个或多个MySQL数据库通信,合并/排序结果,并将其返回给ActiveRecord。只需要对Rails代码进行一些更改。请查看Spock Proxy SourceForge页面,以了解更多详细信息以及我们选择此路线的原因。


对于像我这样从未听说过分片的人:

http://highscalability.com/unorthodox-approach-database-design-coming-shard


将Rails连接到多个数据库没什么大不了的-您只需为每个分片提供一个ActiveRecord子类,即可覆盖连接属性。如果您需要进行跨分片调用,这将使其非常简单。然后,当需要在分片之间进行调用时,只需编写一些代码。

我不喜欢Hank拆分rails实例的想法,因为除非您有一个大型共享库,否则在实例之间调用代码似乎很困难。

另外,在开始分片之前,您还应该考虑做类似受虐狂的事情。


为了使Rails在复制环境下工作,我建议使用my_replication插件,该插件可在运行时帮助将数据库连接切换到一个从属服务器

https://github.com/minhnghivn/my_replication


在我看来,最简单的方法是在Rails实例和DB碎片之间保持1:1的比例。


数据库应用程序方法驱动程序

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢