核心数据与数据库的根本区别?

ibr*_*ter 5 database core-data

有人可以向我解释Core Data(显然是"数据存储")和SQLite或MySQL之类的数据库之间的根本区别是什么?

我正在编写一个iPhone应用程序,需要一个静态数据表来显示.我认为核心数据是一个很好的选择,所以我得到了所有设置和功能,就数据库(对不起 - 数据存储)去了,然后去尝试导入我的数据(它是在一个我导出到CSV的excel文件.我认为它应该是一个像我在SQLite和其他数据库中多次完成的直接过程,但经过大量研究后证明,唯一的"官方"方法是专门为我的数据编写一个解析器.

当我在Apple Developer论坛上询问这个问题时,我得到的回答基本上是"你认为你可以直接导入数据而不必编写代码来做什么样的白痴?核心数据不是数据库 - 这是一个数据存储!!" 然而,对于我的生活,我看不出这种区别.在我看过的每一种方式中,核心数据都像数据库一样完美,具有访问它的奇特方式和足够的抽象,它可以使用各种文件格式来实际存储数据.事实上,我最终能够使用简单的SQLite .import命令导入我的数据,所以我真的不明白为什么这个概念对于原始问题的响应者来说是如此陌生.

那我在这里错过了什么?数据库中的数据存储是如何根本不同的,这使得简单数据导入的概念与那些了解该技术的人完全不同?

Tec*_*Zen 7

核心数据不仅仅是像SQL一样持久存储数据和从磁盘存储数据的方法.Core Data的真正功能是为Apple API使用的Model-View-Controller应用程序设计提供完整的模型层.因此,Core Data主要是一个对象图管理器,其持久性选项可以支持.

对象图是内存中活动对象的集合.在Core Data中,这些是托管对象.它们被称为"托管"对象,因为托管对象上下文会不断地观察对象,确保它们处于数据模型应该处于的状态和关系中.

核心数据确实提供了持久性选项,但对于任何特定实现而言,确切地说该选项在很大程 您甚至可以在同一个应用程序中使用具有不同持久性方法的相同数据模型和托管对象.

与SQL的主要区别在于SQL将实际数据写入磁盘,而Core Data序列化活动对象.当您查看Core Data中的sqlite存储时,您正在查看已拆开并"冻干"的对象.显然,"冻干"对象需要在sqlite存储中使用相当具体的数据格式,因此Core Data存储使用自己的自定义模式,无论商店的详细信息如何,都会大致相同.

这就是为什么你不能只交换任何旧的SQL文件并期望Core Data导入它.SQL文件是行,表和数据列,而不是专门的表,列和行用于重构冻干对象.

由于Core Data首先是对象图管理器,因此唯一受支持且可靠的导入数据的方法是创建对象图.对于SQL文件,这意味着使用SQL API读取SQL数据,然后从该数据生成托管对象,然后将它们保存到持久性存储中.

这部分工作更多,但您可以节省将数据集成到应用程序其余部分的时间,升级数据并提高可靠性和可维护性.