2016-02-05 70 views
0

我最近讀了Realm數據庫的內部文檔,他們的所有查詢都是懶惰的,我不確定,如果我正確理解這可能導致的影響。領域懶惰查詢 - 他們比OrmLite更快嗎?

讓我解釋一下我的理解,如果我錯了,請隨時糾正我。我看到的方式是,每當我發出這樣的命令時mRealm.where(Customer.class).equalTo(Customer.ID, "someId").findFirst();我都沒有得到具有所有填充數據的Java對象,該數據包含在該客戶的數據庫中。相反,只要我嘗試訪問這個「獲取」對象的某些字段,就會進行查詢。因此,我想知道,如果這比OrmLite更快,如果我想訪問給定類的所有字段?

與此相關的另一個問題。對ListViewRecyclerView中顯示的項目使用Realm db是不錯的主意?如果在滾動列表期間經常進行查詢,是否會對性能產生嚴重影響?

如果有人能夠更詳細地向我解釋這一點,我會很高興。

回答

1

RealmResults,這是我們的數據庫查詢,都是自動更新的意見爲基礎數據。您可以將它們視爲類型安全的遊標,並且它們有一些相同的折衷,但與遊標不同,我們不會將數據複製到CursorWindow中,因此不存在分頁效果。您可以訪問整個對象圖,而不必擔心達到CursorWindow限制。

大多數ORM將所有數據都複製到Java堆內存中。這可能是一個潛在的非常昂貴的操作,無論是時間和內存方面+你可能有很多額外的數據,你甚至不需要。這樣做的好處是你只需要做一次,然後訪問數據真的很快。

另一方面,只加載實際需要的數據。這也包括個別領域。所以如果你有一個ListView顯示10個項目中的1個字段,我們只會像CursorAdapter一樣加載這10個字段。它必須從本地內存加載該數據,儘管這比從Java堆中讀取更昂貴。

所以要回答你的問題。是的,Realm與ListView完美兼容。

0
  1. 如果你想知道什麼是速度更快,試試吧;)。可能Realm會更快,因爲它們的專有系統比SQLite更優化,甚至可以進行微調。但是這是我的假設

  2. 不,它不能影響性能,因爲我們假設Realm足夠聰明,可以在合適的時候獲取真實數據。當使用另一個ORM時,它是同樣的事情,數據在分頁發生時被提取。