Tarantool DB 1.0.0¶
Дата релиза: 07.05.2024.
Tarantool DB – это in-memory NoSQL СУБД, разработанная на основе Tarantool Enterprise Edition. В релизе Tarantool DB 1.0.0 упрощена установка и настройка кластера для горячего хранения данных за счет интеграции с инструментами CI/CD.
Основная функциональность:
Подробная информация о продукте приведена в документации Tarantool DB.
Обновление клиентского кода хранилища данных без повторного развертывания кластера¶
Начиная с версии Tarantool DB 1.0.0, новый клиентский код можно применять без необходимости повторного развертывания всего кластера. Теперь обновить клиентский код хранилища данных можно через веб-интерфейс Tarantool DB или с помощью API-команды.
Поддержка словарей в кластере¶
В Tarantool DB 1.0.0 поддерживается работа со словарями – таблицами, хранящими одинаковые данные на разных узлах кластера. При записи данных в любой узел данные распространяются по остальным узлам с этой же ролью. Экземпляр, вышедший из строя, получит все изменения по данным словарей после возобновления своей работы. Если связь между узлами нарушена, данные синхронизируются после восстановления связи.
Задать настройки словарей можно в секции dictionary
YAML-конфигурации:
dictionary:
batch_size: 200
worker_sleep_in_second: 3600
logging: false
Метод dictionary_router.set() записывает в указанный словарь элементы с соответствующими им ключами:
dictionary_router.set('categories', '1', 'Shops')
dictionary_router.set('categories', '2', 'Food delivery')
Получить данные словаря можно с помощью метода dictionary_router.get():
dictionary_router.get('categories', '1')
Узнать больше о работе со словарями можно в разделах Словари и Запись и получение данных в словаре.
Управление временем жизни данных¶
В Tarantool DB 1.0.0 вы можете контролировать время жизни кортежей в спейсе, включив модуль expirationd
на хранилищах.
Модуль позволяет обходить кортежи в спейсе по индексу с заданным интервалом и проверять срок жизни каждого кортежа, а затем
обрабатывать кортежи с истекшим сроком жизни.
Пример YAML-конфигурации для expirationd
может выглядеть так:
messages_expiration:
space: messages
is_expired: messages_is_tuple_expired
is_master_only: true
options:
tuples_per_iteration: 100
iterate_with: messages_iterate_with
process_expired_tuple: messages_process_expired_tuple
args:
seconds: 5
Здесь:
идет обход кортежей по спейсу
messages
;функция
is_expired
проверяет срок жизни кортежа;функция
messages_process_expired_tuple
обрабатывает кортежи с истекшим сроком жизни.
Узнать больше о настройке expirationd
можно в разделе Устаревание данных.
Совместимость с Tarantool Clusters Federations¶
В Tarantool DB 1.0.0 поддерживается работа с модулем Tarantool Clusters Federation (TCF). Совместное использование этих двух продуктов позволяет построить отказоустойчивую систему из двух независимых кластеров Tarantool DB. В такой системе:
активный кластер принимает все запросы от приложения;
пассивный кластер содержит копию данных активного кластера.
Tarantool Clusters Federation позволяет управлять переключением трафика между активным и пассивным кластерами.
Пример запуска кластеров Tarantool DB с TCF и настройки репликатора приведен в разделе Запуск кластеров Tarantool DB с TCF и настройка репликатора.
Обновленный Java-коннектор¶
В Tarantool DB 1.0.0 вы можете работать с СУБД, используя новый Java-коннектор. Ключевая функциональность Java-коннектора:
упрощенный API – поддержка CRUD Client;
конвертация объектов с помощью библиотеки Jackson;
проверка работоспособности экземпляра (health check);
обработчик игнорированных пакетов, интеграция с timeout-обработчиком;
оптимизация работы с буфером данных: улучшение производительности относительно
cartridge-java
, гибкая настройка работы с сетью (Netty, TimerService) и сброса буфера.
Расширенная поддержка Spring Data¶
В новом Java-коннекторе доступна расширенная поддержка Spring Data. Spring Data упрощает создание приложений на базе Spring, использующих Tarantool в качестве хранилища данных.
Расширенная функциональность включает:
Гибкую настройку клиента через Java-объекты и файлы конфигурации (
.properties
/.yaml
).Пример
spring: data: tarantool: host: localhost port: 3301 user-name: user password: password graceful-shutdown-enabled: true balancer-mode: distributing_round_robin connect-timeout: 5000 reconnect-after: 1000 connection-groups: - auth-type: pap_sha256 host: localhost port: 3301 user-name: "user" password: secret connection-group-size: 4 tag: first-router flush-consolidation-handler: explicit-flush-after-flushes: 256 consolidate-when-no-read-in-progress: false - host: localhost port: 3302 user-name: "user" password: secret connection-group-size: 2 tag: second-router event-loop-threads-count: 10 heartbeat: death-threshold: 4 invalidation-threshold: 2 ping-interval: 56 window-size: 12
Производные запросы (derived queries). Для работы с такими запросами доступны методы
findBy
,deleteBy
,existsBy
иcountBy
.Поддерживаются следующие ключевые слова:
True
,False
,Equal
,LessThan
,LessThanEqual
,GreaterThan
,GreaterThanEqual
,Between
,IsNull
,Distinct
,IsEmpty
,ExistsBy
,First
,Top
,After
,Before
.Пример
public interface PersonRepository extends CrudRepository<Person, Integer> { List<T> deleteByName(String name); List<Person> findAllByIdIsLessThan(int id); boolean existsByIsMarried(boolean isMarried); long countByNameBefore(String name); }
Планируется поддержка модуля Spring Data версий 3.1 и 3.2.
Упрощенный API¶
В новом Java-коннекторе упрощен API по сравнению с cartridge-java
.
Теперь все методы и опции полностью соответствуют модулю tarantool/crud
.
Кроме того, обеспечена прямая совместимость с будущими опциями.
Пример
TarantoolCrudClient client = TarantoolFactory.crud().build();
client.call(someFunctionName).join();
client.eval(someEvalString).join();
var space = client.space("person");
space.insert(Arrays.asList(51, false, "luke skywalker")).join();
space.select(Condition.create("==", "pk", 51)).join();
Полная поддержка протокола IPROTO¶
В новом Java-коннекторе доступна полная поддержка протокола IPROTO, в том числе функциональности Tarantool 3.x. Ключевая поддерживаемая функциональность:
авторизация (CHAP-SHA1, PAP-SHA256);
TLS/mTLS;
корректное завершение работы (graceful shutdown);
автоматическое обновление схемы данных;
(2.11) пагинация массивов данных;
интерактивные транзакции;
подписка на события Tarantool;
все типы данных, в том числе работа с
datetime
для JSR-310 (ZonedDateTime
,Instant
,OffsetDateTime
) иinterval
(TemporalAmount
);работа с форматом записи без получения схемы в отдельном запросе (tuple extension);
(3.x) работа с именами спейсов и индексов в IPROTO-запросах без получения схемы в отдельном запросе (space and index names).