← Все проекты
Проект / Go

lemire/constmap: ConstMap — быстрая и компактная неизменяемая карта строк в числа для Go

Получите в 3 раза более быстрые поиски и в 6 раз меньше памяти по сравнению со стандартной map[string]uint64.

ConstMap использует алгоритм binary fuse filter: при создании упаковывает ключи и значения в компактный массив так, что поиск требует всего одного хеширования, трёх обращений к массиву и двух XOR-операций. Карта строится один раз и становится неизменяемой —...

★ 17 Go Форки 3 Issue 0 Оценка 7/10 Карточка проверена

Для кого это

Для Go-разработчиков, которым нужны сверхбыстрые поиски по заранее известному набору строковых ключей — например, для кэшей, конфигураций, справочников или индексов.

Проблема / задача

Стандартные map в Go удобны, но тратят много памяти и работают медленнее, чем специализированные структуры, когда набор ключей известен заранее и не меняется.

Как это работает

ConstMap использует алгоритм binary fuse filter: при создании упаковывает ключи и значения в компактный массив так, что поиск требует всего одного хеширования, трёх обращений к массиву и двух XOR-операций. Карта строится один раз и становится неизменяемой — зато поиск занимает ~7 наносекунд на ключ.

Что видно по README

Библиотека реализует статическую карту строк → uint64 на основе научной статьи о binary fuse filters. Подходит для случаев, когда набор ключей известен заранее (например, список стран, кодов ошибок, идентификаторов), а потом нужны только быстрые чтения. Есть версия с проверкой отсутствующих ключей и сериализация.

Ключевые возможности

Поиск за 7 нс против 23 нс у стандартной mapПамять: ~9 байт на ключ против ~56 байтНеизменяемая структура после созданияСериализация в файл или потокВерсия с проверкой отсутствующих ключей

Технологии

GoАлгоритм binary fuse filterХеширование xxhash

Интересный факт

Алгоритм основан на научной работе 2022 года, которая улучшила более ранние xor-фильтры — это не просто «ещё одна хеш-таблица», а современная исследовательская структура данных.

С чего начать

  • Установите библиотеку: go get github.com/lemire/constmap
  • Создайте карту из срезов ключей и значений
  • Используйте метод Map() для поиска

Оценка GitRadar

Удобство
8/10
Свежесть
9/10
Перспектива
7/10
Монетизация
4/10
Общая оценка
7/10

Вердикт GitRadar

Стоит попробовать, если у вас есть статические словари или справочники в памяти — выигрыш в скорости и памяти значительный. Для динамических данных, где ключи добавляются/удаляются, не подойдёт.

Наблюдения по обновлениям

Проект свежий (2024), активно развивается, есть тесты и бенчмарки. Звёзд пока мало, но код качественный.

Что мы проверили

Карточка собрана по данным GitHub, README и структуре репозитория. Это не официальная документация проекта.

Исходный репозиторий
https://github.com/lemire/constmap
Лицензия
Apache-2.0
Создан на GitHub
29 марта 2026 г.
Последнее обновление репо
29 марта 2026 г.
Последняя проверка GitRadar
29 марта 2026 г.
Изученные файлы
README.md, go.mod, go.sum, constmap_test.go, constmap.go

FAQ

Что это такое?

Специализированная неизменяемая карта строк в числа для Go, которая в разы быстрее и компактнее стандартной map.

Для кого подходит?

Для разработчиков на Go, которым нужны сверхбыстрые поиски по заранее известным ключам — например, для кэшей, конфигураций или справочников.

Источники

  • GitHub исходный код и активность
  • README описание, ссылки, стартовые материалы

Нужна помощь с lemire/constmap?

Если проект подходит под ваш сценарий, можем помочь с установкой, интеграцией, доработкой или аккуратным форком под вашу инфраструктуру.