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