Быстрое создание взаимосвязей основных данных из реляционных данных (iOS)

#ios #performance #core-data

#iOS #Производительность #основные данные

Вопрос:

Я использую основные данные для хранения данных с сервера, которые отправляются в «реляционной» форме.

Например, данные, которые я получаю с сервера, выглядят примерно так (фактический формат несколько отличается, но достаточно похож)

 Users: [{PK: 1, Name: 'A B'}, {PK: 2, Name: 'C D'}, {PK: 3, Name: 'E F'}]
Posts: [{PK: 1, UserPK: 1, Content: '...'}, {PK: 2, UserPK: 3, Content: '...'}]
  

В моей базовой модели данных установлена взаимосвязь между пользователями и сообщениями, и она работает так, как должна. Однако моя проблема заключается в создании этих объектов и их взаимосвязей как можно быстрее (без использования смешных объемов оперативной памяти), когда я получаю новый набор данных с сервера.

Проблема заключается в связывании сообщений с пользователями. «Обычный» способ сделать это — в основном записать post.user = user; , однако для этого требуется, чтобы у меня был user загружен с диска.

Мой текущий план состоит в том, чтобы загрузить всех пользователей, отключить их и создать NSDictionary, который сопоставляет PK с реальными объектами. Таким образом, я могу быстро найти пользователя, которого мне нужно связать с сообщением. Однако это решение кажется немного сложным для чего-то, что по сути должно быть довольно тривиальной операцией.

Ответ №1:

Ваше решение сохранить пользователей в памяти в a NSDictionary является надежным. Они вообще не должны занимать много памяти, если вы оставляете их в неисправном состоянии. Неисправный MO крошечный.

Ответ №2:

У меня была очень похожая ситуация, и в итоге я вообще не импортировал данные в core data, потому что повторный импорт для сотен объектов данных плюс отношений был слишком медленным. Оказалось, что анализатор, который я написал для этого формата, был достаточно быстрым для чтения данных в реальном времени (при прокрутке таблиц и т. Д.), Поэтому я просто сохранил необработанные данные на диск.

Синтаксический анализатор необходимо было расширить, теперь он выводит объекты данных, похожие на управляемые объекты, что позволяет запрашивать необработанные данные с помощью KVC.

Я продолжал использовать Core Data для сохранения пользовательских изменений и ввел класс Data Manager для объединения обоих источников данных.

Я думаю, это не совсем то, о чем вы просили, но, возможно, это помогает…