在Rails中处理分片数据库的最佳方式是什么?是否应该在应用程序层,活动记录层,数据库驱动程序层,代理层或其他什么东西处理分片?每个的优缺点是什么?数据库分片和Rails
回答
FiveRuns有一个名为DataFabric宝石,做应用程序级分片和主/从复制。这可能值得一试。
在我看来,最简单的办法就是保持1:1 Rails实例和数据库碎片之间。
对于那些像我一样没有听说过拆分的谁:
http://highscalability.com/unorthodox-approach-database-design-coming-shard
我认为与我们谈论的水平划分,而不是垂直分区(here are the differences on Wikipedia)碎片。
首先,拉伸垂直分区尽可能在考虑水平分区之前采取它。 Rails很容易让不同的模型指向不同的机器,对于大多数Rails站点来说,这会给你带来足够的帮助。
对于水平分区,理想情况下,这将在Rails中的应用程序层处理。但是,虽然这并不难,但在Rails中并不重要,在你需要它的时候,通常你的应用程序已经超出了这个可行的程度,因为你的ActiveRecord调用遍布整个地方。没有人,开发人员或管理人员喜欢在你需要它之前就开始工作,因为每个人都愿意使用用户现在将使用的功能,而不是在分区之后,这些分区在流量爆炸后可能不会发挥作用。
的ActiveRecord层 ...不是从我所看到的简单。将需要大量的猴子补丁到Rails内部。
在Spock,我们结束了处理这种使用定制的MySQL代理和开源了其在SourceForge为Spock Proxy。 ActiveRecord认为它正在与一台MySQL数据库机器交谈,当它与代理交谈时,代理会与一个或多个MySQL数据库通信,合并/排序结果并将其返回给ActiveRecord。只需要对Rails代码进行一些更改。查看Spock Proxy SourceForge页面了解更多细节以及我们走这条路线的原因。
滑轨连接到多个数据库是不是大deal-您只需一个ActiveRecord子类重写连接属性中的每个碎片。这使得它非常简单,如果你需要进行跨分片调用。当你需要在碎片之间进行调用时,你只需写一点代码即可。
我不喜欢分裂轨实例汉克的想法,因为它似乎具有挑战性的调用实例之间的代码,除非你有一个很大的共享库。你
也应该看看做这样的事情Masochism你开始分片之前。
为Rails与复制的环境中工作,我会建议使用my_replication插件,它可以帮助在运行时
- 1. 实体框架和分片数据库
- 2. Rails:使用Octopus Gem进行数据库分片的问题
- 3. 照片和数据库
- 4. Enzo SQL分片库和MongoDB的分片
- 5. Highslide照片库和外部数据库
- 6. 数据库在MongoDB中分片?
- 7. Propel中的数据库分片支持
- 8. 分组数据和分页使用Rails
- 9. Rails数组,数据库和表单
- 10. Rails will_paginate和ajax,在数据库表更改时进行分页
- 11. Django数据分片
- 12. 使用照片和数据库
- 13. Rails数据库Lifecyle
- 14. Ruby on Rails和数据库协会
- 15. Rails和后端的多个数据库
- 16. jQuery,Rails和Ajax POST到数据库
- 17. Rails和数据库列前缀?
- 18. Rails:混合NOSQL和SQL数据库
- 19. Rails的数据库测试和清除
- 20. 应该如何分解包含数据库和非数据库数据源的Rails模型?
- 21. 数据库重置后的Rails碎片缓存
- 22. Ruby On Rails数据库 - >漂亮图片
- 23. 如何使用卡片和卡片设计游戏数据库
- 24. 产品图片数据库
- 25. Android的片段数据库
- 26. Rails:播种数据库数据和日期格式
- 27. 无法分片数据
- 28. 您如何区分集中式数据库和分散式数据库?
- 29. Rails 2.1和Rails 2.3共享相同的数据库
- 30. Rails 3数据库移植
https://github.com/mperham/开关数据库连接到一个奴隶data_fabric是新的URL – 2011-01-18 18:20:52
“Bob现在负责”:https://github.com/bpot/data_fabric – 2012-10-08 08:39:45