큰 데이터 솔루션은 데이터 행을 키와 페이로드로 나누는 것입니다. 키의 문자 p를 사용하는 대신에 k를 사용하는 것을 고려하십시오. 그렇게하면 페이로드에 p를 사용할 수 있습니다.
키에 해시 맵 또는 키 중복이있는 경우 멀티 맵 이 포함되어 있습니다. 이 키는 기본 검색 키 K n에서만 색인이 생성됩니다.
해시 맵 또는 해시 된 다중 맵의 값은 P n을 포함하는 페이로드 파일의 위치입니다. 페이로드 데이터 및 기타 관련 요소의 희박성 에 따라 위치 지정은 다음 중 하나 일 수 있습니다.
- 출발지와 바이트 또는 블록 인덱스 범위
- 직렬화 된 오브젝트의 시작 바이트 혹은 블록은 몇몇 방식으로 그 길이를 자기-들의 차이 만 고정 길이 레코드에 대한 인덱스
검색, 삽입, 삭제 및 업데이트 작업의 예상 분포와 해당 작업을 실시간으로 또는 대량으로 개별적으로 수행할지 여부에 대한 세부 정보 은 최적의 프로토콜 t o 키와 관련 페이로드를 추가하거나 제거하는 데 사용합니다.
쿼리 속도가 가장 중요한 요소 인 경우 전체 키 K 및 페이로드 P를 주기적으로 다시 생성 할 수 있습니다. 가용성을 위해 몇 개의 9이 필요한 경우 게임 디스플레이 어댑터에 다중 디스플레이 버퍼 또는 포트를 사용하는 것과 마찬가지로 K와 P를 이중 버퍼링해야 할 수 있습니다. (신뢰할 수있는 업데이트 메커니즘을 고안하고 처리하는 데 드는 비용이 시스템의 저장 용량을 두 배로 만드는 비용을 초과 할 수 있기 때문입니다.) 키는 메모리에 맞게 충분히 가늘게 만들 수있는 경우 가장 빠르게 실행되고 간단합니다. . 그렇지 않으면 (큰 쿼리에서) 키 분할 메커니즘을 통해 클러스터의 여러 노드 메모리에 키를 분산시켜야합니다. 나중에이 페이로드는 키 분배에 해당하는 방식으로 RAID 장치에 분산 될 수 있습니다. 마지막 수단으로 사용할 수있는 클러스터가 없으면 디스크 에 해시 맵을 구현할 수 있습니다.검색에서
, 당신이 당신의 키, K N를 확인하면, 당신은 P N에 대한 귀하의 데이터 범위를 검색하고 개체를 생성 (또는 멀티 맵의 경우 객체) 그것에서 할 수 있습니다.
오픈 위치 P N5에 페이로드 P 랜덤 액세스 파일 호출 fseek과, Lseek로부터, 또는 lseek64,
. 이러한 저레벨 호출은 주어진 디스크 섹터의 위치를 운영 체제, 장치 드라이버, 버스 드라이버, 디스크 펌웨어 및 관련 하드웨어에 주어진 P
n에 위임합니다.
[1] 좋아하는 라이브러리의 연관 컨테이너에 템플릿을 사용하거나 std 네임 스페이스의 연관 컨테이너를 사용할 수 있습니다.
[2] Sparcity는 페이로드의 필드에 값이있는 정도입니다.
[3] 라이브러리를 작성하는 경우 빈 가변 길이 값, 할당되지 않은 값, 알 수없는 값 또는 불확정 값 사이의 차이 (유형 또는 상태 코드를 통해)를 식별 할 수 있습니다.
[4] 디스크상의 해시 컨테이너 설계는 단순한 StackOverflow 응답 영역에서 다룰 수있는 것 이상입니다.
[5] 이러한 I/O 호출에 대한 매뉴얼 페이지와 파일 설명자 또는 스트림을 여는 방법은 랜덤 액세스 I/O를 사용하는 방법에 대한 세부 정보를 제공합니다. 온라인에서도 수많은 예제가 있습니다.
'fstream :: tellg()'를 사용하여 각 객체를 읽기 전에 파일 위치를 가져 와서지도에 넣으십시오. – Barmar
당신은 이미이 문제에 대한 몇 백만 가지 해결책을 알고 있습니다. 즐겨 찾는 검색 엔진에 "데이터베이스"또는 "색인"을 넣습니다. –
파일의 크기는 얼마입니까? 표준 해결책은 파일을 메모리 맵핑 한 다음 포인터 연산 만 사용하는 것입니다. –