Приведите пример, почему не рекомендуется хранить изображения в CoreData?

Этот вопрос задавался много раз, я читал много пользователей, которые говорили, что не рекомендуется хранить изображения в БД, в частности в CoreData. Похоже, что все они опускают причину, по которой они это делают. Даже в документации Apple говорится об этом, и все указывают на это, и каждое обсуждение заканчивается так: «Вы можете, но лучше сохранить путь».

Помимо мнений, я хотел бы привести конкретный пример того, почему это не очень хорошее решение.

Я объясняю лучше, у меня есть большой опыт в создании веб-приложений. Конкретный пример, который я бы привел с моей точки зрения, мог бы быть следующим: не хранить изображения в БД, а скорее путь к ним, поскольку их можно обслуживать через веб-сервер, который может применить все его проблемы с кэшированием.

Но в среде рабочего стола, особенно в iOS-приложении, каковы недостатки хранения в Core Data с использованием sqllite, при условии, что:

Есть отдельная сущность, содержащая изображения, она не является атрибутом основной сущности

Также, кажется, ограничение в 100 КБ для изображений. Зачем ? Что происходит с 110,120 ... 200kb ecc?

Благодарност

Ответы на вопрос(3)

как веб-сервер) оптимизированы для обслуживания файлов любого размера и для применения кеширования в соответствующих случаях.

CoreData оптимизирован для обработки графа объектов с крошечными частями данных, такими как целые числа и короткие строки.

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

 Daniel Eggert02 июн. 2012 г., 10:19
Не совсем верно, что вам периодически приходится пылесосить базу данных SQLite. Вы можете указатьPRAGMA auto_vacuum и установите либоFULL илиINCREMENTAL чтобы избежать этого. Больше в SQLite документация.
 geon02 июн. 2012 г., 12:45
Спасибо, Даниэль. Это хорошо знать
Решение Вопроса

что Core Data обычно делает здесь. Это просто с помощью SQLite база данных. Вы можете поместить в нее большие объекты, но это не очень хорошо масштабируется. Вы можете прочитать больше об этом здесь: Внутренние и внешние BLOB-объекты в SQLite.

Тем не менее, Core Data поддерживает внешние капли который в терминологии Core Data называется хранится во внешней записи (iOS 5.0 и более поздние версии). Опять же, в этом нет ничего волшебного, это просто хранение больших объемов данных в файловой системе отдельно от самой базы данных SQLite. Преимущество заключается в том, что Core Data обновляет все это для вас.

Когда вы в Xcode, появится флажок под названием Позволяет внешнее хранилище что вы можете проверить на Двоичные данные свойства.

 Leonardo02 июн. 2012 г., 12:11
Это хороший ответ

С Lion / iOS 5 Core Data начала обрабатывать файловую систему для хранения больших BLOB-объектов.

Выбор действительно зависит от того, сколько изображений вы собираетесь открыть. Если у вас их много, то вы должны хранить их в БД. Зачем? Поскольку у вас есть только небольшое количество файловых дескрипторов, один из которых используется для каждого открытого изображения, хранящегося в файловой системе.

Тем не менее, есть еще причина, чтобы управлять файлами самостоятельно. Если ваши большие двоичные объекты действительно велики, скажем, 2+ МБ, вы захотите отобразить их в память, а не просто прочитать их. (Когда появляются предупреждения памяти, это позволяет ОС автоматически удалять их из резидентной памяти. Это очень хорошая вещь.) Несмотря на это, у вас все еще есть ограниченное количество файловых дескрипторов.

Эндр

Ваш ответ на вопрос