Objective-C 프로젝트에서 나는 많은 양의 데이터를 NSDictionary
(최대 ~ 2 기가의 램에 저장되어 있음)에 저장해야합니다. 필자가 수행 한 모든 계산이 끝나면 필요할 때 데이터를 저장 /로드하는 것이 더 빠를 것 같습니다 (원본 파일을 다시 파싱하는 것보다).큰 개체를 파일로 저장
그래서 많은 양의 데이터를 저장하려고합니다. NSKeyedUnarchiver
과 [NSDictionary writeToFile:atomically:]
을 사용해 보았지만 둘 다 malloc 오류로 실패했습니다 (____ 바이트를 할당 할 수 없음).
저는 Apple의 Dev 포럼과 Google을 둘러 보았지만 아무 것도 찾을 수 없었습니다. 한 번에 모든 파일 대신 비트 단위로 파일을 만드는 것이 더 좋을지 궁금하지만, 기존 파일에 추가 할 수는 없습니다. 나는 작은 파일들로 절약하는 것에 완전히 반대하지는 않지만 하나의 큰 파일을 사용하는 편이 낫다.
감사합니다.
추가 정보를 포함하도록 편집 : 텍스트 파일에서 모든 정보를 가져 가지 않으므로, 얼마나 많은 오버 헤드가 나에게 줄지 모르겠다. NSDictionary
나는 1.5 기가의 파일을 가지고 있는데 (그 중 ~ 1/2를 유지한다.) 램에서 1 기가를 통해 약 900 메가가되는 것으로 판명되었다. 결국 추가해야 할 데이터가 더있을 것입니다. 그러나 이미 메모리에로드 된 내용을 참조로 생성됩니다. 크기를 두 배로 늘리지 않아도되지만 가까이 올 수 있습니다.
데이터는 모두 연속적이며 저장소에서 분리 될 수 있지만 실행을 위해 모두 메모리에 있어야합니다. 현재 정수/문자열 쌍이 있고 결국 문자열/문자열 쌍 (모든 값이 다른 문자열 집합의 키이기 때문에 결국 최종 저장소 요구 사항은 현재 가지고있는 문자열과 같을 것입니다. 많은 참고 자료).
결국 3 백만 개의 문자열을 다른 문자열 집합과 연결할 필요가 있습니다. 그러나 유일하게 중요한 것은 문자열 간의 관계입니다. 모두 해시 할 수 있지만 NSNumber
(NSDictionary
은 개체가 필요함) 날 오버 헤드를 줄 수 있습니다.
얼마나 많은 데이터가 데이터이고 NSDictionary의 오버 헤드는 얼마입니까? 이 많은 데이터로 모든 것을 관리하기 위해 손으로 만들어진 코드를 작성하는 것이 좋습니다. 컨텍스트를 제공 할 수 있습니까? 데이터가 계층 적이거나 연속적입니까? 그것은 분리 가능하거나 통합되어 있습니까? –