大数据日知录 - 算法与数据结构 - 1

Posted dajunjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据日知录 - 算法与数据结构 - 1相关的知识,希望对你有一定的参考价值。

Bloom Filter

BF高教的表征数据集合,时间和空间效率极高。使用长度为m的位数组A来存储集合信息,使用k个相互独立的哈希函数将数据映射到为数组空间。对于集合中的成员a,将其进行k次哈希,哈希结果为x,则将位数组的第x位设置为1,最多有w<=k位会被设置为1. 如果需要判断某个成员是否在S中出现,只需要看hash国有w位中有没有出现0即可。

BF会发生误判,不在集合中的数据被判定成了在集合中,因为a1和a2设置的位可能刚好覆盖了a3的所有哈希位。但不会发生错判。

最优的哈希函数个数为m/n * ln(2).

改进BF: 计数BF.

应用:如恶意url判断,爬虫对url时候爬过的判断,BigTable中用BF来查询key cache ,如果出现误判,在实际存储中查不到,顶多再实际访问一次硬盘,极大提高了访问效率。

Skip List

可替代平衡树的数据结构,依靠随机生成数以一定概率来保持数据的平痕分布。插入,删除,查找的福再度都是o(log(n)).

传统的有序链表查找需要遍历。对每个节点都增加一个指针,指向后续节点之后的节点,这样查询的时候就可以加快访问速度。
技术图片

Search:
技术图片大专栏  大数据日知录 - 算法与数据结构 - 1131218151419953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWN0MjAxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="image"/>

Insert & Delete
技术图片

当增加到3个或更多指针时,查询效率进一步提高。skiplist依赖随机数来保持平衡,插入即电视,随机决定该节点有多个指向后续节点的指针。

LSM树

Log-Structured Merge Tree,将大量随机写变成批量的顺序写,非常适合写操作要求高的场景。
BigTable中的单机数据引擎本质上就是LSM树。Cassandra也用了LSM树。

LSM树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。写入内存是同时写入log到硬盘上,防止系统崩溃时数据丢失。内存表中通常使用SkipList,保持数据有序,当内存够大时,写入到磁盘。

技术图片

Level DB, classic LSM
技术图片

Reference: http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

以上是关于大数据日知录 - 算法与数据结构 - 1的主要内容,如果未能解决你的问题,请参考以下文章

大数据日知录 - 算法与数据结构 - 1

《大数据日知录:架构与算法》读书笔记(多图)

大数据日知录第二章:数据的复制与一致性

大数据日知录集群资源管理与调度笔记

大数据日知录第五章:分布式协调系统笔记--如何当选老大?如何加入组织?如何将组织的意愿传递下去

JAVA日知录送书,三十本!