Tarantool DB 1.0.0 | Tdb

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-коннектора:

Расширенная поддержка 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).

Нашли ответ на свой вопрос?
Обратная связь