Ограничения в Tarantool DataBase
В этом разделе описаны известные ограничения в продукте Tarantool DataBase. Tarantool DB не поддерживает:
- схему репликации мастер-мастер;
- подключение технологических ролей, которые не входят в поставку Tarantool DB;
- прямое обращение к модулю шардирования
vshardв миграциях; - использование в миграциях метода require() для некоторых библиотек Tarantool, а также для любых сторонним библиотек, которые не входят в поставку.
Tarantool DB поддерживает:
- кросс-движковые транзакции только с включенным MVCC;
- прямое обращение к модулю
crudв миграциях.
Репликация мастер-мастер (или мультимастер) — это архитектура баз данных, где два или более экземпляров репликационной группы выступают в роли мастер-узлов, то есть любой из этих узлов доступен как для чтения данных, так и для их записи. Все изменения, происходящие на любом из мастер-узлов, синхронизируются на другом мастер-экземпляре, и наоборот.
Если набор реплик работает в режиме мастер-мастер, одновременная запись по одному и тому же первичному ключу с
разных экземпляров кластера приводит к конфликту репликации.
Это означает, что в наборе реплик у кортежа с этим первичным ключом возникают две версии текущего значения.
Репликация при этом останавливается с ошибкой вида Duplicate key exists.
Длительность окна, в течение которого запись в два узла считается одновременной, определяется скоростью репликации между
этими узлами и зависит от сетевых задержек. В общем случае речь идёт о нескольких миллисекундах.
Подробнее о конфликте репликации и триггере на его разрешение читайте в запускаемом
примере из GitHub-репозитория tarantool/tarantooldb-examples: trigger.
Кросс-движковая транзакция означает выполнение внутри одной транзакции операций и со спейсами memtx, и со спейсами vinyl.
Транзакционный менеджер MVCC — это режим поведения транзакции, позволяющий выполнять передачу управления (yield) транзакции внутри движка memtx. При работе со спейсом vinyl также может произойти передача управления, например во время чтения данных с диска, поэтому для использования кросс-движковых транзакций необходимо включить MVCC в memtx. При выключенном MVCC транзакции с memtx не поддерживают передачу управления, поэтому корректно выполнить такую транзакцию невозможно. Такая транзакция завершится ошибкой, а изменения из транзакции откатятся.
Tarantool DB не поддерживает использование метода require() в миграциях для любых сторонних библиотек, которые не
входят в поставку, а также для следующих модулей Tarantool:
experimental.connpoolfiberhttp.serverjitnet.boxsocketswimffivshard