2011-01-27 65 views
1

目前我正在使用Berkeley DB,並嘗試瞭解內置的C++批量特性。問題是我不知道如何使用此功能。沒有C++示例(只有那些臃腫的C示例)或我可以用來理解它的單元測試。如何在Berkeley DB中使用批量特性?

我想特別使用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 multipleDbts的緩衝?該緩衝區應該如何創建。想象一下,我有鍵/值對,其中鍵是一個整數並且值是不同長度的字符串?

回答

0

馬丁,

如果你沒有看到它,在BDB OTN論壇艾米麗replied to this question。這是一個獲取信息並且比Stackoverflow更受監視的好地方。你也會在那裏找到一個活躍的開發者社區。

問候,

戴夫

+0

戴夫, 感謝信息。我沒有看到Emily的解決方案。正如我所看到的,我主要做的是正確的。只是旗幟是不必要的:)但實際上她沒有回答我的問題。我問的是DbtMultipleKeyDataBuilder而不是DbtMultipleDataBuilder。但無論如何,應該有C++ API的官方示例/測試。馬丁 – 2011-01-29 09:38:41