代码之家  ›  专栏  ›  技术社区  ›  Dave Anderson

检测数据更改的最佳哈希函数?

  •  7
  • Dave Anderson  · 技术社区  · 16 年前

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

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

    我们使用两个哈希值进行请求,一个用于值,另一个用于记录。这些是随JSON结构返回的MD5散列,将随以下请求一起发送。如果散列有变化,我们知道我们需要一个新的JSON结构,否则散列将被返回以节省带宽并消除不必要的客户端处理。

    因为MD5通常与加密一起使用,所以哈希算法是检测数据变化的最佳选择吗?

    我们可以通过哪些替代方法检测值的更改、更新、检测添加或删除的项以及相应地操纵页面DOM?

    5 回复  |  直到 16 年前
        1
  •  11
  •   Jonathan Rupp    16 年前

    MD5是检测一组数据变化的合理算法。但是,如果您不关心加密属性,并且非常关心算法的性能,那么您可以使用一种更简单的校验和样式的算法,这种算法设计不具有加密安全性。(尽管MD5的弱点在最近几年被发现,但它仍然被设计成加密安全的,因此比您的场景所需的工作要多)。

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

        2
  •  4
  •   vartec    16 年前

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

        3
  •  0
  •   j_random_hacker    16 年前

    你所做的对我来说很好。

    如果服务器端的容量很便宜,最小化网络使用量至关重要,那么您可以让服务器记住每个客户机的最后一个数据集是什么,并且只发送每个请求上的差异(作为插入、删除和编辑的列表)。如果首先对数据行进行排序,可以使用差分算法(如 diff .

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

        4
  •  0
  •   bmb    16 年前

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

    ——
    骨形态发生蛋白B

        5
  •  -3
  •   pauljwilliams    16 年前

    我认为任何常用的散列函数都会满足您的需要——提供实体的唯一表示。

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