2011-01-27 5 views
1

현재 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가 정수이고 값이 다른 길이의 문자열을 가지고 있다고 가정 해 보겠습니다. 당신이 그것을 보지 못했다 경우

답변

0

마틴,

의 BDB OTN 포럼에 에밀리 replied to this question. 정보를 얻고 Stackoverflow보다 면밀히 모니터링하는 것이 좋습니다. 거기에는 적극적인 개발자 커뮤니티도 있습니다.

감사합니다,

데이브

+0

데이브의 정보를 감사합니다. 나는 에밀리의 해결책을 보지 못했다. 내가 알기로 나는 거의 그것을 올바르게했다. 그냥 깃발은 불필요합니다 :)하지만 실제로 그녀는 내 질문에 대답하지 않았다. DbtMultipleKeyDataBuilder가 아니라 DbtMultipleDataBuilder에 대해 묻고있었습니다. 그러나 어쨌든 C++ API에 대한 공식 예제/테스트가 있어야합니다. 남자 이름 –

관련 문제