首页 > 其他分享 >LSM-TREE一种高效的索引数据结构

LSM-TREE一种高效的索引数据结构

时间:2024-11-15 09:50:16浏览次数:3  
标签:tree LSM TREE 索引 内存 磁盘 数据结构 数据

LSM-tree主要目标是快速地建立索引。B-tree是建立索引的通用技术,但是,在大并发插入数据的情况下,B-tree需要大量的磁盘随机IO,很显然,大量的磁盘随机IO会严重影响索引建立的速度。特别地,对于那些索引数据大的情况(例如,两个列的联合索引),插入速度是对性能影响的重要指标,而读取相对来说就比较少。LSM-tree通过磁盘的顺序写,来达到最优的写性能,因为这会大大降低磁盘的寻道次数,一次磁盘IO可以写入多个索引块。

LSM-tree的主要思想是划分不同等级的树。以两级树为例,可以想象一份索引数据由两个树组成,一棵树存在于内存,一棵树存在于磁盘。内存中的树可以不一定是B-树,可以是其他的树,例如AVL树。因为数据大小是不同的,没必要牺牲CPU来达到最小的树高度。而存在于磁盘的树是一棵B-树。

数据首先会插入到内存中的树。当内存中的树中的数据超过一定阈值时,会进行合并操作。合并操作会从左至右遍历内存中的树的叶子节点与磁盘中的树的叶子节点进行合并,当被合并的数据量达到磁盘的存储页的大小时,会将合并后的数据持久化到磁盘,同时更新父亲节点对叶子节点的指针。

之前存在于磁盘的叶子节点被合并后,旧的数据并不会被删除,这些数据会拷贝一份和内存中的数据一起顺序写到磁盘。这会操作一些空间的浪费,但是,LSM-tree提供了一些机制来回收这些空间。

磁盘中的树的非叶子节点数据也被缓存在内存中。

数据查找会首先查找内存中树,如果没有查到结果,会转而查找磁盘中的树。

有一个很显然的问题是,如果数据量过于庞大,磁盘中的树相应地也会很大,导致的后果是合并的速度会变慢。一个解决方法是建立各个层次的树,低层次的树都比上一层次的树数据集大。假设内存中的树为c0, 磁盘中的树按照层次一次为c1, c2, c3, ... ck-1, ck。合并的顺序是(c0, c1), (c1, c2)...(ck-1, ck)。

为什么LSM-tree的插入很快

1. 首先,插入操作首先会作用于内存,并且,内存中的树不会很大,这会很快。

2. 合并操作会顺序写入一个或多个磁盘页,这比随机写快得多。

标签:tree,LSM,TREE,索引,内存,磁盘,数据结构,数据
From: https://blog.csdn.net/kevinlibo/article/details/143786989

相关文章

  • 郝玩的数据结构2——树状数组(待upd)
    首先,拉张图树状数组,相对于线段树来说,空间复杂度更小,但是可以处理的信息具有局限性常用于处理区间(矩阵)查改(差分转化为单点查改),单点查改板子题1Accode:点击查看代码#include<bits/stdc++.h>#definelowbitx&-xusingnamespacestd;intn,m,s[500005];voidchange(intx......
  • 数据结构 ——— 利用前序序列重建链式二叉树
    目录题目要求链式二叉树示意图​编辑代码实现 题目要求读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树例如前序遍历的字符串为:ABC##DE#G##F###;其中"#"表示空树链式二叉树示意图以此图的链式二叉树为例子那么此链式二叉树前序遍历转换为字符......
  • 97.【C语言】数据结构之栈
    目录栈1.基本概念2.提炼要点3.概念选择题4.栈的实现栈初始化函数入栈函数出栈函数和栈顶函数栈顶函数栈销毁函数栈基本概念参见王爽老师的《汇编语言第四版》第56和57页节选一部分1.基本概念2.提炼要点1.定义:一种特殊的线性表,其只允许在固定的一端进行......
  • elementPlus中的el-tree
    将接口返回的数据整理成组件支持的数据结构接口返回的数据格式:[{"id":767947,"appName":"生生世世","appBundle":"cds","appStore":2,"link":"www.baidu.com","accountId":"3,68","......
  • 界面控件DevExpress WPF中文教程:TreeList视图及创建分配视图
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 【新人系列】Python 入门(十):数据结构 - 下
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • SS241113C. 数据结构 (struct)
    SS241113C.数据结构(struct)题意有\(n\)个数,\(m\)个操作,\(n,m,a_i\le10^6\),每次操作给区间\([l,r]\)的所有数字加\(1\),然后输出全局颜色数量,操作独立。思路感觉不好想,对我来讲有点难,需要更聪明的脑袋和丰富的想象力。首先\(O(n\sqrt{n})\)的莫队做法是显然的,假设......
  • 数据结构——串的顺序存储实现
    概念:串(string):零个或多个任意字符组成的有限序列空串:(与空集合符号相同)子串:串中任意个连续字符组成的子序列称为该串的子串主串:包含子串的串相应地称为主串字符位置:字符在序列中的序号为该字符在串中的位置子串位置:子串第一个字符在主串中的位置空格串:由一个或多个空格组......
  • cmu15545-数据访问方式:B+树(B+Tree)
    目录基本概念基于磁盘的B+树查询与索引设计选择结点大小(NodeSize)合并阈值(MergeThredshold)变长键(Variable-lengthKeys)结点内部搜索(Intra-NodeSearch)优化手段PointerSwizzlingBε-treesBulkInsertPrefixCompressionDeduplicationSuffixTruncation基本概念基于磁盘的B+树......
  • 【新人系列】Python 入门(九):数据结构 - 中
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......