Подтвердить что ты не робот

Основные характеристики данных с одним родительским объектом

Я создаю структуру, которая работает с Core Data. Одним из требований для использования моей инфраструктуры в вашем классе Core Data является то, что для любого объекта, который вы хотите иметь возможности Framework, должны быть субсубъекты и подкласс класса, который я вам предоставляю. Для этого я назову этот объект Foo.

Сегодня я понял, что Core Data хранит все объекты, которые являются субинтемами Foo, в таблицу под названием ZFOO. Я беспокоюсь о производительности Core Data, если кто-то с массивными наборами данных хочет его использовать, так как ВСЕ субсайты класса foo будут храниться в одной огромной таблице ZFOO.

Любые мнения или рекомендации будут высоко оценены.

4b9b3361

Ответ 1

В прошлом году я работал над проектом, который сделал то же самое, мы сохранили все в основных данных и все в основных данных, унаследованных от одного класса, который имел некоторые общие атрибуты.

У нас было где-то между 1k - 10k записей в основных данных и производительность ухудшилась до такой степени, что мы переписали ее и удалили общего предка. Насколько я помню, простые поисковые запросы занимали несколько секунд, а вставки/обновления были довольно дрянные. Только после того, как все стало болезненно медленным, что мы взломали db open и заметили под крышками, основные данные хранили все в одном столе.

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

Итак, с зерном соли, что это было на более ранних iOS и более старых аппаратных средствах, я бы сказал, что определенно этого не делать.

Ответ 2

Я работал с @deathbob в этом проекте в качестве руководства iOS. В нашем примере у меня было несколько классов, которые содержали атрибуты "remote_id" и "remote_update" . Сначала я устанавливал таблицы, используя подклассы. У меня была абстрактная сущность "RemoteEntity", которая содержала эти атрибуты и множество других объектов, унаследованных от нее, каждая из которых имеет свои собственные. Я думал, что мы закончим с кучей таблиц, каждый с remote_id, remote_update, а затем с их пользовательскими атрибутами. Вместо этого мы закончили с массивной таблицей, которую вы описали.

Исправление было довольно простым: вы должны не настраивать наследование через графический интерфейс. Вместо этого включите все атрибуты для этого объекта, в том числе ваши общие в модуле Core Data (это означает, что в каждом объекте появятся "remote_id" и "remote_update" ). При этом мы все еще можем использовать подкласс. После создания классов ваших моделей создайте класс родительской сущности. Это должно быть не в графическом интерфейсе. Он должен наследовать от NSManagedObject и в файле .m, свойства должны использовать @dynamic вместо @synthesize. Теперь, когда у вас есть родительский класс, это время для настройки дочерних классов. Установите родительский класс в RemoteEntity (в моем примере) вместо NSManagedObject. Затем удалите все свойства, которые появляются в вашем суперклассе (в моем примере, "remote_id" и "remote_update" ).

Вот пример моего суперкласса https://gist.github.com/1121689.

Надеюсь, это поможет, подскажите шляпе @deathbob, чтобы указать на это.

Ответ 3

Взгляд назад - замечательная вещь.

Поскольку люди все еще читают этот вопрос и ссылаются на него в своих вопросах и думают, что ничего не изменилось, я хотел бы добавить несколько комментариев для ясности и предоставить "современный" или более поздний ответ.

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

Первоначально я бы посоветовал узнать, как подготовить прочную и надежную модель данных. Существует огромное количество информации об этом, поэтому я оставлю его читателю для расследования. Как следует из предыдущих ответов, важно научиться готовить все отношения в модели данных.

Кроме того, существует ряд механизмов для управления размером набора данных, который вы выбираете. Мне это не лучше объяснили, чем в книге "Прагматическая книжная полка" "Основные данные, второе издание, хранение и управление данными для iOS, OS X и iCloud" (январь 2013 г.) Маркуса С. Зарра и, в частности Глава 4 под названием "Настройка производительности".

Прочтите.