Как использовать массовую функцию в Беркли БД? - PullRequest
1 голос
/ 27 января 2011

В настоящее время я немного работаю с Berkeley DB и пытаюсь понять встроенную функцию C ++. Проблема в том, что я понятия не имею, как использовать эту функцию.Нет примеров C ++ (только эти раздутые примеры C) или модульных тестов, которые я мог бы использовать, чтобы понять это.

Я хотел бы особенно использовать DbMultipleKeyDataBuilder, который должен быть заполнен данными, полученными из std ::карта.

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

1 Ответ

0 голосов
/ 29 января 2011

Мартин,

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

С уважением,

Dave

...