Pull to refresh

Уникальные возможности Tarantool

Reading time 4 min
Views 99K

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.
  1. Пространства ключей
    Пространства — это коллекции объектов. Можно думать о пространствах, как об отдельных таблицах. Это удобно, поскольку в одной коллекции, как правило, находятся сущности одного типа. В том же Redis для разделения сущностей предлагается просто добавлять к ключам префикс ("user:1001", "session:9994513"). У каждого пространства в Tarantool может быть свой набор индексов.

  2. Целочисленные ключи
    Наряду со строковыми ключами в Tarantool есть поддержка целочисленных ключей (32 и 64 бита)
    Во-первых, очевидно, что доступ по 32 или 64-битным ключам быстрее, чем по ключам произвольной длины. Во-вторых, это может быть просто удобнее, например, при использовании числовых ID в традиционной (SQL) базе данных.

  3. Вторичные индексы
    Большинство key-value хранилищ ограничиваются доступом по первичному ключу. В Tarantool можно делать выборки по отдельным атрибутам кортежа (для этого поле должно индексироваться).

  4. Вторичные индексы могут быть не уникальны
    Это означает, что запрос по не уникальному полю может возвращать множество значений. Например: «вернуть всех пользователей с кодом страны RUS»

  5. Композитные индексы
    В один вторичный индекс можно включить несколько полей кортежа. Это полный аналог композитных индексов в «традиционных» (SQL) базах данных. Композитные индексы позволяют делать запросы по неполному совпадению (wildcard). Когда известна только первая часть индекса, Tarantool вернет все подходящие значения.

  6. Выборки по диапазонам значений
    В отличие от большинства key-value хранилищ, в Tarantool есть возможность извлекать диапазоны значений (только для целочисленных ключей и только при использовании индекса типа TREE)
    Кстати, это делается хранимой функцией (см. ниже)

  7. Хранимые функции на Lua
    В Tarantool можно писать хранимые функции на Lua. Lua очень простой язык, который поддерживает JIT-компиляцию. Короче говоря, они очень быстрые. Хранимые функции позволяют реализовать схемы данных с достаточно сложной структурой. Например, fifo или какие-нибудь кольцевые буферы.

  8. Фоновые процессы внутри базы данных
    На Lua можно сделать не только обработку отдельных запросов, но и реализовать фоновые обработчики (в режиме кооперативной многозадачности).

  9. Простой SQL-клиент
    Стоит использовать, прежде всего, для экспериментов и интроспекции при разработке. Поддерживаются простые SQL-запросы, типа SELECT * FROM t0 WHERE k0 = 42.


Как начать использовать Tarantool прямо сейчас

  1. У Tarantool есть простой SQL-клиент
    С его помощью можно делать любые запросы и экспериментировать, не написав ни строчки кода
  2. Tarantool поддерживает протокол Memcached
    Используйте Tarantool, как лучший Memcached (со снапшотами и логом транзакций на диске).
  3. Для Tarantool есть клиентские библиотеки на python, ruby, perl, php, java и C
    Подумайте, как использовать возможности Tarantool в вашем проекте


Чем я могу помочь?


Tarantool — это зрелая система, которая давно находится в реальной эксплуатации.

Но как открытый проект он существует относительно недавно. Поэтому информации в интернете мало, сообщество небольшое, документация не идеальна, книжек O'Relly не издает...

И это хорошо! Ведь в проекте, который уже широко известен, трудно сделать что-то существенное — все сделано до нас. А здесь — нет!

Поэтому у вас есть реальный шанс внести значительный вклад в развитие этого перспективного проекта.
Ранние последователи всегда в выигрыше. Этот проект вполне может стать заметным, например, как Nginx.

Присоединяйтесь сейчас и лучи славы коснутся вас :)
  • Пробуйте! Задавайте вопросы в рассылке. Пишите посты в блогах и
  • Используйте в своих проектах (можно начать просто с замены memcached)
  • Сделайте пакеты для вашего дистрибутива
  • Создавайте и дорабатывайте клиентские библиотеки.
  • Присылайте патчи к серверу. Или даже форкайте и делайте что-то свое!


Ссылки
Tags:
Hubs:
+64
Comments 153
Comments Comments 153

Articles