Как я могу убедиться, что не будет повторяющегося URL до 64^6 +1 хэширования времени?
Использование простого хэширования, вы не можете гарантировать это свойство.
Предполагая равнораспределенности md5, если у вас есть п адреса хэш-и добавить еще один, то есть п возможных исходов, как он будет сталкиваться и 64 - п как бы не сталкивающийся. Таким образом, вероятность столкновения для этого нового элемента равна n/64 . Это значение отличное от нуля даже для n = 1, поэтому второй URL-адрес может уже теоретически совпадать, даже если шансы на это на самом деле очень низки. Чем больше не сталкивающихся URL-адресов у вас есть в вашей базе данных, тем выше вероятность того, что новый хеш столкнется с любым существующим, пока вероятность не станет равной 100% для n = 64 .
Если вы думаете об этом, не забудьте оставить в памяти birthday “paradox”. Если у вас есть набор n URL-адресов, которые вы хотели бы добавить, то шансы любых двух из них сталкиваются с способом больше, чем шансы только последнего, столкнувшегося с любым из тех, что вы добавили до , Если вы do the math, вы обнаружите, что с использованием вашей схемы вы можете ожидать, что хеш составит около 37 000 URL-адресов, прежде чем шансы столкновения между любыми двумя из них превысят 1%.
Итак, теперь вам нужно решить, приемлема ли вероятность столкновения 1%, и достаточно ли 37 000 URL-адресов для ваших нужд. Если вероятностные результаты вас не устраивают, вы можете либо изменить шансы, например. используя более 6 цифр, или вам придется реализовать collision resolution.