現在、私はBerkeley DBで少し作業をしており、ビルドインされているC++の一括機能を理解しようとしています。問題はどのようにこの機能を使うのか分かりません。 C++の例(肥大化したCの例のみ)や、それを理解するために使用できる単体テストはありません。Berkeley DBでバルク機能を使用するには?
特に、DbMultipleKeyDataBuilderを使用したいと思います。これは、std :: mapからのデータで埋められる必要があります。
DbMultipleKeyDataBuilderのコンストラクタパラメータはどのように初期化する必要がありますか? Db :: putメソッドのデータパラメータはどうなりますか?空かNULLか?
誰もが正常にこれらのクラスを使用している場合は、いくつかの小さな例を教えてください。
ありがとうございます。
よろしく、 マーティン
EDIT:DBTのmultipleDbtsのバッファに関する
[OK]を、これまでのところ、私は次のコードしている
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);
}
しかし、何?このバッファをどのように作成するか。キーと値のペアがあるとします。ここで、keyは整数で、長さの異なる文字列を値にします。あなたはそれを見ていない場合は
デイブ、情報のため 感謝。私はエミリーの解を見ませんでした。私が見ているように、私は大部分が正しいことをしてきました。ちょうどフラグが不要です:)実際に彼女は私の質問に答えなかった。私はDbtMultipleKeyDataBuilderについて質問していましたが、DbtMultipleDataBuilderについては質問しませんでした。しかし、とにかくC++ APIの公式のサンプル/テストが必要です。マーティン –