[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/

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 缓存 NoSQL
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
|
XML Java Android开发
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
1887 0
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
|
SQL 关系型数据库 MySQL
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
486 2
|
10月前
|
程序员
Mac mini 通过键盘连接蓝牙鼠标
本文介绍了一种 Mac mini 通过纯键盘操作连接蓝牙鼠标的方法。
1007 8
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
557 5
|
弹性计算 Ubuntu Linux
阿里云服务器公共镜像、社区镜像、自定义镜像、共享镜像、云市场镜像区别及选择参考
阿里云服务器镜像有公共镜像、自定义镜像、共享镜像、镜像市场、社区镜像可选,对于新手用户来说,不知道他们之间的区别,因此往往不知道如何选择,本文为大家介绍他们之间的区别以及选择参考。
2252 12
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
|
数据可视化 搜索推荐
重磅更新-UniApp自定义字体可视化设计
重磅更新-UniApp自定义字体可视化设计
356 0
|
机器学习/深度学习 人工智能 自然语言处理
利用AI实现情感分析的实践与探索
本文主要介绍了利用AI技术进行情感分析的实践过程。通过阿里云自然语言处理服务(NLP)提供的情感分析API,结合Python编程语言和Jupyter Notebook开发环境,实现对社交媒体上产品评论的情感分析。具体步骤包括数据收集、预处理和调用API进行分析。示例代码展示了如何使用Python SDK调用API并获取情感分析结果。通过情感分析,企业能快速了解用户反馈,优化产品策略。未来,情感分析在客户服务、市场调研等领域将有更广泛应用,而阿里云平台为实现情感分析提供了便捷高效的工具和服务。
1785 2

热门文章

最新文章