1

現在、私は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のバッファーはどうですか?!このバッファはどのように作成する必要がありますか。キーが整数で、値が異なる長さの文字列であるキーと値のペアがあると想像してください。

4

1 に答える 1

0

マーティン、

ご覧になっていない方のために、Emilyが BDB OTN Forums でこの質問に回答しました。情報を取得するのに最適な場所であり、Stackoverflow よりも綿密に監視されています。そこには活発な開発者コミュニティもあります。

よろしく、

デイブ

于 2011-01-28T22:50:52.427 に答える