Способы организации хранения данных в распределенных системах

11.10.2014 at 11:15

В книге Семь баз данных за семь недель обратил внимание на то, как отличается подход к распределенному хранению данных в различных БД.

MongoDB

Данные реплицируются на несколько серверов. Читать актуальные данные и писать можно только на главном сервере. Если главный сервер недоступен – происходят выборы нового главного. Им становится тот сервер, на котором более актуальные данные. Если в результате разрыва связи сеть серверов делится на 2 части, то главного может выбрать только та часть, в которой больше половины серверов. Поэтому кластер обычно состоит из нечетного количества серверов.

CouchDB

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

Riak

Для каждого сегмента данных (сегмент – способ группировки данных) определены следующие параметры:

  • N – количество узлов, на которые будет реплицировано значение.
  • W – количество узлов, запись на которых должна завершиться успешно для того, чтобы вся операция считалась успешной.
  • R – количество узлов, чтение с которых должно завершиться успешно для того, чтобы вся операция считалась успешной.
  • DW – аналогично W, но про физическую запись на диск.

Все параметры кроме N можно изменять для каждой конкретной операции.
Данные хранят временную метку, так что операция чтения вернет актуальное значение, если оно было считано хотя бы с одного сервера.
Наборы параметров:

  • W=N, R=1 – медленная запись и быстрое чтение.
  • W=1, R=N – быстрая запись и медленной чтение.
  • W=N/2 + 1, R=N/2 + 1 – усредненный вариант, гарантирующий чтение актуального значения.
Tags: