Tarantool

Тип |  NoSQL
Автор |  VK Tech
Разработчик |  VK Tech
Написана на |  Си
Операционные системы  |  Linux, FreeBSD, macOS
Первый выпуск |  2008
Последняя версия |  3.1.0 (2024-04-17)
Репозиторий |  github.com/tarantool/tar…
Лицензия |  Упрощенная BSD
Сайт |  tarantool.io

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

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

## Содержание

* 1 Обзор
* 1.1 База данных
* 1.2 Сервер приложений
* 2 Коннекторы
* 3 История
* 4 Примечания
* 5 Ссылки

## Обзор

[править | править код]

### База данных

[править | править код]

Язык запросов:

* 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.[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 года.

## Ссылки

[править | править код]

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

Системы управления базами данных (СУБД)

Клиент-серверные|

* Caché
* CouchDB
* IMS
* DB2
* Firebird
* FoundationDB
* Informix
* Ingres
* Interbase
* MS SQL Server
* MongoDB
* MySQL
* mSQL
* Neo4j
* Oracle Database
* Pervasive SQL
* PostgreSQL
* Sybase ASE
* Sybase ASA
* Sybase IQ
* Teradata Database
* ЛИНТЕР
* Yandex Database
* СУБД Ред База Данных

Движки|

* BDE
* Berkeley DB
* C-Store
* db4o
* HSQLDB
* Mnesia
* PrimeBase
* Redis
* Rdb
* SQLite
* ZODB

Файл-серверные|

* DataFlex
* dBase
* MS Access
* OpenOffice Base
* Paradox

Базы данных

Типы|

* Графовая
* Ключ — значение
* Документоориентированная
* На основе цепочки блоков
* Облачная
* Объектно-ориентированная:
* БД
* СУБД
* Объектно-реляционная СУБД
* Резидентная
* Реляционная:
* модель
* алгебра
* БД
* СУБД
* Столбцовая
* Хронологическая
* NoSQL
* NewSQL

Концепции|

* Модель данных
* Иерархическая модель
* Сетевая модель
* Транзакция
* Журнализация
* упреждающая
* Секционирование
* Сегментирование
* Столбцовое хранение

Объекты|

* Схема
* Отношение
* Столбец
* виртуальный
* Строка
* Таблица
* Представление
* материализованное
* Хранимая процедура
* Триггер
* Курсор
* Индекс
* Табличное пространство

Ключи|

* Первичный
* суррогатный
* Внешний
* Потенциальный
* Суперключ

Компоненты|

* Язык запросов
* Оптимизатор запросов
* Планировщик запросов
* План выполнения запроса
* Кэш запросов
* ODBC
* ADO
* ADO.NET
* JDBC

SQL|

| DML|

* SELECT
* INSERT
* UPDATE
* DELETE
* MERGE

|

DDL|

* CREATE
* ALTER
* DROP
* TRUNCATE

DCL|

* REVOKE
* GRANT

TCL|

* COMMIT
* ROLLBACK
* SAVEPOINT

Lua

| Компиляторы| Фреймворки и DLL| Порты и дистрибутивы| IDEs| Приложения

|
|
|
|

* Lua
* LuaJIT
* Parrot

* IUP
* Kepler
* LÖVE

* Plua
* Lua Player
* Corona SDK

* Decoda
* Studio
* SciTE
* IDE

* Prosody
* Tarantool
* Torch

Социальные сети и мессенджеры|

* ВКонтакте
* Одноклассники
* Мой мир
* VK Мессенджер
* ТамТам
* VK Звонки
* Max

Медиапроекты и развлечения|

* Главная Mail
* Почта Mail
* Облако Mail
* Ответы Mail
* Кино Mail
* Игры Mail
* RuStore
* VK Play
* VK Видео
* VK Видео Live
* VK Музыка
* VK Знакомства
* VK Fest
* VK Music Records
* VK Beats Records
* Дзен
* Новости в Дзене

Образование|

* Skillbox Holding
* Skillbox
* Skillfactory
* GeekBrains
* VK Образование
* Сферум
* Учи.ру

Товары и услуги|

* Юла

Устройства|

* VK Капсула

Экосистемные сервисы|

* Маруся
* VK Pay
* VK ID
* VK Combo
* VK Mini Apps
* YCLIENTS

Ключевые люди|

* Михаил Винчель
* Дмитрий Гришин
* Борис Добродеев
* Владимир Кириенко
* Юрий Мельничек
* Юрий Мильнер
* Алишер Усманов
* Григорий Фингер

Закрытые проекты|

* VK Работа
* Амиго
* Блоги
* Карты
* Поиск
* Словари
* Софт
* Товары
* Файлы
* Фото
* Футубра
* GoGo.ru
* Snapster
* Pandao
* ICQ
* Агент Mail.ru