3.11.3.4 Tarantool — оптимизированный интерпретатор Lua
Скачать документ Возможности
Установка tarantool
Основные каталоги и файлы конфигурации
Интерактивная консоль
Создание базы данных с использованием Lua
Пример запуска Lua-скрипта в консоли tarantool
Пример работы с SQL
Управление экземплярами с помощью tarantoolctl
Исправление ошибок
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Рабочая станция, Сервер графический, Сервер минимальный
- Версия ПО: tarantool-2.4.2.68-8
Tarantool — это одновременно резидентная база данных (размещаемая в оперативной памяти) и сервер приложений с поддержкой языка Lua.
Tarantool позволяет хранить и обрабатывать данные, разрабатывать приложения и ускорять работу системы. Tarantool можно использовать для работы с данными любого типа, копировать, сегментировать, распределяя большие объёмы данных по нескольким серверам и сочетая результаты, полученные от них, для создания отказоустойчивых кластеров. Tarantool подходит для серверов очередей, кешей, веб-приложений с отслеживанием состояния.
Возможности
Основные возможности сервера приложений:
- оптимизированный интерпретатор Lua, поддерживающий быстрый отслеживающий JIT-компилятор;
- совместная многозадачность, неблокирующий ввод-вывод;
- встроенная поддержка очередей задач;
- сегментирование данных и задач;
- встроенные средства для управления кластерами и развертывания приложений;
- коннекторы для взаимодействия с внешними базами данных;
- набор встроенных и автономных модулей.
Основные возможности базы данных:
- формат данных MessagePack и протокол клиент-сервер;
- два механизма хранения данных: хранение в оперативной памяти с полной сохраняемостью и собственная реализация LSM-tree, которая оптимизирована для работы с большими объёмами данных;
- несколько типов индексов: HASH, TREE, RTREE, BITSET;
- индексы путей в формате JSON;
- асинхронная и синхронная репликация;
- автоматическое избрание лидера с использованием алгоритма RAFT;
- аутентификация и контроль доступа;
- поддержка ANSI SQL;
- коннекторы для различных языков программирования.
Установка tarantool
Для установки программы через терминал выполните команду (потребуются права администратора):
sudo dnf install tarantool
Дальнейшая работа с программой должна выполняться с правами обычного (непривилегированного) пользователя.
Основные каталоги и файлы конфигурации
По умолчанию создаются каталоги:
/etc/tarantool — каталог для хранения всей конфигурации;
/var/log/tarantool — каталог для хранения журналов;
/var/lib/tarantool — каталог для хранения данных, которые распределяются между экземплярами.
/etc/tarantool/instances.available/*.lua — файл инициализации tarantool по умолчанию с простыми в использовании примерами конфигурации, включая репликацию, сегментирование и все основные функции.
Интерактивная консоль
Для запуска интерактивной консоли tarantool введите команду:
tarantool
Примерный вывод:
Tarantool 2.4.2-68-g17621b0 type 'help' for interactive help tarantool>
В консоли можно работать с языком Lua и SQL.
Создание базы данных с использованием Lua
1. Настройка конфигурации. Выполните настройку сервера с базовыми параметрами:
box.cfg{ listen = 3301, -- порт для подключения клиентов memtx_memory = 1024 * 1024 * 256 -- размер памяти для хранения данных (256 МБ) }
Результат:
2024-08-09 09:51:46.499 [6465] main/103/interactive C> Tarantool 2.4.2-68-g17621b0
2024-08-09 09:51:46.500 [6465] main/103/interactive C> log level 5
2024-08-09 09:51:46.501 [6465] main/103/interactive I> mapping 268435456 bytes for memtx tuple arena...
2024-08-09 09:51:46.504 [6465] main/103/interactive I> mapping 134217728 bytes for vinyl tuple arena...
2024-08-09 09:51:46.514 [6465] main/103/interactive I> instance uuid e753c2aa-3d14-4a8e-9c03-7b4412a87011
2024-08-09 09:51:46.514 [6465] iproto/101/main I> binary: bound to 0.0.0.0:3301
2024-08-09 09:51:46.514 [6465] main/103/interactive I> initializing an empty data directory
2024-08-09 09:51:46.570 [6465] main/103/interactive I> assigned id 1 to replica e753c2aa-3d14-4a8e-9c03-7b4412a87011
2024-08-09 09:51:46.570 [6465] main/103/interactive I> cluster uuid 21f5b9e0-775c-467e-9872-e3be40b06f0a
2024-08-09 09:51:46.572 [6465] snapshot/101/main I> saving snapshot `./00000000000000000000.snap.inprogress'
2024-08-09 09:51:46.589 [6465] snapshot/101/main I> done
2024-08-09 09:51:46.589 [6465] main/103/interactive I> ready to accept requests
2024-08-09 09:51:46.589 [6465] main/105/checkpoint_daemon I> scheduled next checkpoint for Fri Aug 9 11:08:02 2024
2024-08-09 09:51:46.590 [6465] main/103/interactive I> set 'listen' configuration option to "3301" ---
...
После выполнения команды сервер будет инициализирован.
2. Создание нового пространства имён:
box.schema.space.create('my_space')
где:
my_space - это имя вашей первой базы данных.
Вывод:
--- - engine: memtx before_replace: 'function: 0x40736f18' on_replace: 'function: 0x40736ef0' ck_constraint: [] field_count: 0 temporary: false index: [] is_local: false enabled: false name: my_space id: 514 - created ...
где:
engine: memtx - движок хранения (memtx), используемый для этого пространства;
before_replace и on_replace - функции, которые вызываются перед и после замены данных в этом пространстве;
ck_constraint - ограничения, накладываемые на данные в этом пространстве (в данном случае пустой список);
field_count - количество полей в этом пространстве (0);
temporary - флаг, указывающий, является ли это пространство временным;
index - список индексов, созданных для этого пространства;
is_local - флаг, указывающий, является ли это пространство локальным;
enabled - флаг, указывающий, включено ли это пространство;
name - имя пространства ("my_space");
id - идентификатор пространства (514);
- created - подтверждает, что пространство успешно создано.
3. Создание индекса с именем primary для базы данных:
box.space.my_space:create_index('primary', {
type = 'tree',
parts = {1, 'unsigned'}
})
Результат:
--- - unique: true parts: - type: unsigned is_nullable: false fieldno: 1 id: 0 space_id: 512 type: TREE name: primary ...
4. Добавление данных в базу данных:
box.space.my_space:insert{1, 'example data'}
Результат:
--- - [1, 'example data'] ...
5. Выбор данных:
local result = box.space.my_space:select{} for _, row in ipairs(result) do print(row[1], row[2]) end
Результат:
--- - [1, 'example data'] ...
6. Удаление записи из пространства имен:
box.space.my_space:delete{1}
Результат:
--- - [1, 'example data'] ...
Пример запуска Lua-скрипта в консоли tarantool
1. В терминале создайте файл app.lua с помощью текстового редактора:
nano app.lua
2. Напишите код Lua-скрипта в файле:
-- app.lua
-- Настройка конфигурации
box.cfg{
listen = 3301,
memtx_memory = 1024 * 1024 * 256
}
-- Проверка существования пространства и создание, если оно не существует
local space_name = 'example_space'
local space = box.space[space_name]
if not space then
space = box.schema.space.create(space_name)
space:create_index('primary', { type = 'tree', parts = {1, 'unsigned'} })
print('Space and index created.')
else
print('Space already exists.')
end
-- Добавление данных, если они ещё не существуют
local count = space:count()
if count == 0 then
space:insert{1, 'Hello, Tarantool!'}
print('Data inserted.')
else
print('Data already exists.')
end
-- Выбор данных и вывод
local result = space:select{}
print('Selected data:')
for _, row in ipairs(result) do
print(row[1], row[2])
end
Сохраните файл и закройте редактор. Для этого нажмите Ctrl + O, затем Enter для сохранения, и Ctrl + X для выхода.
3. Запустите консоль tarantool:
tarantool
4. В консоли tarantool выполните Lua-скрипт:
dofile('app.lua')
Результат:
Hello, Tarantool!
Пример работы с SQL
Tarantool поддерживает SQL-запросы. Для использования функций SQL, используя tarantool в качестве клиента, выполните:
1. Включение SQL-режима:
box.cfg{listen = 3301}
2. Для создания таблицы используйте команду CREATE TABLE:
box.execute('CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT)')
Если SQL-запрос был выполнен успешно и затронул одну строку - row_count: 1, то таблица была успешно создана.
3. Чтобы вставить данные в таблицу, выполните команду INSERT INTO:
box.execute('INSERT INTO employees (id, name) VALUES (1, \'John Doe\')') box.execute('INSERT INTO employees (id, name) VALUES (2, \'Jane Smith\')') box.execute('INSERT INTO employees (id, name) VALUES (3, \'Alice Johnson\')')
Вывод --- ... после выполнения команды box.execute() в консоли tarantool указывает на то, что запрос был выполнен успешно, но подробная информация о результате не отображается в текущем выводе.
4. Для выбора данных из таблицы используйте команду SELECT:
local result = box.execute('SELECT * FROM employees')
for _, row in ipairs(result.rows) do print(row[1], row[2]) end
Вывод:
1 John Doe 2 Jane Smith 3 Alice Johnson
Для выхода из консоли используйте команду:
os.exit()
Управление экземплярами с помощью tarantoolctl
Tarantoolctl позволяет управлять экземплярами tarantool, выполнять команды SQL, подключаться к удаленным серверам и др.
Основные команды и опции, которые можно использовать с tarantoolctl для управления экземплярами tarantool:
1. Запуск экземпляра tarantool (example - замените на любое имя экземпляра):
sudo tarantoolctl start example
2. Остановка экземпляра tarantool:
sudo tarantoolctl stop example
3. Проверка состояния сервера:
sudo tarantoolctl status example
4. Перезапуск экземпляра:
sudo tarantoolctl restart example
5. Ротация логов:
tarantoolctl logrotate example
6. Проверка экземпляра:
tarantoolctl check example
7. Вход в командную строку интерфейса tarantool:
tarantoolctl enter example [--language=<language>]
8. Выполнение Lua-скрипта:
tarantoolctl eval example <FILE>
9. Выполнение команд через стандартный ввод:
<команда> | tarantoolctl eval example
10. Подключение к серверу tarantool по адресу example.com и порту 3301:
tarantoolctl connect tcp://example.com:3301
11. Передача команд через стандартный ввод на удаленный экземпляр:
Например, у вас есть сервер tarantool, работающий на хосте example.com и порту 3301. Вы хотите выполнить команду SQL, которая добавляет запись в таблицу, и затем получить результат.
echo "box.execute('INSERT INTO employees (id, name) VALUES (4, \'Jane Doe\')')" | tarantoolctl connect tcp://example.com:3301
12. Для получения информации об установленном tarantoolctl выполните:
tarantoolctl --help
13. Для определения списка запущенных на узле экземпляров класса tarantool используйте:
ls /etc/tarantool/instances.available
Исправление ошибок
При возникновении ошибки:
can't initialize storage: Failed to lock WAL directory . and hot_standby mode is off
В терминале выполните поиск запущенных процессов tarantool. Утилита pgrep работает следующим образом: вы задаете имя процесса, а утилита показывает его идентификатор:
sudo pgrep -f tarantool
Примерный вывод:
4143 5046 5181 5190
Принудительно завершить процессы можно, используя команду kill -9:
sudo kill -9 4143 sudo kill -9 5046 sudo kill -9 5181 sudo kill -9 5190
Дата последнего изменения: 02.10.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.