Tarantool DataBase 1.0.0
Дата релиза: 07.05.2024.
Tarantool DB — это in-memory NoSQL СУБД, разработанная на основе Tarantool Enterprise Edition. В релизе Tarantool DB 1.0.0 упрощена установка и настройка кластера для горячего хранения данных за счет интеграции с инструментами CI/CD.
Основная функциональность:
- обновление клиентского кода хранилища данных без повторного развертывания кластера;
- поддержка словарей в кластере;
- управление временем жизни данных;
- совместимость с Tarantool Clusters Federations;
- работа с СУБД через новый Java-коннектор.
Подробная информация о продукте приведена в документации Tarantool DB.
Начиная с версии Tarantool DB 1.0.0, новый клиентский код можно применять без необходимости повторного развертывания всего кластера. Теперь обновить клиентский код хранилища данных можно через веб-интерфейс Tarantool DB или с помощью API-команды.
В Tarantool DB 1.0.0 поддерживается работа со словарями — таблицами, хранящими одинаковые данные на разных узлах кластера. При записи данных в любой узел данные распространяются по остальным узлам с этой же ролью. Экземпляр, вышедший из строя, получит все изменения по данным словарей после возобновления своей работы. Если связь между узлами нарушена, данные синхронизируются после восстановления связи.
Задать настройки словарей можно в секции dictionary YAML-конфигурации:
dictionary:batch_size: 200worker_sleep_in_second: 3600logging: 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: messagesis_expired: messages_is_tuple_expiredis_master_only: trueoptions:tuples_per_iteration: 100iterate_with: messages_iterate_withprocess_expired_tuple: messages_process_expired_tupleargs:seconds: 5
Здесь:
- идет обход кортежей по спейсу
messages; - функция
is_expiredпроверяет срок жизни кортежа; - функция
messages_process_expired_tupleобрабатывает кортежи с истекшим сроком жизни.
Узнать больше о настройке expirationd можно в разделе Устаревание данных.
В Tarantool DB 1.0.0 поддерживается работа с модулем Tarantool Clusters Federation (TCF). Совместное использование этих двух продуктов позволяет построить отказоустойчивую систему из двух независимых кластеров Tarantool DB. В такой системе:
- активный кластер принимает все запросы от приложения;
- пассивный кластер содержит копию данных активного кластера.
Tarantool Clusters Federation позволяет управлять переключением трафика между активным и пассивным кластерами.
Пример запуска кластеров Tarantool DB с TCF и настройки репликатора приведен в разделе Запуск кластеров Tarantool DataBase с TCF и настройка репликатора.
В Tarantool DB 1.0.0 вы можете работать с СУБД, используя новый Java-коннектор. Ключевая функциональность Java-коннектора:
- расширенная поддержка Spring Data;
- упрощенный API — поддержка CRUD Client;
- полная поддержка протокола IPROTO;
- конвертация объектов с помощью библиотеки Jackson;
- проверка работоспособности экземпляра (health check);
- обработчик игнорированных пакетов, интеграция с timeout-обработчиком;
- оптимизация работы с буфером данных: улучшение производительности относительно
cartridge-java, гибкая настройка работы с сетью (Netty, TimerService) и сброса буфера.
В новом Java-коннекторе доступна расширенная поддержка Spring Data. Spring Data упрощает создание приложений на базе Spring, использующих Tarantool в качестве хранилища данных.
Расширенная функциональность включает:
-
Гибкую настройку клиента через Java-объекты и файлы конфигурации (
.properties/.yaml).Пример
spring:data:tarantool:host: localhostport: 3301user-name: userpassword: passwordgraceful-shutdown-enabled: truebalancer-mode: distributing_round_robinconnect-timeout: 5000reconnect-after: 1000connection-groups:- auth-type: pap_sha256host: localhostport: 3301user-name: "user"password: secretconnection-group-size: 4tag: first-routerflush-consolidation-handler:explicit-flush-after-flushes: 256consolidate-when-no-read-in-progress: false- host: localhostport: 3302user-name: "user"password: secretconnection-group-size: 2tag: second-routerevent-loop-threads-count: 10heartbeat:death-threshold: 4invalidation-threshold: 2ping-interval: 56window-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.
В новом 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();
В новом 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).