Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题。
MergeDump的理论基础是LSM-Tree (Log-Structured Merge-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. 修改数据
上面的动作平均来说有两次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策略的选择是个启发。
分享到:
相关推荐
Log-Structured Merge-Tree(LSM-Tree)是一种设计用来提供文件高效索引的数据结构,尤其是在文件经历高插入率(以及删除)的长时间段内。LSM-Tree能够以低成本维护实时索引,特别适合于历史表和日志文件等应用场景...
LSM树(Log-Structured Merge Tree)是一种常用于大规模数据存储和检索的索引结构,尤其是在分布式数据库系统、键值存储系统以及日志文件管理等领域。它的设计目标是优化磁盘I/O操作,特别是减少随机写入导致的磁盘...
基于LSM-tree的KV数据库性能优化 在当前大数据时代,非结构化数据的比例不断增加,数据密集型应用场景逐渐增加,越来越多的企业开始采用KV数据库来支撑其上层应用的数据存储和访问服务。但是随着数据量和用户访问量...
LSM-Tree(Log-Structured Merge Tree)是一种用于存储和检索大规模数据的高效数据结构,尤其在处理大量写入操作时表现出色。它最初在NoSQL数据库系统中得到广泛应用,如nessDB、Cassandra等。LSM-Tree的核心思想是...
LSM-Tree(Log-Structured Merge Tree)是一种广泛应用于大数据存储和索引的结构,尤其在键值存储系统中,如LevelDB、RocksDB和Cassandra。这种数据结构主要设计用于处理大规模的数据,它利用内存中的缓存(MemTable...
1.2 LSM-tree 存储引擎LSM-tree是一种适用于大规模数据存储的索引结构,尤其适用于写密集型应用。它将数据分层存储,通常包括内存中的多个小表(如L0层)和磁盘上的大表。写操作首先写入内存,然后定期将数据合并到...
leveldb原理与核心算法介绍,重点介绍lsm-tree运行原理与leveldb的compaction过程,有助于深入理解leveldb的运行机制和算法过程,对leveldb的使用和调优有非常大的帮助
LSM-Tree(Log-Structured Merge Tree)是一种广泛应用于键值存储系统和数据库管理系统中的数据结构,主要用于磁盘上的持久化存储。它通过将数据分层管理,优化了写入性能,同时也支持高效的读取操作。`shifterdb`是...
LSM-trie: An LSM-tree-based Ultra-LargeKey-Value Store for Small DataXingbo WuYuehai XuSong JiangZili ShaoThe Hong KongPolytechnic UniversityThe Challenge on Today’s Key-Value Store• Trends on ...
LSM树(Log-Structured Merge Tree)是一种常用于键值存储的数据结构,它将新数据暂存在内存中,当缓冲区填满时,将其排序并写入存储设备,形成有序的运行。随着时间推移,通过合并多条运行在不同级别上进行数据压缩...
本项目将基于LSM Tree开发一个简化的键值存储系统。支持以下基本操作: PUT(K,V)设置键K的值为V GET(K)读取键K的值 DELETE(K)删除键K的值 其中K是64位有符号整数,V位字符串 LSM Tree的键值存储系统分为内存存储和...
虽然具体细节未在描述中给出,但我们可以推测`lsm-db`可能是一个基于LSM(Log-Structured Merge Tree)的数据存储引擎。LSM树是一种常用于键值存储系统和NoSQL数据库的数据结构,因其高效的写入性能和空间利用率而...
《Open-Channel SSD 上的 LSM-Tree 基础键值存储系统》 在现代数据管理领域,键值(KV)存储系统因其高效性、可扩展性和高可用性,广泛应用于支持互联网服务,特别是在处理大量非结构化数据时,比传统的关系型...
摘要:伴随着数据量的大规模爆发和云计算的快速发展,早期由于缺乏标准化和其他问题而发展缓慢的键值存储(keyvaluestorage,KVStorage)进入了飞
LSM-树(Log-Structured Merge-Tree)是一种为文件系统设计的数据结构,特别适用于处理记录高速插入(以及删除)的场景。在这种数据结构中,索引的更新被推迟和批量处理,使得系统可以在较低成本的情况下维持实时...
它使用LSM-tree(Log-Structured Merge Tree)来存储数据,这种数据结构特别适合磁盘上的持久化存储,通过批量处理写入操作和顺序写入来最大化I/O效率。在pgrocks-fdw中,RocksDB作为底层的存储引擎,使得PostgreSQL...
1. Log-Structured Merge-Tree (LSM-Tree):MyRocks 使用 LSM-Tree 作为其核心存储结构,LSM-Tree 由多个组件组成,包括 MemTable、Immutable MemTable、Global WAL Files 等。 2. Mutli-Level LSM-Tree:MyRocks ...
日志结构合并树(LSM-Tree)是一种常用于键值对(KV)存储系统的数据结构,它在处理大规模写入场景时表现出色,但其查询性能可能相对较弱。LSM-Tree的设计是为了克服传统同步更新存储结构,如B+树,在处理大量写入时...