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

Другие вопросы по тегам