如何在RoR中使用分区数据库?

时间:2010-01-26 14:57:33

标签: ruby-on-rails multiple-databases

我想用一个具体的例子来问这个问题,因为我正在寻找一个具体的答案。 :)假设我有一组在user_id上分片的MySQL数据库。例如,所有拥有ID为1-10000的用户将进入数据库D1,用户ID为10001 - 20000将进入数据库D2等等。我的RoR应用程序中有一个模型“User”。根据所需信息的user_id,此模型应查询相应的数据库并返回结果。任何RoR专家都能说出如何使它成为可能吗?

一个相关的问题是,假设我在运行MySQL的同一个盒子上创建了N个数据库D1,D2 ...... DN,并在这些数据库的前面创建了一个memcached缓存层。以这种方式构造数据库会导致性能不佳吗? (我担心DB层和内存缓存层会有很多缓存未命中。)

3 个答案:

答案 0 :(得分:1)

我认为您需要的是:http://partitioned.rubyforge.org/

答案 1 :(得分:0)

查看DataFabric gem,它为Active Record添加了数据库分片支持。它可以让你做以下事情:

class User < ActiveRecord::Base
  data_fabric :replicated => true, :shard_by => :user_id
end

答案 2 :(得分:0)

您正在寻找的内容通常称为分片。关于它有一个非常全面的article on wikipedia,你应该阅读它,并在high scalability blog上写一篇好文章。

当涉及使用rails进行分片时,我建议使用data fabric gem,它支持应用程序级数据库分片以及主/从复制。

我希望这有帮助!