2010-08-19 5 views
0

하드 디스크 저장소의 경우 빨간색 - 검은 색 나무 (예 : boost::multi_index::multi_index_container)를 기반으로 muti 색인 컨테이너가 필요합니다. 모든 데이터는 메모리가 아닌 하드 디스크에 저장해야합니다.메모리가 아닌 하드 디스크 저장소에 대한 muti 인덱스 컨테이너가 있습니까?

설명 된 조건이 적용되는 오픈 소스 컨테이너가 있습니까?

참고. 나는 C++을 사용합니다.

답변

1

메모리 내 솔루션이있는 경우 메모리 매핑 파일과 사용자 지정 할당기를 사용하여 영구 저장소를 확보 할 수 있습니다.

+0

사실이 아닙니다. 우선 메모리 내 솔루션은 OS에 메모리 페이지가 있기 때문에 조각화와 관련하여 안정적입니다. 파일 저장 장치에서 동적 메모리 할당 및 할당 취소에 많은 문제가 있습니다. 둘째, 32 비트 시스템에는 2Gb의 제한이 있습니다. –

+0

@alexey 모든 파일 기반 솔루션은 단편화되기 쉽지만 적합한 사용자 정의 할당 기가이를 최소화 할 수 있습니다. 보다 큰 데이터 세트를 원한다면 2GB 제한이 문제가 될 수 있습니다. 여러 개의 매핑 된 파일을 사용할 수는 있지만 실행하기에는 너무 복잡 할 수 있습니다. 질문에 32 비트 시스템에서 2GB 이상이 필요하다고하지는 않습니다. 어쩌면 파일 저장 장치의 필요성에 암시되었을 지 모르지만 그렇게 이해하지는 못했습니다. (죄송합니다). –

+0

또 다른 문제점은 데이터가있는 기존 파일을 다중 인덱스 컨테이너에 첨부하는 방법입니다. –

1

나는 모를까 걱정됩니다.

하드 디스크 저장소의 경우 디스크에만 적합 할 수있는 데이터에 맞게 STL 컨테이너와 알고리즘을 제안하는 STXXL을 권장합니다. 본질적으로 가능한 한 많은 메모리를 캐싱하고 가능한 경우 디스크 액세스를 지연시킴으로써 매끄러운 조작을 가능하게하기 위해 많은 것을 구현했습니다.

은 이제 당신에게 다중 색인을받지 않습니다,하지만 적어도 당신은 당신이 결정하는 경우, 그 다음 STL :

을해야합니다, 당신이 할 수 STXXL 제공하는 기능을 사용하는 포트 멀티 인덱스 : 컨테이너 자체에서 IO 접근/메모리 캐싱을 무의식으로 처리했습니다.

또는 STL 호환 컨테이너를 기반으로 필요한 것을 간단하게 작성할 수 있습니다.

1

SQLite 어떨까요? Boost Multi Index가 지원하는 것처럼 디스크를 백업 저장소로 사용할 수 있으며 데이터에 대한 다중 인덱스를 지원합니다.

관련 문제