我正在使用 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/