Расширения 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: trueold: true -
Чтобы настроить эти параметры для отдельных спейсов, укажите параметр wal.ext.spaces:
wal:ext:old: truenew: truespaces:space1:old: falsespace2:new: false
Конфигурация для отдельных спейсов имеет приоритет над конфигурацией в параметрах wal.ext.new и wal.ext.old. Это означает,
что для space1 в журнал добавляются только новые кортежи, а для space2 – только старые.
Учтите, что записи с дополнительными полями реплицируются следующим образом:
-
Если реплика не поддерживает расширенный формат, настроенный на мастере, вспомогательные поля пропускаются.
-
Если конфигурации записей WAL на реплике и мастере различаются, конфигурация мастера игнорируется.
В таблице ниже показано, как могут выглядеть записи WAL для конкретных
CRUD-операций, если для спейса bands включено сохранение
старых и новых кортежей.
Операция | Пример | Информация в WAL |
|---|---|---|
insert |
| | new_tuple: [4, 'The Beatles', 1960] | tuple: [4, 'The Beatles', 1960] |
delete |
| | key: [4] | old_tuple: [4, 'The Beatles', 1960] |
update |
| | new_tuple: [2, 'Pink Floyd', 1965] | old_tuple: [2, 'Scorpions', 1965] | key: [2] | tuple: [['=', 2, 'Pink Floyd']] |
upsert |
| | new_tuple: [2, 'The Doors', 1965] | old_tuple: [2, 'Pink Floyd', 1965] | operations: [['=', 2, 'The Doors']] | tuple: [2, 'Pink Floyd', 1965] |
replace |
| | old_tuple: [1, 'Roxette', 1986] | new_tuple: [1, 'The Beatles', 1960] | tuple: [1, 'The Beatles', 1960] |
Сохранение как старых, так и новых кортежей особенно полезно для операции update, поскольку записи WAL содержат только значение
ключа.