| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 一致性哈希,虚拟节点,布隆过滤器 -> 正文阅读 |
|
[数据结构与算法]一致性哈希,虚拟节点,布隆过滤器 |
目录 1.一致性哈希例如:有三个服务器A,B,C,而现在我们手中有6W张照片,那么怎么把这些照片分给三个服务器?方法为:提取图片的关键字 % 服务器个数(3)? 假设,又新加了一台服务器D,这时会发生什么? 那之前的很多图片的位置都要发生改变 由于服务器数量发生改变,导致服务器中的数据受到影响(全部数据) 2.虚拟节点?上面只是一种理想的状态,几乎是达不到的。有时会出现哈希偏斜: 此时,就需要引入虚拟节点概念,虚拟节点:不存在的点,臆想出来的点 例如:A? B C是真实的服务器,接着就把A,B,C分身(虚拟)——A: A1 A2 A3 ;B: B1 B2 B3 ;C:C1 C2 C3; ?我们如果遇到了A1 A2 A3也就是A的分身,我们可以直接认为遇到了A本身 绿色弧,认为都是属于服务器A的部分,和之前的哈希偏斜相比,压力大大减少,接近于均分 3.布隆过滤器(海量数据去重)例如:有10E个整型值,不重复,现在需要确定X存不存放在这10E个整型数内? 实际上,布隆过滤器就是一个非常长的二进制矢量 + 一组哈希函数 假设,现在有三个不同的哈希函数A, B, C ?这是20个二进制位,要么存1,要么存0。 设100,200,300这三个数经过哈希函数A, B, C的分解后剩下的数字如图所示,我们把有的数字为值改为1: ?再然后,需要判断一下250在不在这组数中,而我们知道250可以被A,B,C三个函数分解为: 分析一下:如果250存在,则3,9,19的格子里应该都是1,但是我们看到19这个格子并不是1,所以250是不存在的。 最后,判断一下50在不在这组数中,50可以被A,B,C三个函数分解为: 分析一下:50可以被A,B,C三个函数分解为6,9,15,而6,9,15这三个格子确实都是1,那么这个时候可以认定50一定在吗?显然是不能认定的,因为我们知道6对应格子的1是100或200的,9对应格子的1是100的,15对应格子的1是300的,所以不能得到50一定存在的结论。这就是布隆过滤器的一个缺点。 布隆过滤器的特点:他可以非常快速的告诉我们一个值存不存在,如果判定不存在是一定不存在,但是如果判定存在的话,不能保证,有可能不存在 布隆过滤器的优点: 1.占用空间小? ?2.插入,查找时间复杂度特别低? ?3.安全,布隆过滤器不存在存储原始数据本身,所以不害怕被盗。 布隆过滤器的缺点: 1.会发生误判(如果计算得到的位都是1,但是不能保证这个值真的存在) 2.删除根本办不到 误判率:? 0.03? ? ? 700W? ? ? ? ? 5个 ? ? ? ? ? ? ? ? ?0.01? ? ?900W? ? ? ? ? 7个 误判率降低 —— 导致二进制位占用空间增加 —— 导致需要的哈希函数增加 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:38:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |