Начать работу с Tarantool можно запустив обучающий туториал на официальном сайте https://tarantool.org/en/try.html
Это позволяет попробовать Tarantool прямо из браузера сразу и без регистрации. Также на официальном сайте представлены инструкции по установке и запуску Tarantool в macOS, популярных дистрибутивах Linux и FreeBSD. Версии для Windows Tarantool не имеет.
Но не спешите сразу устанавливать Tarantool непосредственно в операционную систему. Самым удобным способом быстро запустить и попробовать Tarantool на Linux, macOS или Windows является Docker. Если у вас уже установлен Docker, то запуск контейнера с Tarantool может быть выполнен одной командой:
docker run --name mytarantool -d tarantool/tarantool:1.7
Если образ Tarantool 1.7 еще не скачан, то он автоматически скачается, и новый контейнер, созданный из этого образа, будет запущен. Всё. Мы запустили Tarantool! Параметр -d (detached) говорит о том, что контейнер необходимо запустить в фоне. Поэтому всё, что вы увидите в консоли после выполнения команды, — это ID контейнера.
Далее нужно подключиться к консоли Tarantool, запущенного в контейнере:
docker exec -it mytarantool console
Мы подключаемся к контейнеру с именем mytarantool и выполняем в нём команду console в интерактивном режиме. После этого откроется консоль Tarantool, и вы сможете выполнять в ней любые команды.
Создадим space для хранения данных. Space’ы в Tarantool — это аналог коллекций в MongoDB, ну, или таблиц в традиционных СУБД.
tarantool> box.schema.space.create('customers')
Представленная выше команда - это код на языке Lua. Box - основной модуль Tarantool, отвечающий за функциональность СУБД. Tarantool напрямую и через консоль предоставляет полноценный Lua интерпретатор, в котором вы можете задавать переменные и функции, а также загружать и вызывать сторонние Lua пакеты (пакеты в терминологии Lua называются “rocks”. LuaRocks - менеджер пакетов). Естественно запросы к Tarantool можно делать и из других языков программирования. Написаны и поддерживаются коннекторы для Node.js, PHP, Go, Java, .NET, R, Erlang, C, Perl, Python. В разработке коннектор, использующий SQL синтаксис.
Создадим первичный индекс по первому полю (также мы можем создавать вторичные и составные индексы):
tarantool> box.space.customers:create_index('primary', {type = 'tree', parts = {1, 'UNSIGNED'}})
Двоеточие в вызове customers:create_index необходимо для эмуляции объектной ориентированности и корректной передачи параметра self. Следующие два вызова будут эквивалентны (обратите внимание на точку в одном случае и двоеточие в другом):
tarantool> box.space.customers:select({})
и
tarantool> box.space.customers.select(box.space.customers,{})
Теперь вставим в space customers несколько записей. Одну с явным указанием первичного ключа, а другую — с помощью автоматического инкремента (скобки вокруг единственного параметра убраны намеренно):
tarantool> box.space.customers:insert{1, 'Sergey', 'Moscow'}
tarantool> box.space.customers:auto_increment{'Ivan', 'San-Francisco'}
Теперь запросим все записи:
tarantool> box.space.customers:select{}
Перед нами в консоли в YAML-формате будут выведены две только что добавленные записи.
---
- - [1, 'Sergey', 'Moscow']
- [2, 'Ivan', 'San-Francisco']
...
Представленный выше код может показаться простым, но давайте посмотрим более сложный сценарий - код, необходимый для того чтобы сделать REST сервис, выдающий содержимое space’а customers в JSON формате.
function customers_handler(self)
return self:render{ json = box.space.customers:select{} }
end
httpd = require('http.server')
server = httpd.new(nil, 8080)
server:route({ path = '/customers' }, customers_handler)
server:start()
Код говорит сам за себя, и наверное не требует пояснений. Более полные примеры можно найти в официальной документации. Если вы хотите протестировать работу данного REST сервиса, не забудьте сделать доступным порт 8080 снаружи Docker контейнера.