Tarantool: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
\chAlx (обсуждение | вклад) →История: Осипов того |
Softy (обсуждение | вклад) Нет описания правки |
||
Строка 11: | Строка 11: | ||
| released = 2008 |
| released = 2008 |
||
| latest release version = 2.1.2 |
| latest release version = 2.1.2 |
||
| latest release date = 5 |
| latest release date = 5 апреля 2019 года |
||
| license = [[Лицензия BSD|Упрощенная BSD]] |
| license = [[Лицензия BSD|Упрощенная BSD]] |
||
| website = {{URL|http://tarantool.io}} |
| website = {{URL|http://tarantool.io}} |
||
}} |
}} |
||
'''Tarantool''' представляет собой решение с открытым исходным кодом, совмещающее [[СУБД|систему управления базой данных]] и неблокирующий сервер приложений на [[Lua]]. |
'''Tarantool''' представляет собой решение с открытым исходным кодом, совмещающее [[СУБД|систему управления базой данных]] и неблокирующий сервер приложений на [[Lua]]. |
||
Строка 23: | Строка 22: | ||
=== СУБД === |
=== СУБД === |
||
Язык запросов: |
Язык запросов: |
||
Строка 31: | Строка 29: | ||
Технологии хранения данных: |
Технологии хранения данных: |
||
* memtx |
* memtx — хранение всех данных в оперативной памяти, с дисковыми снимками данных и логом транзакций |
||
* vinyl |
* vinyl — хранение данных на жестком диске, с оптимизацией для быстрой вставки данных |
||
Единицей хранения является кортеж (tuple или строка). Кортеж состоит из одного и более полей. |
Единицей хранения является кортеж (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» || |
||
|} |
|} |
||
[[Кортеж]]и организованы в пространства (space или таблицы). Для каждого пространства указывается технология хранения (memtx или vinyl). |
|||
Пространство должно быть проиндексировано первичным ключом. Также поддерживаются неограниченное количество вторичных ключей. |
Пространство должно быть проиндексировано первичным ключом. Также поддерживаются неограниченное количество вторичных ключей. |
||
Ключ может состоять из одного и более полей. |
Ключ может состоять из одного и более полей. |
||
Строка 68: | Строка 66: | ||
Поддерживаемые индексы: |
Поддерживаемые индексы: |
||
* TREE (дерево) |
* TREE (дерево) — для быстрого поиска значений и возможности итерации. |
||
* HASH (хеш-таблица, только для memtx) |
* HASH (хеш-таблица, только для memtx) — для еще более быстрого поиска значений. |
||
* BITSET (битовая маска, только для memtx) |
* BITSET (битовая маска, только для memtx) — возможность поиска по битовым маскам. |
||
* RTREE (многомерное R*-дерево, только для memtx) |
* RTREE (многомерное R*-дерево, только для memtx) — для быстрого поиска ближайших соседей (KNN) и точек в заданных многомерных параллелепипедах с заданными функциями расстояния между двумя точками. |
||
В качестве формата хранения и протокола передачи данных используется [[MessagePack]]. |
В качестве формата хранения и протокола передачи данных используется [[MessagePack]]. |
||
Строка 80: | Строка 78: | ||
Список разграниченных действий: |
Список разграниченных действий: |
||
* read |
* read |
||
* write |
* write |
||
* execute |
* execute |
||
Строка 90: | Строка 88: | ||
Глобальный триггер |
Глобальный триггер |
||
* |
* 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 — работа с текстом в разных кодировках |
||
* json |
* json — работа с [[JSON]] форматом данных |
||
* log |
* log — логирование событий |
||
* msgpack |
* msgpack — работа с MsgPack форматом данных |
||
* net.box |
* net.box — модуль связи tarantool-ов между собой |
||
* os |
* os — небольшая часть основных команд операционной системы |
||
* pickle |
* pickle — сериализация/десериализация [[Lua]] структур |
||
* socket |
* socket — работа с сетью |
||
* string |
* string — утилиты для работы со строками |
||
* tap |
* tap — фреймворк для [[Модульное тестирование|модульного тестирования]] |
||
* uuid |
* uuid — работа с [[UUID]] |
||
* uri |
* uri — работа с форматом uri |
||
* yaml |
* yaml — работа с [[YAML]] форматом данных |
||
Модули доступные из репозитория tarantool/rocks: |
Модули доступные из репозитория tarantool/rocks: |
||
* vshard |
* vshard — шардирование и репликация данных для горизонтального масштабирования сервиса |
||
* avro-schema |
* avro-schema — валидация и преобразование сложных структур данных |
||
* date |
* date — манипуляция с датой и временем |
||
* ldecnumber |
* ldecnumber — арифметика с десятичной плавающей точкой (например, денежная) |
||
== История == |
== История == |
||
Mail.ru, крупная интернет-компания в России, начала проект в 2008 году |
[[Mail.ru]], крупная интернет-компания в России, начала проект в 2008 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего [[технический директор|технического директора]] из [[MySQL]]. |
||
⚫ | Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref>[http://vimeo.com/66713654 NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov |
||
⚫ | Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref>[http://vimeo.com/66713654 NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov]</ref> |
||
⚫ | В 2014 году Tarantool также был принят социальными сетями [[Badoo]] и [[Одноклассники (социальная сеть)|Одноклассники]]. |
||
⚫ | |||
⚫ | В июне 2014 года исследователи из Политехнического института Коимбры и Университета Коимбры (Португалия) провели первый официальный независимый тест производительности систем [[NoSQL]], которые включали в том числе и Tarantool. Испытания использовали стандартный YCSB |
||
⚫ | В июне 2014 года исследователи из [[Политехнический институт Коимбры|Политехнического института Коимбры]] и [[Университет Коимбры|Университета Коимбры]] (Португалия) провели первый официальный независимый тест производительности систем [[NoSQL]], которые включали в том числе и Tarantool. Испытания использовали стандартный [[YCSB-тест]], а конкуренцию Tarantool составляли другие системы NoSQL: [[Cassandra]], [[HBase]], [[Oracle NoSQL]], [[Redis]], [[Voldemort]], [[Scalaris]], [[Elasticsearch]], [[MongoDB]] и [[OrientDB]].<ref>http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf</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> В сентябре 2019 года он покинул команду проекта в Mail.ru, создав собственную ветку разработки.<ref>[https://groups.google.com/forum/m/#!topic/tarantool/XjnDemkP3RY Tarantool fork]</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}}</ref> В сентябре 2019 года он покинул команду проекта в Mail.ru, создав собственную ветку разработки.<ref>[https://groups.google.com/forum/m/#!topic/tarantool/XjnDemkP3RY Tarantool fork]</ref> |
||
== Примечания == |
== Примечания == |
||
Строка 151: | Строка 150: | ||
== Ссылки == |
== Ссылки == |
||
* [http://tarantool.io/ Официальный сайт] |
* [http://tarantool.io/ Официальный сайт] |
||
* [https://tarantool.io/en/doc/latest/book/connectors/index.html Список существующих клиентов для Tarantool] |
* [https://tarantool.io/en/doc/latest/book/connectors/index.html Список существующих клиентов для Tarantool] |
Версия от 17:42, 28 сентября 2019
Tarantool | |
---|---|
Тип | NoSQL |
Автор | Mail.ru Group |
Разработчик | Mail.ru Group |
Написана на | Си |
Операционные системы | Linux, FreeBSD, OS X |
Первый выпуск | 2008 |
Последняя версия | 2.1.2 (5 апреля 2019 года) |
Репозиторий | 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 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего технического директора из 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
- ↑ Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup
- ↑ http://airccse.org/journal/ijdms/papers/6314ijdms01.pdf
- ↑ HighLoad++ Awards: награда, которую деплоили, деплоили и наконец задеплоили . habr.com. Дата обращения: 10 декабря 2018.
- ↑ Tarantool fork
Ссылки
- Официальный сайт
- Список существующих клиентов для Tarantool
- Tarantool на Github
- За счет чего Tarantool такой оптимальный