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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 这篇是研究 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/

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 缓存 NoSQL
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
|
3月前
|
人工智能 网络协议 Java
RuoYi AI:1人搞定AI中台!开源全栈式AI开发平台,快速集成大模型+RAG+支付等模块
RuoYi AI 是一个全栈式 AI 开发平台,支持本地 RAG 方案,集成多种大语言模型和多媒体功能,适合企业和个人开发者快速搭建个性化 AI 应用。
1224 77
RuoYi AI:1人搞定AI中台!开源全栈式AI开发平台,快速集成大模型+RAG+支付等模块
|
12月前
|
机器学习/深度学习 自然语言处理 数据挖掘
LLM主要类别架构(二)
**LLM主要类别概览:** 1. **自回归模型 (AR)** - 如GPT,特点是Decoder-Only,利用上下文信息预测单词,适合自然语言生成任务。 2. **自编码模型 (AE)** - 以BERT为代表,利用上下文的双向信息进行预训练,擅长自然语言理解任务。 3. **序列到序列模型 (Seq2Seq)** - 包含编码器和解码器,用于序列转换任务,如机器翻译。 GPT是Decoder-Only模型,预训练包括两阶段: - **无监督预训练**:预测序列中缺失的单词。 - **有监督微调**:根据下游任务调整模型,如分类、问答等。
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
LLM主要类别架构(一)
**LLM主要类别包括自编码模型(如BERT,专注内容理解),自回归模型,和序列到序列的encoder-decoder模型。BERT是预训练的双向编码器,使用Transformer架构,通过Masked LM和Next Sentence Prediction任务学习上下文表示。其特点包括:使用Transformer层、12层深度、768维特徵、12个注意力头和约1.15亿总参数。BERT在多项NLP任务中刷新纪录,适用于分类和理解任务,但不适合生成任务。**
|
10月前
|
SQL 关系型数据库 MySQL
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
398 2
|
11月前
|
传感器 文字识别 安全
印刷文字识别使用问题之是否支持电子驾驶证识别
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
机器学习/深度学习 Python
【初窥CBAM】实操版即插即用的注意力机制模块
【初窥CBAM】实操版即插即用的注意力机制模块
415 0
【初窥CBAM】实操版即插即用的注意力机制模块
|
机器学习/深度学习 人工智能 自然语言处理
Mamba 作者谈 LLM 未来架构
Mamba 作者谈 LLM 未来架构
172 0
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
88 0
|
开发工具 芯片
踩坑:M1芯片Mac Book使用IDEA旗舰版卡顿问题
新开封的Mac Book安装IDEA开发工具出现操作卡顿,UI拖动迟缓问题解决方案:
踩坑:M1芯片Mac Book使用IDEA旗舰版卡顿问题