Tonbo — Rust-движок для данных нового поколения
Представьте базу данных, которая сочетает:
- скорость ключ-значение
- богатые возможности запросов
- кросс-платформенность
- и всё это с гарантиями безопасности Rust
Именно такой и предстаёт Tonbo — молодой, но амбициозный проект, который уже собрал более 1000 звёзд на GitHub за первые месяцы существования.
Кому стоит присмотреться к Tonbo?
Если вы:
- Разрабатываете data-intensive приложения на Rust
- Ищете легковесную embedded альтернативу RocksDB с поддержкой сложных запросов
- Работаете с аналитическими данными и хотите единый стек от хранения до обработки
- Создаёте оффлайн-первые (offline-first) приложения
...то Tonbo может стать вашим новым любимым инструментом.
Три кита Tonbo
1. Rust-нативный API с нулевым копированием
Tonbo предлагает типобезопасный интерфейс, где схема данных описывается через derive-макросы, как в популярных ORM:
#[derive(Record, Debug)]
pub struct User {
#[record(primary_key)]
name: String,
email: Option<String>,
age: u8,
}
А благодаря интеграции с Arrow, данные можно читать без лишних аллокаций — идеально для высоконагруженных сценариев.
2. Гибкая архитектура хранения
Под капотом — LSM-дерево (как в RocksDB), но с важным отличием: данные хранятся в формате Parquet. Это даёт:
- Pushdown-оптимизации (фильтры и проекции работают на уровне хранилища)
- Совместимость с экосистемой Apache Arrow
- Поддержку разных бэкендов (локальный диск, S3, OPFS для WASM)
3. Кроссплатформенность и мультиязычность
Хотя ядро написано на Rust, Tonbo уже предлагает:
- Python-библиотеку через PyO3
- WASM-версию для работы в браузере
- Поддержку разных async-рантаймов (Tokio, async-std в планах)
Изнутри: как это работает?
Типичный workflow с Tonbo:
- Инициализация
let options = DbOption::new(
Path::from_filesystem_path("./db_path/users").unwrap(),
&UserSchema,
);
- Вставка данных
db.insert(User {
name: "Alice".into(),
email: Some("alice@gmail.com".into()),
age: 22,
}).await.unwrap();
- Транзакционные запросы
let user = txn
.get(&name, Projection::All)
.await
.unwrap();
- Диапазонные сканы
let mut scan = txn
.scan((Bound::Included(&name), Bound::Excluded(&upper)))
.projection(&["email"])
.take()
.await
.unwrap();
Где это можно применить уже сегодня?
Хотя проект ещё в активной разработке (версия 0.1.x), его уже можно использовать для:
- Локального кэширования сложных структур данных с возможностью rich-запросов
- Оффлайн-режима в web/mobile приложениях через WASM/OPFS
- Прототипирования аналитических pipelines перед переходом на полноценные Data Lake решения
- Embedded-устройств, где важны эффективность и безопасность Rust
Что в дорожной карте?
Команда Tonbo активно работает над:
- Полноценной поддержкой DataFusion для SQL-запросов
- Распределёнными режимами работы
- Оптимизацией tiered storage (RAM + SSD + облако)
Вывод: стоит ли пробовать?
Плюсы: ✅ Невероятно перспективная архитектура ✅ Богатый API для Rust-разработчиков ✅ Растущая экосистема интеграций
Ограничения: ⚠️ Пока не готов для production (версия 0.1.x) ⚠️ Документация ещё в процессе развития
Вердикт: Если вы работаете со структурированными данными на Rust — обязательно добавьте Tonbo в список для тестирования. Этот проект имеет все шансы стать новым стандартом в области embedded analytical storage.
Ссылки для погружения:
