rocksdb:简单的操作Demo

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rocksdb:简单的操作Demo相关的知识,希望对你有一定的参考价值。

当前环境:jdk1.8win10rocksdb 6.27.3

1. 声明

当前内容主要为记录使用rocksdb(一个key-value的数据库)的demo,当前内容借鉴官方文档(由于在Apache Storm启动的时候发现使用了rocksdb)

当前内容主要为:存放数据和取出数据的操作
当前pom.xml

<dependency>
	<groupId>org.rocksdb</groupId>
	<artifactId>rocksdbjni</artifactId>
	<version>6.27.3</version>
</dependency>

2. 操作Demo

private static Charset UTF_8 = Charset.forName("utf-8");

	public static void main(String[] args) 
		RocksDB rocksDb = null;
		try 
			// 默认直接创建一个文件夹testdb
			rocksDb = RocksDB.open("/testdb");
			System.out.println("打开rocksdb 成功....");
			String key = "id";
			String value = "1";
			put(rocksDb, key, value);
			System.out.println("存放值成功....");
			String getValue = get(rocksDb, key, "0");
			System.out.println(getValue);
		 catch (RocksDBException e) 
			// TODO Auto-generated catch block
			e.printStackTrace();
		 finally 
			if (rocksDb != null) 
				rocksDb.close();
			
		
	
	public static String get(RocksDB rocksDb, String key, String defaultValue) 
		byte[] keyBytes = key.getBytes(UTF_8);
		try 
			byte[] valueBytes = rocksDb.get(keyBytes);
			String value = new String(valueBytes, UTF_8);
			return value;
		 catch (RocksDBException e) 
			// TODO Auto-generated catch block
			e.printStackTrace();
			return defaultValue;
		
	

	public static boolean put(RocksDB rocksDb, String key, String value) 
		byte[] keyBytes = key.getBytes(UTF_8);
		byte[] valueBytes = value.getBytes(UTF_8);
		try 
			rocksDb.put(keyBytes, valueBytes);
			return true;
		 catch (RocksDBException e) 
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		
	

由于是key-value的存储方式,且只能存放byte所以需要在取出和使用的时候转换为String,批量读取可以使用multiGetAsList方法实现(需要将查询的key转换为byte[])

3. 测试结果


在当前的根目录下自动创建了一个testdb的文件夹(个人测试写入10万key-value需要1.2s,查询需要400ms,占用空间不到1M)

这里在启动nimbus在arm平台中出现报错的情况,一看就是平台不兼容
Caused by: java.lang.UnsatisfiedLinkError: /tmp/librocksdbjni6447121660866347058.so: /tmp/librocksdbjni6447121660866347058.so: 无法打开共享对象文件: 没有那个文件或目录 (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)

以上是关于rocksdb:简单的操作Demo的主要内容,如果未能解决你的问题,请参考以下文章

RocksDB Rate Limiter源码解析

RocksDB Rate Limiter源码解析

RocksDB使用小结

RocksDB使用小结

获取 RocksDB 中键值对的总数

RocksDB 之Write Ahead Log(WAL)