Во сколько раз вычислительная сложность алгоритма MD5 выше по сравнению с алгоритмом CRC32?
Или иначе, во сколько раз алгоритм MD5 медленнее алгоритма CRC32?
Я знаю, что MD5 – это алгоритм хэширования, а CRC32 – это алгоритм контрольной суммы для проверки целостности данных при передаче или записи.
Сейчас контроль целостности данных (фото по ~ 1МБ) при передаче в базу MySQL из 1С осуществляется с помощью алгоритма MD5 и есть подозрение, что избыточная вычислительная сложность алгоритма MD5 замедляет процесс передачи данных и нагружает процессор сервера. Мне нужно понять есть ли смысл MD5 заменить на CRC32 и каков будет выигрыш в производительности? Просто так экспериментировать не хочу, так как эта доработка стоит денег. Спасибо!
Во много!
Сами посудите, в CRC32 используется только модульная арифметика и сдвиговые операции в 32х битном регистре. Для того же MD5 тоже используются простые операции, но это происходит в четырёх 32х битных регистрах, в 32х циклах. Так что 4 * 32 = 128. Именно во столько раз MD5 медленнее CRC32.
И это только на вскидку, так как всех деталей реализации одного и другого алгоритма я не помню.
Мне нужно понять есть ли смысл MD5 заменить на CRC32 и каков будет выигрыш в производительности?
Я сомневаюсь что именно вычисление MD5 является виновником замедления. Причину нужно искать в другом месте.
Используйте профилирование кода, обращений к СУБД и операции ввода/вывода.
Там еще очень возможна неэффективная работа с памятью из-за работы с фотографиями.
Счел оправданным обратить внимание, что у crc32 достаточно велика вероятность коллизий, в сети встречал оценку, что - то порядка 77000 уникальных строк дадут дубль.
Иван Мельников , что в итоге было виновником замедления? MD5?
Сейчас контроль целостности данных (фото по ~ 1МБ) при передаче в базу MySQL из 1С осуществляется с помощью алгоритма MD5 и есть подозрение, что избыточная вычислительная сложность алгоритма MD5 замедляет процесс передачи данных и нагружает процессор сервера.