目前我正在与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 multipleDbts的缓冲区怎么样?!应该如何创建此缓冲区。想象一下,我有键/值对,其中键是一个整数,值是一个不同长度的字符串?
答案 0 :(得分:0)
马丁,
如果您没有看到它,请参阅BDB OTN论坛上的Emily replied to this question。它是获取信息并比Stackoverflow更密切监控的好地方。你也会在那里找到一个活跃的开发者社区。
问候,
戴夫