Что это такое?
Специализированная неизменяемая карта строк в числа для Go, которая в разы быстрее и компактнее стандартной map.
ConstMap использует алгоритм binary fuse filter: при создании упаковывает ключи и значения в компактный массив так, что поиск требует всего одного хеширования, трёх обращений к массиву и двух XOR-операций. Карта строится один раз и становится неизменяемой —...
Для Go-разработчиков, которым нужны сверхбыстрые поиски по заранее известному набору строковых ключей — например, для кэшей, конфигураций, справочников или индексов.
Стандартные map в Go удобны, но тратят много памяти и работают медленнее, чем специализированные структуры, когда набор ключей известен заранее и не меняется.
ConstMap использует алгоритм binary fuse filter: при создании упаковывает ключи и значения в компактный массив так, что поиск требует всего одного хеширования, трёх обращений к массиву и двух XOR-операций. Карта строится один раз и становится неизменяемой — зато поиск занимает ~7 наносекунд на ключ.
Библиотека реализует статическую карту строк → uint64 на основе научной статьи о binary fuse filters. Подходит для случаев, когда набор ключей известен заранее (например, список стран, кодов ошибок, идентификаторов), а потом нужны только быстрые чтения. Есть версия с проверкой отсутствующих ключей и сериализация.
Алгоритм основан на научной работе 2022 года, которая улучшила более ранние xor-фильтры — это не просто «ещё одна хеш-таблица», а современная исследовательская структура данных.
Стоит попробовать, если у вас есть статические словари или справочники в памяти — выигрыш в скорости и памяти значительный. Для динамических данных, где ключи добавляются/удаляются, не подойдёт.
Проект свежий (2024), активно развивается, есть тесты и бенчмарки. Звёзд пока мало, но код качественный.
Карточка собрана по данным GitHub, README и структуре репозитория. Это не официальная документация проекта.
Специализированная неизменяемая карта строк в числа для Go, которая в разы быстрее и компактнее стандартной map.
Для разработчиков на Go, которым нужны сверхбыстрые поиски по заранее известным ключам — например, для кэшей, конфигураций или справочников.
Если проект подходит под ваш сценарий, можем помочь с установкой, интеграцией, доработкой или аккуратным форком под вашу инфраструктуру.