文档章节

LevelDB 编译安装(Debian 8)

norxiva
 norxiva
发布于 2016/07/13 13:53
字数 396
阅读 87
收藏 0

环境信息

虚拟机节点(192.168.100.171<debian171>)

Debian jessie 8.5 

LevelDB 1.18

安装leveldb

sudo apt-get install libsnappy-dev
sudo tar xvf leveldb-1.18.tar.gz
cd leveldb-1.18/
sudo make
sudo cp libleveldb.so.1.18 /usr/local/lib
sudo cp libleveldb.a /usr/local/lib
sudo cp -R include/leveldb /usr/local/include
cd /usr/local/lib
sudo ln -s libleveldb.so.1.18 libleveldb.so
sudo ln -s libleveldb.so.1.18 libleveldb.so.1
sudo ldconfig

java代码

package surfin.example.leveldb.simpledemo;

import static org.iq80.leveldb.impl.Iq80DBFactory.asString;
import static org.iq80.leveldb.impl.Iq80DBFactory.bytes;
import static org.iq80.leveldb.impl.Iq80DBFactory.factory;

import java.io.File;
import java.io.IOException;

import org.iq80.leveldb.DB;
import org.iq80.leveldb.DBComparator;
import org.iq80.leveldb.DBIterator;
import org.iq80.leveldb.Options;
import org.iq80.leveldb.ReadOptions;
import org.iq80.leveldb.WriteBatch;
import org.iq80.leveldb.WriteOptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SimpleDemoBootstrap {
	private static final Logger log = LoggerFactory.getLogger(SimpleDemoBootstrap.class);

	public static void main(String[] args) {

		Options options = new Options();
		options.createIfMissing(true);
		DB db = null;
		try {
			db = factory.open(new File("D:/leveldb-example/simpledemo"), options);
			
			//put get delete
			db.put(bytes("Tampa"), bytes("rocks"));
			byte[] tampa_b = db.get(bytes("Tampa"));
			log.info("Tampa: {}", asString(tampa_b));
			WriteOptions wo = new WriteOptions().sync(true);
			db.delete(bytes("Tampa"), wo);
			tampa_b = db.get(bytes("Tampa"));
			log.info("Tampa: {}", asString(tampa_b));

			//write batch
			WriteBatch wb = db.createWriteBatch();
			try{
				
				wb.put(bytes("Tampa"), bytes("green"));
				wb.put(bytes("London"), bytes("red"));
				db.write(wb);
			}finally{
				wb.close();
			}
			
			//Iterating key/values.
			DBIterator iter = db.iterator();
			try{
				for(iter.seekToFirst();iter.hasNext();iter.next()){
					String key = asString(iter.peekNext().getKey());
					String val = asString(iter.peekNext().getValue());
					log.info("iter {}:{}", key, val);
				}
				
			}finally{
				iter.close();
			}
			
			
			//Working against a Snapshot view of the Database.
			ReadOptions ro = new ReadOptions();
			ro.snapshot(db.getSnapshot());
			try {
				iter = db.iterator(ro);
				try{
					for(iter.seekToFirst();iter.hasNext();iter.next()){
						String key = asString(iter.peekNext().getKey());
						String val = asString(iter.peekNext().getValue());
						log.info("snapshot iter {}:{}", key, val);
					}
					
					log.info("snapshot Tampa: {}",asString(db.get(bytes("Tampa"), ro)));
					
				}finally{
					iter.close();
				}

			} finally {
			  // Make sure you close the snapshot to avoid resource leaks.
			  ro.snapshot().close();
			}
			
			//OUsing a custom Comparator.

			DBComparator comparator = new DBComparator(){
			    public int compare(byte[] key1, byte[] key2) {
			        return new String(key1).compareTo(new String(key2));
			    }
			    public String name() {
			        return "simple";
			    }
			    public byte[] findShortestSeparator(byte[] start, byte[] limit) {
			        return start;
			    }
			    public byte[] findShortSuccessor(byte[] key) {
			        return key;
			    }
			};
			
//			log.info(String.valueOf(System.currentTimeMillis()));
			

		} catch (IOException e) {
			log.error(e.getMessage(), e);
		}finally{
			if(db != null){
				try {
					db.close();
				} catch (IOException e) {
					log.error(e.getMessage(), e);
				}
			}
		}
	}
}

pom依赖

<dependency>
	<groupId>org.iq80.leveldb</groupId>
	<artifactId>leveldb</artifactId>
</dependency>

参考资料

https://gist.github.com/dustismo/6203329

https://techoverflow.net/blog/2012/12/14/compiling-installing-leveldb-on-linux/

© 著作权归作者所有

共有 人打赏支持
norxiva
粉丝 0
博文 11
码字总数 5308
作品 0
徐汇
高级程序员
私信 提问
SSDB 支持 Snappy 压缩了

转自: http://www.ideawu.net/blog/archives/748.html SSDB 数据库服务器从 1.6.2 版本开始, 支持 Snappy 数据压缩. Snappy 是一个由 Google 公司开发的压缩库, 在 Google 内部应用非常广泛,...

ideawu
2013/10/11
771
0
levelDB 我编译成IOS静态库 不通过

levelDB 我编译成IOS静态库报 libleveldb.a will be fat and ar(1) will not be able to operate on it 问题。 使用的命令是cd leveldb CXXFLAGS=-stdlib=libc++ make PLATFORM=IOS 有人在I......

zhouyuan24
2014/01/19
442
0
用Kyoto Tycoon挂载LevelDB存储

Kyoto Tycoon(以下简称KT)是TokyoTyrant的作者Mikio Hirabayashi 的系列作品之一,KT 是一个数据库网络层服务,它提供一个插件机制,可以挂载几乎所有的数据库存储设备。之前已经有过KT嫁接...

红薯
2011/07/31
2.3K
2
发布一个参考ssdb,用go实现的类似redis的高性能nosql:ledisdb

起因 ledisdb是一个参考ssdb,采用go实现,底层基于leveldb,类似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持。 我们现在的应用极大的依赖redis,但随着我们用户...

siddontang
2014/05/11
0
1
leveldb-rust-b Rust 编译出错

src/leveldb/lib.rs:12:1: 12:19 warning: this inner attribute syntax is deprecated. The new syntax is , with a bang and no semicolon. src/leveldb/lib.rs:12 #[feature(globs)]; ^~ ......

MtrS
2014/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
49分钟前
7
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
50分钟前
4
0
my.ini

1

architect刘源源
今天
6
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
8
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部