为什么Realm与SQLite相比如此之快?

phi*_*are 15 realm

我已经看到了Realm网站上的基准测试,与具有悠久发展历史的SQLite相比,Realm如何快速发展到2000年?

我想知道有知识的人是否可以分享Realm在数据库层中使用的一些常规技术?截至2016年3月,只有绑定是开源的,db层仍然关闭.

phi*_*are 23

领域博客有关于这个问题的巨大的技术谈判,但有是进入背后它的性能的原因深度没有一个单一的存储库.这篇文章旨在以易于访问的方式压缩视频和文章.

TL; DR

Realm是为移动设备而设计的,它使用并因此在移动平台上进行权衡,而SQLite是移植到移动平台的通用解决方案.

答案越长

Realm当然有很多小的优化(整数打包,将常见的字符串转换为枚举),但在这篇文章中,我将尝试关注那些可以带来最大性能优势的差异.

  1. 传统的SQLite + ORM抽象是漏洞,因为ORM只是将对象及其方法转换为SQL语句.因此,这是以性能为代价的开发人员生产力的权衡.另一方面,Realm是一个对象数据库,这意味着您的对象直接反映您的数据库.这种对数据库的直接访问导致了下一个主题:零拷贝.
  2. 零拷贝:从数据库读取数据的传统方式导致不必要的复制(原始数据 - >反序列化表示 - >语言级对象).Realm通过使用B +树映射内存中的整个数据来避免这种情况,每当查询数据时,Realm只计算偏移量,从内存映射区域读取并返回原始值.
  3. 延迟加载:因为属性以列而不是行来表示,所以它可以根据需要延迟加载属性,并且由于列结构,读取速度更快,而插入更慢.但这在移动应用程序的上下文中是一个很好的权衡.
  4. MVCC(多版本并发控制):Realm还使用MVCC模型很好地处理并发,这意味着可以同时完成多个读取事务,并且在提交写入事务时也可以完成读取.

  • 谢谢你,意味着很多.如果您有任何其他问题,请随时与我们联系!即使你这次击败我们,我们也会密切关注StackOverflow;) (2认同)