How we replaced Elasticsearch and MongoDB with Rust and RocksDB
HorizonDB — новая гео-БД на Rust, заменившая Elasticsearch и MongoDB.
Обрабатывает 1 млрд вызовов/день, 1 000 QPS на ядро, 50 мс прямого и <1 мс обратного геокодирования.
Проблемы старого стека
- Elasticsearch: шардирование, дорогие батчи, отсутствие отката.
- MongoDB: нет нормального bulk-импорта, переподбор ресурсов, сложный откат.
Архитектура HorizonDB
- Однопроцессный многопоточный бинарник.
- Данные Spark → S3 → RocksDB (версионные ассеты).
- Индексы: S2 (гео), Tantivy (поиск), FST (префиксы), LightGBM/FastText (ML-ранжирование).
Почему Rust
- Скомпилирован, без GC, предсказуемая латентность.
- Абстракции высокого уровня, pattern matching.
- Один процесс вместо Node.js-кластера → экономия памяти.
Ключевые компоненты
- RocksDB — быстрая запись/чтение с SSD.
- S2 — O(1) point-in-polygon через квадродерево.
- FST — компрессия префиксов, кэш «happy path» в МБ.
- Tantivy — встроенный инвертированный индекс, избегаем сетевого Elasticsearch.
Итог: одна бинарная служба, линейное масштабирование, простые релизы и откаты.