Tarantool

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Tarantool
Логотип программы Tarantool
Тип NoSQL
Автор VK
Разработчик VK
Написана на Си
Операционная система Linux, FreeBSD, macOS
Первый выпуск 2008
Последняя версия 2.7.2 (21 апреля 2021 года)
Лицензия Упрощенная BSD
Сайт tarantool.io

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 — манипуляция с датой и временем

История

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

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

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

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

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

Примечания

  1. NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov. Дата обращения: 18 мая 2018. Архивировано 12 марта 2017 года.
  2. Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup. Дата обращения: 18 мая 2018. Архивировано 19 апреля 2021 года.
  3. Архивированная копия. Дата обращения: 18 мая 2018. Архивировано 16 мая 2018 года.
  4. HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили. habr.com. Дата обращения: 10 декабря 2018. Архивировано 9 декабря 2018 года.
  5. Главный архитектор СУБД Tarantool ушел из Mail.ru и заявил о «распаде команды». CNews.ru. Дата обращения: 1 января 2020. Архивировано 1 января 2020 года.

Ссылки