SQLite教程(一) SQLite資料庫介紹

2022-09-21 01:15:08 字數 3139 閱讀 3927

一、簡介:

sqlite是目前最流行的開源嵌入式資料庫,和很多其他嵌入式儲存引擎相比(nosql),如be程式設計客棧rkeleydb、membase等,sqlite可以很好的支援關係型資料庫所具備的一些基本特徵,如標準sql語法、事務、資料表和索引等。事實上,儘管sqlite擁有諸多關係型資料庫的基本特徵,然而由於應用場景的不同,它們之間並沒有更多的可比性。下面我們將列舉一下sqlite的主要特徵:

1). 管理簡單,甚至可以認為無需管理。

&n**uhmnbsp;   2). 操作方便,sqlite生成的資料庫檔案可以在各個平台無縫移植。

3). 可以非常方便的以多種形式嵌入到其他應用程式中,如靜態庫、動態庫等。

4). 易於維護。

綜上所述,sqlite的主要優勢在於靈巧、快速和可靠性高。sqlite的設計者們為了達到這一目標,在功能上作出了很多關鍵性的取捨,與此同時,也失去了一些對rdbms關鍵性功能的支援,如高併發、細粒度訪問控制(如行級鎖)、豐富的內建函式、儲存過程和複雜的sql語句等。正是因為這些功能的犧牲才換來了簡單,而簡單又換來了高效性和高可靠性。

二、sqlite的主要優點:

1. 一致性的檔案格式:

在sqlite的官方文件中是這樣解釋的,程式設計客棧我們不要將sqlite與oracle或postgresql去比較,而是應該將它看做fopen和fwrite。與我們自定義格式的資料檔案相比,sqlite不僅提供了很好的移植性,如大端小端、32/64位等平台相關問題,而且還提供了資料訪問的高效性,如基於某些資訊建立索引,從而提高訪問或排序該類資料的效能,sqlite提供的事務功能,也是在操作普通檔案時無法有效保證的。

2. 在嵌入式或移動裝置上的應用:

由於sqlite在執行時占用的資源較少,而且無需任何管理開銷,因此對於pda、智慧型手機等移動裝置來說,sqlite的優勢毋庸置疑。

3. 內部資料庫:

在有些應用場景中,我們需要為插入到資料庫伺服器中的資料進行資料過濾或資料清理,以保證最終插入到資料庫伺服器中的資料有效性。有的時候,資料是否有效,不能通過單一一條記錄來進行判斷,而是需要和之前一小段時間的歷史資料進行特殊的計算,再通過計算的結果判斷當前的資料是否合法。在這種應用中,我們可以用sqlite緩衝這部分歷史資料。還有一種簡單的場景也適用於sqlite,即統計資料的預計算。比如我們正在執行資料實時採集的服務程式,我們可能需要將每10秒的資料彙總後,形成每小時的統計資料,該統計資料可以極大的減少使用者查詢時的資料量,從而大幅提高前端程式的查詢效率。在這種應用中,我們可以將1小時內的採集資料均快取在sqlite中,在達到整點時,計算快取資料後清空該資料。

4. 資料分析:

可以充分利用sqlite提供sql特徵,完成簡單的資料統計分析的功能。這一點是csv檔案無法比擬的。

5. 產品demo和測試:

在需要給客戶進行demo時,可以使用sqlite作為我們的後台資料庫,和其他關係型資料庫相比,使用sqlite減少了大量的系統部署時間。對於產品的功能性測試而言,sqlite也可以起到相同的作用。

三、和rdbms相比sqlite的一些劣勢:

1. c/s應用:

如果你有多個客戶端需要同時訪問資料庫中的資料,特別是他們之間的資料操作是需要通過網路傳輸來完成的。在這種情況下,不應該選擇sqlite。由於sqlite的資料管理機制更多的依賴於os的檔案系統,因此在這種操作下其效率較低。

2. 資料量較大:

受限於作業系統的檔案系統,在處理大資料量時,其效率較低。對於超大資料量的儲存,甚至不能提供支援。

3. 高併發:

由於sqlite僅僅提供了粒度很粗的資料鎖,如讀寫鎖,因此在每次加鎖操作中都會有大量的資料被鎖住,即使僅有極小部分的資料會被訪問。換句話說,我們可以認為sqlite只是提供了表級鎖,沒有提供行級鎖。在這種同步機制下,併發效能很難高效。

四、個性化特徵:

1. 零配置:

sqlite本身並不需要任何初始化配置檔案,也沒有安裝和解除安裝的過程。當然也不存在伺服器例項的啟動和停止。在使用的過程中,也無需建立使用者程式設計客棧和劃分許可權。在系統出現災難時,如電源問題、主機問題等,對於sqlite而言,不需要做任何操作。

2. 沒有獨立的伺服器:

和其他關係型資料庫不同的是,sqlite沒有單獨的伺服器程序,以供客戶端程式訪問並提供相關的服務。sqlite作為一種嵌入式資料庫,其執行環境與主程式位於同一程序空間,因此它們之間的通訊完全是程序內通訊,而相比於程序間通訊,其效率更高。然而需要特別指出的是,該種結構在實際執行時確實存在保護性較差的問題,比如此時,應用程式出現問題導致程序崩潰,由於sqlite與其所依賴的程序位於同一程序空間,那麼此時sqlite也將隨之退出。但是對於獨立的伺服器程序,則不會有此問題,它們將在密閉性更好的環境下完成它們的工作。

3. 單一磁碟檔案:

sqlite的資料庫被存放在檔案系統的單一磁碟檔案內,只要有許可權便可隨意訪問和拷貝,這樣帶來的主要好處是便於攜帶和共享。其他的資料庫引擎,基本都會將資料庫存放在乙個磁碟目錄下,然後由該目錄下的一組檔案構成該資料庫的資料檔案。儘管我們可以直接訪問這些檔案,但是我們的程式卻無法操作它們,只有資料庫例項程序才可以做到。這樣的好處是帶來了更高的安全性和更好的效能但是也付出了安裝和維護複雜的代價。

4. 平台無關性:

這一點在前面已經解釋過了。和sqlite相比,很多資料庫引擎在備份資料時不能通過該方式直接備份,只能通過資料庫系統提供的各種dump和restore工具,將資料庫中的資料先導出到本地檔案中,之後在load到目標資料庫中。這種方式存在顯而易見的效率問題,首先需要匯出到另外乙個檔案,如果資料量較大,匯出的過程將會比較耗時。然而這只是該操作的一小部分,因為資料匯入往往需要更多的時間。資料在匯入時需要很多的驗證過程,在儲存時,也並非簡簡單單的順序儲存,而是需要按照一定的資料結構、演算法和策略存放在不同的檔案位置。因此和直接拷貝資料庫檔案相比,其效能是非常拙劣的。

5. 弱型別:

和大多數支援靜態型別的資料庫不同的是,sqlite中的資料型別被視為數值的乙個屬性。因此對於乙個資料表列而言,即便在宣告該錶時給出了該列的型別,我們在插入資料時仍然可以插入任意型別,比如integer的列被存入字串'hello'。針對該特徵唯一的例外是整型的主鍵列,對於此種情況,我們只能在該列中儲存整型資料。

6. sql語句編譯成虛擬機器**:

很多資料庫產品會將sql語句解析成複雜的,相互巢狀的資料結構,之後再交予執行器遍歷該資料結構完成指定的操作。相比於此,sqlite會將sql語句先編譯成位元組碼,之後再交由其自帶的虛擬機器去執行。該方式提供了更好的效能和更出色的除錯能力。

本文位址:

SQLite簡單教程

來自 把查詢結果用螢幕輸出 output stdout 8 把錶結構輸出,同時索引也會輸出 dump 表名 9 退出 exit 或者.quit 3。sql語法 由於以前用sqlserver或者iseries,所以ddl的語法很汗顏 1 建立乙個單個primary key的table create t...

SQLite入門一 SQLite概述

學習 掌握一門新的技術通常需要了解這門技術產生的背景,為什麼需要這樣的技術,或者說能夠解決那些問題?sqlite概述 sqlite特性 與其他資料庫比較 使用sqlite解決那些問題 sqlite概述 sqlite資料庫引擎具有獨立 無伺服器端 零配置 支援事務等特點,作為一款優秀的開源嵌入式資料庫...

sqlite簡明教程

本文的主要目的是作為乙個入門級教程,教你一些如何使用pysqlite來操作 sqite 的一些基本的語句,更詳細的還要去參考想應的文件以及編寫相應的測試程式。希望本文對你有幫助。我以前的blog sqlite乙個輕巧的資料庫 一 安裝 二 建立資料庫 開啟資料庫 sqlite使用檔案作為資料庫,你可...