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.
Итог: одна бинарная служба, линейное масштабирование, простые релизы и откаты.
Комментарии (84)
- Пост вызывает много вопросов: детали шардирования, отказоустойчивость, latency и open-source-статус не раскрыты.
- Альтернативы: Typesense, DuckDB+spatial, Quickwit/Tantivy — всё open-source и уже показывает высокую производительность.
- RocksDB хвалят за надёжность и производительность, но кто-то вспоминает старые проблемы LevelDB.
- LMDB/OSM Express тоже предлагают более лёгкое решение для геопоиска.
- Многие считают, что 95 % задач решаются обычным Postgres/SQLite, а «заменить ES» сейчас модный лозунг.