7

많은 양의 데이터 (사용 가능한 RAM 이상)를 읽지 만 항상 순차적 인 방식으로 쓰는 C++ 응용 프로그램을 작성해야합니다.C++을위한 사용하기 쉬운 내장 된 키 - 값 저장소 찾기

데이터를 향후 증명하고 문서화하기 쉽도록 프로토콜 버퍼를 사용합니다. 그러나 프로토콜 버퍼는 많은 양의 데이터를 처리하지 못합니다.

필자의 이전 솔루션은 데이터 단위당 하나의 파일을 생성하여 하나의 디렉토리에 모두 저장하는 것으로 구성되어 있지만, 이는 특별히 확장 성이없는 것처럼 보입니다.

이번엔 임베디드 데이터베이스를 사용해보고 싶습니다. 비슷한 기능을 사용하려면 키 - 값 연결 만 저장해야합니다 (따라서 sqlite는 잔인한 것처럼 보입니다). 값은 프로토콜 버퍼의 이진 직렬화 출력이됩니다.

데이터베이스가 "무엇을 메모리에 유지할지, 디스크 ASP로 이동할지"문제, "디스크에 많은 양의 데이터를 효율적으로 저장하는 방법"문제를 관리하고 이상적인 경우 순차적 읽기를 최적화해야합니다. 패턴 (사전에 다음 항목을 읽음으로써).

대안 검색 대안이 없다는 사실에 놀랐습니다. 데이터베이스를 별도의 프로세스로 유지하고 싶지는 않습니다. 분리를 필요로하지 않기 때문에 (이 규칙은 다시 정의되지 않습니다).

내가 발견 한 유일한 옵션은 Berkeley DB이지만 불쾌한 저수준 C API가 있습니다. 그렇다면 Berldley DB 위에 stldb4라는 최상의 옵션이 있습니다. API는 꽤 좋으며 내 필요에 맞습니다.

그러나 걱정됩니다. stldb4은 이상하게 보입니다 (libferris에 의존성이 있음). 유지 보수가 안되는 해결책 (1 년 전의 마지막 릴리스).

이 문제를 해결하는 방법에 대한 의견이 있습니까?

답장을 보내 주셔서 감사합니다.

답변

5

내 문제에 대한 답을 찾은 것 같습니다. 나는 버클리 DB는 C++에 대한 API를 제공한다는 것을 알아 차리지 않았다

: API와 같은

이 STL API는 STL 호환 벡터와지도를 제공합니다 데이터베이스에 직접 액세스 할 수있는 추상화. 따라서 value = data_container[key]을하는 것이 가능해집니다.

이것은 나를위한 최상의 해결책 인 것 같습니다. Berkeley DB STL API를 직접 함께 사용하는 프로토콜 버퍼.

1

BerkleyDB 귀하의 요구에 맞게 보입니다. 물론, API는 약간 어색하지만 좋은 API를 얻는다면 SQLite은 성능이 좋지 않을 수도 있지만 더 나은 해결책이 될 수 있습니다.

관련 문제