Tarantool: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
AnnaShev (обсуждение | вклад) |
Quedafoe (обсуждение | вклад) Добавлена информация о коннекторах которые поддерживаются для tarantool, а так же ссылка на определение шардирования(сегментирования) |
||
(не показано 36 промежуточных версий 24 участников) | |||
Строка 1: | Строка 1: | ||
{{Карточка программы |
{{Карточка программы |
||
| name = Tarantool |
| name = Tarantool |
||
| logo = |
| logo = Logo-Tarantool-2023.png |
||
| screenshot = |
| screenshot = |
||
| caption = |
| caption = |
||
| genre = [[NoSQL]] |
| genre = [[NoSQL]] |
||
| author = [[ |
| author = [[VK (компания)|VK Tech]] |
||
| developer = [[ |
| developer = [[VK (компания)|VK Tech]] |
||
| programming language = [[Си (язык программирования)|Си]] |
| programming language = [[Си (язык программирования)|Си]] |
||
| operating system = [[Linux]], [[FreeBSD]], [[ |
| operating system = [[Linux]], [[FreeBSD]], [[macOS]] |
||
| released = 2008 |
| released = 2008 |
||
| latest release version = |
| latest release version = 3.1.0 |
||
| latest release date = |
| latest release date = 2024-04-17 |
||
| license = [[Лицензия BSD|Упрощенная BSD]] |
| license = [[Лицензия BSD|Упрощенная BSD]] |
||
| website = {{URL| |
| website = {{URL|https://www.tarantool.io/}} |
||
}} |
}} |
||
'''Tarantool''' — платформа [[Резидентная база данных|in-memory]] вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. Включает в себя [[База данных|базу данных]] и [[сервер приложений]] на [[Lua]]. |
|||
⚫ | |||
'''Tarantool''' представляет собой решение с открытым исходным кодом, совмещающее [[СУБД|систему управления базой данных]] и неблокирующий сервер приложений на [[Lua]]. |
|||
⚫ | |||
== Обзор == |
== Обзор == |
||
=== |
=== База данных === |
||
Язык запросов: |
Язык запросов: |
||
Строка 31: | Строка 29: | ||
Технологии хранения данных: |
Технологии хранения данных: |
||
* memtx |
* memtx — хранение данных в оперативной памяти, с дисковыми снимками данных и логом транзакций. |
||
* vinyl |
* vinyl — хранение данных на жестком диске, с оптимизацией для быстрой вставки данных. |
||
Для хранения данных используются таплы (кортежи). Это массив с данными, которые не типизированы. Кортежи или таплы объединяются в спейсы. Спейс – это аналог из мира SQL, таблица. Спейс это коллекция таплов, а тапл это коллекция полей. |
|||
Единицей хранения является кортеж (tuple или строка). Кортеж состоит из одного и более полей. |
|||
Поля могут быть одного из следующих типов: |
Поля могут быть одного из следующих типов: |
||
Строка 40: | Строка 38: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|- |
|- |
||
! Скалярный/составной !! тип MsgPack !! тип Lua !! Пример |
! Скалярный/составной !! тип MsgPack !! тип Lua !! Пример |
||
|- |
|- |
||
|скалярный || nil || «nil» || msgpack.NULL |
|скалярный || nil || «nil» || msgpack.NULL |
||
Строка 46: | Строка 44: | ||
|скалярный || булевый || «boolean» || true |
|скалярный || булевый || «boolean» || true |
||
|- |
|- |
||
|скалярный || строковый || «string» || |
|скалярный || строковый || «string» || «A B C» |
||
|- |
|- |
||
|скалярный || целочисленный || «number» || 12345 |
|скалярный || целочисленный || «number» || 12345 |
||
Строка 52: | Строка 50: | ||
|скалярный || с плавающей точкой двойной точности || «number» || 1.2345 |
|скалярный || с плавающей точкой двойной точности || «number» || 1.2345 |
||
|- |
|- |
||
|составной || ассоциативный массив || «table» со строковыми ключами || { |
|составной || ассоциативный массив || «table» со строковыми ключами || {«a»: 5, «b»: 6} |
||
|- |
|- |
||
|составной || массив || «table» с числовыми ключами || [1, 2, 3, 4, 5] |
|составной || массив || «table» с числовыми ключами || [1, 2, 3, 4, 5] |
||
|- |
|- |
||
|составной || массив байт || «cdata» || |
|составной || массив байт || «cdata» || |
||
|} |
|} |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
Ключ может состоять из одного и более полей. |
Ключ может состоять из одного и более полей. |
||
Строка 68: | Строка 65: | ||
Поддерживаемые индексы: |
Поддерживаемые индексы: |
||
* TREE (дерево) |
* TREE (дерево) — для быстрого поиска значений и возможности итерации. |
||
* HASH (хеш-таблица, только для memtx) |
* HASH (хеш-таблица, только для memtx) — для еще более быстрого поиска значений. |
||
* BITSET (битовая маска, только для memtx) |
* BITSET (битовая маска, только для memtx) — возможность поиска по битовым маскам. |
||
* RTREE (многомерное R*-дерево, только для memtx) |
* RTREE (многомерное R*-дерево, только для memtx) — для быстрого поиска ближайших соседей (KNN) и точек в заданных многомерных параллелепипедах с заданными функциями расстояния между двумя точками. |
||
В качестве формата хранения и протокола передачи данных используется [[MessagePack]]. |
В качестве формата хранения и протокола передачи данных используется [[MessagePack]]. |
||
База данных поддерживает асинхронную репликацию. Репликация может быть выполнена в виде мастер-мастер. |
База данных поддерживает асинхронную и синхронную репликацию. Репликация может быть выполнена в виде мастер-мастер. |
||
Для разделения доступа используется традиционная модель [[ACL]]. У каждого объекта есть владелец имеющий неограниченный доступ. Владелец может предоставить доступ к объекту другим пользователям или ролям. Роль это в свою очередь группа пользователей. |
Для разделения доступа используется традиционная модель [[ACL]]. У каждого объекта есть владелец имеющий неограниченный доступ. Владелец может предоставить доступ к объекту другим пользователям или ролям. Роль это в свою очередь группа пользователей. |
||
Список разграниченных действий: |
Список разграниченных действий: |
||
* read |
* read |
||
* write |
* write |
||
* execute |
* execute |
||
Строка 87: | Строка 84: | ||
* drop |
* drop |
||
База данных поддерживает хранимые процедуры триггеры написанные на языке [[Lua]]. |
База данных поддерживает хранимые процедуры и триггеры написанные на языке [[Lua]]. |
||
Глобальный триггер |
Глобальный триггер |
||
* |
* box_once — первый запуск базы данных (бутстрап). |
||
Триггеры для пространств (таблиц): |
Триггеры для пространств (таблиц): |
||
* on_replace |
* on_replace — триггер только для чтения на события вставка, обновления, удаления данных |
||
* before_replace |
* before_replace — триггер с возможностью модификации событий вставки, обновления, удаления данных |
||
=== Сервер приложений === |
=== Сервер приложений === |
||
Для написания бизнес-логики используется язык [[Lua]] и его компилятор [[LuaJIT]]. |
Для написания бизнес-логики используется язык [[Lua]] и его компилятор [[LuaJIT]]. |
||
Сервер приложений содержит |
Сервер приложений содержит высокоуровневый [[API]] для доступа к базе данных, файловой системе, сети. |
||
Пользователь может динамически добавлять, удалять, модифицировать функции. Для одновременного выполнения кода используется кооперативная |
Пользователь может динамически добавлять, удалять, модифицировать функции. Для одновременного выполнения кода используется [[кооперативная многозадачность]]. |
||
Для расширения сервера приложений доступны [[Lua]] библиотеки как из репозитория tarantool/rocks так и собранные из исходников. |
Для расширения сервера приложений доступны [[Lua]] библиотеки как из репозитория tarantool/rocks так и собранные из исходников. |
||
Список стандартных модулей tarantool-а: |
Список стандартных модулей tarantool-а: |
||
* box |
* box — доступ к СУБД |
||
* clock |
* clock — системное время |
||
* crypto |
* crypto — криптографические функции |
||
* csv |
* csv — работа с [[CSV]] форматом данных |
||
⚫ | |||
* digest |
* digest — хеширование строк |
||
* errno |
* errno — доступ к переменной системных ошибок *nix |
||
* fiber |
* fiber — многопоточность и инструменты синхронизации |
||
* fio |
* fio — работа с файловой системой, ввод/вывод |
||
* fun |
* fun — функциональное программирование |
||
* iconv - работа с текстом в разных кодировках |
|||
* |
* iconv — работа с текстом в разных кодировках |
||
⚫ | |||
* log |
* log — логирование событий |
||
⚫ | |||
* msgpack — работа с MsgPack форматом данных |
|||
* net.box |
* net.box — модуль связи tarantool-ов между собой |
||
* os |
* os — небольшая часть основных команд операционной системы |
||
* pickle |
* pickle — сериализация/десериализация [[Lua]] структур |
||
* socket |
* socket — работа с сетью |
||
* string |
* string — утилиты для работы со строками |
||
* tap |
* tap — фреймворк для [[Модульное тестирование|модульного тестирования]] |
||
* uuid - работа с [[UUID]] |
|||
* |
* uuid — работа с [[UUID]] |
||
* |
* uri — работа с форматом uri |
||
* yaml — работа с [[YAML]] форматом данных |
|||
Модули доступные из репозитория tarantool/rocks: |
Модули доступные из репозитория tarantool/rocks: |
||
* vshard |
* vshard — [[Сегментирование (базы данных)|шардирование]] и репликация данных для горизонтального масштабирования сервиса |
||
* avro-schema |
* avro-schema — валидация и преобразование сложных структур данных |
||
* date |
* date — манипуляция с датой и временем |
||
⚫ | |||
== Коннекторы == |
|||
Tarantool имеет [[API]] и официальные коннекторы для языков [[Си (язык программирования)|C]], [[Java]], [[Go]], [[Python]], а так же коннекторы для других языков, которые поддерживаются сообществом. |
|||
== История == |
== История == |
||
Mail.ru, крупная интернет-компания в России, начала проект в 2008 году |
[[Mail.ru]], крупная интернет-компания в России, начала проект в 2008 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего [[технический директор|технического директора]] из [[MySQL]]. |
||
⚫ | Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref> |
||
⚫ | Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref>{{Cite web |url=http://vimeo.com/66713654 |title=NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov |access-date=2018-05-18 |archive-date=2017-03-12 |archive-url=https://web.archive.org/web/20170312195343/https://vimeo.com/66713654 |deadlink=no }}</ref> |
||
⚫ | В 2014 году Tarantool также был принят социальными сетями [[Badoo]] и [[Одноклассники (социальная сеть)|Одноклассники]]. |
||
⚫ | В 2014 году Tarantool также был принят социальными сетями [[Badoo]] и [[Одноклассники (социальная сеть)|Одноклассники]].<ref>{{Cite web |url=https://www.youtube.com/watch?v=O-MGE3wHkqs |title=Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup |access-date=2018-05-18 |archive-date=2021-04-19 |archive-url=https://web.archive.org/web/20210419231857/https://www.youtube.com/watch?v=O-MGE3wHkqs |deadlink=no }}</ref> |
||
⚫ | В июне 2014 года исследователи из Политехнического института Коимбры и Университета Коимбры (Португалия) провели первый официальный независимый тест производительности систем [[NoSQL]], которые включали в том числе и Tarantool. Испытания использовали стандартный YCSB |
||
⚫ | В июне 2014 года исследователи из [[Политехнический институт Коимбры|Политехнического института Коимбры]] и [[Университет Коимбры|Университета Коимбры]] (Португалия) провели первый официальный независимый тест производительности систем [[NoSQL]], которые включали в том числе и Tarantool. Испытания использовали стандартный [[YCSB-тест]], а конкуренцию Tarantool составляли другие системы NoSQL: [[Cassandra]], [[HBase]], [[Oracle NoSQL]] ([[:en:Oracle NoSQL Database|англ.]]), [[Redis]], [[Voldemort]] ([[:en:Voldemort (distributed data store)|англ.]]), [[Scalaris]], [[Elasticsearch]], [[MongoDB]] и [[OrientDB]].<ref>{{Cite web |url=http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf |title=Архивированная копия |access-date=2018-05-18 |archive-date=2018-05-16 |archive-url=https://web.archive.org/web/20180516160919/http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf |deadlink=no }}</ref> |
||
В 2018 году разработчик и основатель проекта Tarantool Константин Осипов стал лауреатом премии HighLoad++ Awards<ref>{{Cite web|url=https://habr.com/article/429962/|title=HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили|publisher=habr.com|lang=ru|accessdate=2018-12-10}}</ref> |
|||
В 2018 году руководитель команды разработки ядра Tarantool Константин Осипов стал лауреатом премии [[HighLoad|HighLoad++ Awards]].<ref>{{Cite web|url=https://habr.com/article/429962/|title=HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили|publisher=habr.com|lang=ru|accessdate=2018-12-10|archive-date=2018-12-09|archive-url=https://web.archive.org/web/20181209221811/https://habr.com/article/429962/|deadlink=no}}</ref> В сентябре 2019 года он покинул команду проекта в Mail.ru, создав собственную ветку разработки.<ref>{{Cite web|url=https://www.cnews.ru/news/top/2019-09-09_iz_mailru_ushel_sozdatel_samogo|title=Главный архитектор СУБД Tarantool ушел из Mail.ru и заявил о «распаде команды»|publisher=CNews.ru|accessdate=2020-01-01|archive-date=2020-01-01|archive-url=https://web.archive.org/web/20200101082615/https://www.cnews.ru/news/top/2019-09-09_iz_mailru_ushel_sozdatel_samogo|deadlink=no}}</ref> |
|||
== Примечания == |
== Примечания == |
||
Строка 151: | Строка 152: | ||
== Ссылки == |
== Ссылки == |
||
⚫ | |||
⚫ | |||
* [https://tarantool.io/en/doc/latest/book/connectors/index.html Список существующих клиентов для Tarantool] |
* [https://tarantool.io/en/doc/latest/book/connectors/index.html Список существующих клиентов для Tarantool] |
||
* [https://github.com/tarantool/tarantool Tarantool на Github] |
* [https://github.com/tarantool/tarantool Tarantool на Github] |
||
* [https://habr.com/company/oleg-bunin/blog/340062/ За счет чего Tarantool такой оптимальный] |
|||
{{СУБД}} |
{{СУБД}} |
||
{{Databases}} |
{{Databases}} |
||
{{Lua programming language}} |
{{Lua programming language}} |
||
{{VK}} |
|||
[[Категория:Документоориентированные СУБД]] |
[[Категория:Документоориентированные СУБД]] |
Текущая версия от 10:07, 18 июля 2024
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.
Обзор
[править | править код]База данных
[править | править код]Язык запросов:
Технологии хранения данных:
- 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]
Примечания
[править | править код]- ↑ NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov . Дата обращения: 18 мая 2018. Архивировано 12 марта 2017 года.
- ↑ Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup . Дата обращения: 18 мая 2018. Архивировано 19 апреля 2021 года.
- ↑ Архивированная копия . Дата обращения: 18 мая 2018. Архивировано 16 мая 2018 года.
- ↑ HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили . habr.com. Дата обращения: 10 декабря 2018. Архивировано 9 декабря 2018 года.
- ↑ Главный архитектор СУБД Tarantool ушел из Mail.ru и заявил о «распаде команды» . CNews.ru. Дата обращения: 1 января 2020. Архивировано 1 января 2020 года.
Ссылки
[править | править код]