Я работаю над дизайном Адресуемого контентом хранилища , поэтому я ищу хэш-функцию для генерации идентификаторов объектов. Каждый объект должен получить короткий идентификатор, основанный на его содержании, таким образом: object_id = hash(object_content)
.
Необходимые условия:
- Хэш-функция должна быть быстрой.
- Вероятность столкновения должна быть как можно ниже.
- Оптимальная длина идентификатора составляет
32
байт для адресации 256^32
объектов в максимуме (но это требование может быть ослаблено).
Принимая во внимание эти требования, я взял хэш SHA256
, но, к сожалению, он недостаточно быстр для моих целей. Самыми быстрыми реализациями SHA256
, которые я смог протестировать, были openssl
и boringssl
: на моем рабочем столе Intel Core I5 6400
это давало около 420 MB/s
на ядро. Другие реализации (например, crypto/rsa
в Go) еще медленнее. Я хотел бы заменить SHA256
другой хэш-функцией, которая обеспечивает те же гарантии коллизий, что и SHA256
, но дает лучшую пропускную способность (не менее 600 MB/s
на ядро).
Пожалуйста, поделитесь своим мнением о возможных вариантах решения этой проблемы.
Также хотелось бы отметить, что обновление оборудования (например, покупка современного процессора с набором инструкций AVX512
) невозможно. Суть в том, чтобы найти хеш-функцию, которая обеспечит лучшую производительность на обычном оборудовании.