Tarantool
Tarantool | |
---|---|
Тип | NewSQL |
Автор | Mail.Ru Group |
Разработчик | ВК |
Написана на | Си |
Операционные системы | Linux, FreeBSD, OS X |
Первый выпуск | 2008 |
Последняя версия | 1.10.2 (2018-10-13) |
Тестовая версия | 2.1.1 |
Репозиторий | github.com/tarantool/tar… |
Лицензия | Упрощенная BSD |
Сайт | tarantool.io |
Tarantool представляет собой решение с открытым исходным кодом, совмещающее систему управления базой данных и неблокирующий сервер приложений на Lua.
База данных обладает высокой скоростью работы по сравнению с традиционными СУБД, обладая теми же свойствами: персистентности, транзакционности ACID, репликации master-slave, master-master.
Обзор
СУБД
Язык запросов:
Технологии хранения данных:
- memtx - хранение всех данных в оперативной памяти, с дисковыми снимками данных и логом транзакций
- vinyl - хранение данных на жестком диске, с оптимизацией для быстрой вставки данных
Единицей хранения является кортеж (tuple или строка). Кортеж состоит из одного и более полей.
Поля могут быть одного из следующих типов:
Скалярный/составной | тип 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 форматом данных
- 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 - манипуляция с датой и временем
- ldecnumber - арифметика с десятичной плавающей точкой (например, денежная)
История
Mail.Ru, крупная интернет-компания в России, начала проект в 2008 году c вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего технического директора из 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]
Примечания
- ↑ NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov on Vimeo
- ↑ Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup - YouTube
- ↑ http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf
- ↑ HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили . habr.com. Дата обращения: 10 декабря 2018.
Ссылки
- Официальный сайт
- Список существующих клиентов для Tarantool
- Tarantool на Github
- За счет чего Tarantool такой оптимальный