【问题标题】:Realm lazy queries - are they faster than OrmLite?领域惰性查询 - 它们比 OrmLite 更快吗?
【发布时间】:2016-02-05 08:10:01
【问题描述】:

我最近阅读了 Realm 数据库的内部文档,他们的所有查询都是惰性的,我不确定是否正确理解这可能导致的含义。

让我解释一下我是如何理解它的,如果我错了,请随时纠正我。我看到它的方式是,每当我发出这样的命令mRealm.where(Customer.class).equalTo(Customer.ID, "someId").findFirst(); 时,我都没有得到包含所有填充数据的Java 对象,该对象包含在该客户的db 中。相反,每当我尝试访问此“获取”对象的某些字段时,都会进行查询。因此我想知道,如果这比OrmLite 快​​,我是否想访问给定类的所有字段?

另一个与之相关的问题。将Realm db 用于将在ListViewRecyclerView 中显示的项目是个好主意吗?如果在滚动列表的过程中不断进行查询,会不会对性能造成严重影响?

如果有人能更详细地向我解释这一点,我会非常高兴。

【问题讨论】:

    标签: android performance orm realm ormlite


    【解决方案1】:

    由我们的查询创建的 RealmResults 会自动将视图更新到基础数据中。您可以将它们视为类型安全的游标,它们有一些相同的权衡,但与游标不同的是,我们不会将数据复制到 CursorWindow 中,因此没有分页效果。您可以访问整个对象图,而不必担心达到 CursorWindow 限制。

    大多数 ORM 将所有数据复制到 Java 堆内存中。这在时间和内存方面都可能是一项非常昂贵的操作 + 您可能有很多甚至不需要的额外数据。这样做的好处是您只需执行一次,就可以非常快速地访问数据。

    另一方面,Realm 只加载您实际需要的数据。这也包括各个字段。因此,如果您有一个 ListView 显示 10 个项目中的 1 个字段,我们将只加载这 10 个字段,就像 CursorAdapter 一样。它必须从本机内存中加载该数据,但这比从 Java 堆中读取数据更昂贵。

    所以回答你的问题。是的,Realm 与 ListView 完美配合。

    【讨论】:

      【解决方案2】:
      1. 如果你想知道什么更快,试试吧;)。可能 Realm 会更快,因为他们的专有系统比 SQLite 更优化,甚至微调。但这是我的假设

      2. 不,它一定不会影响性能,因为我们假设 Realm 足够聪明,可以在适当的时候获取真实数据。使用另一个ORM时,也是一样的,分页时取数据。

      【讨论】:

        猜你喜欢
        • 2013-12-03
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        相关资源
        最近更新 更多