Я работаю над проектом в Objective-c, где мне нужно работать с большими объемами данных, хранящихся в NSDictionary
(это примерно макс. ~ 2 гигабайта в оперативной памяти). После всех вычислений, которые я предварительно на нем делаю, кажется, что было бы быстрее сохранить / загрузить данные при необходимости (по сравнению с повторным анализом исходного файла).
Итак, я начал изучать сохранение большого количества данных. Я пытался использовать NSKeyedUnarchiver
и [NSDictionary writeToFile:atomically:]
, но оба не удалось с ошибками malloc (не удается выделить ____ байт).
Я просмотрел SO, форумы разработчиков Apple и Google, но ничего не смог найти. Мне интересно, может быть, было бы лучше создать файл побитно, а не все сразу, но я все равно не могу добавить его к существующему файлу. Я не совсем против сохранения с кучей маленьких файлов, но я бы предпочел использовать один большой файл.
Спасибо!
Отредактировано для включения дополнительной информации: я не уверен, сколько служебных данных дает NSDictionary
, поскольку я не беру всю информацию из текстовых файлов. У меня есть файл 1,5 гигабайта (из которых я держу ~ 1/2), и он оказывается около 900 мегабайт через 1 гигабайт в оперативной памяти. В конечном итоге мне нужно будет добавить еще несколько данных, но они будут построены со ссылками на то, что уже загружено в память - их размер не должен удваиваться, но может приблизиться.
Все данные являются последовательными и могут быть разделены в хранилище, но для выполнения все они должны находиться в памяти. В настоящее время у меня есть пары integer / string, и в итоге я получу пары string / strings (при этом все значения также являются ключом для другого набора строк, поэтому окончательные требования к хранилищу будут такими же, как у меня в настоящее время, плюс куча ссылок).
В конце мне нужно будет связать ~ 3 миллиона строк с некоторым другим набором строк. Однако единственная важная вещь - это связь между этими строками - я мог бы хэшировать их все, но NSNumber
(поскольку NSDictionary
нужны объекты) может дать мне столько же накладных расходов.