Harder, Better, Faster, Stronger Version of Uber H3 in Rust
Проект h3o представляет собой полную переработку библиотеки Uber H3 на языке Rust, а не просто обертку. Основные цели - упрощение интеграции в Rust проекты (особенно для WASM), создание более безопасного API с использованием строгой типизации, достижение сопоставимой или превосходящей производительности и 100% покрытие API H3 версии 4.0. Для обеспечения качества использовалось дифференциальное тестирование против эталонной реализации, включая 756 тестов, 166 интеграционных тестов, 42 юнит-теста и 15 fuzz-целей.
Бенчмарки, состоящие из 911 тестов, показывают, что в 862 случаях h3o превосходит оригинальный H3 по производительности. В 463 тестах h3o работает в 2-5 раз быстрее, в 117 тестах - в 5-10 раз быстрее, и в 24 тестах - более чем в 10 раз быстрее. Однако в 44 тестах H3 все еще быстрее, особенно при работе с пятиугольными ячейками и преобразованиями координат. Основные оптимизации h3o включают использование предвычисленных таблиц вместо формул на лету и применение битовых операций вместо циклов для достижения постоянного времени выполнения.
Комментарии (31)
-
H3/Hexagonal tiling vs. S2/Square tiling: обсуждение сфокусировалось на том, что H3 обеспечивает равные расстояния между соседними ячейками, что важно для анализа данных и моделирования потоков, в то время как S2 не обеспечивает равные расстояния между соседними ячейками. Однако, S2 имеет преимущество в том, что он может быть более эффективен для запросов, которые включают родительские и дочерние ячейки, тогда как H3 может быть более удобен для визуализации и анализа данных, особенно если важно сохранить равные расстояния между ячейками.
-
Использование H3 в различных контекстах: обсуждение включало примеры использования H3 в различных контекстах, включая Uber, FCC, ClickHouse, Overture Maps и другие. Это показывает, что H3 используется в различных контекстах, включая телематика, анализ данных, визуализация и хранение данных.
-
Сравнение H3 с другими системами: обсуждение также коснулось сравнения H3 с другими системами, включая S2 и другие геометрические системы. Это показывает, что H3 имеет свои уникальные преимущества и недостатки, которые важно учитывать при выборе системы для конкретного применения.
-
Развитие и будущее H3: обсуждение также коснулось будущего развития H3, включая возможность создания новой версии, которая может быть более эффективна и удобна для пользователей.
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» сейчас модный лозунг.