首页 > 社交 > 科普中国

「LevelDB从前门到后门」之蜻蜓点水篇

常驻编辑 科普中国 2022-10-15 前门   蜻蜓点水   后门   底层   抽象   静态   模块   接口   版本   代码   数据库   文件   官方

因为自己对数据库比较感兴趣,所以听说LevelDB时间比较早,但因种种原因一直没有写过相关的文章。这段时间不忙,准备做一个系列相关的主题。DSd拜客生活常识网

我们知道,现在主流的数据库有从关系型数据库逐渐往分布式数据库迁移的趋势,比如大名鼎鼎的TiDB和PolarDB。而TiDB底层存储引擎使用的是RocksDB,RocksDB则使用了LevelDB(这就是开源的力量,相互借鉴)。从这方面看,LevelDB的性能可见一斑。DSd拜客生活常识网

本篇文章主要介绍LevelDB的一些特点和基础概念。LevelDB是LSM (Log Structured Merge)算法的实现。里面涉及大量关于文件系统读写技术的真实案例。我们可以从中收货很多重要信息。DSd拜客生活常识网

当前官方的源码地址:C++版本,另外还有两个移植版本分别是GoLevelDB和JavaLevelDB。工程从结构和文件命名上基本保持了跟C++版本的一致。各位看官可以根据自己的喜好各取所需。不过建议还是从C++官方版本看起。有位老哥之前做过一版注释,不过可能是基于main主分支为母版,但是并不影响代码阅读。我使用当前版本为1.22。DSd拜客生活常识网

我自己用的是Mac电脑,主要开发语言是Java。对于C++的使用,更倾向于使用centos系统。所以我平时都是自建虚拟机,然后通过VSCode插件Remote Development“远程”控制来完成项目编译和调试工作。DSd拜客生活常识网

获取源代码:DSd拜客生活常识网

git clone --recurse-submodules https://github.com/google/leveldb.git

构建:DSd拜客生活常识网

mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .

注:编译完是没有out-sharedout-static这两个文件夹 。DSd拜客生活常识网

头文件介绍:DSd拜客生活常识网

leveldb 对外暴露的接口都在 include/*.h 中,用户不应该依赖任何其它目录下的头文件,这些内部 API 可能会在没有警告的情况下被改变。DSd拜客生活常识网

  • include/leveldb/db.h:主要的 DB 接口,从这开始。
  • include/leveldb/options.h: 控制数据库的行为,也控制当个读和写的行为。
  • include/leveldb/comparator.h: 比较函数的抽象。如果你只想对 key 逐字节比较,可以直接使用默认的比较器。如果你想要自定义排序(例如处理不同的字符编码、解码等),可以实现自己的比较器。
  • include/leveldb/iterator.h:迭代数据的接口,你可以从一个 DB 对象获取到一个迭代器。

相关阅读:

  • 探访|“叮叮当当……” 前门大街人气儿回来啦!
  • 大前门多少钱一包 2022年最新价格表
  • 趣味保龄球、棒球九宫格,前门街道体育文化节让居民感受
  • 【走进北京网红打卡地】前门大栅栏街区国潮咖啡
  • 新能源车疯狂涨价,大哥索性花6万买了台二手MINI
  • 前门大栅栏
  • 怀旧之渑池车站
  • 美国前总统千金1.7亿豪宅曝光!网友:不止身材火辣,还很懂
  • 自从老婆学会了开车,你都经历了什么?
  • 国产中大型车到底该怎么选择
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。