iOS的高性能、高实时性key-value持久化组件

iOS的高性能、高实时性key-value持久化组件
今年上半年时候看到微信开发团队的这么一篇文章MMKV–基于 mmap 的 iOS 高通用 key-value 组件,文中提到了用mmap实现一个高性能KV组件,虽然并没有展示太多的具体代码,但是基本思路讲的还是很清楚的。文章最后提到了开源计划,等了快半年还没看到这个组件源码,于是决定自己试着写一个。

轮子

按照惯例先上轮子,可以给个star收藏一下哦~

FastKV github

关于NSUserDefaults

在开始写这个组件之前,应该先调研一下NSUserDefaults性能(ps:这里有个失误,事实上我是在写完这个组件以后才调研的)。

据我所知NSUserDefaults有一层内存缓存的,所以它提供了一个叫synchronize的方法用于同步磁盘和缓存,但是这个方法现在苹果在文档中告诉我们for any other reason: remove the synchronize call,总之就是再也不需要调用这个方法了。

测试结果如下(写入1w次,值类型是NSInteger,环境:iPhone 8 64G, iOS 11.4)

非synchronize耗时:137ms

synchronize耗时:3758ms

很明显synchronize对性能的损耗非常大,因为本文需要的是一个高性能、高实时性的key-value持久化组件,也就是说在一些极