非阻塞不可变模型管理系统 RocketData

Apache
Swift 查看源码»
跨平台
LinkedIn
2016-08-09
花仲马

【年终提升】2019尾声,来 OSC·年终盛典收割技术干货,get新技能!>>>

Rocket Data是有持续同步层的非阻塞、不可变模型管理系统。它可以使用任何类型的缓存,可以使用简单的API来轻松地挂接到键值型存储上。

从2015年早期重写LinkedIn旗舰版应用时开始,他们就在寻找一个可用的缓存系统来把内容展现给用户,而内容要从网络上加载。总的来说对这套缓存系统的需求是:

  • 不可变,线程安全模型;

  • 模型在内存和缓存中一致。这样在更新模型之后,所有其它实例中的这个模型都会跟着更新;

  • 读写操作都是非阻塞式的;

  • 简单的数据淘汰策略;

  • 在有大量模型类型、模式和监听器时可以容易扩展;

  • 自动迁移;

他们调查了当时业界的各种现有解决方案,包括Core DataURL CacheRealm,以及直接将模型写入磁盘的方案等,但找不到哪种方案可以满足上述所有需求,或者保证不可变模型的一致性——这是他们最看重的。于是他们决定自己写一套,就是Rocket Data,它的架构如下:

每一个视图控制器都有一个或多个数据提供者的引用。有两种类型的数据提供者:正规数据提供者持有对单一模型的引用,集合数据提供者持有对模型的有序数组的引用。两种数据提供者都可以很容易很快速地完成数据存取,因为模型都保存在内存中。

Peter Livesey这样评价这套系统:

有了这套缓存系统,开发者只需一点点额外工作就可以轻松地为项目添加缓存了。缓存和数据提供者都是自动保持一致的。除了每周为一些模型添加模式之外,我们再也不必为迁移增加任何代码。最重要的最,我们程序从来不会因为Core Data异常而崩溃。

via:InfoQ

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

暂无博客

返回顶部
顶部