Tarantool: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
История: Осипов того
Нет описания правки
Строка 11: Строка 11:
| released = 2008
| released = 2008
| latest release version = 2.1.2
| latest release version = 2.1.2
| latest release date = 5 Апреля 2019
| 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» || "A B C"
|скалярный || строковый || «string» || «A B C»
|-
|-
|скалярный || целочисленный || «number» || 12345
|скалярный || целочисленный || «number» || 12345
Строка 52: Строка 50:
|скалярный || с плавающей точкой двойной точности || «number» || 1.2345
|скалярный || с плавающей точкой двойной точности || «number» || 1.2345
|-
|-
|составной || ассоциативный массив || «table» со строковыми ключами || {"a": 5, "b": 6}
|составной || ассоциативный массив || «table» со строковыми ключами || {«a»: 5, «b»: 6}
|-
|-
|составной || массив || «table» с числовыми ключами || [1, 2, 3, 4, 5]
|составной || массив || «table» с числовыми ключами || [1, 2, 3, 4, 5]
|-
|-
|составной || массив байт || «cdata» ||
|составной || массив байт || «cdata» ||
|}
|}




Кортежи организованы в пространства (space или таблицы). Для каждого пространства указывается технология хранения (memtx или vinyl).
[[Кортеж]]и организованы в пространства (space или таблицы). Для каждого пространства указывается технология хранения (memtx или vinyl).


Пространство должно быть проиндексировано первичным ключом. Также поддерживаются неограниченное количество вторичных ключей.
Пространство должно быть проиндексировано первичным ключом. Также поддерживаются неограниченное количество вторичных ключей.


Ключ может состоять из одного и более полей.
Ключ может состоять из одного и более полей.
Строка 68: Строка 66:
Поддерживаемые индексы:
Поддерживаемые индексы:


* TREE (дерево) — для быстрого поиска значений и возможности итерации.
* TREE (дерево) — для быстрого поиска значений и возможности итерации.
* HASH (хеш-таблица, только для memtx) — для еще более быстрого поиска значений.
* HASH (хеш-таблица, только для memtx) — для еще более быстрого поиска значений.
* BITSET (битовая маска, только для memtx) — возможность поиска по битовым маскам.
* BITSET (битовая маска, только для memtx) — возможность поиска по битовым маскам.
* RTREE (многомерное R*-дерево, только для memtx) — для быстрого поиска ближайших соседей (KNN) и точек в заданных многомерных параллелепипедах с заданными функциями расстояния между двумя точками.
* RTREE (многомерное R*-дерево, только для memtx) — для быстрого поиска ближайших соседей (KNN) и точек в заданных многомерных параллелепипедах с заданными функциями расстояния между двумя точками.


В качестве формата хранения и протокола передачи данных используется [[MessagePack]].
В качестве формата хранения и протокола передачи данных используется [[MessagePack]].
Строка 80: Строка 78:


Список разграниченных действий:
Список разграниченных действий:
* read
* read
* write
* write
* execute
* execute
Строка 90: Строка 88:


Глобальный триггер
Глобальный триггер
* box_once - первый запуск бд (бутстрап)
* box_once — первый запуск бд (бутстрап)


Триггеры для пространств (таблиц):
Триггеры для пространств (таблиц):
* on_replace - триггер только для чтения на события вставка, обновления, удаления данных
* on_replace — триггер только для чтения на события вставка, обновления, удаления данных
* before_replace - триггер с возможностью модификации событий вставки, обновления, удаления данных
* before_replace — триггер с возможностью модификации событий вставки, обновления, удаления данных


=== Сервер приложений ===
=== Сервер приложений ===


Для написания бизнес-логики используется язык [[Lua]] и его компилятор [[LuaJIT]].
Для написания бизнес-логики используется язык [[Lua]] и его компилятор [[LuaJIT]].


Сервер приложений содержит высокоуровневое API для доступа к базе данных, файловой системе, сети.
Сервер приложений содержит высокоуровневый [[API]] для доступа к базе данных, файловой системе, сети.


Пользователь может динамически добавлять, удалять, модифицировать функции. Для одновременного выполнения кода используется кооперативная мультизадачность.
Пользователь может динамически добавлять, удалять, модифицировать функции. Для одновременного выполнения кода используется [[кооперативная мультизадачность]].


Для расширения сервера приложений доступны [[Lua]] библиотеки как из репозитория tarantool/rocks так и собранные из исходников.
Для расширения сервера приложений доступны [[Lua]] библиотеки как из репозитория tarantool/rocks так и собранные из исходников.


Список стандартных модулей tarantool-а:
Список стандартных модулей tarantool-а:
* box - доступ к СУБД
* box — доступ к СУБД
* clock - системное время
* clock — системное время
* crypto - криптографические функции
* crypto — криптографические функции
* csv - работа с [[CSV]] форматом данных
* csv — работа с [[CSV]] форматом данных
* digest - хеширование строк
* digest — хеширование строк
* errno - доступ к переменной системных ошибок *nix
* errno — доступ к переменной системных ошибок *nix
* fiber - многопоточность и инструменты синхронизации
* fiber — многопоточность и инструменты синхронизации
* fio - работа с файловой системой, ввод/вывод
* fio — работа с файловой системой, ввод/вывод
* fun - функциональное программирование
* fun — функциональное программирование
* iconv - работа с текстом в разных кодировках
* iconv — работа с текстом в разных кодировках
* json - работа с [[JSON]] форматом данных
* json — работа с [[JSON]] форматом данных
* log - логирование событий
* log — логирование событий
* msgpack - работа с MsgPack форматом данных
* msgpack — работа с MsgPack форматом данных
* net.box - модуль связи tarantool-ов между собой
* net.box — модуль связи tarantool-ов между собой
* os - небольшая часть основных команд операционной системы
* os — небольшая часть основных команд операционной системы
* pickle - сериализация/десериализация [[Lua]] структур
* pickle — сериализация/десериализация [[Lua]] структур
* socket - работа с сетью
* socket — работа с сетью
* string - утилиты для работы со строками
* string — утилиты для работы со строками
* tap - фреймворк для [[Модульное тестирование|модульного тестирования]]
* tap — фреймворк для [[Модульное тестирование|модульного тестирования]]
* uuid - работа с [[UUID]]
* uuid — работа с [[UUID]]
* uri - работа с форматом uri
* uri — работа с форматом uri
* yaml - работа с [[YAML]] форматом данных
* yaml — работа с [[YAML]] форматом данных


Модули доступные из репозитория tarantool/rocks:
Модули доступные из репозитория tarantool/rocks:
* vshard - шардирование и репликация данных для горизонтального масштабирования сервиса
* vshard — шардирование и репликация данных для горизонтального масштабирования сервиса
* avro-schema - валидация и преобразование сложных структур данных
* avro-schema — валидация и преобразование сложных структур данных
* date - манипуляция с датой и временем
* date — манипуляция с датой и временем
* ldecnumber - арифметика с десятичной плавающей точкой (например, денежная)
* ldecnumber — арифметика с десятичной плавающей точкой (например, денежная)


== История ==
== История ==


Mail.ru, крупная интернет-компания в России, начала проект в 2008 году c вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего технического директора из [[MySQL]].
[[Mail.ru]], крупная интернет-компания в России, начала проект в 2008 году с вложения средств и поиска программистов. В качестве руководителя проекта наняли бывшего [[технический директор|технического директора]] из [[MySQL]].
Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref>[http://vimeo.com/66713654 NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov on Vimeo<!-- Заголовок добавлен ботом -->]</ref>


Tarantool стал частью самого портала Mail.ru и сейчас используется для динамического контента: сеансов пользователей, мгновенных сообщений и прочего, а также используется в качестве слоя кэширования для традиционных реляционных баз данных, таких как [[MySQL]] или [[PostgreSQL]].<ref>[http://vimeo.com/66713654 NoSQL matters Cologne 2013 Day2 Track3 05 Konstantin Osipov]</ref>
В 2014 году Tarantool также был принят социальными сетями [[Badoo]] и [[Одноклассники (социальная сеть)|Одноклассники]]. <ref>[https://www.youtube.com/watch?v=O-MGE3wHkqs Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup - YouTube<!-- Заголовок добавлен ботом -->]</ref>


В 2014 году Tarantool также был принят социальными сетями [[Badoo]] и [[Одноклассники (социальная сеть)|Одноклассники]].<ref>[https://www.youtube.com/watch?v=O-MGE3wHkqs Tarantool в Badoo: хранение истории посещений. Доклад Антона Поварова на Tarantool Meetup]</ref>
В июне 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>


В июне 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
Логотип программы 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.

Обзор

СУБД

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

  • SQL
  • документо-ориентированные запросы на языке Lua

Технологии хранения данных:

  • 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]

Примечания

Ссылки