iOS 各种数据持久化方案比较

前言:

CoreData不是DB,也不是DBMS,它是一个对象图管理工具,它的底层存储使用SQLite,XML或者其它。通常使用CoreData的时候,也会用到第三方库,比如MagicalRecord.

SQLite则是一个DB,有自己的DB Engine,开发的时候直接使用SQL语句进行操作,实际开发通常使用第三方库,比如FMDB

本文更像是一个整理,整理一些我认为的和其它Google来的观点,供大家参考,所有参考的部分最后我都会列在参考链接里。

各自的优缺点(不可能完全涵盖,有读者看到了可以补充)

我对CoreData比较熟悉,SQLite相对来说差一点,所以这里CoreData可能会写的多一点。

CoreData的优点

对象图管理

惰性加载的支持(faulting and uniquing)

面向对象的编程,直观易用

良好的多线程支持(注意不是线程安全的)

支持redo和undo

NSFetchedResultController使得与tableview结合编程变得很容易

KVC与KVO的支持

ICould的支持

Apple 推荐的存储方式,API在不断升级

CoreData的缺点

学习成本高,要很久才能得心应手

对象Schema改变后,数据迁移比较棘手(当然也支持)

对于一次大量更新删除等操作效率较低(因为每次都要先取到内存里)

对主键的支持要自己去维护(CoreData 通过objectID来唯一确定对象)

占用内存会高一些(为了维护ManagedContext,为了跟踪对象变化)

直接使用SQLite的优点

学习成本相对较低(没有那么多的类要学,往往计算机或者软件背景的童鞋都有一些数据库知识,用过一些SQL语句)

直接使用SQLite引擎,对一次大批量数据的操作性能较好(只需要一个SQL语句即可)。

占用内存较少

更加轻量

Android和WP也支持

直接使用SQLite的缺点

复杂的对象关系要自己维护

没有对象变化跟踪

并不是真正的面向对象编程

有待补充



第一步,要明确一点,就是不管是CoreData还是直接使用SQLite,都是为了数据持久化,数据持久化的核心是存储的数据是什么。

第二步,分析自己的数据量,数据之间的关系,对数据的操作。优先考虑CoreData吧,因为你学会了真得会发现它非常好用,绝大部分App的数据量达不到CoreData性能瓶颈的时候。但是一下情况下,要考虑SQLite

跨平台。这点是CoreData不支持的,它是Cocoa的一部分,意味着是用C实现的,如果数据要迁移到Android或者PC,不要使用CoreData

一次大批量更新,删除数据。例如,有10000条存储,每个存储都有一个Bool值来表示一个状态,使用CoreData来操作的效率是很低的。

有待补充

你可能感兴趣的:(iOS 各种数据持久化方案比较)