Как быстрее всего получить 64-битное целое число ha sh из строки длиной 50 символов в PHP7? - PullRequest
1 голос
/ 21 марта 2020

У меня есть таблица MySQL MEMORY, в которой я храню данные стиля ключ-значение. Ключи обычно имеют длину 30-50 символов. И поэтому я хочу сократить их, чтобы они не занимали слишком много места в оперативной памяти (в БД будет 10 - 100 тыс. + Таких значений ключей).

Сейчас я думаю об использовании контрольной суммы CRC32 как ha sh, которая является 32-битным целым числом, и поэтому я могу использовать тип int (10) для столбца в базе данных MySQL. Но я мало беспокоюсь о возможных коллизиях при работе с хэшами 100k +, вероятность очень быстро увеличивается при наличии стольких разных ключей.

Поэтому я бы хотел использовать 64-битный га sh, где коллизии должны быть только теоретической проблемой , Я думаю. И для столбца MySQL потребуется только тип bigint (20) (при этом экономится много места в ОЗУ). Но я не смог найти ни одного разумного быстрого алгоритма CRC32, который бы был на порядок быстрее всех других функций. Ниже приведены быстрые результаты теста (100 000 итераций каждая):

crc32:  0.0074591636657715s     798740135
sha64:  0.067406177520752s      4718257680194979118
crc64:  0.037574052810669s      989304075990411149
md5:    0.02372s                0dbab6d0c841278d33be207f14eeab8b
sha1:   0.03382s                417a9e5c9ac7c52e32727cfd25da99eca9339a80
xor:    0.07939s                119
xor2:   0.06522s                134217728
add:    0.0665s                 1105

Поскольку мне не нужно никакого крипто-безопасного решения, только самый быстрый способ получить 64-битное число из 50 символов длиной строка. Большое спасибо за любую идею. Я нацеливаюсь на среду PHP7 +.

...