Запись и получение данных в словаре | Tdb
Руководство пользователя Словари Запись и получение данных в словаре

Запись и получение данных в словаре

В этом руководстве показано, как записать в словарь данные, а затем получить запись из базы данных с обогащением из словаря. Для примера используется база данных с категориями денежных трат.

Содержание:

Пререквизиты

Для выполнения примера требуются:

  • установленный Docker-образ Tarantool DB;

  • приложение Docker compose;

  • утилита TT CLI;

  • исходные файлы примера dictionary.

    Примечание

    Есть два способа получить исходные файлы примера:

    • Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива: tarantooldb-documentation-1.0.0.tar.gz. Пример dictionary расположен в таком архиве в директории ./doc/examples/dictionary/.

    • Отдельный архив dictionary.tar.gz, скачанный c сайта Tarantool.

Запуск стенда и подключение к узлу

Для успешного запуска должны быть свободны порты:

  • 3301–3306;

  • 8081–8086.

Перейдите в папку с примером dictionary и запустите стенд:

cd ./doc/examples/dictionary
docker compose up -d

Команда развернет стенд, который состоит из:

  • кластера Tarantool DB из двух шардов и двух роутеров;

  • кластера etcd для работы восстановления после сбоев (failover) кластера Tarantool DB.

После запуска должны работать все контейнеры, кроме user-host.

Теперь откройте в браузере веб-интерфейс Tarantool DB по адресу http://localhost:8081. Перейдите во вкладку Cluster и проверьте, что отсутствуют ошибки или предупреждения. В течение нескольких секунд после старта кластер еще поднимается, так что могут появиться предупреждения.

Перейдите на вкладку Space Explorer и выберите любой узел, например storage-1-msk. Проверьте, что на узле есть следующие спейсы:

  • dictionary_data;

  • dictionary_vclock;

  • money_moves.

Запись данных в словарь

Подключитесь к одному из роутеров с помощью команды tt connect:

tt connect admin:secret-cluster-cookie@localhost:3301

В примере ниже задается словарь с названием categories, который содержит категории денежных трат. С помощью функции dictionary_router.set() запишите несколько элементов (‘Shops’,’Med’ и другие) с соответствующими им ключами в словарь:

dictionary_router.set('categories', '1', 'Shops')
dictionary_router.set('categories', '2', 'Food delivery')
dictionary_router.set('categories', '3', 'Transport')
dictionary_router.set('categories', '4', 'Bills')
dictionary_router.set('categories', '5', 'Med')

Примечание

Ключ элемента в словаре может быть только строкой.

Чтобы проверить записанные в словарь данные, используйте метод dictionary_router.get():

dictionary_router.get('categories', '1')

Подготовка нормализованных данных

Чтобы записать нормализованные данные, выполните следующий код:

crud.replace('money_moves', {1, box.NULL, 123, require('datetime').now(), '1', false, 260.01})
crud.replace('money_moves', {2, box.NULL, 123, require('datetime').now(), '2', false, 1234.56})
crud.replace('money_moves', {2, box.NULL, 123, require('datetime').now(), '3', false, 30})
crud.replace('money_moves', {3, box.NULL, 123, require('datetime').now(), '5', false, 1176.12})
crud.replace('money_moves', {4, box.NULL, 123, require('datetime').now(), '3', false, 30})
crud.replace('money_moves', {5, box.NULL, 123, require('datetime').now(), '3', false, 35})
crud.replace('money_moves', {6, box.NULL, 123, require('datetime').now(), '4', false, 11816.86})
crud.replace('money_moves', {7, box.NULL, 123, require('datetime').now(), '3', false, 218})
crud.replace('money_moves', {8, box.NULL, 123, require('datetime').now(), '1', false, 1026.45})
crud.replace('money_moves', {9, box.NULL, 123, require('datetime').now(), '1', false, 384.32})
crud.replace('money_moves', {10, box.NULL, 123, require('datetime').now(), '2', false, 890.99})

Чтобы проверить записанные данные, используйте метод crud.get():

crud.get('money_moves', 1)

Чтение данных с обогащением из словаря

Чтобы получить запись с добавленной информацией из словаря, выполните следующую команду:

box.schema.func.call('get_money_move', 1)

Остановка стенда

Чтобы остановить стенд, выполните следующую команду:

docker compose down
Found what you were looking for?
Feedback