一、重要数据结构与算法
分布式存储系统中存储大量的数据,同时需要支持大量的上层读/写操作,为了实现高吞吐量,设计和实现一个良好的数据结构能起到相当大的作用
这是以下三个数据库使用的数据结构,一个良好的数据结构对于分布式系统来说有着很大的作用。
NoSQL – LSM Tree
MemC3 – Cuckoo Hash
HBase – BloomFilter
二、Bloom Filter
Bloom Filter用于在海量数据中快速查找给定的数据是否在某个集合内
Bloom Filter的原理是当一个元素被加入集合时,通过k 个散列函数将这个元素映射成一个位数组中的k 个点,把它们置为1
检索时,用户只要看看这些点是不是都是1 就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是 1,则被检元素很可能在
Bloom Filter的高效是有一定代价的,在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合,因此Bloom Filter不适合那些零错误的应用场合,在能容忍低错误的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省
三、LSM树
LSM 树和 B+树相比,LSM 树牺牲了部分读性能,用来大幅度提高写性能
把一棵大树拆分成n棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做 merge操作
插入操作首先会作用于内存,由于内存中的树不会很大,因此速度快
合并操作会顺序写入一个或多个磁盘页,比随机写入快得多
四、Merkle哈希树
数据分成小的数据块,有相应的哈希和它对应
往上走,把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希组合得到了一个“子哈希”
Merkle Tree明显的一个好处是可以单独拿出一个分支来对部分数据进行校验
五、Cuckoo哈希
Cuckoo 哈希是一种解决 hash 冲突的方法,其目的是使用简易 的 hash 函数来提高 Hash Table 的利用率
使用两个 hash 函数来处理碰撞,从而每个 key 都对应到两个位置
对 key 值哈希,生成两个 hash key值 ,hash k1 和 hash k2 ,如果对应的两个位置上有一个为空,直接把 key 插入即可
否则,任选一个位置,把 key 值插入,把已经在那个位置的 key 值踢出
其查找思路与一般哈希一致,Cuckoo Hash在读多写少的负载情况下能够快速实现数据的查找
创作不易 觉得有帮助请点赞关注收藏~~~