核心数据与SQLite 3的比较[关闭]


314

我已经非常熟悉关系数据库,并且过去使用过SQLite(和其他数据库)。但是,Core Data具有一定的吸引力,因此我正在考虑花一些时间来学习它,以便在我的下一个应用程序中使用。

通过SQLite使用Core Data有很多好处,反之亦然?每种优点/缺点是什么?

我发现当苹果不将其用于许多旗舰应用程序(如Mail.app或iPhoto.app)而不是选择SQLite数据库时,很难证明学习核心数据的成本。SQLite在iPhone上也被广泛使用。

熟悉这两种方法的人能否评论他们的经历?也许像大多数事情一样,这个问题比仅仅使用一个问题更深刻?


1
您可以为每个不知道这是什么的人添加一个链接到en.wikipedia.org/wiki/Core_Data
RSabet

7
请注意,核心数据不是,也不应该用作数据库!

Answers:


281

尽管Core Data是Apple Enterprise Object Framework的后代,Apple Enterprise Object Framework是与关系后端紧密关联的对象关系映射器(ORM),但Core Data 不是 ORM。实际上,它是一个对象图管理框架。它管理着一个可能很大的对象实例图,允许应用程序通过根据需要对对象进行内存内和内存外故障而无法完全适合内存的图。核心数据还管理对属性和关系的约束,并保持引用完整性(例如,在将对象添加到关系中/从关系中删除对象时,使前后链接保持一致)。因此,核心数据是用于构建MVC架构的“模型”组件的理想框架。

为了实现其图形管理,Core Data 恰好使用SQLite作为磁盘存储。它可能已经使用不同的关系数据库,甚至非关系数据库,如已经实施的CouchDB。正如其他人指出的那样,Core Data也可以使用XML或二进制格式或用户编写的原子格式作为后端(尽管这些选项要求整个对象图都适合内存)。如果您对如何在SQLite后端上实现Core Data感兴趣,则可能需要查看OmniGroup的OmniDataObjects框架,它是Core Data API子集的开源实现。所述BaseTen框架也使用PostgreSQL作为后端核心数据API的实现。

由于Core Data并不是SQLite的ORM,因此它无法读取任意SQLite模式。相反,您不应该依赖于能够使用其他SQLite工具读取Core Data的SQLite数据存储;模式是可能更改的实现细节。

因此,直接使用Core Data或SQLite之间确实没有任何冲突。如果需要关系数据库,请使用SQLite(直接或通过Objective-C包装器之一,例如FMDB)或关系数据库服务器。但是,您可能仍想学习用作对象图管理框架的Core Data。在与苹果公司的控制器类和键值结合兼容视图控件组合,可以实现一个完整的MVC架构有非常少的代码。


11
请注意,fmdb不是ORM,而只是sqlite3 C API的objc包装器
robottobor

谢谢你的收获;我将更新帖子。
巴里·沃克

3
极好的答案。FMDB已移至github-github.com/ccgus/fmdb-并由NetNewsWire开发人员推荐:inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
在iOS 5.0中,如果使用的是Core Data,则可以享受免费使用iCloud文件同步的额外好处。如果您直接使用SQLite,则必须进行大量手动修改和实施才能使其在iCloud之间同步。
很奇怪,

1
尝试www.github.com/pmurphyjam/DBExample这是一个使用SQLite的Xcode项目。
帕特

46

借助iOS 5.0,如果您使用的是Core Data,则可以享受免费使用iCloud文件同步的额外好处。如果您直接使用SQLite,则必须进行大量手动修改和实施才能使其在iCloud之间同步。



3
当然可以,但是考虑到这是苹果公司的骄傲和喜悦,希望他们会在即将到来的iOS版本中进行改进。
很奇怪

4
更新(在WWDC 2016之后)-不推荐使用Core Data的iCloud功能,将来可能会淘汰。更多信息:mjtsai.com/blog/2016/06/17/the-deprecation-i-icloud-core-data
Nikolay Suvandzhiev

35

Core Data与其说是数据库引擎,还不如说是一个对实际数据存储进行抽象的API。您可以告诉Core Data保存为sqlite数据库,plist,二进制文件甚至自定义数据存储类型。

我建议您学习Core Data,因为它是一种极好的资源,可以极大地加速可可应用程序开发的许多部分。


13

SQLite是核心数据的数据库格式之一。使用Core Data,您可以与Cocoa API的其余部分更好地集成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.