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的緩衝?該緩衝區應該如何創建。想象一下,我有鍵/值對,其中鍵是一個整數並且值是不同長度的字符串?
戴夫, 感謝信息。我沒有看到Emily的解決方案。正如我所看到的,我主要做的是正確的。只是旗幟是不必要的:)但實際上她沒有回答我的問題。我問的是DbtMultipleKeyDataBuilder而不是DbtMultipleDataBuilder。但無論如何,應該有C++ API的官方示例/測試。馬丁 – 2011-01-29 09:38:41