当前位置: 首页 > 编程语言 > C#

为数据库创建一个哈希码(即没有GetHashCode)分享

时间:2023-04-10 11:38:56 C#

依靠它随着时间的推移或跨应用程序域保持稳定”(来自EricLippert博客文章)。不幸的是,我一直在数据库中使用它来尝试加快查找速度(通过插入GetHashCode的结果而不是对文本字符串进行搜索)。我现在意识到这是一件非常糟糕的事情。所以我想知道我能做些什么。是否有任何给定的字符串可以保证返回一个我可以用于查找的合理的抗碰撞整数?我可以自己写一些东西,但我希望有一些内置的东西,我可以使用它而不必去加密库中的东西,这感觉有点重量级。我鼓励您考虑其他人所说的话:让数据库做它擅长的事情。创建哈希码来优化查找表明表上的索引不是它们应该的。也就是说,如果您真的需要哈希码:您没有说明您需要32位还是64位哈希码。这将为字符串创建一个64位散列码。它具有合理的抗碰撞性。publicstaticlongComputeHashCode(stringurl){constulongp=1099511628211;乌龙哈希=14695981039346656037;对于(inti=0;i>24);hash=(hash+(hash>14);hash=(hash+(hash>28);hash=hash+(hash注意这里是哈希码,如果你有上亿条记录,碰撞的几率是非常小。经验法则:当项目数量超过哈希码范围时,当的平方根时,您有50%的机会发生冲突。此哈希码的范围为2^64,因此如果您有2^32个项目,你发生碰撞的几率大约是50%。参见http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=792和http://en.wikipedia.org/wiki/Birthday_paradox#Probability_table。正如SLaks在评论中指出的那样,查找数据是数据库擅长的事情。如果您需要快速查找,请在列上创建索引。至少,您不必再处理碰撞。您使用的是MSSQL数据库吗?T-SQLChecksum函数正是这样做的。以上就是C#学习教程分享的全部内容:为数据库创建哈希码(即不使用GetHashCode)。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---网络收藏不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: