2013-11-12 5 views
1

Я немного новичок в Core Data и задаю общий вопрос.Использование основных данных для хранения большого количества объектов

В моем текущем проекте пользователи могут получать доступ к данным, сообщаемым различными датчиками в каждом округе моего состояния. Каждый датчик представлен в виде таблицы, который собирает свои данные из вызова веб-службы. Вызов веб-службы может занять некоторое время, поскольку это приложение может использоваться в сельских районах с медленным беспроводным подключением. Кроме того, пользователям, как правило, нужны только данные из одного или двух из 55 штатов штата. В каждом графстве может быть от 15 до 500 единиц, возвращаемых веб-службой. Поскольку имена и местоположения датчиков редко меняются, я хотел бы, чтобы приложение кэшировало данные из вызова веб-службы, чтобы быстрее собирать список мест датчиков (и предлагать кнопку обновления для случаев, когда что-то изменилось). Приложение уже использует Core Data для хранения местоположений датчиков с закладками, поэтому оно уже настроено в приложении.

Моя проблема заключается в том, следует ли использовать Core Data для кэширования списка датчиков или для использования хранилища данных SqlLite. Поскольку уже существует модель данных, я мог бы просто добавить к модели еще одну сущность. Тем не менее, меня беспокоит, приведет ли это к излишним накладным расходам или, может быть, вообще не относится.

Будучи новым для Core Data, кажется, что все, что происходит на самом деле, состоит в том, что объекты сериализуются и их свойства добавляются как поля в базе данных SqlLite, управляемой Core Data. Если это так, кажется, что на самом деле не будет никаких накладных расходов на использование хранилища Core Data уже на месте.

Может кто-нибудь помочь очистить это для меня? Благодаря!

+1

Я бы не стал беспокоиться, потому что это наоборот: Core Data - это операция с процессором и диском, в то время как медленная сеть - это связанная с сетью операция. Чем медленнее работа сети, тем быстрее Core Data - в отношении. В системе с несколькими процессорами и медленной сетью Core Data, вероятно, ничего не добавит к длительности загрузки. Но в * быстрой * сети Core Data может вносить вклад в 90% от общего времени! – CouchDeveloper

ответ

1

кажется, что все, что происходит на самом деле является то, что объекты сериализованная и их свойства, добавленные в качестве полей в SqlLite DB под управлением Core Data

Вы правы. Core Data делает намного больше, но это основная функциональность (если вы говорите, что используете магазин SQLite, что и большинство людей).

Что касается количества записей, которые вы хотите сохранить в Core Data, это не должно быть проблемой. Я сейчас работаю над Core Data App, которое также хранит более 20 000 записей в Core Data, и я все еще получаю очень быстрое время выборки, например. для автоматического завершения при наборе текста.

Основные данные определенно добавляют некоторые накладные расходы, но если у вас мало прав и связей, и они не создают/не изменяют объекты в нескольких контекстах, это незначительно.

+0

Если пользователь хранит данные для всех 55 округов, общее количество записей будет около 4000. Это маловероятно. Большинство пользователей будут нуждаться только в данных для одного-трех стран –

1

Будучи новым для Core Data, кажется, что все, что происходит на самом деле, состоит в том, что объекты сериализуются и их свойства добавляются как поля в базе данных SqlLite, управляемой Core Data. Если это так, кажется, что на самом деле не будет никаких накладных расходов на использование хранилища Core Data уже на месте.

Это не всегда так. Core Data скрывает реализацию хранилища от разработчика. Это иногда SQL db, но в других случаях это может быть другое хранилище данных. Если вам требуется подробное руководство по CoreData, я рекомендую this objc.io article.

Как отметил @CouchDeveloper, CoreData - это процесс, связанный с диском io/CPU. Если вы заметили хиты производительности, бросьте его в фоновый поток (да - это довольно большая головная боль), но он всегда будет быстрее, чем средняя сеть.

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