Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Расширения WAL

Расширения журнала упреждающей записи (write-ahead log, WAL) позволяют добавлять вспомогательную информацию к каждой записи WAL. Например, можно включить сохранение старого и нового кортежа для каждой выполняемой CRUD-операции. Эта информация может быть полезна при создании утилиты CDC (Change Data Capture), преобразующей поток репликации данных.

См. также раздел Настройка WAL.

Конфигурация

По умолчанию расширения WAL отключены. Для их настройки используйте параметры конфигурации wal.ext.*. Внутри блока wal.ext можно включить сохранение старых и новых кортежей следующим образом:

  • Чтобы сохранять старые и новые кортежи в WAL для всех спейсов, задайте значение true для параметров wal.ext.old и wal.ext.new:

    ext:  new: true  old: true
  • Чтобы настроить эти параметры для отдельных спейсов, укажите параметр wal.ext.spaces:

    wal:  ext:    old: true    new: true    spaces:      space1:        old: false      space2:        new: false

Конфигурация для отдельных спейсов имеет приоритет над конфигурацией в параметрах wal.ext.new и wal.ext.old. Это означает, что для space1 в журнал добавляются только новые кортежи, а для space2 – только старые.

Учтите, что записи с дополнительными полями реплицируются следующим образом:

  • Если реплика не поддерживает расширенный формат, настроенный на мастере, вспомогательные поля пропускаются.

  • Если конфигурации записей WAL на реплике и мастере различаются, конфигурация мастера игнорируется.

Пример

В таблице ниже показано, как могут выглядеть записи WAL для конкретных CRUD-операций, если для спейса bands включено сохранение старых и новых кортежей.

Операция

Пример

Информация в WAL

insert

bands:insert{4, 'The Beatles', 1960}

| new_tuple: [4, 'The Beatles', 1960] | tuple: [4, 'The Beatles', 1960]

delete

bands:delete{4}

| key: [4] | old_tuple: [4, 'The Beatles', 1960]

update

bands:update({2}, {{'=', 2, 'Pink Floyd'}})

| new_tuple: [2, 'Pink Floyd', 1965] | old_tuple: [2, 'Scorpions', 1965] | key: [2] | tuple: [['=', 2, 'Pink Floyd']]

upsert

bands:upsert({2, 'Pink Floyd', 1965}, {{'=', 2, 'The Doors'}})

| new_tuple: [2, 'The Doors', 1965] | old_tuple: [2, 'Pink Floyd', 1965] | operations: [['=', 2, 'The Doors']] | tuple: [2, 'Pink Floyd', 1965]

replace

bands:replace{1, 'The Beatles', 1960}

| old_tuple: [1, 'Roxette', 1986] | new_tuple: [1, 'The Beatles', 1960] | tuple: [1, 'The Beatles', 1960]

Сохранение как старых, так и новых кортежей особенно полезно для операции update, поскольку записи WAL содержат только значение ключа.