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

从今日起开始学习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中搜到的。。

时间: 2024-08-31 07:02:39

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

visual studio 2008-看了个vc6写的小程序用vc2008写就出错了,请帮我看看出错在哪里?

问题描述 看了个vc6写的小程序用vc2008写就出错了,请帮我看看出错在哪里? 我在vc2008里写了个简单的DLL,并希望调用它,结果出错了,不知道出错在哪里,希望知道的朋友指点,谢谢! dll代码: int myadd(int a, int b)//自定义的函数,返回俩数之和 { // AFX_MANAGE_STATE(AfxGetStaticModuleState()); return a+b; } ; myadd.def : 声明 DLL 的模块参数. LIBRARY "myadd&q

context-小白求大神帮忙,刚写的小程序

问题描述 小白求大神帮忙,刚写的小程序 [2014-12-21 16:35:58,846] main INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started [2014-12-21 16:35:58,908] main ERROR org.springframework.web.context.ContextLoader - Context in

vs2008-c++怎么写一个小程序 让他能自动发邮件,用什么接口 或者是类啊

问题描述 c++怎么写一个小程序 让他能自动发邮件,用什么接口 或者是类啊 c++怎么写一个小程序 让他能自动发邮件,用什么接口 或者是类啊 解决方案 http://blog.csdn.net/ybjx111/article/details/7031055 解决方案二: http://download.csdn.net/detail/glc22/4128319http://blog.csdn.net/ybjx111/article/details/7031055http://blog.csdn.

python学习-求用Python写个小函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果

问题描述 求用Python写个小函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果 求用Python写个函数:让用户在界面输入一个数字,然后返回输出这个数字加1的结果,小白刚学Python,求指点,谢谢! 解决方案 不好意思: return x+1 不需要,只能在函数内使用 可以像下面这么写: x = int(input("x = ")) print("Output is:",x+1) 解决方案二: 写一个函数输入4个数字然后输出每个字符之间加一个空格

jsp+servlet写的小程序出现了500错误

问题描述 packagecn.cp9.homework.demo;importjava.io.IOException;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServ

定时组件quartz系列&lt;一&gt;模拟定时组件小程序

一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(JobExecutionContext context) 2.JobDetailJobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略. 3.Trigger代表一个调度参数的配置,什么时候去调. 4.Sched

[译] 深度学习系列1:设置 AWS &amp; 图像识别

本文讲的是[译] 深度学习系列1:设置 AWS & 图像识别, 原文地址:Deep Learning #1: Setting up AWS & Image Recognition 原文作者:Rutger Ruizendaal 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:TobiasLee 校对者:Tina92 sqrthree 这篇文章是深度学习系列的第一部分.你可以在这里查看第二部分,以及这里查看第三部分. 本周的任务:对猫和狗的图像进行分

ExtJs2.0学习系列(3)--Ext.Window

前面介绍了panel组件--ExtJs2.0学习系列(2)--Ext.Panel,今天将介绍window组件,它继承自panel. 先介绍个最简单例子 //html代码 <div id="win" class="x-hidden"> </div> //js代码 var w=new Ext.Window({ contentEl:"win",//主体显示的html元素,也可以写为el:"win" width

STL学习系列之三:操作list容器

学习完了STL系列之二,自己写了个程序练手!程序采用的还是系列之二文章的架构.学习了STL之一和之二,对于STL的基本原理算有个个基本的了解.其实关于这几种容器,以前也都接触过,不过是在java上,当时学习时也是囫囵吞枣!现在感觉那真是学习之大忌,还是一步一个脚印为好.速度可以放慢点,那要扎实! 注意:程序在vc6下调试通过,对于不清楚如何在vc下运行STL者,可以读STL系列之一. //TjuAiLab //Author:zhangbufeng //Time:2005.8.23 22:00 #