Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题。

MergeDump的理论基础是LSM-Tree (Log-Structured Merge-Tree), 原文见:LSM Tree

下面先说一下LSM-Tree的基本思想,再记录下读文章的几点感受。

LSM思想非常朴素,就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改批量写入到磁盘,在批量写入的过程中跟已经存在的数据做rolling merge。

拿update举个例子:

比如有1000万行数据,现在希望update table.a set addr='new addr' where pk = '833',

如果使用B-Tree类似的结构操作,就需要:

1. 找到该条记录所在的page,

2. load page到内存(如果恰好该page已经在内存中,则省略该步)

3. 如果该page之前被修改过,则先flush page to disk

4. 修改数据

转自http://www.cnblogs.com/raymondshiquan/archive/2011/06/04/2072630.html

上面的动作平均来说有两次disk I/O,

如果采用LSM-Tree类似结构,则:

1. 将需要修改的数据直接写入内存

可见这里是没有disk I/O的。

当然,我们要说,这样的话读的时候就费劲了,需要merge disk上的数据和memory中的修改数据,这显然降低了读的性能。

确实如此,所以作者其中有个假设,就是写入远大于读取的时候,LSM是个很好的选择。我觉得更准确的描述应该是”优化了写,没有显著降低读“,因为大部分时候我们都是要求读最新的数据,而最新的数据很可能还在内存里面,即使不在内存里面,只要不是那些更新特别频繁的数据,其I/O次数也是有限的。

所以LSM-Tree比较适合的应用场景是:insert数据量大,读数据量和update数据量不高且读一般针对最新数据。

文章读下来有以下几点感受:

1. 基本思想早就有了,作者给出了较好的表现形式。

2. Merge是page/block级别的,而不是BigTable中的文件级别的。这一点主要原因可能是BigTable在分布式场景下做block级别很困那,而且GFS也不支持修改。

3. 其提出的比较标准比较有趣,将磁盘容量,转速等结合起来给出一个以美元为单位的cost标准,然后跟B-Tree结构的实现做了比较,结果当然是大大胜出。但是这里我觉得作者有些比较是不合理的,比如LSM使用log而B-Tree没有使用,这显然对B-Tree不公,其实B-Tree如果使用log,写入性能应该不比LSM差,顺序读取可能差一些。

4. 在Multi components 中,提出Ci/Ci+1的比例达到20的时候是最优的,这个数字意义不大,但是其中的分析方法对于Merge策略的选择是个启发。

转载于:https://www.cnblogs.com/dongck-learning/archive/2012/07/11/2586487.html

LSM-Tree(BigTable的理论模型)(转)相关推荐

  1. [转]LSM-Tree (BigTable 的理论模型)

    LSM-Tree理论模型: 来源:http://www.cnblogs.com/raymondshiquan/archive/2011/06/04/2072630.html Google的BigTab ...

  2. 转 LSM-Tree (BigTable 的理论模型)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! LSM- ...

  3. LSM Tree 学习笔记——MemTable通常用 SkipList 来实现

    最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...

  4. tidb mysql hbase_HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?

    LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 参考资料[4]这么牛X的名单,你不想了解下L ...

  5. odoo tree视图过滤数据_数据存储结构 LSM Tree PK B TREE (从底层了解数据库设计)...

    随着使用数据库的深度和理解能力的提升,有一个问题硬件的提升,与数据量的变化是否对数据库底层的架构有冲击. 我们公认的BTREE B+TREE  是否还能面对现在的硬件的变化.  BTREE 到底是为那 ...

  6. LSM tree(日志结构合并树)_笔记

    WAL:Write Ahead Log 写前日志,顺序日志文件 1 LSM tree的定义 LSM tree: Log-Structured-Merge-Tree,日志结构合并树. Log-Struc ...

  7. 对于LSM Tree写放大问题的一些浅薄学习

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权. 文章目录 引言 性能评估 优化方案 ...

  8. 【大数据哔哔集20210112】Sorry,Hbase的LSM Tree真的可以为所欲为!

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 我们先抛出一个问题: LSM树是HBase里使用的非常有创意的一种数据结构.在有代表性的关系型数据 ...

  9. LSM Tree介绍及其应用

    1. LSM Tree介绍 1.1 概念 ​B+树读效率高而写效率差:log型文件操作写效率高而读效率差:因此要在排序和log型文件操作之间做个折中,于是就引入了log-structed merge ...

最新文章

  1. Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
  2. Linux 常用命令标记
  3. 浅谈SD-WAN未来的发展方向
  4. 【Matlab 图像】滤波器原理使用及测试效果
  5. hadoop入门小知识点
  6. WordPress插件-WBOLT热门关键词推荐插件v1.3.0 Pro绿色版
  7. mysql分组后去重效率_mysql-mb6018ead621887的博客-51CTO博客
  8. hung task日志linux,Linux Kernel Crash--hung_task_timeout_secs
  9. 【最强干货】如何在拥抱云原生浪潮中脱颖而出呢?
  10. React入门基础+练习 (一)
  11. ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
  12. 机器学习:伦敦出租车示例(数据分析,数据处理)
  13. 三维交互电子沙盘在消防应急指挥部的一张图建立方案
  14. 申论(基础题)之扫清阅读障碍和提取障碍
  15. VMware扩展Ubuntu分区容量大小
  16. UnRaid硬件直通的n种正确姿势
  17. 层次Voronoi Diagrams更好地为HNSW的最底层获取入口点优化近似最近邻搜索(HVS)
  18. 北京大学计算机科学实验班,北京大学信息科学技术学院2018年拟接收推荐-北京大学研究生院.pdf...
  19. 【Linux】命令每日一个
  20. 一种h5前端和服务端通信的安全方案

热门文章

  1. 死磕源码系列【springboot项目打印is not eligible for getting processed by all BeanPostProcessors (for example: n
  2. No module named ‘pip._internal.vcs.git
  3. Java课程中心练习题
  4. Java运算符(1)
  5. 关于素数定理的一个延拓
  6. 聊天室案例,模仿QQ,微信群聊
  7. Stream 计算总和
  8. 搬运收藏-Android各种库
  9. vue element 日期范围选择器限制只能选今天之前的时间,或者只能选今天之后的时间
  10. Idea报错[Cannot access com.xxx] 的 [解决办法]