繁体   English   中英

面向SQL经验丰富的开发人员的核心数据与SQLite

[英]Core Data vs. SQLite for SQL experienced developers

我们正在iPhone企业开发人员计划中开始开发内部应用程序。 由于它接近OS 3.0,因此我们重新考虑了使用SQLite和使用Core Data的原始设计。 这是更多信息:

  • 有一个旧的桌面应用程序正在替换。 我们将重用现有的后端。
  • 当前,我们已经生成了一个SQLite数据库作为概念证明。 这基本上是现有后端数据库的简化版本。
  • 我们将从远程站点加载数据并将其存储在本地,这些数据将持久存在并且需要存在。 我们只会在更改后(每个月或两个月)对其进行更新。 我们很可能会使用XML或JSON来传输数据。
  • 这个项目有两个开发人员,我们都有很强的SQL技能,但是没有人使用Core Data。

我的问题是:与SQLite相比,Core Data的好处是什么?在这种特定情况下,好处是什么?这些好处是否足以证明学习新框架而不使用现有的强大SQL技能?

编辑:我只是注意到这个问题: 核心数据与SQLite 3 我想我的问题因此是:

  • 如果我必须检查特定项目是否存在或有更新(使用SQL可以轻松进行),那么Core Data仍然有意义吗? 我可以在不加载整个图形的情况下加载图形中的第一个对象并检查版本号吗?
  • 如果我们已经了解SQL,那么Core Data在这个项目中的优势是否足以证明我们学习它的理由?

在阅读Core Data与SQLite 3时 ,您知道Core Data和持久性机制(在这种情况下为SQLite)在很大程度上是正交的。 核心数据实际上是关于管理对象图的,其主要用例是MVC体系结构的模型组件。 如果您的应用程序很好地适合此体系结构,那么使用Core Data可能值得,因为它将在模型组件中节省大量代码。 如果您已经有一个有效的模型组件(例如,从现有的桌面应用程序中获取),那么Core Data不会给您带来很多好处。 可以使用混合方法-您可以执行自己的持久性/查询,并在内存存储中构建Core Data,并使用查询结果填充该数据,然后通过Core Data将此内存中存储用作应用程序的模型组件。 这并不常见,但是我已经做到了,并且没有主要障碍。

要回答您的特定问题:

  1. 您可以为整个持久性存储分配一个版本号,并通过+[NSPersistentStore metadataForPersistentStoreWithURL:error:]检索该信息,甚至无需打开存储。 当然,也存在等效的+setMetadata:forPersistentStoreWithURL:error 如果要将版本信息存储在实体实例中,而不是存储在持久性存储元数据中,则只能加载单个对象。 有了SQLite永久存储,Core Data可以很好地完成仅获取所需内容的工作。

  2. NSPredicate API非常易于学习,似乎可以很好地编译成SQL。 至少对于您可以在iPhone上安装的大小的数据库而言,根据我的经验,这当然足够了(性能方面)。 我认为SQL vs. Core Data问题有点误导了。 一旦获得查询结果,您将如何处理它? 如果自己动手,则必须实例化对象,处理错误/唯一化(如果您不想立即将整个查询结果加载到内存中)以及Core已经提供的所有其他对象图管理功能数据。

听起来您已经使用SQLite设计了项目,并且您具有该领域的经验。

因此,最重要的是,移植该项目是否有意义,Core Data会给我带来我原始设计中没有的任何东西吗?

根据此项目的要求,假设原始设计正确完成,则可能不值得。

但是,讨论还没有结束。 还有其他事情要考虑:我的下一个项目对数据库的要求是否会如此低? 由于时间或预算限制,我是否需要尽快发货? 假设我迟早要学习核心数据,现在这样做是没有道理的吗? 我可能会对将代码移植到Mac感兴趣吗?

这些问题的答案可能会导致您做出以下决定:是的,值得一提的是回到图纸板上,并了解Core Data的全部含义。

最后一个问题:有什么优势? 好吧,Core Data是数据库的更高层次的抽象,它也是数据存储不可知的(因此,如果iPhone的未来版本放弃了SQLite以使用MySQL的嵌入式版本,这是不可能的,但这只是一个示例),那么Core数据几乎不需要更改代码就可以与新的数据存储一起使用。 Core Data将为Mac平台提供大量的快速可移植性。 核心数据将处理您的数据模型的版本控制,而除非您拥有管理它的框架或工作流,否则将无法直接访问SQLite。

我敢肯定,其他回答者也可以带来其他优势,也许是一些很好的理由,为什么不弄乱Core Data。 顺便说一句,在类似情况下,我的决定是移植到更高级别的新框架。 但就我而言,这是一个附带项目,并且发货日期和预算都不重要。

不会影响这个论坛,但是您可能会在Apple iPhone DevForum中找到更多具有上下文相关经验的受访者。

从纯粹的项目管理角度来讲,这听起来像您知道如何使用SQLite构建要构建的内容,所以对我来说,从这条路线开始比较有意义。

话虽这么说,CoreData建立在SQLite之上,并且如果您尝试将系统的其他部分与数据结合使用,例如使用KVC / KVO或绑定,那么您可能会很快发现此功能值得学习。

=迈克

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM