Tarantool — это крайне интересная база данных.
Представление о ней можно получить из доклада Константина Осипова Tarantool: как обрабатывать 1,5 млрд запросов в сутки?
Этой заметкой я хочу обратить внимание на уникальные возможности, которые отличают Tarantool от других подобных решений и делают его полезным инструментом.
Кроме того, я расскажу, чем можно помочь этому открытому проекту и почему это круто :)
Что такое Tarantool
Ключевые слова для прямой загрузки в мозг
nosql, key-value, in-memory, durable, write-ahead log, snapshot, master-slave replication
- Это очень быстрая in-memory база данных
- Модель данных «ключ — структурированное значение»
Каждое значение — это кортеж из произвольного количества полей.
Например:
(101, "johnsmith", "25Ezk62$i2Z12QYY", "USA")
(102, "ivankuznetsov", "35Fal73$y3x23KZZ", "RUS")
- Первый элемент кортежа — это первичный ключ, по которому осуществляется доступ ко всему кортежу
- Чтение всегда из памяти
- Данные в памяти защищены логом транзакций и снапшотами на диске
Tarantool — это зрелый проект
Tarantool разработан в Mail.ru и активно там используется.
В некотором смысле, Tarantool можно сравнить c Nginx, который разрабатывался в Rambler, и только через некоторое время обрел заслуженную славу и признание сообщества, будучи открытым проектом.
Ключевые возможности Tarantool
Прежде всего, хочу подчеркнуть, что Tarantool — это не клон Redis или, уж тем более, Memcached.
С Redis он близок по духу, но не очень-то похож по возможностям. Для одних задач Redis подойдет лучше, для других — лучше Tarantool.
- Пространства ключей
Пространства — это коллекции объектов. Можно думать о пространствах, как об отдельных таблицах. Это удобно, поскольку в одной коллекции, как правило, находятся сущности одного типа. В том же Redis для разделения сущностей предлагается просто добавлять к ключам префикс ("user:1001", "session:9994513"). У каждого пространства в Tarantool может быть свой набор индексов.
- Целочисленные ключи
Наряду со строковыми ключами в Tarantool есть поддержка целочисленных ключей (32 и 64 бита)
Во-первых, очевидно, что доступ по 32 или 64-битным ключам быстрее, чем по ключам произвольной длины. Во-вторых, это может быть просто удобнее, например, при использовании числовых ID в традиционной (SQL) базе данных.
- Вторичные индексы
Большинство key-value хранилищ ограничиваются доступом по первичному ключу. В Tarantool можно делать выборки по отдельным атрибутам кортежа (для этого поле должно индексироваться).
- Вторичные индексы могут быть не уникальны
Это означает, что запрос по не уникальному полю может возвращать множество значений. Например: «вернуть всех пользователей с кодом страны RUS»
- Композитные индексы
В один вторичный индекс можно включить несколько полей кортежа. Это полный аналог композитных индексов в «традиционных» (SQL) базах данных. Композитные индексы позволяют делать запросы по неполному совпадению (wildcard). Когда известна только первая часть индекса, Tarantool вернет все подходящие значения.
- Выборки по диапазонам значений
В отличие от большинства key-value хранилищ, в Tarantool есть возможность извлекать диапазоны значений (только для целочисленных ключей и только при использовании индекса типа TREE)
Кстати, это делается хранимой функцией (см. ниже)
- Хранимые функции на Lua
В Tarantool можно писать хранимые функции на Lua. Lua очень простой язык, который поддерживает JIT-компиляцию. Короче говоря, они очень быстрые. Хранимые функции позволяют реализовать схемы данных с достаточно сложной структурой. Например, fifo или какие-нибудь кольцевые буферы.
- Фоновые процессы внутри базы данных
На Lua можно сделать не только обработку отдельных запросов, но и реализовать фоновые обработчики (в режиме кооперативной многозадачности).
- Простой SQL-клиент
Стоит использовать, прежде всего, для экспериментов и интроспекции при разработке. Поддерживаются простые SQL-запросы, типаSELECT * FROM t0 WHERE k0 = 42
.
Как начать использовать Tarantool прямо сейчас
- У Tarantool есть простой SQL-клиент
С его помощью можно делать любые запросы и экспериментировать, не написав ни строчки кода - Tarantool поддерживает протокол Memcached
Используйте Tarantool, как лучший Memcached (со снапшотами и логом транзакций на диске). - Для Tarantool есть клиентские библиотеки на python, ruby, perl, php, java и C
Подумайте, как использовать возможности Tarantool в вашем проекте
Чем я могу помочь?
Tarantool — это зрелая система, которая давно находится в реальной эксплуатации.
Но как открытый проект он существует относительно недавно. Поэтому информации в интернете мало, сообщество небольшое, документация не идеальна, книжек O'Relly не издает...
И это хорошо! Ведь в проекте, который уже широко известен, трудно сделать что-то существенное — все сделано до нас. А здесь — нет!
Поэтому у вас есть реальный шанс внести значительный вклад в развитие этого перспективного проекта.
Ранние последователи всегда в выигрыше. Этот проект вполне может стать заметным, например, как Nginx.
Присоединяйтесь сейчас и лучи славы коснутся вас :)
- Пробуйте! Задавайте вопросы в рассылке. Пишите посты в блогах и
- Используйте в своих проектах (можно начать просто с замены memcached)
- Сделайте пакеты для вашего дистрибутива
- Создавайте и дорабатывайте клиентские библиотеки.
- Присылайте патчи к серверу. Или даже форкайте и делайте что-то свое!