Как использовать массовую функцию в Berkeley DB?

в настоящее время я немного работаю с 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?! Как должен быть создан этот буфер. Представьте, что у меня есть пары ключ/значение, где ключ — целое число, а значение — строка разной длины?


person Martin    schedule 27.01.2011    source источник


Ответы (1)


Мартин,

Если вы его не видели, Эмили ответила на этот вопрос на форумах BDB OTN. Это отличное место для получения информации и более тщательного мониторинга, чем Stackoverflow. Там вы также найдете активное сообщество разработчиков.

С уважением,

Дэйв

person dsegleau    schedule 28.01.2011
comment
Дэйв, спасибо за информацию. Я не видел решения Эмили. Как я вижу, я в основном сделал это правильно. Только флаги лишние :) Но на мой вопрос собственно она и не ответила. Я спрашивал о DbtMultipleKeyDataBuilder, а не о DbtMultipleDataBuilder. Но в любом случае должны быть официальные примеры/тесты для C++ API. Мартин - person Martin; 29.01.2011