首页 > 其他分享 >goleveldb的原理简述(基于golang的goleveldb库)

goleveldb的原理简述(基于golang的goleveldb库)

时间:2024-09-03 15:53:12浏览次数:11  
标签:文件 wal golang 简述 goleveldb 内存 日志 数据

简介

goleveldb是基于LSM-Tree实现的针对处理写多读少场景的解决方案,通常用于构建写多读少的存储引擎

整体架构图如下

请添加图片描述

基于用户接口层简述原理吧

  • Get,按key查询数据,首先区内存中的数据,如果内存中没有则依次从硬盘中的ldb文件中取得数据。
  • Put,按key更新数据,首先写内存数据,如果大小达到内存存储的阈值,则将immutable替换为memtable,新建一个logfile存储wal日志,然后依次压缩各层sstable文件,最后再删除已被压缩处理的原sstable文件,按文件序列号删除老的wal日志
  • Delete,操作与put操作差不多
  • open,初始化数据库,并更新元数据信息,看是否可以压缩文件,如果可以则对文件进行压缩处理,对wal日志进行清理

总结

其实就是按图索骥,抓住主要接口和主体逻辑,比如这里图中的open、get、put、delete接口,然后一个个理解相应的代码逻辑,当然也要对lsm-tree原理有所了解。掌握这些之后,基本上很快就可以理解相应的代码逻辑了,不过我这里基于的 [email protected]:golang/leveldb.git是这个版本的代码库,整体逻辑相对简单一点,没有那么多借助于管道通信的操作,比较容易理解,对于理解lsm-tree的基本原理应该是足够了。

标签:文件,wal,golang,简述,goleveldb,内存,日志,数据
From: https://blog.csdn.net/weixin_37078439/article/details/141864172

相关文章

  • Golang 脱敏扩展包:简化敏感信息处理的利器
    Golang脱敏扩展包:简化敏感信息处理的利器原创 PFinal南丞 PFinalClub  2024年09月03日07:36 上海 听全文PFinalClub一个有信念者所开发出的力量,大于99个只有兴趣者。88篇原创内容公众号Golang脱敏扩展包:简化敏感信息处理的利器背景在数据处理......
  • 使用Golang的协程竟然变慢了|100万个协程的归并排序耗时分析
    前言这篇文章将用三个版本的归并排序,为大家分析使用协程排序的时间开销(被排序的切片长度由128到1000w)本期demo地址:https://github.com/BaiZe1998/go-learning往期视频讲解......
  • JSP简述
    JSPJSP的本质是一个Servlet,JSP主要负责与用户进行交互,将最终的界面呈现给用户,HTML+JS+CSS+JAVA的混合文件当服务器接收到一个后缀是JSP的请求时,将该请求交给JSP引擎去处理,每一个JSP页面第一次被访问时,JSP引擎会将他翻译成Servlet文件,由Web容器调用servlet完成响应。从开发的......
  • golang使用http客户端 多个协程同时请求接口
    packagemainimport( "encoding/json" "fmt" "io" "net/http" "net/url" "sync")typeApiResponsestruct{ Codeint`json:"code"` Msgstring`json:"msg&qu......
  • 密码学简述
    密码学发展概述密码学应用非常广泛大致的讲就是从古典密码学到现代密码学这两者有一个最大的不同在于:kerckhoff法则kerckhoff法则:加密不应该依赖于加密算法的保密性而是要依赖于秘钥的保密性即使加密算法开源攻击者得不到秘钥就无法通过密文解出明文古典密码学:加密的......
  • Golang小项目(1)
    Golang小项目(1)前言本项目适合Golang初学者,通过简单的项目实践来加深对Golang的基本语法和Web开发的理解。建议前往torna.top查阅效果更佳项目结构.├──main.go└──static├──form.html└──index.html项目流程图定义三个路由:/:首......
  • MySQL:简述对索引的认识
    一、为什么要有索引?一般的应用系统,读操作的比例远远大于写操作的比例,而且插入操作和一般的更新操作很少出现性能问题。在生产环境中,我们遇到最多的,也是最容易出现性能问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起查询优化,就不得不提到索引了。......
  • JAVA基础之二-面向对象简述
    java基础之二-面向对象简述一、概述如果有机会多接触几种语言,对于程序员多少是有好处的,至少有助于理解代码的运行真谛。高级语言有很多是面向对象的,因为面向对象的优点是显而易见的。这里比较知名的有rust,java,c++,c#但也有很多语言是面向过程的,鼎鼎有名有C,还有现在大家不......
  • golang新特性:泛型
    泛型Go的泛型(或者或类型形参)目前可使用在3个地方泛型类型-类型定义中带类型形参的类型泛型receiver-泛型类型的receiver泛型函数-带类型形参的函数为了实现泛型,Go引入了一些新的概念:类型形参类型形参列表类型实参类型约束实例化-泛型类型不能直接使用,要......
  • golang 标准库(os)
    os标准库实现了平台(操作系统)无关的编程接口。1.创建文件packagemainimport( "fmt" "os")//创建文件funcCreatFile(FileNamestring){ f,err:=os.Create(FileName) iferr!=nil{ fmt.Println("err:",err) }else{ fmt.Printf("创建文件%v成......