Realm blog就此主题进行了很多技术性的讨论,但没有一个单独的存储库能够深入探讨其性能背后的原因。这篇文章旨在以易于访问的方式压缩视频和文章。
TL; DR
Realm专为移动设备而设计,从一开始就使用,因此在移动平台上进行权衡,而SQLite是一种移植到移动设备的通用解决方案。
答案越长
当然,Realm会做很多小的优化(整数打包,将常见字符串转换为枚举),但在这篇文章中,我将尝试关注那些可以带来最大性能优势的差异。
- 传统的 SQLite + ORM抽象漏洞,因为ORM只是将对象及其方法转换为SQL语句。因此,这是以性能为代价的开发人员生产力的权衡。另一方面,Realm是object database,意味着您的对象直接反映您的数据库。这种对数据库的直接访问导致了下一个主题:零拷贝。
- 零拷贝:从数据库读取数据的传统方式导致不必要的复制(原始数据 - >反序列化表示 - >语言级对象)。 Realm通过使用B +树映射内存中的整个数据来避免这种情况,每当查询数据时,Realm只计算偏移量,从内存映射区域读取并返回原始值。
- 延迟加载:因为属性是以列而不是行来表示的,所以它可以根据需要延迟加载属性,并且由于列结构,读取速度更快,而插入速度更慢。但是,在移动应用程序的上下文中,这是一个很好的权衡。
- MVCC(多版本并发控制):Realm还可以使用MVCC模型很好地处理并发,这意味着可以同时完成多个读取事务,也可以在写入事务时完成读取正在承诺。
醇>