用于检测数据变化的最佳哈希函数?

时间:2009-04-16 14:33:00

标签: algorithm hash dataset

我们有一个定价数据集可以更改包含的值或记录数。与值的更改相比,添加或删除的记录数较少。数据集通常包含50到500个项目,包含8个属性。

我们目前使用AJAX返回表示数据集的JSON结构,并使用此结构使用新值更新网页,并在必要时删除或添加项目。

我们使用两个哈希值发出请求,一个用于值,另一个用于记录。这些是带有JSON结构返回的MD5哈希,以便通过以下请求发送。如果对哈希值进行了更改,我们知道我们需要一个新的JSON结构,否则只返回哈希值以节省带宽并消除不必要的客户端处理。

由于MD5通常用于加密,因此只是检测数据变化的散列算法的最佳选择?

我们可以采用哪些替代方法来检测值的更改并进行更新,以及检测添加或删除的项目以及相应地操作页面DOM?

5 个答案:

答案 0 :(得分:11)

MD5是检测一组数据变化的合理算法。但是,如果您不关心加密属性,并且非常关注算法的性能,那么您可以使用更简单的校验和式算法,该算法并非设计为加密安全性。 (虽然近年来发现了MD5的弱点,但它仍然设计为加密安全,因此比您的场景可能需要更多的工作)。

但是,如果您对MD5的计算性能感到满意,我会坚持使用它。

答案 1 :(得分:4)

MD5很好。如果性能太低,您可以尝试快速校验和算法,例如Adler-32

答案 2 :(得分:0)

你所做的对我来说听起来不错。

如果服务器端容量很便宜且最小化网络使用率至关重要,那么您可以让服务器记住每个客户端最后一个数据集的内容,并仅发送差异(作为插入,删除和编辑的列表)在每个请求上。如果您首先对数据行进行排序,则可以使用差异算法(例如diff使用的差异算法)相当有效地计算这些差异。

此方法对网络中断很敏感 - 如果客户端未收到一个响应,则会累积错误。但是,这可以通过让客户端为每个请求发送MD5哈希来解决:如果它与服务器期望的不同,将发送整个列表而不是更改列表。

答案 3 :(得分:0)

我同意Jonathan关于MD5的回答。至于检测更改的替代方法,如果您愿意在服务器上存储(或已经存储)最近更改的时间/日期,您可以将其来回传递给客户端。您可以完全避免计算,甚至可以使用大部分现有代码。

-
BMB

答案 4 :(得分:-3)

我认为任何常用的哈希函数都可以做你想要的 - 提供实体的唯一表示。

对于您要解决的问题,我的解决方案是拥有一个记录所有更改的后端表。不是更改本身,而是已更改的行的标识符。定期回调服务器并获取已更改的所有对象的列表,并使用此列表来确定客户端需要更新/删除/添加哪些行。