2011-01-27 8 views
1

現在、私は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は整数で、長さの異なる文字列を値にします。あなたはそれを見ていない場合は

答えて

0

マーティン、

、BDB OTN掲示板上のエミリーreplied to this question。 Stackoverflowより情報を取得し、より詳細に監視するのに最適な場所です。そこにはアクティブな開発者コミュニティもあります。

よろしく、

デイブ

+0

デイブ、情報のため 感謝。私はエミリーの解を見ませんでした。私が見ているように、私は大部分が正しいことをしてきました。ちょうどフラグが不要です:)実際に彼女は私の質問に答えなかった。私はDbtMultipleKeyDataBuilderについて質問していましたが、DbtMultipleDataBuilderについては質問しませんでした。しかし、とにかくC++ APIの公式のサンプル/テストが必要です。マーティン –

関連する問題