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 | 使用轉儲工具或複製 |
實際用例
- 桌面和移動應用 儲存使用者設定、偏好設定和離線資料,而無需捆綁完整的資料庫伺服器。
- 嵌入式和物聯網裝置 由於佔用空間極小,韌體和邊緣計算模組通常依賴 SQLite 進行本地資料持久化。
- 原型設計與測試 為實驗和單元測試快速搭建一個關係型儲存 —— 無需任何初始化指令碼。
- 高可用讀取 需要大量併發讀操作的應用程式(例如分析儀表板)可以受益於 SQLite 的低延遲存取。
- 基於檔案的資料交換
在團隊或工具(例如 GIS 軟體、資料科學筆記本)之間共享一個
.db檔案,就像共享 CSV 一樣簡單。
Divooka 中的 SQLite
在 Divooka 的視覺化程式語言中,SQLite 扮演以下角色:
- 記憶體資料引擎:對你在畫布上處理的資料執行查詢 —— 可以把它看作無需磁碟 I/O 的臨時表。
- 持久化儲存:Divooka Explore 預裝了 SQLite,因此你無需任何額外配置即可儲存和載入資料 —— 只需為資料庫指定一個檔案路徑即可。
- 簡單的 Web 介面:O'ista Web 框架提供了線上託管 SQLite 並帶身份驗證的功能,以便他人存取該資料庫。
這種整合意味著你可以將一個“SQL Query”節點拖到工作流中,讓它指向記憶體中的資料集或已儲存的 .db 檔案,然後立即開始篩選、聚合和連線表 —— 一切都在 Divooka 的視覺化介面中完成。
入門
開啟/建立資料庫
-- In the sqlite3 shell: .open my_project.db建立表
CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, joined DATE );插入示例資料
INSERT INTO users (name, joined) VALUES ('Alice', '2025-06-01'), ('Bob', '2025-06-15');執行查詢
SELECT id, name FROM users WHERE joined >= '2025-06-10';
在 Divooka Explore 中,同樣的 SQL 片段可以輸入到 SQL 查詢塊節點中,讓你將 SQL 與視覺化資料流混合使用。
結語
SQLite 為初學者學習 SQL 和構建資料驅動的應用程式提供了一條順暢的道路,同時也為更有經驗的開發者提供了 ACID 事務、全文搜尋和 JSON 支援等高階功能。它將簡單性、可移植性和效能獨特地結合在一起,使其成為獨立專案以及 Divooka 等環境內整合的理想夥伴。無論你是第一次接觸資料庫,還是在設計嵌入式系統,SQLite 都是一個能隨需求擴充的工具 —— 而且無需伺服器。
參考資料
另請參閱: