1深滚、Android中數(shù)據(jù)庫(kù)的使用
Sqlite的使用:http://www.reibang.com/p/8e3f294e2828
GreenDao的使用:https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA
Realm的使用:http://www.reibang.com/p/28912c2f31db#
2游昼、數(shù)據(jù)庫(kù)的性能對(duì)比
數(shù)據(jù)庫(kù)使用的版本
這邊貼的都是project里面的版本
greenDao:org.greenrobot:greendao-gradle-plugin:3.2.2
realm:io.realm:realm-gradle-plugin:3.1.1
性能對(duì)比
這邊通過(guò)對(duì)數(shù)據(jù)庫(kù)分別插入10條,100條遗菠,1000條联喘,10000條數(shù)據(jù)來(lái)查看各自數(shù)據(jù)庫(kù)的速度。(其中使用的手機(jī)是華為的P8)
因?yàn)槊看螖?shù)據(jù)庫(kù)操作的時(shí)間都不大一樣辙纬,有時(shí)候差別還挺大豁遭,因此只能反映一個(gè)大概的情況。
插入時(shí)間(ms) | SQlite | GreenDao | Realm |
---|---|---|---|
10條 | 18 | 16 | 8 |
100條 | 75 | 65 | 37 |
1000條 | 392 | 419 | 132 |
10000條 | 2365 | 2992 | 874 |
刪除操作的話贺拣,是通過(guò)查詢得到相應(yīng)的數(shù)據(jù)后蓖谢,再對(duì)找到的數(shù)據(jù)進(jìn)行批量的刪除得到的時(shí)間。而不是籠統(tǒng)的直接deleteAll譬涡。
刪除時(shí)間(ms) | SQlite | GreenDao | Realm |
---|---|---|---|
10條 | 12 | 16 | 4 |
100條 | 8 | 29 | 4 |
1000條 | 12 | 261 | 8 |
10000條 | 69 | 2327 | 56 |
更新操作的話闪幽,也是同樣先找到相應(yīng)的數(shù)據(jù),在對(duì)找到的數(shù)據(jù)進(jìn)行更新涡匀。
更新時(shí)間(ms) | SQlite | GreenDao | Realm |
---|---|---|---|
10條 | 8 | 12 | 4 |
100條 | 10 | 41 | 12 |
1000條 | 20 | 318 | 96 |
10000條 | 80 | 3179 | 578 |
從上面的數(shù)據(jù)上盯腌,可以看出Realm庫(kù)在進(jìn)行插入、更新陨瘩、刪除等操作都具有較快的速度(尤其是在插入數(shù)據(jù)的速度上)腕够,底層由JNI實(shí)現(xiàn)是比較關(guān)鍵的因素级乍。而Android中原生的SQlite數(shù)據(jù)庫(kù)在插入數(shù)據(jù)的表現(xiàn)上跟greenDao差不多,但是刪除和更新操作速度最快燕少。至于greenDao速度上來(lái)講可能表現(xiàn)的最差(不知道是不是代碼實(shí)現(xiàn)的問題)卡者。
最后對(duì)于包大小上來(lái)講,Sqlite相對(duì)于realm的話要小得多客们,并且生成的數(shù)據(jù)庫(kù)也要小得多崇决。下面這張圖是插入同樣多的數(shù)據(jù)后,以上三個(gè)數(shù)據(jù)庫(kù)的大小底挫。
其中g(shù)reenDao和sqlite生成的數(shù)據(jù)庫(kù)大小差不多恒傻,但是realm的數(shù)據(jù)庫(kù)卻要大好多,如果對(duì)包的大小非常敏感的大話建邓,需要考慮一下盈厘。
最后,附上做測(cè)試的代碼的demo:https://github.com/mj845307413/DatabaseTest