散列Json结果以检测更改

时间:2017-03-26 08:56:02

标签: c# .net json hash

我获得 JSON 结果并将其解析为模型并将其存储在数据库中。我需要检查结果是 new to inserted ,还是已更改为更新现有数据。请考虑我根据 URL列表获取JSON结果。因为可能有很多URL我不想检查所有数据对数据库。相反,我希望根据URL 哈希结果并在数据库中存储给定URL的这些哈希值。下次当我根据该URL获取JSON结果时,我想再次散列它,检查此值是否与上一个散列值不同,如果它不同,则解析并将整个模型与数据库进行比较,如果没有什么不同,然后跳过。 这是正确的做法吗?还有更好的选择吗?

如果可以实现这样的算法,我应该使用什么哈希函数,因为JSON结果不是很大。我知道根据MSDN GetHashCode 与C#中的字符串不一致,据我所知他们甚至在调试模式下使用BuildNumber 来制作开发人员避免持久化GetHashCode方法的结果。我计划使用MurMur但是读到MurMur适用于大量数据,并不适合数百字节的信息。

1 个答案:

答案 0 :(得分:2)

已经有一种直接构建在HTTP协议中的机制,专门用于此目的:ETagLast-Modified响应头。如果您可以控制正在使用的端点并且它们遵循最佳实践并使用这些标头,那么这将起作用。

如果不是这种情况,那么您可能需要在客户端进行计算,如您已经暗示的那样,通过计算内容的校验和,然后与之前的校验和进行比较。 MD5是一种非常快速的算法,通常用于此目的。例如,亚马逊使用它来计算S3资源的ETag标题。