联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

数据结构和算法HASH GAME - Online Skill Game ET 300 哈希算法的设计要点、应用场景【高阶】

发布时间:2025-04-28 10:07:52  点击量:

  HASH GAME - Online Skill Game GET 300

数据结构和算法HASH GAME - Online Skill Game GET 300 哈希算法的设计要点、应用场景【高阶】

  128,存在哈希值相同的概率是非常小的。并且哈希值的二进制值串位数越多,冲突的概率会越低。另外需要额外提的一点是不管什么哈希算法,我们能做到的是尽量减少碰撞冲突的概率,理论上是没办法做到完全不冲突的。这是基于组合数学中一个非常基础的理论,鸽巢原理(或者抽屉原理)。这个原理就是说有 10 个鸽巢,如果有 11 个鸽子的话,肯定有一个鸽巢的鸽子数量多于 1 个。基于这个原理,哈希算法理论上是无法做到零冲突的。就算 MD5 能表示的数据个数是 2

  数据分片可以想到 MapReduce 的基本设计思想。当处理的数据量特别大时,一台机器可能无法处理这么多的数据量,因此可以将待处理的数据分发到多台机器上并行处理。提到处理速度。此时,我们可以使用哈希算法对数据进行哈希计算获得哈希值,之后再对哈希值进行取模,根据取模的结果,将数据分发到相应的机器上。这样,相同的数据肯定都在同一台机器上了。此时,如果对“搜索关键字”或者文档进行计算的话,我们不用再担心计数不完整或者错误。并且,每台机器处理完之后,只要将结果简单的合并即可。

  但是随着时间的增长,存储的数据会越老越多。原来的机器数量可能会无法承受与日俱增的数据,我们就需要扩容。但是,扩容不是简单地加个机器而已,更意味着缓存数据将会失效。比如,原先是 10 台机器的,我们是通过与 10 取模来计算的。那么哈希值为 13 这个数据,应该会被存储在编号为 3 的机器上。但是,假如新增了 1 台机器之后,我们是通过与 11 取模来计算的。那么哈希值为 13 这个数据可能会被分配到 2 号这台机器上了。此时,几乎所有的数据都要重新计算。同时,几乎所有的数据都会穿透缓存,直接去请求数据库了。这样可能就会发生雪崩效应,压垮数据库。

  为此,引入了另一种方法---一致性哈希算法。一致性哈希算法可以使得在新加入一个机器后,并不需要做大量的数据搬移。一致性哈希算法使用时,同样也是采用了哈希算法和取模结合的方式。首先需要对机器套用哈希算法,在取得哈希值之后进行取模。之后再对数据套用哈希算法,在取得哈希值之后进行取模。比如三台机器取模之后的值分别为 3、6、9。数据取模之后的值刚好为 3、6、9,那么则将其放入对应的机器中。但是,假如取模之后的值为 2、5、8 呢?我们应该将这些 2、5、8 对应的数据存储到其顺时针方向上的第一台机器。比如 2 这个数据存储到顺时针方向上的第一台机器是 3;5 则是 5 号机器;8 则是 9 号机器。如下图所示:

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: