Tarantool

Tarantool — это платформа in-memory вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. Включает в себя базу данных и сервер приложений на Lua.

Обладает высокой скоростью работы по сравнению с традиционными СУБД, обладая теми же свойствами: персистентности, транзакционности ACID, репликации master-slave, master-master.

Обзор

База данных 
Язык запросов:
 
 SQL
 документо-ориентированные запросы на языке Lua

Технологии хранения данных:

 memtx — хранение данных в оперативной памяти, с дисковыми снимками данных и логом транзакций.
 vinyl — хранение данных на жестком диске, с оптимизацией для быстрой вставки данных.

Для хранения данных используются таплы (кортежи). Это массив с данными, которые не типизированы. Кортежи или таплы объединяются в спейсы. Спейс – это аналог из мира SQL, таблица. Спейс это коллекция таплов, а тапл это коллекция полей.

Поля могут быть одного из следующих типов:

Кортежи организованы в пространства (space или таблицы). Для каждого пространства указывается технология хранения (memtx или vinyl).

Пространство должно быть проиндексировано первичным ключом. Также поддерживаются неограниченное количество вторичных ключей.

Ключ может состоять из одного и более полей.

Поддерживаемые индексы:

 TREE (дерево) — для быстрого поиска значений и возможности итерации.
 HASH (хеш-таблица, только для memtx) — для еще более быстрого поиска значений.
 BITSET (битовая маска, только для memtx) — возможность поиска по битовым маскам.
 RTREE (многомерное R*-дерево, только для memtx) — для быстрого поиска ближайших соседей (KNN) и точек в заданных многомерных параллелепипедах с заданными функциями расстояния между двумя точками.

В качестве формата хранения и протокола передачи данных используется MessagePack.

База данных поддерживает асинхронную и синхронную репликацию. Репликация может быть выполнена в виде мастер-мастер.

Для разделения доступа используется традиционная модель ACL. У каждого объекта есть владелец имеющий неограниченный доступ. Владелец может предоставить доступ к объекту другим пользователям или ролям. Роль это в свою очередь группа пользователей.

Список разграниченных действий:
 read
 write
 execute
 create
 alter
 drop

База данных поддерживает хранимые процедуры и триггеры написанные на языке Lua.

Глобальный триггер
 box_once — первый запуск базы данных (бутстрап).

Триггеры для пространств (таблиц):
 on_replace — триггер только для чтения на события вставка, обновления, удаления данных
 before_replace — триггер с возможностью модификации событий вставки, обновления, удаления данных

Сервер приложений 

Для написания бизнес-логики используется язык Lua и его компилятор LuaJIT.

Сервер приложений содержит высокоуровневый API для доступа к базе данных, файловой системе, сети.

Пользователь может динамически добавлять, удалять, модифицировать функции. Для одновременного выполнения кода используется кооперативная многозадачность.

Для расширения сервера приложений доступны Lua библиотеки как из репозитория tarantool/rocks так и собранные из исходников.

Список стандартных модулей tarantool-а:
 box — доступ к СУБД
 clock — системное время
 crypto — криптографические функции
 csv — работа с CSV форматом данных
 decimal — арифметика с десятичной плавающей точкой (например, денежная)
 digest — хеширование строк
 errno — доступ к переменной системных ошибок *nix
 fiber — многопоточность и инструменты синхронизации
 fio — работа с файловой системой, ввод/вывод
 fun — функциональное программирование
 iconv — работа с текстом в разных кодировках
 json — работа с JSON форматом данных
 log — логирование событий
 msgpack — работа с MsgPack форматом данных
 net.box — модуль связи tarantool-ов между собой
 os — небольшая часть основных команд операционной системы
 pickle — сериализация/десериализация Lua структур
 socket — работа с сетью
 string — утилиты для работы со строками
 tap — фреймворк для модульного тестирования
 uuid — работа с UUID
 uri — работа с форматом uri
 yaml — работа с YAML форматом данных

Модули доступные из репозитория tarantool/rocks:
 vshard — шардирование и репликация данных для горизонтального масштабирования сервиса
 avro-schema — валидация и преобразование сложных структур данных
 date — манипуляция с датой и временем

История 

Mail.ru, крупная интернет-компания в России, начала проект в 2008 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего технического директора из MySQL.

Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как MySQL или PostgreSQL.

В 2014 году Tarantool также был принят социальными сетями Badoo и Одноклассники.

В июне 2014 года исследователи из Политехнического института Коимбры и Университета Коимбры (Португалия) провели первый официальный независимый тест производительности систем NoSQL, которые включали в том числе и Tarantool. Испытания использовали стандартный YCSB-тест, а конкуренцию Tarantool составляли другие системы NoSQL: Cassandra, HBase, Oracle NoSQL (англ.), Redis, Voldemort (англ.), Scalaris, Elasticsearch, MongoDB и OrientDB.

В 2018 году руководитель команды разработки ядра Tarantool Константин Осипов стал лауреатом премии HighLoad++ Awards. В сентябре 2019 года он покинул команду проекта в Mail.ru, создав собственную ветку разработки.

Примечания

Ссылки 
Официальный сайт
 Список существующих клиентов для Tarantool
 Tarantool на Github

Документоориентированные СУБД
NoSQL
Свободные СУБД