我正在为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中并行编写。
谢谢。
最佳答案
您应该一次创建一个RocksDB
对象,然后让您的线程共享它。并非旨在为每个线程创建一个(并且不能共享相同的锁定文件)。