Создаем свою первую базу данных на Tarantool
Первым делом давайте установим Tarantool, запустим его и создадим простую базу данных.
Вы можете установить Tarantool и работать с ним либо локально, либо в Docker – как вам удобнее.
Для практики и тестирования мы рекомендуем использовать официальные образы Tarantool для Docker. Официальный образ содержит определенную версию Tarantool и все популярные внешние модули для Tarantool. Все необходимое уже установлено и настроено на платформе Linux. Данные образы - это самый простой способ установить и запустить Tarantool.
Примечание
Если вы никогда раньше не работали с Docker, рекомендуем сперва прочитать эту обучающую статью.
Если Docker не установлен на вашей машине, следуйте официальным инструкциям по установке для вашей ОС.
Чтобы использовать полнофункциональный экземпляр Tarantool, запустите контейнер с минимальными настройками:
$ docker run \ --name mytarantool \ -d -p 3301:3301 \ -v /data/dir/on/host:/var/lib/tarantool \ tarantool/tarantool:1 Эта команда запускает новый контейнер с именем „mytarantool“. Docker запускает его из официального образа „tarantool/tarantool:1“ с предустановленным Tarantool’ом 1.10 и всеми внешними модулями.
Tarantool будет принимать входящие подключения по адресу localhost:3301. Можно сразу начать его использовать как key-value хранилище.
Tarantool сохраняет данные внутри контейнера. Чтобы ваше тестовые данные остались доступны после остановки контейнера, эта команда также монтирует директорию /data/dir/on/host (здесь необходимо указать абсолютный путь до существующей локальной директории), расположенную на машине, в директорию /var/lib/tarantool (Tarantool традиционно использует эту директорию в контейнере для сохранения данных), расположенную в контейнере. Таким образом все изменения в смонтированной директории, внесенные на стороне контейнера, также отражаются в расположенной на пользовательском диске директории.
Модуль Tarantool для работы с базой данных уже настроен и запущен в контейнере. Ручная настройка не требуется, если только вы не используете Tarantool как сервер приложений и не запускаете его вместе с приложением.
Примечание
Если ваш контейнер рушится вскоре после запуска, перейдите на эту страницу, чтобы найти возможное решение.
Чтобы подключиться к запущенному в контейнере экземпляру Tarantool, выполните эту команду:
$ docker exec -i -t mytarantool console Эта команда:
- Дает Tarantool команду открыть порт с интерактивной консолью для входящих подключений.
- Подключается через стандартный Unix-сокет к Tarantool-серверу, запущенному внутри контейнера, из-под пользователя
admin.
Tarantool показывает приглашение командной строки:
tarantool.sock> Теперь вы можете вводить запросы в командной строке.
Примечание
На боевых серверах интерактивный режим Tarantool предназначен только для системных администраторов. Мы же используем его в большинстве примеров в данном руководстве, потому что интерактивный режим хорошо подходит для обучения.
Подключившись к консоли, создадим простую тестовую базу данных.
Сначала создайте первый спейс (с именем tester):
tarantool.sock> s = box.schema.space.create('tester') Форматируйте созданный спейс, указав имена и типы полей:
tarantool.sock> s:format({ > {name = 'id', type = 'unsigned'}, > {name = 'band_name', type = 'string'}, > {name = 'year', type = 'unsigned'} > }) Создайте первый индекс (с именем primary):
tarantool.sock> s:create_index('primary', { > type = 'hash', > parts = {'id'} > }) Это первичный индекс по полю id в каждом кортеже.
Вставьте в созданный спейс три кортежа (наш термин для записей):
tarantool.sock> s:insert{1, 'Roxette', 1986} tarantool.sock> s:insert{2, 'Scorpions', 2015} tarantool.sock> s:insert{3, 'Ace of Base', 1993} Для выборки кортежей по первичному индексу primary выполните команду:
tarantool.sock> s:select{3} Теперь вывод в окне терминала выглядит следующим образом:
tarantool.sock> s = box.schema.space.create('tester') --- ... tarantool.sock> s:format({ > {name = 'id', type = 'unsigned'}, > {name = 'band_name', type = 'string'}, > {name = 'year', type = 'unsigned'} > }) --- ... tarantool.sock> s:create_index('primary', { > type = 'hash', > parts = {'id'} > }) --- - unique: true parts: - type: unsigned is_nullable: false fieldno: 1 id: 0 space_id: 512 name: primary type: HASH ... tarantool.sock> s:insert{1, 'Roxette', 1986} --- - [1, 'Roxette', 1986] ... tarantool.sock> s:insert{2, 'Scorpions', 2015} --- - [2, 'Scorpions', 2015] ... tarantool.sock> s:insert{3, 'Ace of Base', 1993} --- - [3, 'Ace of Base', 1993] ... tarantool.sock> s:select{3} --- - - [3, 'Ace of Base', 1993] ... Для добавления вторичного индекса по полю band_name используйте эту команду:
tarantool.sock> s:create_index('secondary', { > type = 'hash', > parts = {'band_name'} > }) Для выборки кортежей по вторичному индексу secondary выполните команду:
tarantool.sock> s.index.secondary:select{'Scorpions'} --- - - [2, 'Scorpions', 2015] ... Чтобы удалить индекс, выполните:
tarantool> s.index.secondary:drop() --- ... После завершения тестирования для корректной остановки контейнера выполните эту команду:
$ docker stop mytarantool Это был временный контейнер, поэтому после остановки содержимое его диска/памяти обнулилось. Но так как вы монтировали локальную директорию в контейнер, все данные Tarantool сохранились на диске вашей машины. Если вы запустите новый контейнер и смонтируете в него ту же директорию с данными, Tarantool восстановит все данные с диска и продолжит с ними работать.
Для реальных условий эксплуатации мы рекомендуем устанавливать Tarantool с помощью официального менеджера пакетов. Можно выбрать одну из трех версий: LTS, stable или beta. Автоматическая система сборки создает, тестирует и публикует пакеты после каждого коммита в соответствующую ветку репозитория Tarantool на GitHub.
Чтобы скачать и установить подходящий пакет, откройте командную строку и введите инструкции, которые даны для вашей операционной системы на странице для скачивания.
Чтобы начать работу с Tarantool, выполните эту команду:
$ tarantool $ # при этом создается новый экземпляр Tarantool Tarantool запускается в интерактивном режиме и показывает приглашение командной строки:
tarantool> Теперь вы можете вводить запросы в командной строке.
Примечание
На боевых серверах интерактивный режим Tarantool предназначен только для системных администраторов. Мы же используем его в большинстве примеров в данном руководстве, потому что интерактивный режим хорошо подходит для обучения.
Далее объясняется, как создать простую тестовую базу данных после установки Tarantool.
Чтобы Tarantool хранил данные в определенном месте, создайте предназначенную специально для тестов директорию:
$ mkdir ~/tarantool_sandbox $ cd ~/tarantool_sandbox
Ее можно удалить после окончания тестирования.
Проверьте доступность порта, используемого по умолчанию для прослушивания на экземпляре базы данных.
В зависимости от версии, Tarantool может во время установки запустить экземпляр
example.lua, который настроен на прослушивание по порту3301по умолчанию. В файлеexample.luaпоказана базовая конфигурация; его можно найти в директории/etc/tarantool/instances.enabledили/etc/tarantool/instances.available.Тем не менее, мы предлагаем провести установку самостоятельно с целью обучения.
Убедитесь, что свободен порт, используемый по умолчанию:
Чтобы проверить статус работы демонстрационного экземпляра, выполните команду:
$ lsof -i :3301 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME tarantool 6851 root 12u IPv4 40827 0t0 TCP *:3301 (LISTEN)
Если он запущен, отключите соответствующий процесс. В данном примере:
$ kill 6851
Чтобы запустить модуль Tarantool для работы с базой данных и сделать так, чтобы запущенный экземпляр принимал TCP-запросы на порт
3301, выполните эту команду:tarantool> box.cfg{listen = 3301}
Создайте первый спейс (с именем
tester):tarantool> s = box.schema.space.create('tester')
Форматируйте созданный спейс, указав имена и типы полей:
tarantool> s:format({ > {name = 'id', type = 'unsigned'}, > {name = 'band_name', type = 'string'}, > {name = 'year', type = 'unsigned'} > })
Создайте первый индекс (с именем
primary):tarantool> s:create_index('primary', { > type = 'hash', > parts = {'id'} > })
Это первичный индекс по полю
idв каждом кортеже.Вставьте в созданный спейс три кортежа (наш термин для записей):
tarantool> s:insert{1, 'Roxette', 1986} tarantool> s:insert{2, 'Scorpions', 2015} tarantool> s:insert{3, 'Ace of Base', 1993}
Для выборки кортежей по первичному индексу
primaryвыполните команду:tarantool> s:select{3}
Теперь вывод в окне терминала выглядит следующим образом:
tarantool> s = box.schema.space.create('tester') --- ... tarantool> s:format({ > {name = 'id', type = 'unsigned'}, > {name = 'band_name', type = 'string'}, > {name = 'year', type = 'unsigned'} > }) --- ... tarantool> s:create_index('primary', { > type = 'hash', > parts = {'id'} > }) --- - unique: true parts: - type: unsigned is_nullable: false fieldno: 1 id: 0 space_id: 512 name: primary type: HASH ... tarantool> s:insert{1, 'Roxette', 1986} --- - [1, 'Roxette', 1986] ... tarantool> s:insert{2, 'Scorpions', 2015} --- - [2, 'Scorpions', 2015] ... tarantool> s:insert{3, 'Ace of Base', 1993} --- - [3, 'Ace of Base', 1993] ... tarantool> s:select{3} --- - - [3, 'Ace of Base', 1993] ...
Для добавления вторичного индекса по полю
band_nameиспользуйте эту команду:tarantool> s:create_index('secondary', { > type = 'hash', > parts = {'band_name'} > })
Для выборки кортежей по вторичному индексу
secondaryвыполните команду:tarantool> s.index.secondary:select{'Scorpions'} --- - - [2, 'Scorpions', 2015] ...
Теперь, чтобы подготовиться к примеру в следующем разделе, попробуйте следующее:
tarantool> box.schema.user.grant('guest', 'read,write,execute', 'universe')
В запросе box.cfg{listen = 3301}, который мы отправили ранее, параметр listen может принимать в качестве значения URI (унифицированный идентификатор ресурса) любой формы. В нашем случае это просто локальный порт 3301. Вы можете отправлять запросы на указанный URI, используя:
telnet,- коннектор,
- другой экземпляр Tarantool (с помощью модуля console),
- утилиту tarantoolctl.
Давайте попробуем вариант с tarantoolctl.
Переключитесь на другой терминал. Например, в Linux-системе для этого нужно запустить еще один экземпляр Bash. В новом терминале можно сменить текущую рабочую директорию на любую другую, необязательно использовать ~/tarantool_sandbox.
Запустите утилиту tarantoolctl:
$ tarantoolctl connect '3301' Данная команда означает «использовать утилиту tarantoolctl для подключения к Tarantool-серверу, который слушает по адресу localhost:3301».
Введите следующий запрос:
localhost:3301> box.space.tester:select{2} Это означает «послать запрос тому Tarantool-серверу и вывести результат на экран». Результатом в данном случае будет один из кортежей, что вы вставляли ранее. В окне терминала теперь должно отображаться примерно следующее:
$ tarantoolctl connect 3301 /usr/local/bin/tarantoolctl: connected to localhost:3301 localhost:3301> box.space.tester:select{2} --- - - [2, 'Scorpions', 2015] ... Вы можете посылать запросы box.space...:insert{} и box.space...:select{} неограниченное количество раз на любом из двух запущенных экземпляров Tarantool’а.
Закончив тестирование, выполните следующие шаги:
- Для удаления спейса:
s:drop() - Для остановки
tarantoolctl: ctrl+C или ctrl+D - Чтобы остановить Tarantool (другой способ): стандартная Lua-функция os.exit()
- Для остановки Tarantool (из другого терминала):
sudo pkill -f tarantool - Для удаления директории-песочницы:
rm -r ~/tarantool_sandbox