【Android】ORM效能分析(序)
【Android】ORM效能分析(一)

§・前言

簡單來說,就是因為一次 Android Developer讀書會的活動是介紹三種 ORM(Object Relational Model),分別是 ormlite、greenDAO、Realm,然後起因是因為 Realm 的官網說明他們的效能遠超過 ormlite 與 greenDAO,所以我就燃起了挑釁的戰鬥心理測試的鬥志,開始撰寫一個專門測試這三種 ORM 的 app

目前已把測試app丟上架~且有上傳至 Github ,歡迎取用查閱

ORM效能分析測試app傳送門
ORM效能分析測試Github sample

§・正文・Query

其實在月初的時候受邀去高雄GDG做一次分享,然後題目就是這個(因為完全想不到可以分享什麼)
然後從月初把 Query 的 sample 寫完後就完全放置 Play,更詳細的測試可能要等之後
以後會考慮再把DBFlowActiveAndroid以及 Parse local 用的部分納入測試階段

先來說說 Query 的結果吧
在效能分析(一)裡面我質疑了 Realm insert 的速度並沒有比 ormlite 或 greenDao 快到哪去
而實際在手機上測試時也確實如此,模擬機就完全壓勝就是了。那麼,Query 呢?

其實經過測試後

數據
ormlite:
    - 20.3sec per 100k
greeDAO:
    - 11.2sec per 100k
realm:
    - 287ms per 100k

發現差異了嗎?
沒錯,realm 的單位是毫秒
這是對 sqlite 直接做 query for all 的動作,寫成 SQL 語法就是 SELECT * FROM TABLE...;

然後做字串搜尋其實數值上也沒有差以上結果太多
就不再額外贅述

==========2015/09/20 23:55 補充===========
速度會慢這麼多的原因其實不在於query for all
主要還是在於 data access object

==========2015/09/24 00:18 補充===========
而 realm 是 lazy loading
所以在 query 第一時間是沒有 data access object的
自然而然速度快上許多

所以我的例子錯很大
應該要在for迴圈跑個10萬次應該就對了(誤

# §・結論

然後單純從這兩回分析測試所做出的結論是

當你判斷這個 app 未來 sqlite 資料量儲存會超過 20000 - 50000 筆以上的話,就會直接建議使用 realm
若是先用了其他 orm ,那之後要轉 realm 時的部分就會麻煩許多
而至於單純資料量不會存到超過 20000 筆以上的話,要用哪一種 orm 就沒有特別較好的了

真要比較的話,greenDao 效能比 ormlite 好,但可閱讀性維護性較低一些(對我來說)
所以在效能差距不大的資料量的時候,我會選擇犧牲效能與時間換取可閱讀性與可維護性

大概,目前先以上。ヽ( ̄д ̄;)ノ=3=3=3

Comments

comments powered by Disqus