2013-09-24 3 views
3
  1. Какую стратегию использует Mnesia для определения того, какие узлы будут хранить реплики конкретной таблицы?
  2. Могу ли я заставить Mnesia использовать определенное количество реплик для каждой таблицы? Может ли это число меняться динамически?
  3. Есть ли источники (помимо исходного кода) с подробным (не просто обзорным) описанием внутренних алгоритмов Mnesia?

ответ

4
  1. Руководство. Вы несете ответственность за указание того, что реплицируется где.
  2. Да, как указано выше, вручную. Это можно изменить динамически.
  3. Я боюсь (хотя и ошибаюсь), что нет, кроме исходного кода. С точки зрения документации все распределение Erlang вряд ли является лидером в мире программного обеспечения.

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

  • хранится в памяти,
  • хранится на диске,
  • хранятся как в памяти и на диске,
  • не хранится на этом узле - в этом случае таблица будет но данные будут получены по требованию от некоторых других узлов.

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

Системные события Mnesia могут использоваться для обнаружения ситуации, когда узел опускается; если вы знаете, какие таблицы были сохранены на этом узле, вы можете проверить количество своих онлайн-реплик на основе узлов, которые все еще были в сети, а затем, при необходимости, выполнить репликацию.

Я не знаю ни одного приложения/библиотеки, которые уже управляют подобными вещами, и это кажется довольно продвинутым (с моей точки зрения, по крайней мере) стремлением сделать это.

Однако Riak - это база данных, которая прозрачно управляет распределением данных между его узлами и настраивается в зависимости от указанных вами опций. Это может быть для вас.

Смежные вопросы