Обзор Tarantool

И его использование вместе с python

Основные Особенности

Как Базы Данных

  • in-memory: все данные хранятся в оперативной памяти.
  • Spaces: можно иметь множество именованных коллекций.
  • Есть поддержка множества типов данных: integer, float, string, boolean, tuples.

Основные Особенности

Как Базы Данных

  • Выборки: также вы можете получать и сортировать данные по запросу.
  • Возможность делать бэкап состояния и базы на ПЗУ, для последующего восстановления.
  • Несколько видов индексов: есть как первичные так и вторичные индексы, все индексы поддерживают типы: TREE, RTREE, HASH, BITSET.

Основные Особенности

Как Базы Данных

  • Поддержка слепков, и полного лога всех записей для сохранения состояния вашей базы.
  • Поддержка шардинга - один из способов масштабируемости базы.
  • Vinyl - возможность обрабатывать данные больших чем размер ОЗУ - с использованием файловой системы

Lua

с JIT

  • В первую очередь tarantool это application server - вы можете писать любые приложения на Lua
  • Fibers - позволяет работать с неблокируемым I/O
  • Поддержка FFI - вы можете писать свои нативные модули и адаптации на С/С++
  • Также в tarantool есть встроенная JIT компиляция

Lua

Поддержка множества готовых модулей

  • tarantool-queue: для работы с очередями сообщений.
  • Phometheus: для сбора и аналитики статистики работы приложения.
  • pg, mysql - модули для работы с популярными SQL базами.
  • expiration - модуль для автоматического очищения старых записей
  • shard - модуль поддержки шардинга для tarantool

Lua

Простой пример

--- Базовая конфигурация runtime server ---
box.cfg {
  work_dir: '/home/user/my_project',
  listen: 8080,
  ....
}

space = box.schema.space.create("users")
space.create_index("user_id", {
  parts = {1, "string"}
  unique = true,
  type = "TREE"
})

space.insert { name: "Vasya" }
--- OR ---
box.spaces.users.insert { name: "Vasya" }

space.select(#index, { ...query })

...Etc

Lua

Основные достоинства использования

  • Это Lua - все просто, лаконично и понятно.
  • Можно писать самодостаточные - простые и высокопроизводительные микросервисы.
  • Вы можете взаимодействовать с другими приложениями и базами данных.

А если без Lua?

Использование tarantool как базы в других языках.

  • Для удаленного общения с Tarantool используется MsgPack.
  • Для использования tarantool есть драйвера для разных языков: Python, Java, R, Erlang, Go, NodeJS.
  • С переменным успехом, они вроде работают...

Python

Как там с поддержкой?

  • Оффициальный драйвер Tarantool для python от Mail.ru.
  • Адаптер драйвера Tarantool для asyncio.
  • Есть возможность вызывать lua функции на стороне application сервера tarantool.
  • API драйвера максимально приближен к оригинальному API на Lua - все коротко и просто.
import tarantool
schema = {
  0: {
    'name': 'users', # Имя коллекции
    'default_type': tarantool.STR, # Если данные отличаются от описанных
    'fields': {
      # (Название, Тип)
      0: ('numfield', tarantool.NUM),
      1: ('num64field', tarantool.NUM64),
      2: ('strfield', tarantool.STR),
    },
    'indexes': {
      0: ('pk', [0]),
    }
  }
}

connection = tarantool.connect(
    host = 'localhost',
    schema = schema,
    port=33013
)

users = connection.space('users')
users.insert((0, 12, u'Username username'))
users.select(0)

# [(0, 12, u'this is unicode string')]

Производительность

Benchmarks by mail.ru: до 100 потоков с шагом в 10

Производительность

Benchmarks by mail.ru: до 100 потоков с шагом в 10

Производительность

Benchmarks by mail.ru: до 1000 с шагом в 100 потоков

Производительность

Benchmarks by mail.ru: до 1000 с шагом в 100 потоков

Недостатки Tarantool

  • Очень маленькое сообщество сектантов - мало статей, примеров использования, Q/A: на stackoverflow всего 50 тикетов.
  • Плохая поддержка и развитие драйверов - большая часть драйверов написана один раз, годы назад, и с тех пор практически не изменились (Даже офф. драйверы @mail.ru).
  • Также большая часть библиотек хоть и работают, но развиваются очень медленно, и имеют "не самую лучшую" документацию.
  • Мало компаний пользуется tarantool - и почти все они российские.

Заключение

  • Tarantool - не панацея, у него есть свои достоинства и недостатки, система еще довольно молодая: юзайте на свой страх и риск.
  • Обоснованное использование скорее всего повлечет за собой написание своих велосипедов: готовых батареек очень мало.
  • Tarantool - не убийца Redis, у них разные области решения задач, не думайте что tarantool будет практичнее если юзать его как простой key/value storage.

Ссылки для интересующихся

Tarantool.org - оффициальный сайт

Redis vs Tarantool - статья про сравнение с самой популярной in-memory базой.

Try - тут вы можете попробовать тарантул онлайн без установки

Вопросы?

Обзор Tarantool

By Anton Shramko

Обзор Tarantool

  • 4,218