Является ли rockdb WriteBatch потоком безопасно? - PullRequest
1 голос
/ 03 марта 2020

Например, один класс имеет частную базу данных и общедоступный c метод- put. У нас есть несколько потоков для запуска put, это нормально? (пс: мы не рассматриваем порядок k / v)

void put(List<byte[] keys, List<byte[]> values) {
      WriteOptions writeOpt = new WriteOptions();
      WriteBatch batch = new WriteBatch();
      for (int i = 0; i < keys.size(); ++i) {
        batch.put(keys.get(i), values.get(i));
      }
      this.db.write(writeOpt, batch);
}

do c здесь говорит, что

However other objects (like Iterator and WriteBatch) may require external synchronization. 
If two threads share such an object, they must protect access to it using their own locking protocol. 

Но для В приведенном выше примере потоки не разделяют один и тот же WriteBatch, они владеют собственным WriteBatch и записывают в базу данных. Интересно, это нормально?

1 Ответ

0 голосов
/ 08 марта 2020

Насколько я знаю, это нормально. RocksDB использует WriterThread для обработки многопоточной записи. И все авторы будут go в JoinBatchGroup, если автор текущего потока получает так называемый group_leader, он будет писать. У всего процесса нет конкуренции.

Я новичок в этом, и я не уверен насчет приведенных выше утверждений. Кто-нибудь может исправить меня, если я ошибаюсь?

...