LevelDB使用入门
1,下载levelDB源码
git clone https://github.com/google/leveldb.git
2,编译LevelDB
cd leveldb & make all
编译完成之后在当前目录多了两个目录:out-shared和out-static
在out-static目录下有我们需要的libleveldb.a
3,在当前目录新建文件夹test
touch test; cd test
4,在test目录新建测试代码test.cpp
#include <assert.h>
#include <string.h>
#include <iostream>
#include "leveldb/db.h"int main(){leveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);assert(status.ok());std::string k1 = "name";std::string v1 = "jim";status = db->Put(leveldb::WriteOptions(), k1, v1);assert(status.ok());status = db->Get(leveldb::ReadOptions(), k1, &v1);assert(status.ok());std::cout<<"k1:"<<k1<<"; v1:"<<v1<<std::endl;std::string k2 = "age";std::string v2 = "20";status = db->Put(leveldb::WriteOptions(), k2, v2);assert(status.ok());status = db->Get(leveldb::ReadOptions(), k2, &v2);assert(status.ok());std::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;status = db->Delete(leveldb::WriteOptions(), k2);assert(status.ok());std::cout<<"Delete k2.."<<std::endl;status = db->Get(leveldb::ReadOptions(),k2, &v2);if(!status.ok())std::cerr<<"k2:"<<k2<<"; "<<status.ToString()<<std::endl;elsestd::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;delete db;return 0;
}
5,编译前的准备
把libleveldb.a拷贝到当前目录
cp ../out-static/libleveldb.a ./
把leveldb/include目录添加到PATH :
cd ..; export PATH=$PATH:$(pwd)/include; cd test
6,编译运行
编译:
g++ -o test test.cpp libleveldb.a -lpthread -I../include
运行:
➜ test git:(master) ✗ ./test
k1:name; v1:jim
k2:age; v2:20
Delete k2..
k2:age; NotFound:
到目前为止,我们就基本可以使用leveldb了。
9, 执行完.test之后,在/tmp/testdb下面产生了leveldb相关的文件:
➜ test git:(master) ✗ ls -alh /tmp/testdb
total 56
drwxr-xr-x 10 root wheel 340B 10 3 12:51 .
drwxrwxrwt 14 root wheel 476B 10 3 12:31 ..
-rw-r--r-- 1 root wheel 148B 10 3 12:14 000005.ldb
-rw-r--r-- 1 root wheel 148B 10 3 12:51 000008.ldb
-rw-r--r-- 1 root wheel 80B 10 3 12:51 000009.log
-rw-r--r-- 1 root wheel 16B 10 3 12:51 CURRENT
-rw-r--r-- 1 root wheel 0B 10 3 11:57 LOCK
-rw-r--r-- 1 root wheel 309B 10 3 12:51 LOG
-rw-r--r-- 1 root wheel 309B 10 3 12:14 LOG.old
-rw-r--r-- 1 root wheel 110B 10 3 12:51 MANIFEST-000007
8, 根据LevelDB官方网站的描述,LevelDB的特点和限制如下:
特点:
1、key和value都是任意长度的字节数组;
2、entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数;
3、提供的基本操作接口:Put()、Delete()、Get()、Batch();
4、支持批量操作以原子操作进行;
5、可以创建数据全景的snapshot(快照),并允许在快照中查找数据;
6、可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot);
7、自动使用Snappy压缩数据;
8、可移植性;
限制:
1、非关系型数据模型(NoSQL),不支持sql语句,也不支持索引;
2、一次只允许一个进程访问一个特定的数据库;
3、没有内置的C/S架构,但开发者可以使用LevelDB库自己封装一个server;
LevelDB使用入门相关推荐
- 初识:LevelDB
上篇文章缘起:BigTable可以说是已经把论文Bigtable: A Distributed Storage System for Structured Data中的内容掰扯的明明白白,如果哪位小伙 ...
- leveldb——leveldb入门篇之Linux下编译配置和使用
1.首先,从github上下载leveldb源码的zip文件 使用命令 #wget https://codeload.github.com/google/leveldb/zip/master 2.下载 ...
- 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图
来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...
- 机器学习入门必读:6种简单实用算法及学习曲线、思维导图
来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...
- HBase、Redis、MongoDB、Couchbase、LevelDB 五款主流NoSQL数据库大比拼
在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资 ...
- 深度学习(六)caffe入门学习
caffe入门学习 原文地址:http://blog.csdn.net/hjimce/article/details/48933813 作者:hjimce 本文主要讲解caffe的整个使用流程,适用于 ...
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- Go 语言学习总结(1)—— Go 入门简介
一.为何而生 go语言(或 Golang)是 Google 开发的开源编程语言,诞生于2006 年 1 月 2 日下午15 点 4 分 5 秒,于 2009 年 11 月开源,2012 年发布 go ...
- 【leveldb】资料
转载自:https://zhuanlan.zhihu.com/p/25349591 Leveldb是一个 Google 实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了 ...
最新文章
- ipython notebook主题背景颜色更改
- 技术高手如何炼成?--转自知乎
- 上海市经济信息化委关于支持新建互联网数据中心项目用能指标的通知
- 成功解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte
- unity 的资源加载问题:一旦永久释放了,就再也不能加载了
- android 文件并发读写,Android下,rxJava+retrofit 并发上传文件和串行上传文件的效率为什么差不多?...
- 2019云栖大会精品资料免费下载
- 小组项目第一次讨论总结
- 【剑指offer】面试题66:构建乘积数组(Java)
- 全球冠军!阿里AI图像识别竞赛:1600万图片识别率高达82.54%
- APP测试之Monkey压力测试(二)
- 【vue开发问题-解决方法】(八)利用axios拦截器实现elementUI中加载动画,控制加载区域
- hduoj Stars 二维树状数组
- 学python能赚钱吗-做直播能有多赚钱,Python告诉你
- 语音识别系统_智能语音识别系统_第三方语音识别系统 - 云+社区 - 腾讯云
- 学习 WebService 第三步:一个简单的实例(SoapUI测试REST项目)
- 情缘难舍 愿为一叶扁舟
- 农村创业年收入可以实现三五十万元?有哪些投资不大的项目
- 如何写出高质量的文章:从战略到战术
- 40、查询选修“张三”老师所授课程的学生中成绩最高的学生姓名及其成绩(重要top)