인터뷰에서 다음 질문을 받았는데,이 질문에 대한 답변을 찾을 수 없었습니다. 매우 도움이 될 것입니다.많은 양의 데이터를 저장할 데이터 구조를 디자인하십시오.
각각 크기가 10MB 인 파일이 100 개 있습니다. 각 파일의 내용은 정수 값으로 매핑되는 일부 문자열입니다. = 정수 값
a=5
ba=7
cab=10 etc..
사용할 수있는 실제 RAM 공간
string_key 25 MB입니다. 어떻게 데이터 구조를 설계 할 것 같은 그 :
For any duplicate string_key, the integer values can be added
Display the string_key=integer value sorted in a alphabetical format
제약 :
All the entries of a file could be unique. All of the 10*1000MB of data could be unique string_key mapping to an integer value.
해결 방법 1 :
내가 다른 후 각 파일을로드하고 저장에 대해 생각했다 정보는 해시 맵에 저장되지만,이 해시 맵은 매우 거대하며 모든 파일에 고유 데이터가 포함되어 있으면 RAM에 충분한 메모리가 없습니다.
다른 아이디어?
noSqldb를 사용하는 것은 옵션이 아닙니다.
이것이 답을 찾을 수 있을지 모르겠지만 1) 한 번에 하나씩 100 개의 파일을 각각 정렬하십시오. 정렬 된 출력을 다른 100 개의 파일에 씁니다. 2) 100 개의 파일 일치/병합을 수행하고, 중복 키 정수 값을 추가하고, 문자열 키와 정수 값을 표시하십시오. –
@ gilbert le blanc 1 단계에 동의합니다. 첫 번째 반복에서 2.5 파일 만로드 할 수있게되면 2 단계를 달성 할 수 있습니까? 후속 단계에서 파일 수가 훨씬 적습니다. 또한 모든 파일에 고유 한 문자열 키 값 쌍이있는 최악의 시나리오는 무엇입니까 – bhavs
@bhava : 한 번에 메모리에있는 100 개의 정렬 된 파일 각각에서 두 줄만 유지합니다. 파일을 읽을 때 인쇄합니다. 이를 디스크 일치/병합이라고합니다. 이것은 우리가 40 년 전에해야했던 일종의 가공입니다. –