Ограничения основных данных для iOS

Существуют ли какие-либо ограничения в Core Data? например; сколько максимальных строк может быть в таблице /Entity? Сколько данных может находиться в БД?

В общем случае, если какой-либо документ может описывать все ограничения, которые существуют внутри основных данных (для iOS)?

Обновление: ответ w.r.t, заданный @TechZen, мой вопрос подразумевал тот факт, что I/Core Data будет использовать sqlite на бэкэнд. Но, чтобы просто понять суть, я намерен использовать sqlite, и когда я говорю об ограничениях Core Data, я косвенно запрашиваю ограничение на sqlite (хранилище базы данных).

Итак, существуют ли какие-либо ограничения, связанные с основными данными, отличными от ограничений в sqlite, когда мы говорим о среде iOS?

Ответ 1

Существует никаких логических ограничений на основные данные, кроме тех, которые навязаны ситуационной памятью, дисковым пространством и т.д. Однако, если вы используете хранилище SQLite, вы получаете ограничения по умолчанию для самого SQLite. Если вы пишете для iOS, вы никогда не столкнетесь с этими ограничениями.

Действительно, единственное практическое ограничение, которое вы попали в Core Data, связано с проблемами памяти, вызванными чтением в больших блоках, например. пытаясь сохранить изображения или аудио в магазине SQLite. Этого можно избежать, сохранив капли во внешних файлах.

В стороне, я бы предупредил вас, что я могу сказать, как вы сформулировали вопрос, что вы думаете о Core Data неправильно.

Core Data не является оболочкой объектов для SQL. Основные данные - это не SQL. Объекты не являются таблицами. Объекты не являются строками. Столбцы не являются атрибутами. Core Data - это система управления графами объектов, которая может или не может сохраняться в графе объектов и может или не может использовать SQL далеко за кулисами для этого. Попытка думать о Core Data в терминах SQL приведет к тому, что вы полностью не понимаете основные данные и получите много горя и потеряете время.

Ответ 2

Core Data - это богатая и сложная структура управления графами объектов, способная обрабатывать большие объемы данных. Хранилище SQLite может масштабироваться до баз данных размером в терабайт с миллиардами строк, таблиц и столбцов. Если сами объекты не имеют очень больших атрибутов или большого количества свойств, 10 000 объектов считаются довольно небольшим размером для набора данных. При работе с большими двоичными объектами просмотрите Binary Large Data Objects (BLOB).

Двоичные большие объекты данных (BLOB)

Если ваше приложение использует Binary Large OBjects (BLOB), например изображения и звуковые данные, вам необходимо позаботиться о минимизации накладных расходов. Независимо от того, считается ли объект небольшим или большим, зависит от использования приложений. Общее правило заключается в том, что объекты размером меньше мегабайта являются маленькими или средними, а большие, чем мегабайты, являются большими. Некоторые разработчики достигли хорошей производительности с 10 МБ BLOB в базе данных. С другой стороны, если приложение имеет миллионы строк в таблице, даже 128 байтов могут быть CLOB (Character Large OBject), которые должны быть нормализованы в отдельной таблице.

В общем случае, если вам нужно хранить BLOB в постоянном хранилище, используйте хранилище SQLite. В других магазинах требуется, чтобы весь графический объект находился в памяти, а записи записи были атомарными (см. "Сохраняемые типы и поведение хранилища" ), что означает, что они не эффективно обрабатывают большие объекты данных. SQLite может масштабироваться для обработки чрезвычайно больших баз данных. Правильно используемое SQLite обеспечивает хорошую производительность для баз данных до 100 ГБ, а одна строка может содержать до 1 ГБ (хотя, конечно, чтение 1 ГБ данных в память - дорогостоящая операция независимо от того, насколько эффективен репозиторий).

BLOB часто представляет собой атрибут объекта - например, фотография может быть атрибутом объекта Employee. Для небольших и скромных BLOB (и CLOB) создайте отдельный объект для данных и создайте взаимное отношение вместо атрибута. Например, вы можете создавать объекты Employee и Photograph с отношениями "один к одному" между ними, где отношения от Employee to Photograph заменяют атрибут фотографии Employee. Этот шаблон максимизирует преимущества сбоя объекта (см. "Неисправность и Uniquing" ). Любая полученная фотография извлекается только в том случае, если она действительно необходима (если связь проходит).

Однако лучше, если вы можете хранить BLOB в качестве ресурсов в файловой системе и поддерживать ссылки (такие как URL-адреса или пути) к этим ресурсам. Затем вы можете загрузить BLOB и при необходимости.