gpt4 book ai didi

c# - 使用 ToHashCode 将哈希存储在数据库中?

转载 作者:行者123 更新时间:2023-11-30 15:46:52 32 4
gpt4 key购买 nike

我们目前广泛使用 GetHashCode 方法将哈希代码存储在数据库中以跟踪唯一项目。 MSDN 在这里有一个可怕的条目

"GetHashCode方法的默认实现不保证不同对象的返回值唯一。此外,.NET Framework不保证GetHashCode方法的默认实现,不同版本返回值相同.NET Framework 的。因此,此方法的默认实现不得用作哈希目的的唯一对象标识符。”

多年来,我们一直在毫无问题地使用这种方法。我们应该担心吗?如果是的话,什么是更好的方法?

具体来说,数据来自外部来源。我们采用两到三个字符串字段,将它们一起添加到一个新字符串中,然后使用 GetHashCode 关闭它。

最佳答案

使用散列码作为唯一标识符是一个非常糟糕的主意,因为如果集合足够大,您最终肯定会发生冲突——而且在统计上可能发生冲突之前,它不必非常大发生碰撞。哈希码是一种很好、快速的方法来评估两个对象是否相同(假设相同的哈希函数)——如果它们哈希到不同的值,它们肯定是不同的。但是,如果它们的散列值相同,则需要进行相等性比较以确保它们是同一对象。此时,您需要比较对象的独特属性,即,如果这些属性相同,则对象相同。

我建议在数据库中对自然键属性使用唯一索引,并结合人工的自动增量 ID 作为主键。然后你可以确定你不会在数据库中得到重复的插入(索引的唯一性约束),但是你可以通过简单地比较它们是否具有相同的id来快速比较数据库外部的对象——也保证是唯一的通过主键约束。

关于c# - 使用 ToHashCode 将哈希存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039133/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com