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

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

构造:

查询:

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

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

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

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

BF应用:

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

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

SkipList:

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

LSM树(Log-Structured Merge tree):

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

以LevelDB实现为例。

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

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

manifest文件:

Current文件:

Compation操作:

minor Compaction:

major Compaction:

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

选择待合并文件:

合并过程:

Merkle Hash树(Merkle Hash Tree)

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

Snappy与LZSS算法:

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

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

LZ77优化得到LZSS,Snappy基于LZSS

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

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

Cuckoo Hashing:

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

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

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

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

  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    

《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构的更多相关文章

  1. 一. 数据分片和路由 <<大数据日知录>> 读书笔记

    本章主要讲解大数据下如何做数据分片,所谓分片,即将大量数据分散在不同的节点,同时每个存储节点还要做副本备份. 而一般的抽象分片方法是, 先将数据映射到一个分片空间,这是多对一的关系,即一个数据分片区间 ...

  2. 二. 大数据常用的算法和数据结构 <<大数据日知录>> 读书笔记

    基本上是hash实用的各种举例 布隆过滤器 Bloom Filter 常用来检测某个原色是否是巨量数据集合中的成员,优势是节省空间,不会有漏判(已经存在的数据肯定能够查找到),缺点是有误判(不存在的数 ...

  3. 读&lt;大数据日知录:架构与算法&gt;有感

    前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...

  4. 《大数据日知录》读书笔记-ch2数据复制与一致性

    CAP理论:Consistency,Availability,Partition tolerance 对于一个分布式数据系统,CAP三要素不可兼得,至多实现其二.要么AP,要么CP,不存在CAP.分布 ...

  5. 《大数据日知录》读书笔记-ch1数据分片与路由

    目前主流大数据存储使用横向扩展(scale out)而非传统数据库纵向扩展(scale up)的方式.因此涉及数据分片.数据路由(routing).数据一致性问题 二级映射关系:key-partiti ...

  6. 《大数据日知录》读书笔记-ch16机器学习:分布式算法

    计算广告:逻辑回归 千次展示收益eCPM(Effective Cost Per Mille) eCPM= CTR * BidPrice 优化算法 训练数据使用:在线学习(online learning ...

  7. 《大数据日知录》读书笔记-ch15机器学习:范型与架构

    机器学习算法特点:迭代运算 损失函数最小化训练过程中,在巨大参数空间中迭代寻找最优解 比如:主题模型.回归.矩阵分解.SVM.深度学习 分布式机器学习的挑战: - 网络通信效率 - 不同节点执行速度不 ...

  8. 《大数据日知录》读书笔记-ch11大规模批处理系统

    MapReduce: 计算模型: 实例1:单词统计 实例2:链接反转 实例3:页面点击统计 系统架构: 在Map阶段还可以执行可选的Combiner操作,类似于Reduce,但是在Mapper sid ...

  9. [转载] leveldb日知录

    原文: http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 对leveldb非常好的一篇学习总结文章 郑重声明:本篇博客是自己学 ...

随机推荐

  1. javascript总结31 :DOM概述

    1 JavaScript 三个组成部分 核心(ECMAScript)欧洲计算机制造商协会 描述了JS的语法和基本对象. 文档对象模型(DOM) 处理网页内容的方法和接口 浏览器对象模型(BOM) 与浏 ...

  2. 那些原生的javascript APIs

    在前端开发的时候,我们往往会使用javascript 框架,使用框架的好处多多,提供的方便的操作函数,类继承机制,MV*等,让我们能够快速开发,然而我们应该清楚这些框架都是基于浏览器原生api的封装, ...

  3. 新浪微博Android开发获取Access_token的步骤

    最近学习Android的开发,学完书本之后,决定研究如何开发一个微博客户端来实践.第一步当然是用户授权.但是新浪开放平台的说明实在写得不太清楚,用GOOGLE+研读的方法,总算是实验成功了. 这里有别 ...

  4. webstorm的debug模式

    F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内, 如果该方法体还有方法,则不会进入该内嵌的方法中 * F8 在 Debug 模式下,进入下一步,如果当前行断点是 ...

  5. heartbeat+nginx搭建高可用HA集群

    前言: HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器 ...

  6. sp_helptext输出错行问题解决

    相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义.但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程, ...

  7. stderr和stdout(printf、fprintf、sprintf)(转)

    本文转自:http://www.cnblogs.com/zhangyabin---acm/p/3203745.html 先区分一下:printf,sprintf,fprintf. 1,printf就是 ...

  8. oracle-01427

    Oracle / PLSQL: ORA-01427 Learn the cause and how to resolve the ORA-01427 error message in Oracle. ...

  9. Mysql内置功能《一》流程控制

    delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSE ...

  10. Sumsets(数学)

    Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 14964 Accepted: 5978 Description ...