현재 Berkeley DB에서 약간의 작업을하고 있으며 빌드 된 C++ 대량 기능을 이해하려고합니다. 문제는이 기능을 사용하는 방법을 모른다는 것입니다. 그것을 이해하는 데 사용할 수있는 C++ 예제 (부풀어 오른 C 예제) 또는 단위 테스트는 없습니다.Berkeley DB에서 대량 피쳐를 사용하는 방법은 무엇입니까?
특히 DbMultipleKeyDataBuilder를 사용하고 싶습니다.이 데이터베이스는 std :: map에서 가져온 데이터로 채워야합니다.
DbMultipleKeyDataBuilder의 생성자 매개 변수는 어떻게 초기화해야합니까? Db :: put 메서드의 데이터 매개 변수는 어떻게됩니까? 비어 있거나 NULL이어야합니까?
누구나 성공적으로 해당 클래스를 사용했다면 몇 가지 작은 예제를 제공해 주시겠습니까?
미리 감사드립니다.
감사합니다, 마틴
편집 : DBT의 multipleDbts의 버퍼에 대한
좋아, 지금까지 나는 다음과 같은 한 코드
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);
}
하지만! 이 버퍼를 어떻게 작성해야합니까? 키/값 쌍이 key가 정수이고 값이 다른 길이의 문자열을 가지고 있다고 가정 해 보겠습니다. 당신이 그것을 보지 못했다 경우
데이브의 정보를 감사합니다. 나는 에밀리의 해결책을 보지 못했다. 내가 알기로 나는 거의 그것을 올바르게했다. 그냥 깃발은 불필요합니다 :)하지만 실제로 그녀는 내 질문에 대답하지 않았다. DbtMultipleKeyDataBuilder가 아니라 DbtMultipleDataBuilder에 대해 묻고있었습니다. 그러나 어쨌든 C++ API에 대한 공식 예제/테스트가 있어야합니다. 남자 이름 –