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

时间:2016-03-16 16:49:21

标签: realm

我已经看到了Realm website的基准测试,为什么Realm的速度与SQLite相比如此之快?SQLite具有悠久的开发历史,于2000年发布?

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

1 个答案:

答案 0 :(得分:23)

Realm blog就此主题进行了很多技术性的讨论,但没有一个单独的存储库能够深入探讨其性能背后的原因。这篇文章旨在以易于访问的方式压缩视频和文章。

TL; DR

Realm专为移动设备而设计,从一开始就使用,因此在移动平台上进行权衡,而SQLite是一种移植到移动设备的通用解决方案。

答案越长

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

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