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).