Tarantool DB 3.0¶
Дата релиза: 30.09.2025.
Tarantool DB 3.0 – это мультипротокольная NoSQL CУБД, разработанная на основе Tarantool Enterprise Edition версии 3.x.
В релизе Tarantool DB 3.0 добавлена поддержка дискового движка базы данных vinyl, представлены новые запускаемые примеры и метрики модуля архивации данных, а также добавлена поддержка собственного дашборда Tarantool DB для Grafana. В документе приведен краткий обзор наиболее заметных изменений и новой функциональности.
Архивация устаревших данных из оперативной памяти на диск:
Включение архивации данных;
API модуля
cooler
;Запускаемый пример на использование архивации;
-
Документация по мониторингу;
Метрики архивации данных;
Дашборд Grafana;
Разработка модулей Enterprise Edition –
crud-ee
,vshard-ee
иexpirationd-ee
– теперь поддерживается только сообществом. Разработка указанных модулей силами команды Tarantool продолжается в Community-версиях этих модулей. Из названий модулей убран суффикс-ee
:crud-ee → crud 1.6.1;
expirationd-ee → expirationd 1.7.0;
vshard-ee → vshard 0.1.36.
Подробная информация о продукте приведена в документации Tarantool DB.
Переход с 2.x на 3.0¶
Примечание
Перед обновлением на Tarantool DB 3.0 рекомендуется установить Tarantool DB версии 2.2.1.
Чтобы обновить Tarantool DB с версии 2.2.1 до версии 3.0, сначала выполните обновление продукта до версии 3.0, а после этого вызовите метод box.schema.upgrade() для обновления системных спейсов. Для понижения версии Tarantool DB с 3.0 до 2.2.1 сначала вызовите метод box.schema.downgrade(„3.3.2“), а затем выполните откат до версии 2.2.1.
Узнать больше: Обновление Tarantool DB с версий 2.x до 3.x.
Дисковый движок vinyl¶
Tarantool DB 3.0 поддерживает дисковый движок vinyl. Движок базы данных – это набор низкоуровневых процессов, которые фактически хранят и получают значения кортежей. Теперь в Tarantool DB, как и в Tarantool, доступны два движка на выбор:
memtx – in-memory движок базы данных, который используется в Tarantool DB по умолчанию. Движок хранит данные в оперативной памяти.
vinyl – дисковый движок базы данных. Движок vinyl предназначен для работы с большими объёмами данных, которые превышают доступный объём оперативной памяти. vinyl хранит данные на диске, используя LSM-деревья (Log-Structured Merge Tree).
Узнать больше: Работа с движками базы данных.
Задать тип движка можно при создании спейса,
используя опцию engine
:
box.schema.space.create('messages', { engine = 'vinyl', if_not_exists = true })
Задать специфические настройки спейса на vinyl можно двумя способами:
в YAML-конфигурации кластера в секции
vinyl
, например:vinyl: bloom_fpr: 0.05 page_size: 8192 run_count_per_level: 2 run_size_ratio: 3.5
Подробную информацию о поддерживаемых опциях конфигурации для движка vinyl можно найти в документации Tarantool;
в опции index_opts при создании индекса через
space_object:create_index()
:box.space.messages:create_index('bucket_id', { parts = { 'bucket_id', 'id' }, if_not_exists = true, bloom_fpr = 0.05 })
Рекомендации по настройке параметров vinyl приведены в разделе Методика настройки движка vinyl в Tarantool DB.
Попробовать работу со спейсами на движке vinyl можно в новом запускаемом примере vinyl. В примере описаны создание спейса vinyl, его настройка, а также выполнение операций с этим спейсом (вставка, чтение, обновление и удаление) через модуль CRUD. Как и все готовые примеры в Tarantool DB, этот пример сделан на основе Docker Compose, что позволяет быстро запустить и попробовать ту или иную функциональность.
Архивация устаревших данных из оперативной памяти на диск¶
Начиная с версии Tarantool DB 3.0, поддерживается архивация, или охлаждение данных. Архивация данных – это автоматический перенос устаревших данных из спейсов на движке memtx в спейсы vinyl на основе времени жизни кортежей, например по времени их создания или обновления. Такая архивация данных позволяет:
держать горячие данные в оперативной памяти (memtx) для высокой производительности;
переносить холодные данные на диск (vinyl) для долгосрочного хранения.
Перенос данных на диск позволяет освободить оперативную память от значимых данных, которые уже не изменяются и запрашиваются
редко – например, закрытых заявок, обработанных событий, завершённых сессий.
Для переноса данных используется новый встроенный модуль cooler
.
Модуль гарантирует следующее:
Перенос кортежей из memtx в vinyl устойчив к сбоям. Сначала происходит вставка архивируемого кортежа в спейс vinyl. Соответствующий кортеж удаляется из memtx-спейса только при его успешном добавлении в спейс vinyl.
Никогда не возникает состояния, при котором архивируемый кортеж отсутствует и в memtx, и в vinyl.
Для спейса vinyl можно установить те же параметры доступа, что и для memtx.
Включение и выключение транзакционного менеджера memtx MVCC не влияет на архивацию данных.
Узнать больше об архивации данных можно в разделе Архивация данных по их времени жизни. Подробный пример настройки и применения архивации данных приведен в новом запускаемом примере Пример архивации устаревших данных.
Включение архивации данных¶
Для архивации данных используются модуль cooler и отдельная технологическая роль
roles.cooler.
Роль roles.cooler
задается на экземплярах хранилища кластера и отвечает за запуск и остановку
архивации, обработку смены мастер-узла в наборе реплик, а также конфигурацию модуля expirationd
.
Чтобы запустить перенос данных, в YAML-конфигурации кластера добавьте в секцию экземпляров хранилищ (storages
)
роль roles.cooler
и настройки этой роли в roles_cfg
:
storages:
#...
roles:
- roles.crud-storage
- roles.cooler
roles_cfg:
roles.cooler:
sessions:
expirationd:
primary_key: # Явное указание сканирования по первичному ключу
full_scan_time: 300
tuples_per_iteration: 100
Здесь:
sessions
– название спейса memtx, для которого настраивается архивация;primary_key
– название первичного ключа, по которому идет сканирование спейса;full_scan_time
– время обхода спейса в секундах;tuples_per_iteration
– количество кортежей, которое проверяется за одну итерацию.
Конфигурация выше запускает фоновую задачу модуля expirationd
, которая периодически сканирует спейс sessions
по
первичному индексу и перемещает старые записи в архивный спейс по заданному условию.
Полный список опций конфигурации для роли roles.cooler
можно найти в Справочнике по конфигурации.
API модуля cooler¶
Модуль cooler
позволяет задавать архивацию данных в миграциях, а также отвечает за
DDL-операции по созданию спейса vinyl и просмотр состояния и статистики архивации.
Для работы с архивацией данных добавлены следующие методы модуля cooler
:
cooler.init() – инициализировать модуль;
cooler.is_inited() – проверить, была ли выполнена инициализация модуля;
cooler.setup() – настроить архивацию для указанного спейса memtx.
cooler.resetup() – создать заново архивный vinyl-спейс для спейса memtx, в котором был изменен формат;
cooler.set_func() – задать функцию для проверки условия архивации;
cooler.stats() – показать статистику архивации для текущего полного прохода по спейсу;
cooler.info() – показать информацию о параметрах архивирования спейса.
Подробная информация об этих методах приведена в справочнике по API.
Запускаемый пример на использование архивации¶
В Tarantool DB 3.0 добавлен запускаемый пример cooler, демонстрирующий настройку архивации и перенос устаревших пользовательских сессий в спейс vinyl. В примере рассмотрены следующие сценарии:
включение и отключение фонового переноса данных;
архивация по первичному индексу с простым условием;
архивация по вторичному индексу;
смена формата спейса memtx через метод
cooler.resetup()
.
Мониторинг Tarantool DB¶
В Tarantool DB 3.0 представлены собственный дашбоорд Tarantool DB и метрики архивации данных, а также добавлена документация по мониторингу Tarantool DB.
Документация по мониторингу¶
В Tarantool DB 3.0 в документацию добавлен раздел Мониторинг. В этом разделе приведены:
настройка модуля metrics для Tarantool DB;
описание доступных метрик Tarantool и собственных метрик Tarantool DB;
базовые рекомендации по анализу метрик Tarantool;
работа с дашбордами в Grafana.
Метрики архивации данных¶
В Tarantool DB 3.0 добавлены метрики модуля cooler
.
Эти метрики позволяют отслеживать перенос данных (архивацию) из memtx-спейсов в спейсы vinyl.
Добавлены следующие метрики:
cooler_on
– состояние архивации на экземпляре кластера;cooler_tuples_cooled
– общее число архивированных кортежей;cooler_bytes_cooled
– общий объем архивированных данных в байтах;cooler_tuples_scanned
– общее число просканированных кортежей;cooler_bytes_scanned
– общий объем просканированных данных в байтах;cooler_inefficiency
– количество просканированных, но не архивированных кортежей;cooler_mismatches
– количество несовпадений при проверке кортежей;cooler_errors
– количество ошибок, возникших при архивации;cooler_full_scan_elapsed
– длительность текущего прохода полного сканирования спейса в секундах;cooler_task_csw
– количество переключений контекста файбером архивации.
Дашборд Grafana¶
Начиная с версии 3.0.0, Tarantool DB поддерживает собственный дашборд для веб-интерфейса Grafana.
Дашборд Tarantool DB dashboard отображает метрики экземпляров Tarantool DB, статистику работы движков memtx и vinyl, а также
метрики модулей архивации данных (cooler
), словарей (dictionary
) и контроля за устареванием данных (expirationd
).
Полный список панелей, доступных в дашборде, приведен в разделе Дашборд Tarantool DB.
Дашборд Grafana для Tarantool DB работает с источниками данных Prometheus и InfluxDB.
Шаблоны с готовой JSON-конфигурацией этого дашборда можно получить из архива для развертывания Tarantool DB.
Архив можно скачать в личном кабинете tarantool.io
, в разделе
tarantooldb/release/for_deploy/.
Файлы с конфигурацией хранятся в архиве в папке ./tools/server/
:
prometheus_dashboard.json
– конфигурация для мониторинга с Prometheus;influxdb_dashboard.json
– конфигурация для мониторинга с InfluxDB.
Узнать больше: Дашборд Grafana.
Рекомендации по работе с неидемпотентными запросами¶
В Tarantool DB 3.0 в документацию добавлены рекомендации по дедупликации неидемпотентных запросов.
Идемпотентные запросы – это операции, повторный вызов которых дает тот же результат, что и при первом применении. Например, идемпотентными являются запрос на чтение данных или операция умножения на единицу. Соответственно, примером неидемпотентной операции можно назвать увеличение на единицу. При повторном применении такой операции значение для поля будет суммарно увеличено уже не на 1, а на 2. Это означает, что любые запросы на запись, которые планируется выполнять неоднократно (например, повторный вызов запроса после ошибки), должны быть идемпотентны. Идемпотентность таких операций гарантирует, что изменение из операции будет применено только один раз.
Примечание
В Tarantool DB отсутствует встроенная дедупликация запросов. На текущий момент проверка на дедупликацию может быть добавлена пользователем самостоятельно в коде приложения.
В этом разделе:
описаны случаи, где требуется проверка на то, что запрос применяется впервые;
приведены различные способы дедупликации запросов:
проверка по уникальному индексу;
создание пользовательского спейса дедупликации, который содержит список уникальных идентификаторов.
Узнать больше: Дедупликация неидемпотентных запросов.