目前我正在使用 Berkeley DB 并尝试了解内置的 C++ 批量功能。问题是我不知道如何使用此功能。没有 C++ 示例(只有那些臃肿的 C 示例)或我可以用来理解它的单元测试。
我特别想使用 DbMultipleKeyDataBuilder,它应该填充来自 std::map 的数据。
我应该如何初始化 DbMultipleKeyDataBuilder 的构造函数参数?Db::put 方法的 data 参数会发生什么?它应该是空的还是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 的缓冲区呢?应该如何创建这个缓冲区。想象一下,我有键/值对,其中键是整数,值是不同长度的字符串?