2009-04-16 11 views
6

私たちは、含まれている値またはレコードの数を変更する価格データセットを持っています。追加または削除されたレコードの数は、値の変更と比較して小さいです。通常、データセットには8つのプロパティを持つ50〜500アイテムがあります。データ変更を検出するためのベストハッシュ機能?

現在、AJAXを使用してデータセットを表すJSON構造体を返し、この構造体を新しい値で使用し、必要に応じてアイテムを削除または追加するWebページを更新します。

私たちは、2つのハッシュ値、つまり値とレコードの2つのハッシュ値でリクエストを行います。これは、JSON構造体で返されたMD5ハッシュで、次のリクエストとともに送信されます。ハッシュの変更がある場合は、新しいJSON構造が必要です。そうしないと、帯域幅を節約し、不要なクライアント側の処理を排除するためにハッシュが返されます。

通常、MD5は暗号化で使用されるため、データ変更を検出するだけのハッシュアルゴリズムの最良の選択ですか?

値の変更を検出して追加または削除したアイテムを検出し、それに応じてページDOMを操作する代わりに、どのような方法で更新できますか?

答えて

10

MD5は、一連のデータに対する変更を検出するための合理的なアルゴリズムです。ただし、暗号のプロパティには関心がなく、アルゴリズムのパフォーマンスに非常に関心がある場合は、暗号で保護されていない単純なチェックサムスタイルのアルゴリズムを使用できます。 (MD5の弱点は近年発見されていますが、暗号化された安全性を持つように設計されているため、シナリオで必要とされるよりも多くの作業が必要です)。

しかし、あなたがMD5の計算性能に満足していれば、私はそれに固執します。

-3

一般的に使用されるハッシュ関数は、エンティティの一意の表現を提供したいと思っています。

解決しようとしている問題については、私のソリューションは、すべての変更を記録するバックエンドテーブルを持つことです。変更自体ではなく、変更された行の識別子。定期的にサーバーにコールバックし、変更されたすべてのオブジェクトのリストを取得し、これを使用して、更新/削除/追加が必要な行をクライアントで決定します。

+1

これは一般的な誤解です。ハッシュ関数は「エンティティの一意の表現を提供する」ものではありません。実際、ドメインがその範囲よりも大きいハッシュ関数の場合には当てはまらないことが保証されています。 – recursive

0

あなたがしていることは、私にはかなりいいようです。

サーバー側の容量が安く、ネットワーク使用を最小限に抑えることが重要な場合は、サーバーが各クライアントの最終データセットを覚えておき、差異のみを送信することができます(挿入、削除、 )を要求ごとに送信します。最初にデータ行を並べ替える場合、diffで使用されるような差分アルゴリズムを使用して、これらの差異をかなり効率的に計算することができます。

このアプローチはネットワークの停止に影響されます.1つの応答がクライアントによって受信されないと、エラーが蓄積されます。しかし、これは、クライアントが各要求でMD5ハッシュを送信することで解決できます。サーバーが期待するものと異なる場合は、変更のリストの代わりにリスト全体が送信されます。

4

MD5は問題ありません。パフォーマンスが低すぎる場合は、たとえばAdler-32のような高速チェックサムアルゴリズムを試すことができます。

0

私はMD5に関するジョナサンの答えに同意します。変更を検出する別の方法として、サーバーに最新の変更の日時を保存する(または既に保存している)場合は、クライアントにその変更を渡すことができます。計算を完全に避けて、既存のコードのほとんどを使用することさえできるかもしれません。

から
BMB

関連する問題