例如,一个类具有一个专用的db和一个公用的方法put
我们有几个线程可以运行put,这样可以吗? (ps:我们不考虑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);
}


doc here

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,并写入数据库。所以我想知道是否可以?

最佳答案

据我所知,这还可以。
RocksDB使用WriterThread处理多线程写入。
并且所有编写者都将进入JoinBatchGroup,如果当前线程的编写者得到所谓的group_leader,它将进行编写。整个过程没有竞争。

我是新生,对此我不确定。如果我错了,谁能修复我?

09-13 14:28