android 數(shù)據(jù)庫注意事項(xiàng)

1. 數(shù)據(jù)庫表段字段常量和SQL邏輯分離,更清晰,建議使用Lite系列框架LiteOrm庫,超級清晰且重心可以放在業(yè)務(wù)上不用關(guān)心數(shù)據(jù)庫細(xì)節(jié)。

2.多線程操作數(shù)據(jù)庫時,db關(guān)閉了會報(bào)錯,也很可能出現(xiàn)互鎖的問題,推薦使用事務(wù),推薦使用自動化的LiteOrm庫操作。

3. 數(shù)據(jù)庫刪除數(shù)據(jù)時,要注意級聯(lián)操作避免出現(xiàn)永遠(yuǎn)刪不掉的臟數(shù)據(jù)喔。

4. 完整型數(shù)據(jù)一定要用Sqlite的Transaction,大數(shù)據(jù)一定要用。粗略測試插入100個數(shù)據(jù)有20倍的提速,插入1000個數(shù)據(jù)就有100多倍的提速。

5. 存在多個不同的dbhelper實(shí)例情況下,sqlitedatabase對象必然存在不同的實(shí)例,多線程同時寫入數(shù)據(jù),輪流寫入數(shù)據(jù)時會不定時的報(bào)db is locked,引起崩潰,不管是操作同張表還是異表。讀和寫可以同時并發(fā),輪流無規(guī)律的交替執(zhí)行。同時寫入數(shù)據(jù)時解決方案是用并發(fā)的每個線程都用事務(wù),db則不會lock,按次整體寫入。

6. 建議整個應(yīng)用維護(hù)一個dbhelper實(shí)例,只要db沒有關(guān)閉,全局就只有一個db實(shí)例,多線程并發(fā)寫入db不會lock,嚴(yán)格交替進(jìn)行寫入:123123123。。。(123代表不同線程,輪流插入一個記錄),讀和寫均不會鎖住db,讀寫交替并沒有規(guī)律,執(zhí)行次數(shù)和程度看cpu分配給哪個線程的時間片長。

7. 一個任務(wù)使用事務(wù)嵌套N個事務(wù),N個事務(wù)中有一個失敗,這個任務(wù)整體失敗,全部成功后,數(shù)據(jù)才寫入,具有安全性,整體性。并且事務(wù)寫入大批量數(shù)據(jù)的效率經(jīng)實(shí)際測試成百上千倍的高于一般的單個寫入。數(shù)據(jù)庫大量數(shù)據(jù)、多線程操作建議使用LiteOrm數(shù)據(jù)庫框架,更穩(wěn)定簡單。

參考鏈接:http://www.vmatianyu.cn/summarization-of-technical-experience.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容