多次HASH算法解决冲突的效果测试

这篇博客探讨了多次哈希算法在解决冲突中的应用,特别是其在数据存储和备份中的优势。作者通过实验比较了不同次数的哈希操作对负载能力的影响,并指出在某些极端情况下可能存在无法插入的问题。测试结果显示,随着哈希次数的增加,负载能力提升。最终,作者选择了16次哈希作为默认设置,并提供了自定义质数队列的选项,以适应不同的数据量查询需求。
摘要由CSDN通过智能技术生成

多次HASH算法解决冲突的效果测试

自己实现的共享内存的HSH算法解决冲突的方法是开链,最近在考虑做一个简化版本的数据存储时,需求的同事提出了希望能备份共享内存中的数据,当然这个有简单的方法,让使用者根据地址自己拷贝复制就可以了(当然如果你共享内存比较大,建议考虑64位的系统)。但是由于开链的算法天生弱点(开链的链表的处理不能分割),复制的事情只能让使用者解决,于是开始看公司另外一些同事的算法,多次HASH的解决冲突的算法。

多次HASH由于所有数据的存储完全是序列化的,没有链子,而且可以使用一个不可能出现的数据作标示某个位置没用使用,所以相对更加安全(没有特别不能打断的操作),所以可以外部进行拷贝,复制。当然要注意,这样的拷贝复制也不是完全安全的,因为如果多点操作,还是会出现只拷贝了半截数据的问题,但是由于中间没有链表,拷贝备份的数据即使有少量错误不会引起备份文件无法使用的问题。

当然多次HASH也有不足的地方,比如每次查询就必须进行固定NHASH处理,而且在极端情况下,如果NHASH后,得到的每个位置都被人占用了,那么存在不能插入的可能。但是和几个同事聊的过程中,他们告知我他们的实际应用中多次HASH的发生不可能插入的性非常低,而且发生这种情况是,空间的利用率往往都在80%以上了,而且他们最近一次监测的效果是,利用率达到90%

打算自己用模板实现多次HASH的算法,但是在多次到底是几次这个问题上,我犹豫了,因为如果N设置过大,会影响处理速度,如果过小,负载能力应该会降低。由于我们的HASH算法本质还是通过质数取模的算法,我自己写一个小程序生成NHASH数列,进行效果检查。

测试环境visual studio2010,虽然我是后台程序员,还是不喜欢直接用GCC干活。测试算法当然是写随机数插入看效果,一开始直接选择了VS 2010默认的rand函数看效果。结果发现居然非常糟糕,当测试容量加大到1000万时,第一次出现无法插入的利用率居然不到30%

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值