2011-03-22 4 views
-1

I는 다음과 같습니다 데이터 라인의 수백만을 저장하고 싶습니다 :"스마트"/ 경제적 데이터 저장 기술?

keyvalue (0 5,000,000)의 범위의 정수가

key; 모든 값은 고유합니다.

value는 부호 INT16 값 (0 ~ 65535)

키는 최소한의 디스크 공간을하면서 데이터를 저장하고, 또, 데이터를 쿼리 할 수이다. 도움이 될만한 데이터 저장을위한 알고리즘/스마트 스킴을 생각해 볼 수 있습니까?

문제가되는 경우, 저는 Linux를 사용합니다.

+1

데이터에 대한 추가 정보 및 사용법은 크게 도움이 될 수 있습니다. –

답변

3

하나의 옵션이 될 것 비트의 플랫 파일을 활용하기 :

소형 데이터베이스 엔진의 또 다른 예는 리눅스에 대한 KeyDB입니다 (설명적인 머리글 포함). 매 16 비트는 값이고 n 번째 값은 헤더 끝에서 (n - 1) * 16 비트가됩니다.

또한 키 값이 중요한 경우 약 10MB의 플랫 파일을 설정하면 실제 키를 저장하지 않고 전체 키 공간을 저장할 수 있습니다. (n - 1) * 16 오프셋에있는 16 비트는 해당 키 값이됩니다.

아마도 문자 그대로 필요한 데이터 일 뿐이므로 공간을 많이 차지하지 않는 저장 방법 일 것입니다. (단, 100k 값에 대해서만 관심이 있고 500만의 키가있는 경우 실제 키, 값 어드레싱 시스템에는없는 많은 낭비 공간이 생기게됩니다. 따라서이 방법론 만 단단히 그룹화 된 값 또는 많은 수 (약 2 백만 표 이상)에 대한 최소 디스크 저장 공간을 확보합니다.

+0

+1에 대한 추측 –

0

SQL Server Compact 또는 다른 유사한 데이터베이스와 같은 모바일 장치 용으로 설계된 데이터베이스를 사용 해본 적이 있습니까? 이 디스크는 디스크에 작은 공간을 차지하면서 필요한 모든 검색 기능을 제공합니다. 키 값은 데이터가 아니라 단지 인덱스 데이터 중요하지가있는 경우

http://3d2f.com/programs/11-989-keydb-download.shtml

3

순차 액세스를 위해 저장된 데이터를 임의 또는 순차 액세스로 어떻게 사용할 계획입니까? 보관 알고리즘은, 예를 들면 LZMA. 랜덤 액세스 성능은 당신에게 많은 공간을 두지 않습니다.

는이 데이터의 패턴을 볼 수 있습니까? 인접한 키/값의 차이가 종종 작은 당신이 저장할 수 있습니다 예를 들어, 경우 오직 p 차이를 인정했다. 백만 가지의 다른 가능한 접근 방법이 있습니다.

[편집] 또한 네트워크 통신에서 데이터 압축에 사용되는 기술을 확인할 수 있습니다
[EDIT1] 당신은이 조작과 데이터에 의존이 구글 코드 Integer Array Compression 프로젝트

2

를 확인할 수 있습니다. 또한 경우 모든 키는 좋은 답변을 가지고

미미르의 샘 :-) 예를 들면 : 나는 최초의 BDB/EHCache는 [Key Value store 읽기]로 (간단한 키 - 값 저장소를 "단지 데이터베이스를 사용하여"추천 익숙한.

키는 경우 가까운 정수/및 단지 비교적 작은 퍼센트의 키 사용되는 읽기 전용 배열 매우 비슷한 (디스크 기반) Heap 데이터 구조의 사용 (고려 기반 힙 (heap), 힙 (heap)은 어레이 기반 일 필요는 없습니다. 로버트 세지 위크 (Robert Sedgewick)는 매우 희박한 구현을 가진 80 년대 후반의 좋은 책을 가지고 있었지만 나는 그 이름을 잊어 버렸다. 힙 (Heap)은 사용 된 키의 비율이 더 적은 플랫 인덱스와 비교할 때 더 유용하며 전체로드에서는 저장 요구 사항이 더 나 빠질 것입니다.

(추출 된 경우, 사용되는 방법은 전환 될 수 있으며/또는 시퀀스/인덱스의 리프 노드 값 하이브리드 힙 [허프만 부호화 또는 기타 등등과 함께] 사용될 수 있지만, 단지 훨씬 합병증을 추가 간단하게 ... 그러므로 의 첫 번째 제안은 키/값 저장;

해피 코딩.

관련 문제