LSM-Tree(BigTable的理论模型)(转)
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的理论模型)(转)相关推荐
- [转]LSM-Tree (BigTable 的理论模型)
LSM-Tree理论模型: 来源:http://www.cnblogs.com/raymondshiquan/archive/2011/06/04/2072630.html Google的BigTab ...
- 转 LSM-Tree (BigTable 的理论模型)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! LSM- ...
- LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...
- tidb mysql hbase_HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?
LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 参考资料[4]这么牛X的名单,你不想了解下L ...
- odoo tree视图过滤数据_数据存储结构 LSM Tree PK B TREE (从底层了解数据库设计)...
随着使用数据库的深度和理解能力的提升,有一个问题硬件的提升,与数据量的变化是否对数据库底层的架构有冲击. 我们公认的BTREE B+TREE 是否还能面对现在的硬件的变化. BTREE 到底是为那 ...
- LSM tree(日志结构合并树)_笔记
WAL:Write Ahead Log 写前日志,顺序日志文件 1 LSM tree的定义 LSM tree: Log-Structured-Merge-Tree,日志结构合并树. Log-Struc ...
- 对于LSM Tree写放大问题的一些浅薄学习
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权. 文章目录 引言 性能评估 优化方案 ...
- 【大数据哔哔集20210112】Sorry,Hbase的LSM Tree真的可以为所欲为!
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 我们先抛出一个问题: LSM树是HBase里使用的非常有创意的一种数据结构.在有代表性的关系型数据 ...
- LSM Tree介绍及其应用
1. LSM Tree介绍 1.1 概念 B+树读效率高而写效率差:log型文件操作写效率高而读效率差:因此要在排序和log型文件操作之间做个折中,于是就引入了log-structed merge ...
最新文章
- Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
- Linux 常用命令标记
- 浅谈SD-WAN未来的发展方向
- 【Matlab 图像】滤波器原理使用及测试效果
- hadoop入门小知识点
- WordPress插件-WBOLT热门关键词推荐插件v1.3.0 Pro绿色版
- mysql分组后去重效率_mysql-mb6018ead621887的博客-51CTO博客
- hung task日志linux,Linux Kernel Crash--hung_task_timeout_secs
- 【最强干货】如何在拥抱云原生浪潮中脱颖而出呢?
- React入门基础+练习 (一)
- ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
- 机器学习:伦敦出租车示例(数据分析,数据处理)
- 三维交互电子沙盘在消防应急指挥部的一张图建立方案
- 申论(基础题)之扫清阅读障碍和提取障碍
- VMware扩展Ubuntu分区容量大小
- UnRaid硬件直通的n种正确姿势
- 层次Voronoi Diagrams更好地为HNSW的最底层获取入口点优化近似最近邻搜索(HVS)
- 北京大学计算机科学实验班,北京大学信息科学技术学院2018年拟接收推荐-北京大学研究生院.pdf...
- 【Linux】命令每日一个
- 一种h5前端和服务端通信的安全方案
热门文章
- 死磕源码系列【springboot项目打印is not eligible for getting processed by all BeanPostProcessors (for example: n
- No module named ‘pip._internal.vcs.git
- Java课程中心练习题
- Java运算符(1)
- 关于素数定理的一个延拓
- 聊天室案例,模仿QQ,微信群聊
- Stream 计算总和
- 搬运收藏-Android各种库
- vue element 日期范围选择器限制只能选今天之前的时间,或者只能选今天之后的时间
- Idea报错[Cannot access com.xxx] 的 [解决办法]