Tarantool — платформа in-memory вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. Включает в себя базу данных и сервер приложений на Lua.
Обладает высокой скоростью работы по сравнению с традиционными СУБД, обладая теми же свойствами: персистентности, транзакционности ACID, репликации master-slave, master-master.
Обзор
База данных Язык запросов:
SQL документо-ориентированные запросы на языке Lua
Технологии хранения данных:
memtx — хранение данных в оперативной памяти, с дисковыми снимками данных и логом транзакций. vinyl — хранение данных на жестком диске, с оптимизацией для быстрой вставки данных.
Для хранения данных используются таплы (кортежи). Это массив с данными, которые не типизированы. Кортежи или таплы объединяются в спейсы. Спейс – это аналог из мира SQL, таблица. Спейс это коллекция таплов, а тапл это коллекция полей.
Поля могут быть одного из следующих типов:
Скалярный/составной тип MsgPack тип Lua Примерскалярный nil «nil» msgpack.NULLскалярный булевый «boolean» trueскалярный строковый «string» «A B C»скалярный целочисленный «number» 12345скалярный с плавающей точкой двойной точности «number» 1.2345составной ассоциативный массив «table» со строковыми ключами {«a»: 5, «b»: 6}составной массив «table» с числовыми ключами [1, 2, 3, 4, 5]составной массив байт «cdata»
Кортежи организованы в пространства (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 — манипуляция с датой и временем
Коннекторы Tarantool имеет API и официальные коннекторы для языков C, Java, Go, Python, а так же коннекторы для других языков, которые поддерживаются сообществом.
История
Mail.ru, крупная интернет-компания в России, начала проект в 2008 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего технического директора из MySQL.
Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как MySQL или PostgreSQL.
В 2014 году Tarantool также был принят социальными сетями Badoo и Одноклассники.
В июне 2014 года исследователи из Политехнического института Коимбры и Университета Коимбры (Португалия) провели первый официальный независимый тест производительности систем NoSQL, которые включали в том числе и Tarantool. Испытания использовали стандартный YCSB-тест, а конкуренцию Tarantool составляли другие системы NoSQL: Cassandra, HBase, , Redis, , Scalaris, Elasticsearch, MongoDB и OrientDB.
В 2018 году руководитель команды разработки ядра Tarantool Константин Осипов стал лауреатом премии HighLoad++ Awards. В сентябре 2019 года он покинул команду проекта в Mail.ru, создав собственную ветку разработки.
Примечания
Ссылки Официальный сайт Список существующих клиентов для Tarantool Tarantool на Github
Категория:Документоориентированные СУБД Категория:NoSQL Категория:Свободные СУБД