【问题标题】:Why is Realm so fast compared to SQLite?为什么 Realm 比 SQLite 快?
【发布时间】:2016-03-16 16:49:20
【问题描述】:

我在Realm website 上看过基准测试,为什么Realm 比2000 年发布的具有悠久开发历史的SQLite 这么快?

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

【问题讨论】:

标签: realm


【解决方案1】:

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

TL;DR

Realm 从一开始就是为移动设备设计的,它使用并因此做出了在移动平台中有意义的权衡,而 SQLite 是一个移植到移动设备的通用解决方案。

更长的答案

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

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

【讨论】:

  • 嗨@philoniare,您可能还会喜欢这个视频,该视频详细介绍了我们的内部设计以及我们表现出色的原因:realm.io/news/jp-simard-realm-core-database-engine Cheers!
  • @timanglade 是的,这确实是我从中获得信息的地方。与 Realm 的出色合作!顺便说一句,真的很喜欢领域博客/新闻的格式和内容 - 信息量很大!
  • 谢谢,意义重大。如果您有任何更多问题,请随时联系这里!我们非常密切地关注 StackOverflow,即使您这次击败了我们 ;)
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 2019-11-02
  • 2015-07-24
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多