神は、アルゴリズム(ブルームフィルタと一貫性のあるハッシュ)との練習を残したと

ブルームフィルタを理解します

//布隆过滤器和一致性哈希
//布隆过滤器就是爬虫项目,和黑名单项目的常见结构
//查询某一个结构是否存在于某一个集合之中

ここに画像を挿入説明
床構造:
構造体の大きな配列は、それぞれの場所は、ビット一口である
ここに画像を挿入説明
理由のブルームフィルタがエラーを生成します:
あなたが唯一の10ビット、4つのハッシュ関数を与えた今、100億URLがある場合は、それぞれが黒くなりました4ビットは、この10ビットが探していた時間まで、黒の表示になる運命、あなたは結果的調査とは間違っていることがわかります。
10 URLがある場合、あなたは10億ビットを与えられて、この時間は確かに正しいです。

大きな問題は、どのくらいの配列の問題にある
起こるブルームフィルタは、スペースの少ない使用して、失敗の小さな確率を大規模なデータ検索の問題を解決することです

条件ブルームフィルタの検索
ブルームフィルタをとサイズはあなたが探している、と関連するものの数を見つけるために、どのような問題ではありません
ブルームフィルタに応じて条件を決定する方法を
ブルームフィルタについて、あなたは私だけを伝える必要があります、あなたはこの時間を計算するには、要素を格納する、エラーレートがあなたを許容することができる数は、必要な計算およびハッシュ関数のKビットの数は、単一のビット配列の多数を必要とします言うことであるだけでなく数を決定するためのハッシュ関数として、すべての物事が決定される大規模な配列は、あなただけのあなたが必要とする要素の数を計算する必要がある条件を与え、そしてあなたは、フォールトトレランスを許容することができます

数式:
ここに画像を挿入説明

Mは:どのくらいのバイトビットアレイの
K:ハッシュ関数の数が必要と
小数が発生切り上げ後最初の二つの式がある
が、しかし丸みアップ、エラーを変更する必要があり
ここに画像を挿入説明
、上記の式を用いて実際のを見つけるためにするようにフォールトトレランス、フォールトトレラント本当の必要性は少ない右側の真のフォールトトレランスを超えています。
ここに画像を挿入説明

誰かがあなたの質問と関連するブラックリスト、およびあなたのスペースと実際のニーズの違いのための部屋の多くを要求するのであれば、あなたは私たちがミス率を可能にする1つ以上の質問をします。あなたに聞くあなたが道路上精通していることを知っています。

一貫性のあるハッシュ

ここに画像を挿入説明
ここに画像を挿入説明
还有一点忘了说就是,在前端服务器上有一个数组,这个数组里面存的是后面存储服务器的哈希值的值,并且是按顺序来存储的,这样的在接收到一个请求的话,就很方便使用二分法查找到这个请求对应所应该对应的服务器。

上面的机器成环存在两个问题:

这两个问题都是有哈希函数的性质所引起的,哈希函数是离散的函数,是均匀分布的,但是前提是量,数量要多,对于上面的问题来说也就是服务器的数量要多,量起来之后才能体现哈希的特点。

1.在服务器数量较少的时候,哈希域 (也就是上图中的那个环),不一定会被服务器均分
2.就算你解决了第一个问题,服务器均分了哈希域,当你再增加服务器的时候,哈希域又注定不会被均分。

上面两个问题是由哈希函数的性质引起的

那么又该如何解决上面的问题呢?
一个方法,虚拟结点技术

假设环还是那个环,服务器还是那三台服务器
M1,M2, M3
给M1在哈希域环上虚拟出10000个结点,M2也是,M3也是,此时将有30000个结点遍布在环上,归属于M1的10000个结点中应该存放的数据,都存放在M1上。此时哈希域上的结点数量起来了,哈希域也就自然被均分了。
第一个问题解决,当增加服务器数量的时候也是类似的方法,将服务器虚拟出大量的结点,这样就达到了均分的目的。第二个问题也被解决了

关于服务器虚拟出来的节点类似于路由器中的路由表,可以根据路由表找到结点,也可以根据节结点知道,这个结点属于哪一个路由器。
ここに画像を挿入説明
一个技术解决两个问题(虚拟结点技术)
那如何让一个服务器产生10000个节点呢?
方法很多可以使用的其中一个是服务器IP+节点编号

公開された230元の記事 ウォン称賛28 ビュー9333

おすすめ

転載: blog.csdn.net/weixin_43767691/article/details/103363572