【leveldb果断学习系列-1】模仿写个小程序体验一下

简介: 从今日起开始学习google大神开发的高性能key-value数据库leveldb,版本1.12,并不定期地分享学习心得。之所以取名为果断学习,是有点给自己施压的意思,其实很早就想学了,只是由于时间关系拖到现在。如今要狠下心来把此开源技术吃透,并不一定要懂得全部源码,但要知道它是怎么设计的,这一点为什么要这么做,设计者是怎么想的等等,这才是真正应该学习的地方。 基本介绍网上都有,我就不说

从今日起开始学习google大神开发的高性能key-value数据库leveldb,版本1.12,并不定期地分享学习心得。之所以取名为果断学习,是有点给自己施压的意思,其实很早就想学了,只是由于时间关系拖到现在。如今要狠下心来把此开源技术吃透,并不一定要懂得全部源码,但要知道它是怎么设计的,这一点为什么要这么做,设计者是怎么想的等等,这才是真正应该学习的地方。

基本介绍网上都有,我就不说太多了。虽然个人学习免不了要先学习别人的,但既然自己要做,就要做得个性化,把别人东西直接复制粘贴这种事,懒得做;学习顺序还是老规矩,先模仿编译、写个示例,体验一下,有个感性认识,其余任何文字介绍都以后再说!当然啦,既然是用C++写的,读者肯定得要懂C++了,否则看起来就很吃力了。

好,我在这里找了个示例代码,包装如下:

#include <iostream>
#include <cassert>
#include "leveldb/db.h"

using namespace std;
//以下用到的类型都在leveldb中,所以事先声明
//如果有类型名称碰巧与其它库冲突,可在其前
//加上域解析符
using namespace leveldb;

int main()
{
	DB* db;
	Options opt;
	opt.create_if_missing = true;
	string dbpath = "dbpath";//数据库数据目录,自己指定
	Status s = DB::Open(opt,dbpath,&db);
	assert(s.ok());
	cout << "db open ok\n";

	//key-value键值对
	string key = "name";
	string val = "cshi";
	string val2;
	//写入
	s = db->Put(WriteOptions(),key,val);
	if (s.ok())
		//读出
		s = db->Get(ReadOptions(),key,&val2);
	cout << "value:" << val2 << endl;
<span style="white-space:pre">	</span>delete db;
	return 0;
}

上述文件起名为test.cpp,放在了leveldb-1.12/mycode下,源码已经由make编译生成了相应的静态与动态库libleveldb.a和leveldb.so.*

为方便起见,随手写了个makefile,如下:

test:test.cpp
	g++ -o $@ $< -g -I../include ../libleveldb.a -lpthread

生成test执行文件后,终端执行:



此时我们查看dbpath文件夹后就会发现生成了以下文件:

000003.log  CURRENT  LOCK  LOG  MANIFEST-000002

至于文件是干嘛的,不如放在下一节讲吧。从字面上看,log是日志文件,表明干了什么操作,LOCK貌似属于锁,不知道锁什么,CURRENT,MANIFEST就猜不出啥了。

在这顺便吐槽一下百度的搜索,输入leveldb结果中竟然没有官方网站(http://leveldb.org/),其排名有这么低吗?我还是bing中搜到的。。


目录
相关文章
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
2月前
|
小程序 JavaScript API
微信小程序开发学习之页面导航(声明式导航和编程式导航)
这篇文章介绍了微信小程序中页面导航的两种方式:声明式导航和编程式导航,包括如何导航到tabBar页面、非tabBar页面、后退导航,以及如何在导航过程中传递参数和获取传递的参数。
微信小程序开发学习之页面导航(声明式导航和编程式导航)
|
2月前
|
小程序 JavaScript
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
本文介绍了微信小程序中的数据绑定、事件绑定、事件传参与数据同步的基本概念和使用方法,包括如何在data对象中定义数据、使用mustache语法在wxml中渲染数据、绑定和处理事件、事件对象属性、事件传参以及实现输入框与data数据的同步。
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
100 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
小程序
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
这篇文章是作者关于学习微信小程序开发并在一周内成功开发出一个商城项目系统的心得体会,分享了学习基础知识、实战项目开发的过程,以及小程序开发的易上手性和开发周期的简短。
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
28 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的英语学习交流平台小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的英语学习交流平台小程序附带文章源码部署视频讲解等
43 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
35 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的可视化的学习系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的可视化的学习系统附带文章源码部署视频讲解等
31 0