[leveldb] 与大神对话录——leveldb

简介: 这篇是研究 levedb 键值数据库的开端篇!

[TOC]

建议是多研究一些好项目,不要成为“语言学家”!

从一篇朋友圈说起

我发了一条朋友圈,打算把C++所有语法过一遍。发现自己之前学C渣渣学得太渣了,老是和 C语言的混在一起理解,发现 C++保留的结构体 struct 就和 C语言的有区别:

  • C/C++语言的结构体的成员变量默认是公有的,而 C++的类成员变量默认是私有的;
  • C++结构体可以声明定义函数,而 C语言结构里只是声明为指针函数,并在外部实现;

这里不要讨论C艹的地方,以后有机会在发出相关的介绍文章吧!

这条朋友圈被一个研究数据库底层的牛逼师兄留意到了,评论: “我的建议是多研究一些好项目,不要成为语言学家”。

QQ20171113_103022

牛逼师兄的指导

  • 吴兵:有没有比较小一点的开源项目推荐给我学习研究研究。
  • 师兄:那我就推荐一个吧,MySQL。可以研究一下mysql with rocksdb :https://github.com/facebook/mysql-5.6 。你可以研究一下其中的myrocks —— rocksdb引擎。
  • 吴兵:文档还是mysql官网的吗
  • 师兄:rocksdb引擎的 文档你就只能从github上看了
  • 吴兵:哦哦哦
  • 师兄: 学习c++的话,在以前的话,leveldb是很推荐的, jeff dean写的,代码写得很规范。 rocksdb是facebook基于leveldb去二次开发的,现在大家都是在用rocksdb而不会直接去用leveldb
  • 吴兵:google的leveldb吗
  • QQ20171113_105432
  • 师兄:都是一脉相传的东西,可以认为是当前最值得研究的C++项目了
  • 吴兵:哦哦哦, 好的
  • 师兄:leveldb有些源码剖析的东西,可以快速扫一下。 用git clone下来,看下git log,还有对应的work log,研究它的演化过程。最重要的是要理解它的深层思维,懂得它为什么这个样子和怎么发展到这个样子 。
  • 师兄:停留在研究语法和简单的代码,进步很慢其实也没啥用。
  • 吴兵:是啊,看这种提交log吗
  • 师兄:嗯。但是leveldb你看git log 都很早了,现在rocksdb源码还是很活跃的, 每个月都新增很多代码, 像这种新增一个功能进去
  • 1_pic
  • 师兄:git log里有个网址, https://github.com/facebook/rocksdb/pull/2202 ,像这个里就有讨论代码怎么写
  • QQ20171113_105817
  • 吴兵:怎么看到这个提交修改了那些代码
  • 师兄:github上每一个提交都能看到对应的修改, 更方便的当然是git clone到本地,我一般会用可视化的git工具来看代码修改, linux下的话像gitg,win下的话像source tree
  • 吴兵:gitk吗
  • 师兄:挺多工具的,看代码的话,对着git log看是最快能理解的
  • 吴兵:这个 pull request是分支请求合并到这个干支的吗
  • 师兄:嗯,合并到了原来项目的主分支了
  • 吴兵:很多项目都有这个文件.travis.yml,.gitignore。这是做什么的
  • 师兄: gitignore是git用来过滤那些不用作版本管理的文件,比较 .o .so .a这种编译代码时会产生的文件,另一个文件我就不知道了
  • 师兄: 搞这种大型项目就是要以点带面,慢慢地就能搞懂了, 如果一下看不懂,也不要轻易放弃,继续多看多琢磨。
  • 吴兵: [GitHub - google/leveldb at f67e15e50f392625b4097caf22e8be1b0fe96013 : https://github.com/google/leveldb/tree/f67e15e50f392625b4097caf22e8be1b0fe96013]
  • 师兄:什么问题?
  • 吴兵:这个第一次提交交了那么多代码,是实现一个demo吧。 这个demo原理怎么研究[捂脸]
  • 师兄:这个是它第一次搬到github上的代码,看它的git log上写着另一个网址,是原先在googlecode上的。你可以先搜一下level的源码分析看看,看个大概就行。
  • 吴兵:喔喔
  • 师兄:理解一下 lsm树,理解 compaction,还有 version set。
  • 吴兵:version set是数据结构吗
  • 师兄:不是。
  • 吴兵:什么玩意
  • 师兄: version set version edit是leveldb用来管理sst文件版本的一套机制,如果我没记错的话。不要贪多,你可以就研究一下version set的代码
  • 吴兵:编译后出来了out-shard和out-static目录,要怎么使用这个数据库
  • 师兄: leveldb并不算是个数据库,它只是kv存储系统。
  • 师兄:别的系统可以用它来做存储引擎。 通过动态链接或者静态链接的方式集成进来如果你写程序,需要存放数据,你可以用leveldb来存。然后编译你的代码的时候将leveldb的静态库或者动态库引进来就行了。
  • 师兄:facebook将leveldb做了很多扩展,然后用作了mysql的一个存储引擎。
  • 吴兵:https://www.zhihu.com/question/38933764/answer/80312254 。sugar,原来 当作库来调用
  • 师兄:在我们的txsql里,我就把rocksdb打包成.so,可以运行时选择是否装载。
  • 吴兵:这是我 总结的C语言的静态库与共享库 http://blog.csdn.net/u014134180/article/details/78335274

得到C++之父的真传

只看图,不说话。

AB823D4ECABE3385E36AD2D271E87902
A3BB0A93805D0855323CFF82D80D7A85
D731BCAC368E01BCD0B8714253966543

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《大神对话录——leveldb》: https://yq.aliyun.com/articles/241361/

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
XML JSON 数据可视化
Etcd 可视化管理工具,GUI 客户端
Etcd 可视化管理工具,GUI 客户端
1461 0
|
数据安全/隐私保护
自动以管理员身份运行批处理(bat)文件
自动以管理员身份运行批处理(bat)文件
1691 0
|
存储 关系型数据库 MySQL
OceanBase数据库 与 mysql 对比
OceanBase数据库 与 mysql 对比
6754 1
|
SQL 缓存 算法
香,聊聊TiDB的分布式事务模型
香,聊聊TiDB的分布式事务模型
987 0
香,聊聊TiDB的分布式事务模型
|
4月前
|
存储 人工智能 关系型数据库
WAIC|从服务人,到服务 Agent:阿里云数据库打造智能体时代的数据平台
在2026世界人工智能大会(WAIC)阿里云“Agentic Cloud”论坛上,阿里云数据库产品事业部负责人杨辛军发表《从服务人,到服务Agent:打造智能体时代的数据平台》主题演讲。
|
8月前
|
存储 缓存 安全
深入理解OpenClaw技术架构与实现原理(下)
本文是《深入理解OpenClaw技术架构与实现原理(上)》的续篇,主要讲述从沙箱隔离到企业级智能体演进。
深入理解OpenClaw技术架构与实现原理(下)
|
8月前
|
存储 人工智能 Linux
AI智能体永久记忆配置:LCM无损上下文管理+OpenClaw 阿里云与本地全平台部署指南
2026年,AI智能体已从概念走向深度落地,OpenClaw(昵称龙虾)凭借自主任务闭环、跨软件执行与插件扩展能力,成为新一代自主智能体标杆。但所有智能体都面临共同痛点:上下文窗口有限导致的**失忆问题**——长期对话后旧信息被截断,历史方案、技术细节、业务结论无法回溯。OpenClaw创始人Peter Steinberger公开推荐的Lossless Claw(LCM)插件,通过DAG有向无环图+SQLite持久化存储,实现AI**永久记忆、智能检索、无损压缩**,从根本上解决上下文溢出导致的信息丢失。本文深度解析LCM工作原理、核心参数、优劣权衡与适用场景,并提供2026年阿里云部署、本地
1604 3
|
11月前
|
弹性计算 数据库连接
阿里云服务器ECS按流量收费标准,公网带宽1GB流量0.8元/GB(中国大陆地域)
阿里云ECS按流量计费,中国大陆多数地域0.8元/GB,青岛0.72元/GB,中国香港1.0元/GB,美国0.5元/GB,日本0.6元/GB,韩国0.8元/GB。仅公网出方向流量收费,内网及入向流量免费,支持设置峰值带宽,按小时结算,多地域价格差异明显,适合流量波动大的业务场景。
2380 2
|
存储 人工智能 关系型数据库
4年10亿美金,Neon用Serverless PG证明:AI需要的不是“大”,而是“隐形”
AnalyticDB PostgreSQL 版基于Neon架构隆重推出满足 AI 时代应用开发需求的Serverless版本,并且在这之上搭载了结构化分析、向量检索、BM25全文检索和图检索,通过一套引擎满足 AI 应用丰富的数据诉求,支持MCP和OpenAI协议,为企业全面拥抱 AI 配备了数据存储、分析和应用的 “关键” 能力,帮助企业火箭式启动跑赢时代。
|
存储 关系型数据库 MySQL
【赵渝强老师】TiDB的体系架构
TiDB是由PingCAP公司自主研发的开源分布式关系型数据库,支持HTAP(混合事务分析处理),具备弹性扩缩容、金融级高可用、实时分析等特性,兼容MySQL协议。其架构分为存储集群(行存TiKV与列存TiFlash)、调度集群(PD实例)和计算集群(TiDB实例)。相比传统单机数据库,TiDB优势显著:纯分布式设计、高扩展性、自动故障恢复、ACID事务支持及丰富的工具生态,适用于高可用与强一致要求的场景。
682 10