Шардинг базы данных и Rails - PullRequest
       21

Шардинг базы данных и Rails

11 голосов
/ 04 сентября 2008

Как лучше всего работать с изолированной базой данных в Rails? Следует ли обрабатывать сегментирование на уровне приложения, уровне активной записи, уровне драйвера базы данных, уровне прокси-сервера или что-то еще в целом? Каковы плюсы и минусы каждого?

Ответы [ 6 ]

13 голосов
/ 07 сентября 2008

FiveRuns имеют гем с именем DataFabric , который выполняет разбиение на уровне приложений и репликацию master / slave. Возможно, стоит проверить.

9 голосов
/ 11 сентября 2008

Я предполагаю, что с осколками мы говорим о горизонтальном, а не вертикальном разделении ( вот различия в Википедии ).

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

Для горизонтального разбиения в идеальном мире это будет обрабатываться на прикладном уровне в Rails. Но хотя это не сложно, это не тривиально в Rails, и к тому времени, когда вам это нужно, обычно ваше приложение выходит за рамки, когда это выполнимо, так как вызовы ActiveRecord разбросаны повсюду. И никому, разработчикам или руководству, не нравится работать над ним раньше, чем вам это нужно, поскольку все предпочитают работать над функциями, которые пользователи будут использовать сейчас, а не над разделами, которые могут не появиться в течение многих лет после взрыва трафика.

Слой ActiveRecord ... не так просто, как я вижу. Потребовалось бы много мартышек, исправляющих внутренности Rails.

На Спок мы закончили с этим, используя пользовательский прокси MySQL и открыли его в SourceForge как Спок-прокси . ActiveRecord считает, что он общается с одним компьютером баз данных MySQL, когда на самом деле он общается с прокси-сервером, который затем общается с одной или несколькими базами данных MySQL, объединяет / сортирует результаты и возвращает их в ActiveRecord. Требуется всего несколько изменений в вашем коде Rails. Загляните на страницу Spock Proxy SourceForge, чтобы узнать подробности и причины, по которым мы пошли по этому пути.

8 голосов
/ 04 сентября 2008

Для тех из вас, как я, кто не слышал о шардинге:

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

2 голосов
/ 23 сентября 2008

Подключение Rails к нескольким базам данных не представляет особой проблемы - у вас просто есть подкласс ActiveRecord для каждого сегмента, который переопределяет свойство соединения. Это делает его довольно простым, если вам нужно сделать колл-шард. Тогда вам просто нужно написать небольшой код, когда вам нужно совершать звонки между осколками.

Мне не нравится идея Хэнка разделить экземпляры rails, потому что кажется сложным вызывать код между экземплярами, если у вас нет большой общей библиотеки.

Также вы должны посмотреть на что-то вроде Мазохизм , прежде чем начнете шардить.

1 голос
/ 20 сентября 2011

Чтобы рельсы работали с реплицированной средой, я бы предложил использовать плагин my_replication, который помогает переключать соединение базы данных с одним из ведомых устройств во время выполнения

https://github.com/minhnghivn/my_replication

0 голосов
/ 04 сентября 2008

На мой взгляд, самый простой способ - поддерживать соотношение 1: 1 между экземплярами rails и осколками DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...