2013-12-06 4 views
0

Здесь можно использовать небольшое руководство. Я получаю ежедневное обновление базы данных за 15 000+ в формате XML. Это исходные данные для моего приложения, в которых я использую Core Data. Содержимое дампа XML изменяется ежедневно, используя следующие способы: 1) Некоторые записи будут удалены. 2) Будут добавлены новые записи. 3) Существующие записи могут быть изменены.Использование pList для обновления основных данных

Каков наилучший способ обновления Core Data ежедневными изменениями в этом XML-файле? Я думаю, что мне придется проходить через pList и каким-то образом сравнить это с тем, что уже находится в Core Data. Не знаете, как это сделать.

Я сделал поиск на сайте и нашел эту статью, но не уверен, если это то, что мне нужно сделать: Initialize Core Data With Default Data

Спасибо заранее. Darin

+0

Легко ли сравнивать записи (с идентификаторами UID или т.п.)? – sbooth

+0

Каждая запись имеет уникальный шестизначный номер штыря. – Darin

+0

Насколько велика ваша общая база данных? Какая часть его меняется каждый день? Является ли формат XML под вашим контролем? У вас есть сервер, который находится под вашим контролем, который может управлять данными? Преобразование XML в Core Data выполняется на устройстве iOS или Mac? –

ответ

0

Вы не сказали конкретно, но я предполагаю, что ваш общий размер базы данных составляет 15 000+ записей и что ваше XML-обновление содержит значения для всех из них. Вот некоторые идеи для рассмотрения.

Есть ли записи XML, содержащие дату последней модификации? Если нет, можете ли вы добавить это? Затем обратите внимание на последний раз, когда обновлена ​​версия Core Data, и проигнорируйте все записи XML старше этого.

Для удаленных записей вы должны будете найти их в Core Data и затем удалить их. Вероятно, вы увидите лучшую производительность, если вы установите тип результата запроса выборки на NSManagedObjectIDResultType. Для удаления их не нужно полностью реализовывать объекты NSPersistentObjects.

Если вы застряли в недатированном XML, попробуйте добавить объект только для обнаружения изменений. Сохраните 6-значный номер штыря и -hash всей исходной строки XML для соответствующей записи. После обновления возьмите пару pin/hash и сравните. Если значения хэша совпадают, маловероятно, что данные изменились.

Это превратится в проблему оптимизации. Лучший способ продолжения будет зависеть от характеристик ваших данных: количества атрибутов, размера записей, размера дельты в каждом ежедневном обновлении. Структурируйте предикаты запроса выборки, чтобы свести к минимуму количество запросов на выборку, которые вы выполняете (например, используя оператор «IN» для передачи нескольких 6-значных номеров контактов). Рассмотрите возможность использования NSDictionaryResultType, если вам нужен только один атрибут. Сначала измерьте, оптимизируйте второй.

+0

Hal. Спасибо тебе за это! Чтобы дать вам немного больше информации, у меня нет доступа к XML-файлу, чтобы добавить дополнительные поля для удобства. Файл представляет собой дамп из системы HR, который содержит информацию о контакте с сотрудником (имя, адрес и т. Д.). Ежедневно будут добавляться и удаляться, но, вероятно, не так много изменений в существующих записях. Мне нравится ваша идея о -hash. Хотя я никогда раньше не кодировал что-то подобное и не знаю, как это сделать, я понимаю логику и вижу, как она будет работать. – Darin

Смежные вопросы