我最近使用 sqlite 后备存储将我的应用程序从直接的 sqlite 移植到核心数据。我有一个大约 100,000 条记录的合理大小的数据库。我也花了很多时间优化它
尽管所有的苹果文档和公关都说它高效、快速等,但我发现,与直接的 sqlite 相比,对于大量数据,它确实有更高的内存要求并且速度明显慢。快速搜索堆栈溢出将证实这一点。关于速度,内存要求等有很多未解决的问题。
特别是,插入和删除要慢几个数量级。提取通常比直接 sqlite 使用更多的内存。在大多数情况下,核心数据会提取更多数据。例如,在直接 sqlite 中,您可以提取一个整数 id,然后在需要时提取其余数据。coredata 会提取更多数据来做到这一点。删除要求您在删除数据之前先将数据拉下来等。
如果您需要加密您的数据。这是核心数据中的一个挑战,没有人能够真正提供可靠的加密,同时又不破坏诸如 nspredicates 之类的东西。它是否需要编写更少的代码是有争议的。肯定有一个陡峭的学习曲线。核心数据的思维方式与关系数据库的思维方式非常不同。
so why would you use core data? its the additional features, support for undo, batch fetching, manages object updates for you and syncing to iCloud (though this is very buggy to the point that its unusable right now) etc etc. Some things it does for you. you don't need to manage primary keys, relationships etc etc.
In the apple ecosystem it seems future proof given new features such as icloud support are being built into core data. Though it does kill your portability if you want to go to android etc.