Получение исключения «Не удалось создать блокировку» при выполнении параллельной записи с использованием RocksDB в Java - PullRequest
0 голосов
/ 13 октября 2018

Я использую приведенную ниже зависимость для 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 голосов
/ 14 октября 2018

Вы должны создать RocksDB объект один раз и позволить своим потокам делиться им.Он не предназначен для создания каждого потока (и не может использовать один и тот же файл блокировки).

...