1

目前我正在使用 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 的缓冲区呢?应该如何创建这个缓冲区。想象一下,我有键/值对,其中键是整数,值是不同长度的字符串?

4

1 回答 1

0

马丁,

如果您没有看到,Emily在 BDB OTN 论坛上回答了这个问题。与 Stackoverflow 相比,这是一个获取信息和更密切监控的好地方。您还可以在那里找到一个活跃的开发者社区。

问候,

戴夫

于 2011-01-28T22:50:52.427 回答