2009-04-16 8 views
6

У нас есть набор данных о ценах, который изменяет содержащиеся значения или количество записей. Количество добавленных или удаленных записей невелико по сравнению с изменениями значений. Набор данных обычно имеет от 50 до 500 элементов с 8 свойствами.Функция Best Hash для обнаружения изменений данных?

В настоящее время мы используем AJAX для возврата структуры JSON, которая представляет набор данных, и обновляет веб-страницу, используя эту структуру, с новыми значениями и при необходимости удаляя или добавляя элементы.

Мы делаем запрос с двумя значениями хэша, один для значений и другой для записей. Это хеши MD5, возвращаемые структурой JSON, которые отправляются со следующим запросом. Если есть изменения в хешах, мы знаем, что нам нужна новая структура JSON, иначе хеши просто вернутся, чтобы сэкономить пропускную способность и устранить ненужную обработку на стороне клиента.

Как MD5 обычно используется с шифрованием - лучший выбор алгоритма хэширования только для обнаружения изменений данных?

Какие альтернативные способы можно обнаружить изменение значений и обновление, а также обнаружение добавленных или удаленных элементов и манипулирование страницей DOM соответственно?

ответ

10

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

Однако, если вы довольны вычислительной производительностью MD5, я бы просто придерживался ее.

-3

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

По вопросам, которые вы пытаетесь решить, моим решением будет иметь бэкэнд-таблицу, которая записывает все изменения. Не сами изменения, а идентификатор строк, которые изменились. Периодически обращайтесь к серверу и получите список всех объектов, которые были изменены, и используйте это, чтобы определить, на каком клиенте какие строки необходимо обновить/удалить/добавить.

+1

Это распространенное заблуждение. Хэш-функции не обеспечивают «уникальное представление объекта». На самом деле, гарантируется, что это не относится к любой хеш-функции, область которой больше ее диапазона. – recursive

0

То, что вы делаете, звучит довольно хорошо для меня.

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

Этот подход чувствителен к перебоям в сети - если один ответ не получен клиентом, будут накапливаться ошибки. Однако это можно устранить, если клиент отправил хеш MD5 с каждым запросом: если он отличается от ожидаемого сервера, вместо списка изменений будет отправлен весь список.

4

MD5 просто отлично. Если у него слишком низкая производительность, вы можете попробовать быстрый алгоритм контрольной суммы, например, Adler-32.

0

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

-
BMB

Смежные вопросы