繁體中文
English 简体中文 繁體中文
Methodox 首頁

SQLite

SQLite 是一個自包含、無伺服器、零配置的關係型資料庫引擎。與傳統的資料庫伺服器不同,SQLite 以一個簡單的庫的形式釋出,你可以將它直接嵌入到應用程式中。本指南將介紹 SQLite 的核心概念,解釋它為何深受開發者歡迎,說明它與其他資料庫系統的區別,並展示如何在 Divooka 的視覺化程式設計環境中利用它。

為什麼選擇 SQLite?

對許多程式設計新手來說,搭建一個客戶端–伺服器資料庫(例如 MySQL、PostgreSQL)就像同時學習兩樣東西:程式設計和系統管理。SQLite 免除了這些額外負擔:

  • 零配置 無需安裝或管理守護程序 —— 應用程式只需開啟一個檔案。
  • 輕量且可移植 整個資料庫存放在單個跨平臺檔案中(庫程式碼通常只有幾百 KB)。
  • 廣泛的語言支援 Python、JavaScript、C#、Java、Go、Rust 等語言都有對應的繫結 —— 因此你可以用已經掌握的語言開始查詢資料。

憑藉其簡單性,SQLite 成為了世界上部署最廣泛的資料庫引擎,從移動應用、桌面軟體到物聯網裝置和網頁瀏覽器,處處都有它的身影。

核心架構

基於檔案的儲存

  • 單個檔案:定義、表、索引和資料全部存放在一個 .db(或 .sqlite3)檔案中。
  • 跨平臺:你可以在 Windows、macOS、Linux 和移動裝置之間直接複製資料庫檔案,無需轉換。

SQLite 基於檔案的特性使資料庫的備份和遷移變得極其簡單。

無伺服器且可嵌入

  • 是庫而非伺服器:應用程式連結 libsqlite3 並直接呼叫 C API(或更高層的封裝)—— 不存在單獨的“資料庫程序”。
  • 更低的延遲:讀寫操作在程序內完成,避免了客戶端–伺服器架構中的程序間通訊開銷。

動態型別(“清單型別”)

  • 型別屬於值而非列:列具有“型別親和性”(例如 INTEGER、TEXT),但 SQLite 不會拒絕插入到 INTEGER 列中的字串 —— 它會嘗試進行轉換。
  • 可選的嚴格模式:在較新的版本中,如有需要,你可以宣告 CREATE TABLE ... STRICT 來強制執行傳統的 SQL 型別檢查。

併發模型

  • 讀寫鎖:多個讀取者可以同時操作,但寫入時會取得檔案的排他鎖。
  • 預寫日誌(WAL):通過將更改追加到單獨的日誌中,實現併發讀寫,提高混合負載下的吞吐量。

與其他資料庫的主要區別

方面 SQLite 客戶端–伺服器資料庫
部署 嵌入一個庫;開啟本地檔案 安裝並維護單獨的伺服器
配置 零配置;由檔案系統管理 需要使用者帳戶、埠等
程序架構 程序內庫呼叫 通過網路協議進行程序間通訊
型別 動態的清單型別 靜態的、強制的列型別
併發 序列化寫入(可選 WAL) 通過伺服器實現真正的併發寫入
備份 複製檔案或使用線上備份 API 使用轉儲工具或複製

實際用例

  1. 桌面和移動應用 儲存使用者設定、偏好設定和離線資料,而無需捆綁完整的資料庫伺服器。
  2. 嵌入式和物聯網裝置 由於佔用空間極小,韌體和邊緣計算模組通常依賴 SQLite 進行本地資料持久化。
  3. 原型設計與測試 為實驗和單元測試快速搭建一個關係型儲存 —— 無需任何初始化指令碼。
  4. 高可用讀取 需要大量併發讀操作的應用程式(例如分析儀表板)可以受益於 SQLite 的低延遲存取。
  5. 基於檔案的資料交換 在團隊或工具(例如 GIS 軟體、資料科學筆記本)之間共享一個 .db 檔案,就像共享 CSV 一樣簡單。

Divooka 中的 SQLite

在 Divooka 的視覺化程式語言中,SQLite 扮演以下角色:

  1. 記憶體資料引擎:對你在畫布上處理的資料執行查詢 —— 可以把它看作無需磁碟 I/O 的臨時表。
  2. 持久化儲存:Divooka Explore 預裝了 SQLite,因此你無需任何額外配置即可儲存和載入資料 —— 只需為資料庫指定一個檔案路徑即可。
  3. 簡單的 Web 介面:O'ista Web 框架提供了線上託管 SQLite 並帶身份驗證的功能,以便他人存取該資料庫。

這種整合意味著你可以將一個“SQL Query”節點拖到工作流中,讓它指向記憶體中的資料集或已儲存的 .db 檔案,然後立即開始篩選、聚合和連線表 —— 一切都在 Divooka 的視覺化介面中完成。

入門

  1. 開啟/建立資料庫

    -- In the sqlite3 shell:
    .open my_project.db
    
  2. 建立表

    CREATE TABLE users (
      id INTEGER PRIMARY KEY,
      name TEXT NOT NULL,
      joined DATE
    );
    
  3. 插入示例資料

    INSERT INTO users (name, joined)
    VALUES ('Alice', '2025-06-01'),
           ('Bob',   '2025-06-15');
    
  4. 執行查詢

    SELECT id, name
    FROM users
    WHERE joined >= '2025-06-10';
    

在 Divooka Explore 中,同樣的 SQL 片段可以輸入到 SQL 查詢塊節點中,讓你將 SQL 與視覺化資料流混合使用。

結語

SQLite 為初學者學習 SQL 和構建資料驅動的應用程式提供了一條順暢的道路,同時也為更有經驗的開發者提供了 ACID 事務、全文搜尋和 JSON 支援等高階功能。它將簡單性、可移植性和效能獨特地結合在一起,使其成為獨立專案以及 Divooka 等環境內整合的理想夥伴。無論你是第一次接觸資料庫,還是在設計嵌入式系統,SQLite 都是一個能隨需求擴充的工具 —— 而且無需伺服器。

參考資料

另請參閱: