Получение исключения "Не удалось создать блокировку" при выполнении параллельной записи с использованием RocksDB в Java
Я использую ниже зависимости для 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 ответ
Вы должны создать RocksDB
возражать один раз и пусть ваши темы делятся этим. Он не предназначен для создания каждого потока (и не может использовать один и тот же файл блокировки).