Является ли хорошей практикой сравнивать контрольные суммы двух сложных объектов вместо итерации?

Предположим, у вас есть два набора данных, которые вам нужны, чтобы убедиться, что они не изменились. Например, у вас есть массив объектов в одной руке, а другой массив в другой руке. Теперь вам нужно убедиться, что оба массива одинаковы.

Каждый массив может содержать данные любого типа: логические, строки, объекты, массивы, NULL, так далее.

При сравнении оба содержимого массива должны быть абсолютно одинаковыми. Тот же тип данных и тот же порядок.

Вместо того, чтобы перебирать содержимое массива с кодом, который может сравнивать разные типы данных, и возможными рекурсивными сравнениями, я пришел с решением, которое я был бы признателен, если бы вы смогли пролить свет на то, что есть какие-то недостатки. Язык PHP , но меня больше интересует не зависящий от языка ответ.

Я сериализовал оба набора данных по отдельности и рассчитал их md5 хэши. Я выбрал md5 потому что он доступен без внешних расширений или библиотек и работает довольно быстро. Я знаю о возможности столкновения, и md5 хэши почти не криптографически безопасны.

Мой вопрос таков:

  • Это широко используемый метод проверки произвольных типов данных. Проверка контрольных сумм файлов имеет смысл, но я лично не использовал ее для сравнения таких переменных.
  • В основном я делаю это, чтобы мой код был простым. Сравнение, вероятно, быстрее, потому что оно может прервать сравнение всякий раз, когда сначала обнаруживается несоответствие. В моем случае длина данных довольно мала. Около 5 КБ в виде сериализованной строки.
  • Есть ли другие недостатки, которые я должен знать.

Заранее спасибо.

1

Решение

Если вы ищете изменения в массиве, я бы порекомендовал использовать CRC32 (). подобно MD5 () эта функция доступна в PHP начиная с версии 4 и не требует добавления специальных библиотек. Однако CRC32 () на самом деле предназначен для проверки ошибок и работает быстрее, чем MD5 (), который подразумевается как функция хеширования и, как таковой, медленнее по своей конструкции.

Особенно с точки зрения вашего независимого от языка ответа, я бы всегда выбирал CRC32 () вместо MD5 (), так как поиск библиотек гораздо проще, а вычислительные затраты намного дешевле, что делает его идеальным для практически любого приложения, даже для встроенных устройств.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector