在Java中使用RocksDB执行并行写入时,出现“无法创建锁”异常

时间:2018-10-13 08:53:01

标签: 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:该进程无法访问该文件,因为该文件正在由另一个文件使用”,但是当我在上述代码上放置锁(或同步方法)时,效果很好。

我想在RocksDB中并行编写。

谢谢。

1 个答案:

答案 0 :(得分:1)

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