1) В целях действительно низкого коллизирования хешей, могу ли я избежать использования только половины из 128 битов sha1 вместо того, чтобы иметь дело с самим sha1? Я понимаю, что это не подходит для криптографических хэшей, но мне просто нужны хэши для ключей хеш-таблиц.
2) Время вычислений не является приоритетом, и помимо этого я хэширую очень маленькие фрагменты данных. В частности, я собираюсь взять 2 или 3 64-битных хэша и хэшировать их, чтобы получить еще один 64-битный хеш. Есть ли лучший вариант, чем sha1 для этой цели? Опять же, столкновения должны быть очень маловероятными.
3) Я новичок sql. Это хорошая идея использовать 64-битные хэши в качестве идентификаторов в SQL? Будут ли 64-битные идентификаторы вызывать проблемы с производительностью в sqlite или postgres? Мне нужно будет координировать данные по нескольким базам данных (включая индекс Lucene), поэтому я решил, что мне следует иметь дело с хешами непосредственно в таблицах, а не с автоматически увеличивающимися идентификаторами (которые будут иметь смысл только в одном дБ, а не во всех хранилищах данных). Я считаю, что 64-битный код - хороший компромисс: достаточно большой для маловероятных столкновений, но экономит место (и время поиска?).
4) А как насчет CRC-64? Создает ли это случайное распределение?