`
david.org
  • 浏览: 157441 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

LSM-Tree

 
阅读更多

GoogleBigTable架构在分布式结构化存储方面大名鼎鼎,其中的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. Mergepage/block级别的,而不是BigTable中的文件级别的。这一点主要原因可能是BigTable在分布式场景下做block级别很困那,而且GFS也不支持修改。

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

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

分享到:
评论

相关推荐

    The Log-Structured Merge-Tree (LSM-Tree).pdf

    Log-Structured Merge-Tree(LSM-Tree)是一种设计用来提供文件高效索引的数据结构,尤其是在文件经历高插入率(以及删除)的长时间段内。LSM-Tree能够以低成本维护实时索引,特别适合于历史表和日志文件等应用场景...

    LSM-tree.7z

    LSM树(Log-Structured Merge Tree)是一种常用于大规模数据存储和检索的索引结构,尤其是在分布式数据库系统、键值存储系统以及日志文件管理等领域。它的设计目标是优化磁盘I/O操作,特别是减少随机写入导致的磁盘...

    基于LSM-tree的KV数据库性能优化.doc

    基于LSM-tree的KV数据库性能优化 在当前大数据时代,非结构化数据的比例不断增加,数据密集型应用场景逐渐增加,越来越多的企业开始采用KV数据库来支撑其上层应用的数据存储和访问服务。但是随着数据量和用户访问量...

    LSM-Tree关键技术[收集].pdf

    LSM-Tree(Log-Structured Merge Tree)是一种用于存储和检索大规模数据的高效数据结构,尤其在处理大量写入操作时表现出色。它最初在NoSQL数据库系统中得到广泛应用,如nessDB、Cassandra等。LSM-Tree的核心思想是...

    基于更新热点感知的LSM-Tree查询优化.docx

    LSM-Tree(Log-Structured Merge Tree)是一种广泛应用于大数据存储和索引的结构,尤其在键值存储系统中,如LevelDB、RocksDB和Cassandra。这种数据结构主要设计用于处理大规模的数据,它利用内存中的缓存(MemTable...

    基于非易失性内存的LSM-tree存储系统优化.docx

    1.2 LSM-tree 存储引擎LSM-tree是一种适用于大规模数据存储的索引结构,尤其适用于写密集型应用。它将数据分层存储,通常包括内存中的多个小表(如L0层)和磁盘上的大表。写操作首先写入内存,然后定期将数据合并到...

    leveldb的lsm-tree核心原理

    leveldb原理与核心算法介绍,重点介绍lsm-tree运行原理与leveldb的compaction过程,有助于深入理解leveldb的运行机制和算法过程,对leveldb的使用和调优有非常大的帮助

    shifterdb:基于数据库的LSM-Tree,本机支持ACID事务

    LSM-Tree(Log-Structured Merge Tree)是一种广泛应用于键值存储系统和数据库管理系统中的数据结构,主要用于磁盘上的持久化存储。它通过将数据分层管理,优化了写入性能,同时也支持高效的读取操作。`shifterdb`是...

    LSM-trie - An LSM-tree-based Ultra-Large Key-Value Store for Small Data - Slides (atc15_slides_wu)-计算机科学

    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 ...

    Chucky: A Succinct Cuckoo Filter for LSM-Tree

    LSM树(Log-Structured Merge Tree)是一种常用于键值存储的数据结构,它将新数据暂存在内存中,当缓冲区填满时,将其排序并写入存储设备,形成有序的运行。随着时间推移,通过合并多条运行在不同级别上进行数据压缩...

    基于LSM-Tree的键值存储引擎的设计与实现.zip

    本项目将基于LSM Tree开发一个简化的键值存储系统。支持以下基本操作: PUT(K,V)设置键K的值为V GET(K)读取键K的值 DELETE(K)删除键K的值 其中K是64位有符号整数,V位字符串 LSM Tree的键值存储系统分为内存存储和...

    PyPI 官网下载 | lsm-db-0.6.1.tar.gz

    虽然具体细节未在描述中给出,但我们可以推测`lsm-db`可能是一个基于LSM(Log-Structured Merge Tree)的数据存储引擎。LSM树是一种常用于键值存储系统和NoSQL数据库的数据结构,因其高效的写入性能和空间利用率而...

    Open-Channel SSD on LSM.pdf

    《Open-Channel SSD 上的 LSM-Tree 基础键值存储系统》 在现代数据管理领域,键值(KV)存储系统因其高效性、可扩展性和高可用性,广泛应用于支持互联网服务,特别是在处理大量非结构化数据时,比传统的关系型...

    基于LSM树的KV存储综述1

    摘要:伴随着数据量的大规模爆发和云计算的快速发展,早期由于缺乏标准化和其他问题而发展缓慢的键值存储(keyvaluestorage,KVStorage)进入了飞

    The Log-Structured Merge-Tree

    LSM-树(Log-Structured Merge-Tree)是一种为文件系统设计的数据结构,特别适用于处理记录高速插入(以及删除)的场景。在这种数据结构中,索引的更新被推迟和批量处理,使得系统可以在较低成本的情况下维持实时...

    pgrocks-fdw:将RocksDB带到PostgreSQL作为扩展。 这是第一个将LSM-tree引入PostgreSQL外部数据包装器(FDW)。 底层存储引擎可以是RocksDB。 FDW还用于VidarDB引擎,VidarDB引擎是用于各种工作负载的通用存储引擎。 请参阅链接以获取有关VidarDB引擎的更多信息。

    它使用LSM-tree(Log-Structured Merge Tree)来存储数据,这种数据结构特别适合磁盘上的持久化存储,通过批量处理写入操作和顺序写入来最大化I/O效率。在pgrocks-fdw中,RocksDB作为底层的存储引擎,使得PostgreSQL...

    MyRocks在网易核心业务上的使用和优化实践.pdf

    1. Log-Structured Merge-Tree (LSM-Tree):MyRocks 使用 LSM-Tree 作为其核心存储结构,LSM-Tree 由多个组件组成,包括 MemTable、Immutable MemTable、Global WAL Files 等。 2. Mutli-Level LSM-Tree:MyRocks ...

    日志结构合并树的查询优化技术.docx

    日志结构合并树(LSM-Tree)是一种常用于键值对(KV)存储系统的数据结构,它在处理大规模写入场景时表现出色,但其查询性能可能相对较弱。LSM-Tree的设计是为了克服传统同步更新存储结构,如B+树,在处理大量写入时...

Global site tag (gtag.js) - Google Analytics