在决定使用何种持久性时,重要的是要记住Core Data首先是一个对象图管理系统。它的真正功能是创建Model-View-Controller设计图案应用程序的运行时模型层。持久性实际上是核心数据的次要甚至可选功能。
主要的建模/持久性问题是数据的大小和数据的复杂性。因此,每个类型的持久性的相对优势和劣势会打破这样的:
_______________________________
| | |
2 | | |
| SQL | Core Data | 4
s | | |
i |_______________ ______________|
z | | |
e | | |
1 | Collection | Core Data | 3
| plist/xml | |
| | |
-------------------------------
Complexity--->
,这是我们可以添加第三出租人尺寸,波动即数据如何变化往往
(1)数据的大小,复杂性和波动性都很低,然后使用一个集合,例如NSArray,NSDictionary,序列化自定义对象的NSSet将是最佳选择。集合必须全部读入内存,以限制其有效的持久性大小。它们没有复杂性管理,所有更改都需要重写整个持久性文件。
(2)如果大小是非常大的,但复杂性低,则SQL或其他数据库API可以提供优异的性能。例如。一个旧的时尚图书馆索引卡系统。每张卡片是完全相同的,卡片之间没有任何关系,而卡片没有任何行为。 SQL或其他程序DB非常擅长处理大量低复杂度的信息。如果数据很简单,那么SQL可以高效地处理高度不稳定的数据。如果UI同样简单,那么将UI集成到iOS/MacOS应用程序的面向对象设计中的开销很小。 (3)随着数据的增长,更复杂的核心数据迅速变得更加优越。 “管理对象”的“管理”部分管理关系和行为的复杂性。使用集合或SQL,您可以手动管理复杂性并发现自己很快就会陷入困境。事实上,我看到有人试图用SQL处理复杂的数据,最终他们编写了自己的微型核心数据栈。毋庸置疑,当您将复杂性与波动性结合起来时,Core Data会更好,因为它可以自动处理插入和删除的副作用。 SQL可以处理一个大的,静态的奇异表,但是当你添加可以随时改变的表的层次结构时,SQL会变成一场噩梦。核心数据,NSFetchedResultsController和UITableViewController /代表使琐碎。)
(4)具有高的复杂性和高的尺寸,核心数据显然是优越的选择。核心数据经过高度优化,因此图形大小的增加不会像SQL一样陷入困境。您还可以获得高度智能的缓存。
此外,不要混淆,“我理解SQL彻底而不是核心数据”,与“核心数据有很高的开销。”它确实没有。即使Core Data不是获取数据进出持久性的最便宜方式,但是当您考虑开发速度和可靠性时,与其余API的集成通常会产生出色的结果。
在这种特殊情况下,我无法从描述告诉你是否在情况(2)或情况(4)。这取决于数据的内部复杂性和UI的复杂性。你说:
我不认为我想创建一个实体100的核心 数据模型, 然后使用一个映射到JSON 导入它。
你的意思是这里实际的抽象的实体或只是管理对象?请记住,实体是管理对象的实例。如果前者,那么核心数据就会在前期做很多工作,如果是后者,那么它不会。您可以用两三个相关实体构建非常大的复杂图形。
也请记住,您可以使用配置,以使不同的实体进入不同的商店,即使他们都有着在运行单个上下文。这可以让您将临时信息放入一个商店,像更持久的数据一样使用它,然后在完成后删除商店。
核心数据为您提供了比乍一看更明显的选项。
我在iPad应用程序中使用这种确切的方法。 MonoTouch确实帮助我们把这件事做得更快...... – kwcto 2011-03-08 20:40:02
ifwdev - 很酷,你能解释一下吗?你有没有存储斑点?为什么Monotouch? – tobinharris 2011-03-08 21:53:09