SQLite資料庫掃盲

2021-05-25 01:06:31 字數 2341 閱讀 6335

今天注意到

sqlite

3.6.11(上個月發布的)增加了乙個我期待已久的

online backup

介面,激動之餘就順便和大夥兒聊一下sqlite資料庫。本帖權當是sqlite掃盲,如果你對sqlite已經很熟悉,本文就不必再看了。

技術上的優點和特性

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支援很多種語言的程式設計介面。這對於我這種喜歡混用多種程式語言的人來說,是很爽的。下面我大概介紹一下。

◇c/c++

由於sqlite本身是c寫的,它

自帶的api

pysqlite

ado.net

驅動來訪問。

◇ruby

ruby可以通過

sqlite-ruby

操作sqlite資料庫,不過我沒用過。

◇perl

在cpan上有

dbd::sqlite

,不過我也沒用過。

一些非技術的參考因素

前面講的都是技術層面的話題,如果你考慮在公司的商業軟體專案中使用sqlite。還需要根據「

如何選擇開源專案

」裡面提到的幾個參考因素,再評估一下。

◇授權協議(license)

sqlite使用的是

public domain

協議,這是最爽一種,可以放心大膽地用。

◇使用者的普及程度

最近這幾年,使用sqlite的人越來越多(從

google trends

change log

上大致了解一下,可以看出最近5年基本上每1-2個月都會有更新。說明開發的活躍度還是非常高的。

從上述幾個非技術因素來看,sqlite用於商業公司的軟體專案還是非常靠譜的。

程式設計隨想

開源點評 SQLite資料庫掃盲

sqlite是乙個輕量級 跨平台的關係型資料庫。既然號稱關係型資料庫,支援sql92標準中常用的玩意兒 比如檢視 事務 觸發器等 就是理所當然的了,咱今天就不細說了。今天主要聊聊一些有點特色的玩意兒。輕量級 先說它的第乙個特色 輕量級。想必sqlite的作者很看重這個特性,連它的logo都是用的 羽...

資料庫設計掃盲篇

資料庫設計 需求分析的要點 1 資料是什麼?2 資料有哪些屬性?3 資料和屬性各自的特點有哪些?邏輯分析 使用er圖對資料庫進行邏輯建模。物理設計 根據資料庫自身的特點把邏輯設計轉換為物理設計。維護優化 1 新的需求進行建表 2 索引優化 3 大表拆分 1 實體及實體之間的關係 一對一,一對多,多對...

瞎掰 Sqlite資料庫

為了方便專案的跨平台,在選用資料庫時選擇了輕量級的跨平台資料庫 sqlite 在使用過程中,將常用介面封裝了一下,使 相對簡潔,使用起來也相對方便。目前封裝了兩個介面 一 封裝了sqlite3 exec介面 int homedatabase callmysql sqlite3 sqlfd,const...