Словари¶
Словари – это таблицы, которые хранят одинаковые данные на разных узлах.
В Tarantool DB для работы словарей используется модуль dictionary
.
Модуль содержит собственную мультимастерную (multi-master) репликацию и использует системное время.
Модуль доступен в виде двух технологических ролей:
roles.dictionary-storage
– хранение данных словарей;roles.dictionary-router
– внешнее управление словарями.
Подробный пример использования словарей приведен в разделе Запись и получение данных в словаре.
Описание опций конфигурации dictionary
и API модуля приведены в справочниках по конфигурации
и API.
Информация о совместимости модуля dictionary
с версией Tarantool DB 1.x приведена в разделе Модуль dictionary.
Примечание
Передача словарей через модуль Tarantool Clusters Federation не поддерживается. TCF поддерживает только репликацию шардированных данных в спейсах с асинхронным режимом репликации.
Гарантии
Роль roles.dictionary-storage
гарантирует следующее:
При записи данных в один любой узел данные распространяются по остальным узлам с этой же ролью.
Экземпляр, вышедший из строя, получит все изменения по данным словарей после возобновления своей работы.
При нарушении связи между узлами данные синхронизируются после восстановления связи.
Ограничения
Необходима пауза между перезаписью данных одного и того же элемента словаря на разных узлах. Величина паузы зависит от погрешности в текущем времени на разных узлах. Например, если суммарная разница во времени не превышает 0.5 секунд, пауза должна составлять 0.5 секунд. В противном случае порядок сохранения новых данных не гарантируется.
Работа библиотеки нарушается при переводе системного времени назад, например при ручной корректировке, високосных секундах, NTP-синхронизации. В этом случае библиотека блокирует запись до тех пор, пока не догонит прежнее время.
Алгоритм не поддерживает настоящее удаление. Вместо удаления в качестве значения записывается
box.NULL
.Транзакции действуют в пределах узла. Это может влиять на выполнение операции с несколькими элементами словарей в одной транзакции.
Например, на двух узлах проходят транзакции из двух записей. Первая транзакция – A1=1, B1=2. Вторая транзакция – A2=2, B2=3. Если операции A2 и B2 будут выполнены между A1 и B1, то после синхронизации появятся неконсистентные данные – A = 2, B = 2.