最近項目中要用到數據庫相關的知識,就在網上查了下Android平臺上的數據庫框架,目前比較熱門有GreenDAO和Realm,這兩個都是使用者都比較多,並且都在持續發佈更新,就對這兩個框架進行了一些探索。
兩者的官網和github鏈接:
GreenDAO:
http://greenrobot.org/greendao/
https://github.com/greenrobot/greenDAO
Realm:
https://realm.io/cn/
https://github.com/realm/realm-java
簡單介紹
GreenDAO
greenDao是一款Android平臺上的開源框架,提供將對象映射到SQLite數據庫中的輕量且快速的ORM解決方案。greenDAO對安卓進行了高度優化,提供了出色的性能和最小的內存消耗。它減輕開發人員處理低級數據庫需求,同時節省開發時間,使SQLite數據庫的開發變得有趣。
SQLite是一個令人敬畏的嵌入式關係數據庫。不過,編寫SQL和解析查詢結果是相當乏味和耗時的任務。greenDAO通過將Java對象映射到數據庫表(稱爲ORM ,對象關係映射)將您從其中解脫出來。通過簡單的面向對象API,你就可以來存儲,更新,刪除和查詢Java對象。
功能一覽:
高性能(可能是Android最快的ORM):開源的基準
易用:功能強大的API涵蓋關係和聯接
最小的內存消耗
精簡的庫(<100KB):維持較少的編譯時間,並避免65k方法數量的限制
數據庫加密:greenDAO支持SQLCipher,以保護用戶的數據安全
強大的社區:GitHub上超過5000個Star(現在已經超過8000了)表明有一個強大和積極的社區
Realm
Realm是一款可直接運行在手機,平板電腦或可穿戴設備上的移動數據庫。Realm 移動端數據庫快速、易用、開源且完全免費,深受開發者和億萬用戶喜愛。Realm 是 SQLite 和 Core Data 的替代者,得益於其零拷貝的設計,Realm 比任何 ORM 都要快很多。Realm簡單、快速,節約數週的開發時間。幾分鐘內就能學會使用 Realm。
功能一覽:
離線優先:即使在離線狀態下應用也可正常工作
查詢快速:複雜查詢也只需要幾納秒,查詢結果與新數據實時同步
線程安全:多線程訪問同一數據毫無問題
跨平臺支持:多個平臺不同應用使用同一數據庫
加密:無需額外代碼,就能保證你的數據安全
響應式架構:讓Realm連接到UI,及時將數據更新反饋給用戶
使用方法
我比較懶,貼一下別的博主的博客好了。
這裏需要說明的是,greenDAO在github上說
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
這裏的root應該是project級的,app project是module級的
我看很多文章裏都沒搞對。
後面有時間的話自己再總結吧
速度對比
這裏使用的版本是
greenDAO 3.2.2
Realm 3.1.1
速度在不同機型上不同的使用方法肯定會有偏差,這裏僅作參考,但還是可以看出Realm在速度上的優勢。
增 | 刪 | 改 | 查 |
---|---|---|---|
GreenDAO(1條) | 10ms | 17ms | 12ms |
Realm(1條) | 5ms | 6ms | 7ms |
GreenDAO(10條) | 47ms | 55ms | 100ms |
Realm(10條) | 6ms | 11ms | 8ms |
GreenDAO(100條) | 402ms | 377ms | 398ms |
Realm(100條) | 10ms | 20ms | 16ms |
GreenDAO(1000條) | 3959ms | 3326ms | 3297ms |
Realm(1000條) | 28ms | 71ms | 94ms |
END
框架的選擇應該結合項目的需求,對比功能,穩定性,拓展性,易用性等多個方面。我也只是個小白,提不了什麼有價值的建議。
最後貼上自己的代碼,我只進行了最簡單的使用:
https://github.com/xiaoniu/Database
需要的可以參考一下,有問題可以評論一下,歡迎探討。