Я знаком с основами Core Data и немного занимался, но на самом деле не делал никаких крупных приложений. Теперь мне нужно планировать один. И речь идет не о Core Data, а о дизайне данных в целом, хотя я собираюсь использовать Core Data для его реализации на iPhone, что важно для оценки производительности.
Представьте, что я создаю почтовое приложение, в котором электронная почта является основным объектом. Мне нужно предоставить несколько представлений в хранилище электронной почты: поиск по пользователю, а также по многим другим критериям: скажем, «все электронные письма с более чем двумя получателями», «все электронные письма, тема которых длиннее X», «все электронные письма, содержащие слово X» и т. д.
Некоторые объекты, такие как люди (отправители / получатели), естественным образом поддаются моделированию как первоклассные объекты, поэтому я мог бы сделать это и просто создать отношения «многие ко многим» между людьми и электронными письмами. Другие поиски, такие как некоторые примеры выше, являются более искусственными, и нет естественного способа их моделирования. Однако я могу заранее перечислить новые поиски, т.е. заранее знаю, каковы будут критерии.
Итак, для таких вещей, как «электронные письма с> 2 получателями» и «электронные письма, тема которых длиннее X», я думаю, у меня есть две стратегии:
1) смоделируйте их как специальный «поисковый» объект и создайте отношения «многие ко многим» между электронными письмами и объектами поиска при вставке новых объектов в хранилище, так что это простой запрос соединения при поиске;
2) не моделировать ничего, кроме основного объекта электронной почты, а просто выполнять поиск по предикатам из хранилища во время выполнения.
Мой вопрос:
На основании ваших инстинктов Core Data насколько велика разница между этими двумя стратегиями с точки зрения производительности? Моя интуиция говорит мне, что # 1 всегда будет быстрее, но если оно составляет 10%, я готов взять удар производительности, чтобы быть более гибким с # 2. Но если # 2 будет работать на 200% медленнее, мне нужно больше работать над моделированием поискового объекта и по существу предварительно сгенерировать все результаты поиска.
Я знаю, что точный ответ будет зависеть от специфики данных, но, должно быть, у вас возникло внутреннее чувство :) Допустим, существует порядка десятков тысяч, но не миллионов, объектов контента, и каждая запись несколько абзацев содержательного текста с несколькими полями метаданных.