《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

时间:2023-12-20 13:13:50

布隆过滤器(bloom filter,BF):

二进制向量数据结构,时空效率很好,尤其是空间效率极高。作用:检测某个元素在某个巨量集合中存在。

构造:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

查询:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

不会发生漏判(false negative),但误判(false positive)存在,因此BF适合允许少量误判的场景。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

计数布隆过滤器(counting bloom filter,CBF):

BF基础上支持删除元素操作。数组每个位置1bit扩展为n bits。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

另外需要考虑计数溢出问题。

BF应用:

Chrome浏览器判断恶意url;爬虫对爬过的url判重;数据库领域用BF加速join过程等。

BigTable中BF用作提升读效率:在SSTable中查找key。额外增加一次读实际文件操作避免误判。Cassandra也借鉴此法。Google流式系统MillWheel保证记录“恰好送达一次”语义时检测重复记录使用此法。

SkipList:

增删改查时间复杂度O(log(n))

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

LSM树(Log-Structured Merge tree):

将大量的随机写换成批量顺序写,极大提升磁盘数据写入速度。代价是降低读效率,可用BF补偿。

以LevelDB实现为例。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

log文件用于系统崩溃恢复:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

MemTable满时转换为Immutable MemTable,经Compaction导出为SSTable:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

manifest文件:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Current文件:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Compation操作:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

minor Compaction:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

major Compaction:

选择Level:某Level下的SSTable文件数超过设定后,合并此Level和Level+1的SSTable

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

选择待合并文件:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

合并过程:

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Merkle Hash树(Merkle Hash Tree)

用于定位数据变化(损毁、篡改、正常修改)

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Snappy与LZSS算法:

应用:BigTable,MapReduce,RPC,Hadoop,HBase,Cassandra,Avro等

压缩/解压缩:用时间换空间;Snappy追求高压缩/解压缩速度

LZ77优化得到LZSS,Snappy基于LZSS

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

LZSS改进LZ77:字符串小于最小匹配长度不压缩

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Snappy改进LZSS:设定最小匹配长度=4,hash表内字符串片段固定长度=4,数据切割成32KB的块,滑动窗口每次后移4

Cuckoo Hashing:

解决hash冲突(collisions)问题,O(1)时间删、查,O(c)时间增。空间利用率50%。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

Cuckoo Hashing应用:SILT存储系统(Partial Key Cuckoo Hashing,SILT hashing)

内存建立外存数据的索引。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

疑问地方应该是:读出h_1(x)的内容并用其值(即b)替换掉哈希空间位置b的内容,即用b替换掉位置b原先的内容。

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

  BigTable MillWheel LevelDB Redis Lucene SILT RAMCloud Cassandra BitTorrent Git Dynamo Riak Cassandra
介绍 Google Google Google     flash memory         Amazon,NoSQL 模仿Dynamo NoSQL
算法 bloom filter bloom filter SkipList SkipList SkipList LSM tree LSM tree LSM tree Merkle tree Merkle tree Merkle tree Merkle tree Merkle tree
  LSM tree   LSM tree     partial key cuckoo hashing         Gossip