Зависит ли производительность сохранения ManagedObjectContext от количества содержащихся (неизменных) объектов?

Общий вопрос CoreData/SQLite

Есть ли существенная разница между этими двумя сценариями при сохранении NSManagedObjectContext с использованием хранилища SQLite:

  • После добавления/изменения/удаления одного объекта в NSManagedObjectContext, содержащем 10, без изменений NSManagedObjects
  • После добавления/изменения/удаления одного объекта в NSManagedObjectContext, содержащем 10 000, без изменений NSManagedObjects

person Felix Lamouroux    schedule 09.02.2010    source источник


Ответы (3)


Обобщая мой опыт работы с Enterprise Objects (из которого произошли Core Data), я бы сказал, что оба ваших сценария будут одинаково быстрыми без индексации, а второй немного медленнее с индексированием.

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

Чем сложнее взаимосвязи внутри графа, тем большее количество сохранений зависит от общего размера графа. Очевидно, что если у вас есть граф только с десятью объектами, то никакая связь не может иметь в нем более десяти объектов. Если у вас есть один с 10 000, отношения потенциально намного больше и требуют больше времени для обработки.

В целом, Core Data с хранилищем SQL, по-видимому, практически не зависит только от размера графика.

person TechZen    schedule 09.02.2010
comment
Если это лучший ответ, нажмите на галочку сбоку, чтобы система знала, что на вопрос был дан ответ, и чтобы я мог получить эти приятные, приятные очки репутации. - person TechZen; 09.02.2010
comment
Извините, я, должно быть, спал. Вчера был напряженный день и забыл проверить это. - person Felix Lamouroux; 11.02.2010

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

person Martin Cote    schedule 09.02.2010
comment
Меня больше всего интересует реальный опыт использования SQLite. Очевидно, я мог бы создать поддельную базу данных с поддельным контентом, чтобы увидеть разницу... но это заняло бы много времени ;) - person Felix Lamouroux; 09.02.2010

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

person Massimo Cafaro    schedule 09.02.2010
comment
спасибо, приятно знать, что индексация играет роль. Я действительно не думал об этом, но имеет смысл. - person Felix Lamouroux; 09.02.2010