java - Java中使用RocksDB执行并行写入时出现 "Failed to create lock"异常

标签 java multithreading rocksdb

我正在使用 RocksDb 的以下依赖项。

rocksdbjni » 3.5.1

下面的代码是我从多线程调用的。

public static void test(){
    try {
        RocksDB.loadLibrary();
        RocksDB rocksDB = RocksDB.open("C:\\Users\\Downloads\\db");
        if(rocksDB.get("abc".getBytes()) == null){
            rocksDB.put("abc".getBytes(),"cde".getBytes());
        }else{
            System.out.print(new String(rocksDB.get("abc".getBytes())));
        }
        rocksDB.close();
    } catch (RocksDBException e) {
        e.printStackTrace();
    }
}

当调用上述并行时,我收到“org.rocksdb.RocksDBException: 无法创建锁定文件: C:\Users\Downloads\db/LOCK: 该进程无法访问该文件,因为它正在被另一个进程使用process.”,但是当我在上面的代码上放置锁(或同步方法)时,它工作正常。

我想在RocksDB中并行写入。

谢谢。

最佳答案

您应该创建一个 RocksDB 对象一次并让您的线程共享它。它并不意味着为每个线程创建(并且不能共享相同的锁文件)。

关于java - Java中使用RocksDB执行并行写入时出现 "Failed to create lock"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791222/

相关文章:

java - 在java中替换电子邮件地址的用户部分

java - Ant 自定义条件typedef:确保在编译期间可以使用编译的类(鸡肉和鸡蛋)

java - WebAppContext 将参数传递给 servlet 构造函数

c++ - async([](){}) 和 thread([](){}).detach() 有什么区别?

docker - ArangoDB 未知选项 --rocksdb.encryption-keyfile

java - 将文件从服务器传输到客户端会导致下载速度非常低

c++ - QtConcurrent Map 不能使用类方法

java - 如何从 Runnable 更新 UI?

c++ - 无法编译 rocksdb,找不到依赖项

java - 使用 Kafka Streams 开发时,Lib 上的 UnsatisfiedLinkError 会影响 DB dll