1

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

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

4

3 回答 3

1

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

于 2010-01-26T15:18:12.587 回答
0

查看DataFabric gem,它为 Active Record 添加了数据库分片支持。它使您可以执行以下操作:

class User < ActiveRecord::Base
  data_fabric :replicated => true, :shard_by => :user_id
end
于 2010-01-26T16:00:47.610 回答
0

您要查找的内容通常称为sharding在 wikipedia 上有一篇关于它的非常全面的文章,你绝对应该阅读它,还有一篇关于高可扩展性博客的好文章。

在使用 Rails 进行分片时,我推荐支持应用程序级数据库分片以及主/从复制的数据结构gem。

我希望这有帮助!

于 2010-01-26T16:04:01.067 回答