Как узнать, что два хеш-данных одинаковы или не самый быстрый подход

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

Я думаю о том, чтобы сохранить md5sum хэша с помощью модуля Digest::MD5 в каком-то месте (например, в базе данных), а затем сравнить, совпадает ли md5sum следующего полученного хэша с предыдущей сохраненной суммой md5 или нет. Если это не то же самое, то данные в хэше отличаются.

Мой размер хеша не очень большой, максимум 50 ключей в одном хеше. Есть ли другой лучший и более быстрый подход в perl?


person Gaurav Pant    schedule 14.02.2014    source источник
comment
stackoverflow.com/questions/1273616/   -  person mpapec    schedule 14.02.2014
comment
@mpapec - Чем описанные там методы лучше и быстрее?   -  person Gaurav Pant    schedule 14.02.2014
comment
Не могу сказать, так как я не видел вашего решения.   -  person mpapec    schedule 14.02.2014
comment
Два хэша находятся в одном процессе или нет?   -  person ikegami    schedule 14.02.2014
comment
Всегда ли значения являются строками?   -  person ikegami    schedule 14.02.2014


Ответы (2)


Для такого небольшого набора данных нет необходимости чрезмерно оптимизировать вещи.

Вы можете использовать Data::Compare:

use Data::Compare;
print 'structures of \%h and \%v are ',
   Compare(\%h, \%v) ? "" : "not ", "identical.\n";
person user1126070    schedule 14.02.2014

Я предполагаю, что две хэш-переменные находятся в отдельных процессах.

Хэши (например, md5sums) не обязательно будут уникальными для двух разных текстов. Вы должны следовать полному тексту сравнения, чтобы быть уверенным.

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

Конечно, если редкие ложные срабатывания не проблема, то использование хэша сэкономит место на диске.

person ikegami    schedule 14.02.2014