Core Data, FMDB, Realm 性能测试

CoreData, FMDB, Realm是iOS开发中数据本地持久化存储的常用的方法。
之后我准备深处探索一下这几个不同的解决方案的优劣与内部原理,于是我先就三个库的性能做了一次测试

  1. 第一次创建库,插入1K条数据的性能
  2. 已有库的情况下,插入1K条数据的性能
  3. 从10K条数据中连续单次查询1K条数据的性能
  4. 10K条数据总量,更新其中1K条数据的部分字段性能

主要是以上四种操作的时间对比,为了使数据对比明显,以1K为最小单位进行测试。目前涉及到对应数据库操作中的Create, SELECT,UPDATE三种操作

这是我的测试代码

###第一组数据:


测试内容:第一次创建库,插入1K条数据的性能

方式 平均时间(s) 用例数量
Realm 13.76585432 1024
FMDB 13.41253833 1024
CoreData 2.558547 1024

FirstInsert

###第二组数据:


测试内容:已有库的情况下,插入1K条数据的性能

方式 平均时间(s) 用例数量
Realm 13.61145302 1024
FMDB 8.21827366 1024
CoreData 2.050277988 1024

FirstInsert

###第三组数据:


测试内容:从10K条数据中连续单次查询1K条数据的性能

方式 平均时间(s) 用例数量/总量
Realm 0.574331999 1024/10240
FMDB 0.369130015 1024/10240
CoreData 2.054877996 1024/10240

FirstInsert

###第四组数据:


测试内容:10K条数据总量,更新其中1K条数据的部分字段性能

方式 平均时间(s) 用例数量/总量
Realm 0.256972333 1024/10240
FMDB 0.014923016 1024/10240
CoreData 0.303027352 1024/10240

FirstInsert



####接下来
大概看来,三种解决方案中,CoreData除了在大量写数据入库方面有所优势以外,其他几个方案表现都不是特别好。FMDB是对sqlite的一个封装,总体表现最好,特别是在对数据大量更新的方面,是其他两种的十倍以上的效率。

大家如果有兴趣,可以看看我的测试代码,如果有什么缺陷,一定请提出来!
接下来我会开始研究FMDB以及Realm的内部实现