简介
rocksDB 是一个可嵌入的,持久性的 key-value存储。基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。
- 高性能:RocksDB使用一套日志结构的数据库引擎,为了更好的性能,这套引擎是用C++编写的。 Key和value是任意大小的字节流。
- 为快速存储而优化:RocksDB为快速而又低延迟的存储设备(例如闪存或者高速硬盘)而特殊优化处理。 RocksDB将最大限度的发挥闪存和RAM的高度率读写性能。
- 可适配性:RocksDB适合于多种不同工作量类型。从像MyRocks这样的数据存储引擎,到应用数据缓存,甚至是一些嵌入式工作量,RocksDB都可以从容面对这些不同的数据工作量需求。
- 基础和高级的数据库操作,RocksDB提供了一些基础的操作,例如打开和关闭数据库。对于合并和压缩过滤等高级操作,也提供了读写支持。
nacos 服务端实现依赖的 jraft 的底层存储就是使用的 rocksDB。
使用
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<version>7.7.3</version>
</dependency>
import org.rocksdb.Options;
import org.rocksdb.RocksDB;
/**
* 测试RocksDB使用,不能同时创建两个RocksDB关联同一个目录文件,不然抛异常
* org.rocksdb.RocksDBException: Failed to create lock file: C:/D-myfiles/testjar/rocksdb/LOCK
*/
public class TestRocksDbClient {
private static final String DATA_PATH = "C:/D-myfiles/testjar/rocksdb";
static {
RocksDB.loadLibrary();
}
public static void main(String[] args) throws Exception {
// testPut();
// testGet();
testDelete();
}
private static void testGet() throws Exception {
RocksDB rocksDb = createRocksDb();
byte[] value = rocksDb.get("name".getBytes());
System.out.println(new String(value));
}
private static void testDelete() throws Exception {
RocksDB rocksDb = createRocksDb();
rocksDb.delete("name".getBytes());
byte[] value = rocksDb.get("name".getBytes());//null
System.out.println(new String(value));
}
private static void testPut() throws Exception {
RocksDB rocksDb = createRocksDb();
rocksDb.put("name".getBytes(), "lisi".getBytes());
}
private static RocksDB createRocksDb() throws Exception {
Options options = new Options();
options.setCreateIfMissing(true);
return RocksDB.open(options, DATA_PATH);
}
}
和操作redis很类似
遇到问题
Cannot determine JNI library name for ARCH='x86' OS='windows 8.1' name='rocksdb'
原因:安装的jdk是32位的,重新安装64位的jdk
Can't load AMD 64-bit .dll on a IA 32-bit platform
原因:安装的jdk是32位的,重新安装64位的jdk
参考
Java RocksDB简单入门
RocksDB:不丢数据的高性能 KV 存储