Основные данные по сравнению с базой данных? - PullRequest
5 голосов
/ 10 сентября 2011

Может кто-нибудь объяснить мне, в чем принципиальная разница между Core Data (очевидно, «хранилищем данных») и базой данных, такой как SQLite или MySQL?

Я работаю над написанием приложения для iPhone, и мне нужнотаблица статических данных для отображения.Я думал, что основные данные будут хорошим выбором для этого, поэтому я все настроил и функционировал, насколько пошла база данных (извините - хранилище данных), а затем попытался импортировать мои данные (это было вфайл Excel, который я экспортировал в CSV).Я думал, что это должен быть прямой процесс, как я делал это в SQLite и других базах данных много раз, но, как выяснилось после долгих исследований, единственный «официальный» способ сделать это - написать парсер специально для моих данных.

Когда я спросил об этом на форумах Apple Developer, я получил в основном ответ: «Какой идиот ты думаешь, что можешь импортировать данные напрямую без необходимости писать код для этого? Основные данныеэто не база данных - это хранилище данных !!Для жизни я, однако, не вижу различия.Во всех отношениях, которые я рассматривал, основные данные ведут себя ТОЧНО, как база данных, с причудливым способом доступа к ним и достаточной абстракцией, чтобы они могли использовать различные форматы файлов для фактического хранения данных.Фактически, я в конечном итоге смог импортировать свои данные с помощью простой команды SQLite .import, поэтому я действительно не понимаю, почему эта концепция была настолько чужда ответчикам на мой первоначальный вопрос.

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

Ответы [ 5 ]

6 голосов
/ 11 сентября 2011

Базовые данные - это не просто средство сохранения / хранения данных на диск и с диска, как SQL. Основная функция Core Data - предоставить полный уровень модели для дизайна приложения Model-View-Controller, который использует Apple API. Таким образом, Core Data - это, прежде всего, диспетчер графов объектов с опциями постоянства, привязанными к стороне.

Объект-граф - это коллекция живых объектов в памяти. В базовых данных это управляемые объекты. Они называются «управляемыми» объектами, потому что контекст управляемого объекта постоянно наблюдает за объектами, следя за тем, чтобы они находились в состояниях и отношениях, в которых, по словам модели данных, они должны находиться.

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

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

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

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

Эта часть - больше работы, но вы экономите время, интегрируя данные в остальную часть приложения, обновляя данные и повышая надежность и удобство обслуживания.

0 голосов
/ 10 сентября 2011

Может быть, лучше рассматривать Core Data как «хранилище объектов», а базу данных - как «хранилище данных». Базовые данные хороши, когда у вас есть различные типы объектов, имеющие отношения друг к другу. Знакомый пример - компания с сотрудниками, которые имеют начальников и отчетов, принадлежат к отделам, назначаются клиентам, проектам и т. Д., Имеют графики, ходят на встречи. Сотрудники могут быть переназначены и т. Д. Даже определенные типы отношений время от времени меняются. Это более тяжелый процесс даже с Core Data, но с Core Data это проще, чем с необработанной базой данных.

Если у вас есть только «данные», а не «объекты», проще использовать базу данных. Например, если у вас есть таблица элементов с атомными весами и т. Д., Вы можете просто использовать базу данных.

Для вашего приложения звучит так, будто у вас есть только одна таблица. Будет легко использовать SQLite, который доступен, поэтому используйте его, если это более удобно.

С другой стороны, iOS SDK имеет несколько встроенных функций, которые взаимодействуют с Core Data. Если вы используете SQLite, вы не получите их. Таким образом, вы можете избежать использования специального кода для импорта ваших данных, но вам придется написать собственный код для отображения ваших данных. Вот незадача. При создании программного обеспечения иногда приходится писать код. Странно, я знаю.

0 голосов
/ 10 сентября 2011

Базовые данные не являются хранилищем данных, хранилище данных является частью Базовых данных. Базовые данные ближе связаны с инструментом объектно-реляционного сопоставления (ORM). Базовые данные на самом деле могут использовать SQLite для своего хранилища данных, но вы также можете выбрать файлы XML, собственный формат или написать свое собственное хранилище данных.

Не уверен, что вам удалось импортировать данные с помощью импорта SQL, он не должен быть совместим с Core Data, так как Core Data создает собственную схему базы данных SQL, которая содержит тонну метаданных.

0 голосов
/ 10 сентября 2011

Они должны были просто указать вам на статью Википедии о базовых данных .

Согласно этой статье, «она позволяет сериализовать данные, организованные реляционной моделью атрибутов сущностей, в хранилища XML, двоичные файлы или SQLite. Этими данными можно манипулировать, используя объекты более высокого уровня, представляющие сущности и их отношения.Core Data управляет сериализованной версией, обеспечивая управление жизненным циклом объекта и графом объектов, включая постоянство. Core Data взаимодействует напрямую с SQLite, изолируя разработчика от базового SQL. "

Я полагаю, это факт, что" Core Data управляетсериализованная версия ", что означает, что вы не можете импортировать данные напрямуюТо есть вы, вероятно, не можете импортировать данные непосредственно в SQLite таким образом, чтобы Core Data мог им управлять, хотя вы, вероятно, можете импортировать данные непосредственно в SQLite некоторым способом.

0 голосов
/ 10 сентября 2011

Словарное определение дает мне: Базы данных - это хранилища данных, но хранилище данных не всегда является базой данных.

Функция, которую вы ожидали, также недоступна в некоторых базах данных (но большинство есть).

Хранилище данных может, например, хранить нереляционные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...