TDB Documentation portal logo
Помощь
Обновлена 30 июля 2026 г. в 16:49

Ограничения в Tarantool DataBase

В этом разделе описаны известные ограничения в продукте Tarantool DataBase. Tarantool DB не поддерживает:

Tarantool DB поддерживает:

  • кросс-движковые транзакции только с включенным MVCC;
  • прямое обращение к модулю crud в миграциях.

Схема репликации мастер-мастер

Репликация мастер-мастер (или мультимастер) — это архитектура баз данных, где два или более экземпляров репликационной группы выступают в роли мастер-узлов, то есть любой из этих узлов доступен как для чтения данных, так и для их записи. Все изменения, происходящие на любом из мастер-узлов, синхронизируются на другом мастер-экземпляре, и наоборот.

Если набор реплик работает в режиме мастер-мастер, одновременная запись по одному и тому же первичному ключу с разных экземпляров кластера приводит к конфликту репликации. Это означает, что в наборе реплик у кортежа с этим первичным ключом возникают две версии текущего значения. Репликация при этом останавливается с ошибкой вида Duplicate key exists. Длительность окна, в течение которого запись в два узла считается одновременной, определяется скоростью репликации между этими узлами и зависит от сетевых задержек. В общем случае речь идёт о нескольких миллисекундах.

Подробнее о конфликте репликации и триггере на его разрешение читайте в запускаемом примере из GitHub-репозитория tarantool/tarantooldb-examples: trigger.

Кросс-движковые транзакции с включенным MVCC

Кросс-движковая транзакция означает выполнение внутри одной транзакции операций и со спейсами memtx, и со спейсами vinyl.

Транзакционный менеджер MVCC — это режим поведения транзакции, позволяющий выполнять передачу управления (yield) транзакции внутри движка memtx. При работе со спейсом vinyl также может произойти передача управления, например во время чтения данных с диска, поэтому для использования кросс-движковых транзакций необходимо включить MVCC в memtx. При выключенном MVCC транзакции с memtx не поддерживают передачу управления, поэтому корректно выполнить такую транзакцию невозможно. Такая транзакция завершится ошибкой, а изменения из транзакции откатятся.

Использование метода require() в миграциях

Tarantool DB не поддерживает использование метода require() в миграциях для любых сторонних библиотек, которые не входят в поставку, а также для следующих модулей Tarantool:

  • experimental.connpool
  • fiber
  • http.server
  • jit
  • net.box
  • socket
  • swim
  • ffi
  • vshard