RocksDB简单使用

Posted

tags:

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

参考技术A 由于需要从github获取所以需要先安装git

yum install git

后来更新了gflags需要用cmake进行编译,修改之后的步骤:

yum install snappy snappy-devel

yum install zlib zlib-devel

yum install bzip2 bzip2-devel

yum install lz4-devel

yum install libasan

编译静态库,release mode,获得 librocksdb.a

编译动态库,获得 librocksdb.so ,release mode,获得 lbrocksdb.so

编译获取动态库之后将其拷贝到/usr/lib中(以下操作均在root模式下机型,非root模式需要添加 sudo )

编译:

对于找不到gflags的错误,需要把 /usr/local/lib 添加到动态链接库里面

为了让这个设置永久生效,可以在 ~/.bash_profile 文件中添加设置指令

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简单使用的主要内容,如果未能解决你的问题,请参考以下文章

ArangoDB 3.8 在简单查询上崩溃

RocksDB使用小结

RocksDB使用小结

在 MacOS 上开始使用rocksdb

为啥 Apache Kafka Streams 使用 RocksDB 以及如何改变它?

如何限制kafka-streams中的rocksdb内存使用量