RocksDB存储简单使用

简介

rocksDB 是一个可嵌入的,持久性的 key-value存储。基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。

  1. 高性能:RocksDB使用一套日志结构的数据库引擎,为了更好的性能,这套引擎是用C++编写的。 Key和value是任意大小的字节流。
  2. 为快速存储而优化:RocksDB为快速而又低延迟的存储设备(例如闪存或者高速硬盘)而特殊优化处理。 RocksDB将最大限度的发挥闪存和RAM的高度率读写性能。
  3. 可适配性:RocksDB适合于多种不同工作量类型。从像MyRocks这样的数据存储引擎,到应用数据缓存,甚至是一些嵌入式工作量,RocksDB都可以从容面对这些不同的数据工作量需求。
  4. 基础和高级的数据库操作,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 存储

posted @ 2023-09-18 22:05  strongmore  阅读(351)  评论(0编辑  收藏  举报