C++工程中引入levelDB

      操作系统:ubuntu

      IDE:eclipse

      最近一直在读一本书,叫做innodb存储引擎;对数据库有了新的认识,再加上一直关注着ssdb的作者的进展,所以也想搞一个自己的数据库;显然现在的hashmap类型的nosql数据库被大家用烂了,自己想搞一个关系型的内存数据库;不过再开始之前还是现了解下leveldb吧。

      首先在github上把源代码下载下来,并且解压;打开eclipse,创建C++ hello world工程;创建levelDB source folder,引入leveldb的源代码。

      右键点击工程属性,在头文件中引入leveldb,leveldb/include,levelDB/util;链接库中加入pthread,预编译中加入变量LEVELDB_PLATFORM_POSIX,然后把工程里面的main入口全部删除,然后再删除一些报错的run之类的。

      如果不是太倒霉的话,应该可以编译成功;这样在代码里面就可以直接引用leveldb了,举个例子:

      

//============================================================================
// Name        : ArchyDB.cpp
// Author      : archy_yu
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

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

using namespace std;
using namespace leveldb;

void split(string &s,std::vector<std::string> &ret)
{
	size_t last = 0;
	string delim = " ";
	size_t index=s.find_first_of(delim,last);
	while (index!=std::string::npos)
	{
		ret.push_back(s.substr(last,index-last));
		last=index+1;
		index=s.find_first_of(delim,last);
	}
	if (index-last>0)
	{
		ret.push_back(s.substr(last,index-last));
	}
}

int main() {
	DB *db;
	Options op;
	op.create_if_missing = true;
	Status s = DB::Open(op, "/tmp/testdb", &db);

	if (!s.ok()) {

		cout << "invalid" << endl;
		delete db;
		return 0;

	}


	string line;
	while(1)
	{
		getline(std::cin,line);

		std::vector<std::string> vect ;

		split(line,vect);

		if(vect.size() <= 1)
		{
			cout << "invalid cmd and params" << endl;
		}

		if(vect[0] == "get" && vect.size() >= 2)
		{
			string value;
			db->Get(ReadOptions(),vect[1],&value);
			cout << value << endl;
		}
		else if(vect[0] == "set" && vect.size() >= 3)
		{
			db->Put(WriteOptions(),vect[1],vect[2]);
		}
		else
		{
			cout << "invalid cmd" << endl;
		}

	}

	delete db;
	return 0;
}



     一个建议的leveldb服务器就跑起来了,后面我们将添加网络支持!



leveldb实现解析 淘宝-核心系统研发-存储 那岩 neveray@gmail.com 2011-12-13 目录 一、 代码目录结构 ....................................................................... 1 1. doc/ ............................................................................ 1 2. include/leveldb/ ................................................................. 1 3. db/ ............................................................................. 1 4. table/........................................................................... 1 5. port/ ........................................................................... 1 6. util/ ........................................................................... 1 7. helper/memenv/ ................................................................... 1 二、 基本概念 .......................................................................... 1 1. Slice (include/leveldb/slice.h) .................................................. 1 2. Option (include/leveldb/option.h) .............................................. 2 3. Env (include/leveldb/env.h util/env_posix.h) .................................... 3 4. varint (util/coding.h) ........................................................... 3 5. ValueType (db/dbformat.h) ...................................................... 3 6. SequnceNnumber (db/dbformat.h) ................................................. 4 7. user key......................................................................... 4 8. ParsedInternalKey (db/dbformat.h) .............................................. 4 9. InternalKey (db/dbformat.h) ...................................................... 4 10. LookupKey (db/dbformat.h) ........................................................ 4 11. Comparator (include/leveldb/comparator.h util/comparator.cc) .................... 4 12. InternalKeyComparator (db/dbformat.h) ............................................ 5 13. WriteBatch (db/write_batch.cc) ................................................. 5 14. Memtable (db/memtable.cc db/skiplist.h) .......................................... 5 15. Sstable (table/table.cc) ......................................................... 5 16. FileMetaData (db/version_edit.h) ............................................... 5 17. block (table/block.cc) ........................................................... 6 18. BlockHandle(table/format.h) ...................................................... 6 19. FileNumber(db/dbformat.h) ...................................................... 6 20. filename (db/filename.cc) ........................................................ 6 21. level-n (db/version_set.h) ....................................................... 7 22. Compact (db/db_impl.cc db/version_set.cc) ........................................ 7 23. Compaction(db/version_set.cc) .................................................... 7 24. Version (db/version_set.cc) ...................................................... 8 25. VersionSet (db/version_set.cc) ................................................. 9 26. VersionEdit(db/version_edit.cc) ................................................. 10 27. VersionSet::Builder (db/version_set.cc) ......................................... 11 28. Manifest(descriptor)(db/version_set.cc)...................................... 12 29. TableBuilder/BlockBuilder(table/table_builder.cc table/block_builder.cc) ......... 12 30. Iterator (include/leveldb/iterator.h) ........................................... 12 三、 存储结构的格式定义与操作 .......................................................... 12 1. memtable (db/skiplist.h db/memtable) ............................................ 12 2. block of sstable (table/block_builder.cc table/block.cc) ......................... 14 3. sstable (table/table_bulder.cc/table.cc) ........................................ 16 4. block of log (db/log_format.h db/log_writer.cc db/log_reader.cc) .............. 18 5. log (db/log_format.h db/log_writer.cc db/log_reader.cc) ........................ 18 6. cache(util/cache.cc) .......................................................... 19 7. Snapshot (include/leveldb/snapshot.h) ......................................... 19 8. Iterator (include/leveldb/iterator.h) ........................................... 19 四、 主要流程 ......................................................................... 24 1. open ........................................................................... 24 2. put ............................................................................ 25 3. get ............................................................................ 25 4. delete.......................................................................... 26 5. snapshot........................................................................ 26 6. NewIterator ..................................................................... 26 7. compact......................................................................... 26 五、 总结 ............................................................................. 30 1. 设计/实现的优化 ............................................................... 30 2. 可以做的优化 .................................................................... 31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值