Эффективное хранение больших объемов данных в iOS - PullRequest
2 голосов
/ 11 августа 2011

Я создаю приложение, которое имеет функцию «записи», которая записывает взаимодействие пользователя с течением времени. Со временем я заполняю массив в памяти объектами «состояния», представляющими текущее состояние пользовательского ввода. Типичная запись приведет к примерно 5 000 таких объектов.

Затем я архивирую эти данные, используя NSKeyedArchiver archiveRootObject: toFile:. Это прекрасно работает, однако размер файла очень большой (3,5 мегабайта или около того). У меня вопрос такой:

Существуют ли какие-либо накладные расходы на размер файла, связанные с архивированием файлов? Смогу ли я сохранить эти данные, используя гораздо меньше места на диске, если я буду использовать SQLite, или даже свернуть свой собственный формат файла? Или единственный способ уменьшить размер диска с данными - уменьшить разрядность хранимых чисел?

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

3,5 МБ не очень большой файл. Однако, если ваше приложение должно загружать или сохранять файл размером 3,5 МБ все время, то использование Core Data намного разумнее, поскольку это позволяет сохранять только те данные, которые изменились, и извлекать только те части, которые вас интересуют - - не все это каждый раз.

2 голосов
/ 12 августа 2011

Если вы беспокоитесь о производительности, Core Data дает вам более детальную детализацию.Вы можете лениво загружать и сохранять по частям во время выполнения приложения по сравнению с загрузкой / сохранением всего 3,5 Мб графа объекта.

Если вас беспокоит размер файла, это двоичный формат списка , а это формат файла SQLite .Но более важным, чем издержки, является то, насколько сложен перевод между вашим графом объектов и моделью базовых данных.

Вас также может заинтересовать сравнение скорости и производительности для нескольких форматов файлов: https://github.com/eishay/jvm-serializers/wiki/ Не уверен, что все там имеет реализацию C, C ++ или target-C.

0 голосов
/ 12 августа 2011

Если основной проблемой является хранилище, разница между черно-белыми данными и данными ядра будет незначительной.

Мне пришлось хранить UIViewControllers с состоянием в приложении, где я не стал сохранять сериализованные объекты, а сохранил только самые специфические свойства и создал класс, который считывает эти данные и перераспределяет эти объекты.

Карта свойств затем сохранялась в CSV-файле [по общему признанию, очень сложным в управлении, но небольшим, как все], а затем сжималась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...