Какой хэш использовать в качестве уникального ключа для текстов?
В БД будет храниться текст до 500 символов unicode.
Должна быть уникальность. Поэтому в качестве primary key предполагаю использовать хэш.
Записей будет, максимум 350 млрд (но это самый сложный случай, так что скорее всего намного меньше).
Достаточно ли будет md5, или вероятность коллизии будет слишком высока?
P.S. Можно было бы взять сразу sha512 какой-нибудь, но важны скорость расчёта хэша и вес индекса БД.
В теории хэш может дать коллизию, и никто вам обратного не гарантирует.
Поле хэша с индексом на нем - хорошая возможность избавиться от полнотекстовых сравнений, и только.
Не усложняйте себе жизнь и не пытайтесь натянуть его на первичный уникальный ключ.
1) Можешь смело брать sha256/512. Они уже имеют аппаратную поддержку в процессорах и должны быть быстрее чем MD5. Проверь этот факт для твоего API.
2) По поводу борьбы с коллизиями. Нужно посчитать цену коллизии. Тоесть если она все таки
возникает - как это повлияет на ваш бизнес. И как вы будете выходить из ситуации.
Вообще я думаю что все будет в порядке. 350 млрд. Номерная емкость SHA256 - это 1.157920892373162E77
и доля ключей составляет 3.0226589942830556E-66.
Это буквально 0 процентов. Ноль целых и потом 60 нулей после запятой.