Go 存储系列:LSM存储引擎 LevelDB

概念介绍

LSM-Tree 被是一种面向写多读少应用场景的数据结构 ,被 Hbase、RocksDB 等强力 NoSQL 数据库采用作为底层文件组织方式。

简单的LSM-Tree 包含 2 层树状数据结构:

  • Memtable 并完全驻留在内存中(假设 T0)

  • SStables 存储在磁盘中(假设 T1)
    在这里插入图片描述

  • 记录会先从 memtable T0 组件中读取,如果没有,则会从 SStables T1 组件中读取

  • 新记录被插入到 memtable T0 组件中。 如果插入导致 T0 组件超过某个大小阈值,则会从 T0 中删除连续的条目段并将其合并到磁盘上的 T1 中。

LSM-Tree

Memtable

MemTable是在内存中的数据结构,用于保存最近更新的数据,会按照Key有序地组织这些数据,LSM树对于具体如何组织有序地组织数据并没有明确的数据结构定义,例如Hbase使跳跃表来保证内存中key的有序。

因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性。

SSTables (Sorted String Table )

有序键值对集合,是LSM树组在磁盘中的数据结构。为了加快SSTable的读取,可以通过建立key的索引以及布隆过滤器来加快key的查找。

数据合并

由于我们将数据作为 SSTable 存储在磁盘中,假设有 N 个 SSTable,每个表的大小为 M,那么最坏情况读取时间复杂度是 O(N* Log(M) ),因此,随着 SSTable 数量的增加,读取时间复杂度也会增加。
另外,当我们刚刚刷新数据库中的 SSTable 时,多个 SSTable 中存在相同的 Key,LSM 会使用Compactor,Compactor 在后台运行,合并 SSTables 并删除具有相同行的多行,并添加带有最新数据的新键,并将它们存储在新的合并/压缩的 SSTable 中。

goleveldb 中LSM树实现

  • https://github.com/justinethier/keyva/
  • https://github.com/syndtr/goleveldb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140761.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能

如何选择音频播放开发方式 在HarmonyOS系统中,多种API都提供了音频播放开发的支持,不同的API适用于不同音频数据格式、音频资源来源、音频使用场景,甚至是不同开发语言。因此,选择合适的音频播放API,有助于降低开发工…

期中考核复现(web)

1z_upload 进到这个页面里面还是挺懵的,什么也不知道 点添加书籍之后发现变成了sql 师兄给了源码,看了之后找到了他的限制函数 但是肯定要先登录才可以 登录还是用bp爆破 最后得到账号密码是admin/admin12345 进来之后就可以看到那个文件上传的地方 上…

centos 内核对应列表 内核升级 linux

近期服务器频繁出现问题,找运维同事排查,说是系统版本和内核版本和官方不一致,如下: Release 用的是7.8, kernal 用的是 5.9 我一查确实如此: 内核: Linux a1messrv1 5.9.8-1.el7.elrepo.x86_64 发行版 Cen…

分布式链路追踪系统Skywalking的部署和应用

一,背景 随着业务的扩张, 系统变得越来越复杂, 由前端、app、api,微服务,数据库,缓存,消息队列,关系数据库, 列式数据库等构成了繁杂的分布式网络. 当出现一个调用失败的问题时,要定位异常在哪个服务,需要进入每一个服务里看日志, 这个过程的复杂度和工作量是不可想…

Flink学习笔记(三):Flink四种执行图

文章目录 1、Graph 的概念2、Graph 的演变过程2.1、StreamGraph (数据流图)2.2、JobGraph (作业图)2.3、ExecutionGraph (执行图)2.4、Physical Graph (物理图) 1、Graph 的概念 Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -&g…

黑白二维码不好看,那么快学习改色的方法吧

现在经常会看到很多的二维码不是黑白图案,可以是其他纯色或者渐变色等样式的,那么怎么将黑白二维码改成其他鲜艳好看的颜色呢?一般想要修改普通样式的二维码可以用二维码美化生成器来处理,只需要上传二维码图片,就可以…

睿趣科技:现在开抖音小店到底要多少钱

随着短视频平台的兴起,抖音小店成为了越来越多创业者的选择。那么,现在开抖音小店到底要多少钱呢?这个问题涉及到以下几个方面的费用。 首先,我们需要了解的是,开设抖音小店本身是免费的。你只需要在抖音APP上申请开店&#xff0…

黑白棋(Othello, ACM/ICPC World Finals 1992, UVa220)rust解法

你的任务是模拟黑白棋游戏的进程。黑白棋的规则为:黑白双方轮流放棋子,每次必须让新放的棋子“夹住”至少一枚对方棋子,然后把所有被新放棋子“夹住”的对方棋子替换成己方棋子。一段连续(横、竖或者斜向)的同色棋子被…

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions actions顾名思义就是一堆动作,是一个持续集成服务,持续集成包含了拉代码、运行测试、编译代码、登录远程服务器,发布到第三方服务等等的操作,GitHub将这些操作称为actions。 概念:Workflows, Events,…

【常用图像增强技术,Python-opencv】

文章目录 常用图像增强技术调整大小灰度变换标准化随机旋转中心剪切随机裁剪高斯模糊亮度、对比度和饱和度调节水平翻转垂直翻转高斯噪声随机块中心区域 常用图像增强技术 图像增强技术是常用于数据增强的方法,可以帮助增加数据集中图像的多样性,提高深…

实现最简的内核模块

实现最简单的内核模块,可从中窥探内核模块的编写流程。同时,也可以在其上进行扩展,对内核函数和全局变量进行调用和打印,熟悉内核接口。 在实现最简内核模块之前,在本地安装配置开发环境。可用选择使用vagrant工具快速…

React-Router路由

1.React Router的基本使用 安装:安装时,选择react-router-dom,react-router会包含一些react-native的内容,web开发并不需要; npm install react-router-dom 路径模式 BrowserRouter使用history模式; Hash…