Markdown版本筆記 | 我的GitHub首頁 | 我的博客 | 我的微信 | 我的郵箱 |
---|---|---|---|---|
MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
ORM數據庫框架 SQLite 常用數據庫框架比較
目錄
簡介
關系型數據庫
greenDAO 智能代碼生成 10K+ 首選
ORMLite 注解+反射 1.5K 通用
LitePal 注解+反射 5K 最簡單
DBFlow 5K
ActiveAndroid 4.5K
sugar 2.5K
NoSQL 對象型數據庫
Realm 10K-
ObjectBox 2.5K
簡介
這些ORM框架的實現方式主要有以下幾種:
注解
。分為運行時注解
(Retention為RUNTIME),編譯時注解
(另外兩種Retention),運行時注解其實也是利用了反射的原理,非運行時注解一般都是用於(編譯時)生成代碼的反射
。除非運行前已經自動生成了代碼,否則可以肯定就是通過反射方式實現的。直接生成代碼
。一般是通過程序根據注解
自動生成需要的代碼。
通過運行時注解或反射去建立數據表和實體的關系會導致性能比較低
。從性能角度出發,應該選擇使用編譯時注解或代碼生成的框架。當然,成熟程度,文檔資料等也是考量點。
關系型數據庫
greenDAO 智能代碼生成 10K+ 首選
GitHub
greenDAO與其他常見的ORM框架不同,其原理不是根據反射進行數據庫的各項操作
,而是一開始就人工生成業務需要的Model和DAO文件
,業務中可以直接調用相應的DAO文件進行數據庫操作,從而避免了因反射帶來的性能損耗和效率低下。
以查詢為例,其首先是創建數據庫,然后在SQLiteOpenHelper.onCreate
方法中根據已生成的model創建所有的表,而db.query其實就是Android原生的查詢操作
,只不過參數是經過DAO文件處理過的,無需手動匹配。
由於需要人工生成model和DAO文件,所以greenDAO的配置就略顯復雜。
優點:效率高,速度快,文件較小,占用更少的內存,操作實體靈活
缺點:學習成本較高。
ORMLite 注解+反射 1.5K 通用
GitHub
基於注解和反射
的的方式,導致ormlite性能有着一定的損失(運行時注解其實也是利用了反射的原理)
OrmLite 不是 Android 平台專用的ORM框架,它是Java ORM
。支持JDBC連接,Spring以及Android平台。語法中廣泛使用了運行時注解。
優點:文檔較全面,社區活躍,有好的維護,使用簡單,易上手。
缺點:基於反射,效率較低(GreenDAO比OrmLite要快幾乎4.5倍)
LitePal 注解+反射 5K 最簡單
GitHub
An Android library that makes developers use SQLite database extremely easy.
- LitePal通過LitePal.xml文件獲取數據庫的名稱、版本號以及表,然后自動創建數據庫和表,以及表數據類型和非空約束等。
- 要執行增刪改查操作的數據model都會繼承DataSupport,最后將查詢得到的數據轉換成List並返回。
- LitePal不管是創建數據庫、表還是執行增刪改查,都是根據Model的類名和屬性名,每次都需要進行反射拼裝,然后調用Android原生的數據庫操作,或者直接執行sql語句,實現相應的功能。
特點
- 根據反射進行數據庫的各項操作(速度比GreenDAO要慢很多很多)
- 采用對象關系映射(ORM)的模式
- 很“輕”,jar包只有100k不到
- 使用起來比較簡單
- 支持直接用sql原始語句實現查詢的api方法
DBFlow 5K
GitHub
A blazing fast, powerful, and very simple ORM android database library that writes database code for you.
特點
- 相關代碼通過
編譯時注解
生成,不會導致性能瓶頸。 - 功能特性比較豐富,文檔較完善。
- 數據庫版本升級和數據遷移有較簡便的解決方案,支持集成
SQLCipher
加密,支持Content Provider Generation。
ActiveAndroid 4.5K
GitHub
官網
Active record[活動目錄] style SQLite persistence[持久化] for Android
Active Record是Yii、Rails等框架中對ORM實現的典型命名方式。Active Android 幫助你以面向對象的方式來操作SQLite。
sugar 2.5K
GitHub
官網
Insanely easy way to work with Android Database.
SugarORM 是 Android 平台專用ORM。提供簡單易學的APIs,可以很容易的處理1對1和1對多的關系型數據,並通過3個函數save(), delete() 和 find() (或者 findById()) 來簡化CRUD基本操作。
NoSQL 對象型數據庫
NoSQL是趨勢。其實對關系型數據庫引入ORM,就是實現了對象型數據庫要做的事情。
Realm 10K-
Realm is a mobile database: a replacement for SQLite & ORMs
基於C++編寫,直接運行在你的設備硬件上(不需要被解釋),因此運行很快。
Realm是一個直接在手機,平板電腦或可穿戴設備中運行的移動數據庫。 此存儲庫包含Realm的Java版本的源代碼,該版本目前僅在Android上運行。
特征:
- 移動優先:Realm是第一個直接在手機、平板電腦和可穿戴設備內部運行的數據庫。
- 簡單:數據直接作為對象公開,並且可以通過代碼查詢,從而消除了對ORM性能和維護問題的需求。 此外,我們努力將我們的API保持在極少數類上:我們的大多數用戶直觀地選擇它[pick it up intuitively],在幾分鍾內啟動並運行簡單的應用程序。
- 現代[Modern]:Realm支持簡單的線程安全,關系和加密[relationships & encryption]。
- 快速:Realm在常見操作上比原始SQLite更快,同時保持極其豐富的功能集。
ObjectBox 2.5K
ObjectBox是一個超快的面向對象數據庫,具有強大的關系支持[strong relation support]。 ObjectBox是嵌入到您的Android,Linux,macOS或Windows應用程序中。
特性:
- 超快:我們構建ObjectBox的動機是提供最佳性能。到目前為止,ObjectBox優於我們測試過的所有嵌入式數據庫。
- 對象API:不再有行、列和SQL - ObjectBox是一個從出生開始就是為對象構建的移動數據庫(沒有ORM,沒有SQLite)。API簡潔、易於學習,只需要使用SQLite所需的一小部分代碼。
- QueryBuilder:通過使用ObjectBox,會在編譯時檢查,因此,您沒有更多的因拼寫錯誤而導致的運行時崩潰。
- 對象關系:對象引用/關系[Object references / relationships]是內置類型,它們是原生的引用[native references]。
- 反應[Reactive]:對數據變化做出的反應簡單而有力。使用ObjectBox中的反應數據觀察器[reactive data observers]或與RxJava集成。
- 多平台:ObjectBox已經支持Android和普通Java(Linux和Windows)。 MacOS和iOS是路線圖中的下一個平台。
- 即時單元測試:使用我們的多平台方法[multiplatform approach],您可以在幾秒鍾內使用真實數據庫在桌面上運行普通單元測試(無需Robolectric,無需 instrumentation tests)。
- 強大的技術[Robust technology]:ACID屬性和多版本並發控制(Multiversion Concurrency Control, MVCC)為您提供安全的事務和並行性[safe transactions and parallelism]。 ACID代表:原子[Atomic],Consitent,隔離[Isolated],耐用[Durable]。
- 簡單線程:ObjectBox返回的對象在沒有附加字符串的所有線程中工作。
- 無手動模式遷移[No manual schema migrations]:ObjectBox負責處理具有添加,刪除和重命名屬性的對象新版本[new object versions]。
- DaoCompat庫:已經使用了greenDAO?這個小程序庫為您提供了 familiar greenDAO APIs for ObjectBox.
- 歷經測試:自從ObjectBox處於測試階段以來,我們已經在擁有超過150,000個月活躍用戶和數千個設備的應用程序中運行它。當然,我們內部進行了大量的單元測試(> 1000次單獨測試)。
2018-8-17
附件列表