Android SQLite數據庫優化及注意事項

數據庫使用優化及注意事項

數據庫簡介

後臺數據庫一般是MySQL 、Oracle 、SQL Server ,而Android 中的數據庫是SQLite。今天要說的主要是SQLite在使用中的一些注意事項以及問題。
問題來源:公司有個項目,是用於石油煉化工廠巡檢使用。就是錄入所有巡檢過程中的數據,上傳至服務器,同時保存在本地。安卓中,本地數據庫使用一般要麼就是自己新建數據,繼承Android自帶的SQLiteHelper。第二種就是外面創建好數據庫,然後寫入到Android 應用數據庫目錄下 data/data/packagename/databases/yourdb下。這個寫入過程就是文件的讀寫。資料很多,不詳細說。

使用問題

用數據庫的時候,以前也不是很注意遊標cursor關閉這個問題。測試也很難測出問題。直達後面工人巡檢的時候,說程序直接崩潰。分析跟蹤之後,才發現當數據量很多,cursor生成很多,用完不關閉,導致內存泄漏,從而導致程序崩潰。所以切記,cursor用完必須關閉。以絕後患!
第二個問題就是多線程操作SQLite數據庫,多線程操作數據庫,一般就兩個問題。1、數據庫鎖定;2、數據庫關閉時機:語句執行完就關還是最後關閉。因爲SQLite數據庫的鎖是精確到數據庫表級別的。所以在多線程環境下,目前確實沒有好的辦法。尤其是對於寫操作,是無法完成併發的。所以後面對於寫操作,我的做法是建立一個全局的單線程池。所有的寫操作,都是同步執行。數據庫關閉時機我建議還是程序退出的時候關閉,不然那中間需要不斷的開啓數據庫,關閉數據庫。當然如果對數據庫操作不頻繁,還是用完即關。對於頻繁操作的,就不要一直開關了。

提高數據庫速度

事務

事務這個是真的6,用法也很簡單,在數據庫操作的地方只需三個操作databse.beginTransaction();開始事務,databse.setTransactionSuccessful();操作執行成功。database.endTransaction();事務結束。別小看這幾行代碼,我測試了下,100條數據的插入速度幾乎就能提高20倍。所以非常建議只要有幾十條數據的數據庫操作,強烈建議使用事務。會給程序性能上帶來很大的提升。這也是這次開發中遇到的問題,工廠人反應慢的問題。他們每次提交多的時候有上千條數據。用事務後,能明顯縮減等待時間。不過實際使用的時候,我覺得可能是SQLite 的本身性能問題。一個表存2萬多條數據的時候,數據庫操作明顯要慢一些。

索引

網上很多提升速度的方法都是說索引。所謂索引,就好比一筆本的目錄。看目錄,我們就能知道具體的內容的頁碼。數據庫中使用索引,也能快速定位到要查詢的內容位置。而不是條條遍歷。索引的缺點也是很明顯的,所有對內容的改動,都需要更新一次目錄,而且需要佔用一定的內存,不過幾乎介可以忽略了。所以,索引主要在查詢這塊能提升速度。對於索引的使用以及索引的規則,可以看下菜鳥教程或者博客

總結

數據庫使用雖然簡單,可是還是需要注意一些細節問題。cursor需要用完就關等,速度方面,目前查找的也就只有添加索引以及事務。而且索引還不能隨便使用。以上便是此次數據庫使用過程中的小結。後續有使用數據庫的問題,再續。感謝各位的肩膀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章