Tarantool

Бесплатно
Открытый исходный код
macOS
Linux

Сайт: www.tarantool.io

Tarantool — платформа in-memory вычислений, предназначенная для разработки высокопроизводительных приложений. Она сочетает в себе NoSQL-базу данных и встроенный сервер приложений на языке Lua, обеспечивая близость вычислений к данным и гибкость в реализации бизнес-логики. Данные хранятся в оперативной памяти (с возможностью хранения на диске в ряде режимов), а для устойчивости к сбоям используются механизмы журналирования (WAL — write-ahead log) и периодические снепшоты.

Проект Tarantool был начат в 2008 году как внутренняя разработка крупной интернет-компании и постепенно превратился в доступную платформу с открытым исходным кодом (и коммерческим расширением). Он поддерживает горизонтальное масштабирование через шардинг, репликацию между узлами, а также расширяемую модель подключения внешних клиентских библиотек на различных языках программирования. В публичных описаниях отмечается, что Tarantool рассчитан на сценарии с высокими нагрузками, малой задержкой и тесной интеграцией логики обработки данных прямо на сервере.

  • Хранение данных прежде всего в оперативной памяти с опциональным долговременным хранением на диске через альтернативные движки.
  • Устойчивость к сбоям: журнал транзакций (WAL) + моментальные снимки (snapshots) обеспечивают восстановление после перезапуска.
  • Встроенный движок приложений на Lua с JIT-компиляцией (LuaJIT), поддерживающий выполнение пользовательской логики вместе с доступом к данным.
  • Поддержка транзакций с уровнем ACID в пределах одного узла, с возможностью выбора режима исполнения (обычный или MVCC для yield-ориентированных операций).
  • Репликация: асинхронная и, при необходимости, синхронная с использованием алгоритма кворума (Raft) для повышения надежности.
  • Шардинг: распределение данных по ключам (сет vshard) с динамическим балансировкой между узлами.
  • Разнообразие типов индексов: B-tree, хеш, битовые маски (bitset), R-tree (для пространственных данных) и другие, в зависимости от движка хранения.
  • Расширяемость через внешние коннекторы и клиентские драйверы для языков C, Go, Java, Python, Ruby, PHP и других.
  • Триггеры и коллбэки (before/after replace) для реагирования на события изменений данных и репликации.
  • Гибкая схема (schema-less или частично описываемая) с поддержкой пользовательских проверок и форматов хранения (MessagePack).
Подробнее