При хешировании коротких (<несколько K?) Строк (или файлов) можно создать два ключа хеширования md5, один для текущей строки и второй для обратной строки, объединенной с короткой асимметричной строкой. Пример: md5 (reverse (строка || '1010')). Добавление дополнительной строки гарантирует, что даже файлы, состоящие из последовательности идентичных битов, генерируют два разных ключа. Пожалуйста, поймите, что даже при этой схеме есть теоретический шанс того, что два хеш-ключа будут идентичны для неидентичных строк, но вероятность кажется чрезвычайно малой - что-то в порядке квадрата вероятности столкновения одного md5 и экономии времени может быть значительным, когда количество файлов растет. Можно также рассмотреть более сложные схемы для создания второй строки, но я не уверен, что это значительно улучшит шансы. </p>
Чтобы проверить наличие коллизий, можно запустить этот тест на уникальность хеш-ключей md5 для всех битовых векторов в db:
выберите md5 (bit_vector), count (*), bit_and (bit_vector)
из БД с bit_vector
сгруппировать по md5 (bit_vector), bit_vector
имеющий bit_and (bit_vector) <> bit_vector