sqlite是乙個輕量級、跨平台的關係型資料庫。既然號稱關係型資料庫,支援sql92標準中常用的玩意兒(比如檢視、事務、觸發器等)就是理所當然的了,咱今天就不細說了。今天主要聊聊一些有點特色的玩意兒。
◇輕量級
先說它的第乙個特色:輕量級。想必sqlite的作者很看重這個特性,連它的logo都是用的「羽毛」,來顯擺它的輕飄飄。
sqlite和c/s模式的資料庫軟體不同,它是程序內的資料庫引擎,因此不存在資料庫的客戶端和伺服器。使用sqlite一般只需要帶上它的乙個動態 庫,就可以享受它的全部功能。而且那個動態庫的尺寸也挺小,以版本3.6.11為例,windows下487kb、linux下347kb。
◇綠色軟體
sqlite的另外乙個特點是綠色:它的核心引擎本身不依賴第三方的軟體,使用它也不需要「安裝」。所以在部署的時候能夠省去不少麻煩。
◇單一檔案
所謂的「單一檔案」,就是資料庫中所有的資訊(比如表、檢視、觸發器、等)都包含在乙個檔案內。這個檔案可以copy到其它目錄或其它機器上,也照用不誤。
◇跨平台/可移植性
如果光支援主流作業系統,那就沒啥好吹噓的了。除了主流作業系統,sqlite還支援了很多冷門的作業系統。我個人比較感興趣的是它對很多嵌入式系統(比如android、windows mobile、symbin、palm、vxworks等)的支援。
◇記憶體資料庫(in-memory database)
這年頭,記憶體越來越便宜,很多普通pc都開始以gb為單位來衡量記憶體(伺服器就更甭提了)。這時候,sqlite的記憶體資料庫特性就越發顯得好用。
sqlite的api不區分當前操作的資料庫是在記憶體還是在檔案(對於儲存介質是透明的)。所以如果你覺得磁碟i/o有可能成為瓶頸的話,可以考慮切換 為記憶體方式。切換的時候,操作sqlite的**基本不用大改,只要在開始時把檔案load到記憶體,結束時把記憶體的資料庫dump回檔案就ok了。在這種 情況下,前面提到的「online backup api」就派上用場了,聰明的同學應該明白我為啥這麼期待backup功能了吧?
★技術上的缺點和不足
前面光聊了特性和優點,為了避免槍手寫軟文的嫌疑,再來說說sqlite的一些缺點。列位看官將來如果想用它,這些缺點要權衡一下。
◇併發訪問的鎖機制
sqlite在併發(包括多程序和多執行緒)讀寫方面的效能一直不太理想。它使用檔案鎖的方式,整個資料庫可能會被寫操作獨佔,從而導致其它讀寫操作阻塞或出錯。這導致了嚴重的併發瓶頸。
◇sql標準支援不全
在它的官方** 上,具體列舉了不支援哪些sql92標準。我個人感覺比較不爽的是不支援外來鍵約束。
◇網路檔案系統(以下簡稱nfs)
有時候需要訪問其它機器上的sqlite資料庫檔案,就會把資料庫檔案放置到網路共享目錄上。這時候你就要小心了。當sqlite檔案放置於nfs時,在併發讀寫的情況下可能會出問題(比如資料損壞)。原因據說是由於某些nfs的檔案鎖實現上有bug。
★程式語言介面
SQLite資料庫掃盲
今天注意到 sqlite 3.6.11 上個月發布的 增加了乙個我期待已久的 online backup 介面,激動之餘就順便和大夥兒聊一下sqlite資料庫。本帖權當是sqlite掃盲,如果你對sqlite已經很熟悉,本文就不必再看了。技術上的優點和特性 sqlite是乙個輕量級 跨平台的關係型資...
資料庫設計掃盲篇
資料庫設計 需求分析的要點 1 資料是什麼?2 資料有哪些屬性?3 資料和屬性各自的特點有哪些?邏輯分析 使用er圖對資料庫進行邏輯建模。物理設計 根據資料庫自身的特點把邏輯設計轉換為物理設計。維護優化 1 新的需求進行建表 2 索引優化 3 大表拆分 1 實體及實體之間的關係 一對一,一對多,多對...
瞎掰 Sqlite資料庫
為了方便專案的跨平台,在選用資料庫時選擇了輕量級的跨平台資料庫 sqlite 在使用過程中,將常用介面封裝了一下,使 相對簡潔,使用起來也相對方便。目前封裝了兩個介面 一 封裝了sqlite3 exec介面 int homedatabase callmysql sqlite3 sqlfd,const...