Tarantool 3.7
Дата выпуска: 2026-04-12
Релизы на GitHub: 3.7.0
В релизе Tarantool 3.7 добавлены следующие основные функциональные возможности и улучшения для редакций Community и Enterprise:
- Community Edition (CE)
- Множество мелких улучшений и исправлений ошибок.
- Enterprise Edition (EE)
- Координатор аварийного переключения: безопасная конфигурация SSL.
- MemCS: словарное кодирование и сжатие
lz4.
Координатор аварийного переключения Tarantool теперь безопасно поддерживает соединения, зашифрованные по TLS, и аутентификацию mTLS. SSL-сертификаты и удостоверяющий центр можно настроить через выделенный раздел конфигурации аварийного переключения.
Ранее координатор использовал SSL-параметры, взятые из URI экземпляров. В случае SSL + CA (mTLS) такой подход мог потребовать доступа хоста координатора к приватным ключам и сертификатам экземпляров, к которым он подключался.
Теперь раздел конфигурации failover.iproto.ssl является
источником клиентских SSL-параметров для исходящих соединений
net.box, инициируемых координатором. Параметры внедряются
в параметры URI, передаваемые в net.box.connect(), только
для URI с params.transport: ssl и не затрагивают
соединения без SSL.
Пример:
failover:mode: statefuliproto:listen:uri: '127.0.0.1:3302'params:transport: sslssl:ca_file: './certs/rootCA.pem'ssl_cert: './certs/coordinator.crt'ssl_key: './certs/coordinator.key'# Optional:# ssl_ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:...'# ssl_password: 'secret'# ssl_password_file: './certs/key_passwords.txt'
В этом релизе добавлены два крупных улучшения по использованию памяти в движке MemCS:
- Словарное кодирование для строковых колонок (формат словарного кодирования Arrow).
- Сжатие на уровне колонок с помощью кодека
lz4.
При типичных нагрузках совместное использование этих возможностей обеспечивает 8–13-кратное снижение объёма занимаемой памяти по сравнению с хранением без сжатия.
MemCS может хранить строковые значения в словарно-кодированном виде: уникальные строки хранятся в общем словаре, а в строках таблицы сохраняются целочисленные идентификаторы, ссылающиеся на записи словаря. Это наиболее эффективно для колонок с большим количеством повторяющихся значений (например, статусы, категории, типы событий).
Словарное кодирование включается с помощью опции layout:
local s = box.schema.create_space('test', {engine = 'memcs', format = format, field_count = field_count,})local pk = s:create_index('pk', {layout = 'dict'})
-
Словарное кодирование доступно только для строковых колонок, не входящих в ключи. Для остальных колонок опция
layout = 'dict'игнорируется без уведомления. -
Идентификаторы в словаре хранятся как
uint16(2 байта на строку). -
Максимальное количество уникальных значений в колонке со словарным кодированием –-
UINT16_MAX(65536). При переполнении словаря вставка нового уникального значения завершается с ошибкой. -
Приблизительное потребление памяти для такой колонки составляет
2 * space_size + dict_size байт. -
Память словаря включается в статистику
space:bsize(). -
Реализация соответствует формату словарного кодирования Apache Arrow, так как Arrow является стандартным форматом обмена данными для MemCS.
В настоящее время опцию
layoutможно задать только при создании спейса. Изменить её для существующего спейса нельзя.
При чтении через ArrowStream MemCS всегда возвращает словарно-кодированные колонки в формате словарного кодирования Arrow:
- словарь возвращается как string-view
- индексы имеют тип
uint16
Дополнительные замечания:
- Если новые уникальные значения не добавляются, все пакеты записей используют один и тот же словарь.
- Словари возвращаются по ссылке (без копирования), поэтому экспорт ArrowArray имеет низкие накладные расходы.
- Словари только увеличиваются (значения не удаляются), поэтому после обновления словаря он остаётся совместимым с пакетами, созданными с предыдущей версией словаря.
В MemCS добавлена поддержка сжатия на уровне колонок с помощью lz4.
Сжатие применяется к диапазонам последовательных значений, которые хранятся в виде сжатых блоков.
Сжатие настраивается для каждой колонки в формате спейса с помощью
атрибута compression и может быть включено только при
создании спейса:
local format = {{'c1', 'uint64'},{'c2', 'string', is_nullable = true, compression = 'lz4'},{'c3', 'int32', compression = {type = 'lz4', acceleration = 1000}},}box.schema.create_space('test', {engine = 'memcs', field_count = #format, format = format,})
Параметры сжатия:
- Алгоритм:
lz4 acceleration–- специфичный параметр конфигурации LZ4:- допустимый диапазон: 1...65537
- рекомендуемые значения: 10...1000
- более высокие значения повышают скорость сжатия и распаковки, но снижают коэффициент сжатия
-
Сжатию могут подвергаться только неколонки, не входящие в индексы.
-
Сжатие поддерживается для колонок любого типа, однако «внешние» строковые значения (строки длиннее 12 символов) в настоящее время сжатию не подвергаются.
В настоящее время атрибут
compressionможно задать только при создании спейса. Изменить его для существующего спейса нельзя.