Как я могу использовать многораздельную базу данных с RoR? - PullRequest
1 голос
/ 26 января 2010

Я хочу задать этот вопрос на конкретном примере, так как я ищу конкретный ответ. :) Допустим, у меня есть набор баз данных MySQL, защищенных от user_id. Например, все пользователи с идентификаторами 1-10000 перейдут в базу данных D1, идентификаторы пользователей с 10001 - 20000 перейдут в базу данных D2 и т. Д. У меня есть модель "Пользователь" в моем приложении RoR. В зависимости от user_id, для которого требуется информация, эта модель должна запросить соответствующую базу данных и вернуть результаты обратно. Может ли какой-нибудь эксперт RoR рассказать, как это сделать?

Смежный вопрос заключается в том, что, скажем, я создал N баз данных D1, D2 ... DN в том же блоке, где работает MySQL, и слой кэша memcached перед этими базами данных. Приводит ли структурирование базы данных таким образом к низкой производительности? (Я беспокоюсь, будет ли много кешей на уровне базы данных и слоя memcache.)

Ответы [ 3 ]

1 голос
/ 26 января 2010

Я думаю, что вам нужно: http://partitioned.rubyforge.org/

0 голосов
/ 26 января 2010

То, что вы ищете, обычно называется sharding . Об этом есть довольно обширная статья в Википедии , которую вы обязательно должны прочитать, и хорошая статья в блоге с высокой масштабируемостью .

Когда дело доходит до шардинга с помощью рельсов, я бы порекомендовал гем data fabric , который поддерживает шардирование на уровне приложений, а также репликацию master / slave.

Надеюсь, это поможет!

0 голосов
/ 26 января 2010

Взгляните на камень DataFabric , который добавляет поддержку сегментирования базы данных в Active Record. Это позволяет вам делать такие вещи, как:

class User < ActiveRecord::Base
  data_fabric :replicated => true, :shard_by => :user_id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...