現在、私はBerkeley DBを少し使って、組み込まれているC ++バルク機能を理解しようとしています。問題は、この機能の使用方法がわからないことです。それを理解するために使用できるC++の例(肥大化したCの例のみ)や単体テストはありません。
特にDbMultipleKeyDataBuilderを使用したいと思います。これは、std::mapからのデータで埋める必要があります。
DbMultipleKeyDataBuilderのコンストラクターパラメーターを初期化するにはどうすればよいですか?Db :: putメソッドのデータパラメータはどうなりますか?空にするべきですか、それともNULLにするべきですか?
誰かがそれらのクラスをうまく使用した場合、いくつかの小さな例を提供していただけますか?
前もって感謝します。
よろしく、マーティン
編集:
さて、これまでのところ私は次のコードを持っています
void
Storage::bulkInsert(
TransactionI& txn,
const Entries& entries) const
{
if(entries.size() <= 0)
return;
char buffer[1024];
memset(buffer, 0, 1024);
Dbt multipleDbts;
multipleDbts.set_ulen(1024 * sizeof(char));
multipleDbts.set_data(&buffer);
multipleDbts.set_flags(DB_DBT_USERMEM | DB_DBT_BULK);
DbMultipleKeyDataBuilder keyDataBuilder(multipleDbts);
Dbt dbtKey;
Dbt dbtValue;
for(typename Entries::const_iterator iter = entries.begin();
iter != entries.end(); ++iter)
{
uint64_t tmpKey = iter->first;
const std::string& tmpValue = iter->second;
keyDataBuilder.append(
&tmpKey, sizeof(uint64_t),
const_cast<char*>(tmpValue.c_str()), tmpValue.length()+1);
}
this->getDbHandle().put(txn.getDbTxn(), &multipleDbts, 0, DB_MULTIPLE_KEY);
}
しかし、DbtマルチプルDbtのバッファーはどうですか?!このバッファはどのように作成する必要がありますか。キーが整数で、値が異なる長さの文字列であるキーと値のペアがあると想像してください。