diff --git a/src/storage/rocksdb.cpp b/src/storage/rocksdb.cpp index 1d6f943b4..a598c2a35 100644 --- a/src/storage/rocksdb.cpp +++ b/src/storage/rocksdb.cpp @@ -38,6 +38,17 @@ void RocksDBStorageProvider::insert(const char *key, size_t cchKey, void *data, ++m_count; } +void RocksDBStorageProvider::bulkInsert(sds *rgkeys, sds *rgvals, size_t celem) +{ + auto spbatch = std::make_unique(); + for (size_t ielem = 0; ielem < celem; ++ielem) { + spbatch->Put(m_spcolfamily.get(), rocksdb::Slice(rgkeys[ielem], sdslen(rgkeys[ielem])), rocksdb::Slice(rgvals[ielem], sdslen(rgvals[ielem]))); + } + m_spdb->Write(WriteOptions(), spbatch.get()); + std::unique_lock l(m_lock); + m_count += celem; +} + bool RocksDBStorageProvider::erase(const char *key, size_t cchKey) { rocksdb::Status status; diff --git a/src/storage/rocksdb.h b/src/storage/rocksdb.h index 4a0665b6e..48be6984f 100644 --- a/src/storage/rocksdb.h +++ b/src/storage/rocksdb.h @@ -34,6 +34,8 @@ public: virtual void beginWriteBatch() override; virtual void endWriteBatch() override; + virtual void bulkInsert(sds *rgkeys, sds *rgvals, size_t celem) override; + virtual void batch_lock() override; virtual void batch_unlock() override;