資料庫選型比較:NTFS、Access、SQLite、MySQL、LanceDB
背景
釐清「檔案系統 vs 資料庫」與「嵌入式(檔案型) vs 伺服器型」的核心差異,並理解 Access / SQLite / MySQL 與 LanceDB 在儲存方式、運作方式、併發能力、典型用途上的不同。
結論
- NTFS 管檔案;Access 管資料與關聯。Access 可存附件但通常不作大量檔案庫。補充:Windows 不內建 Access;要用需裝 Office 的 Access 或 Access Runtime(執行)。
- SQLite 與 MySQL 都是關聯式,但最本質差異在:
- SQLite:嵌入式、直接操作
.db - MySQL:伺服器常駐、多連線集中管理
- SQLite:嵌入式、直接操作
- 資料庫按部署方式可分「嵌入式 vs 伺服器型」
- 通用 OLTP:面向一般業務 CRUD + 交易一致性的通用交易負載。
- LanceDB 可被視為「部署哲學像 SQLite 的向量資料庫」,但功能面不等同通用 RDBMS。
| 面向 | Access | SQLite | MySQL | LanceDB |
|---|---|---|---|---|
| 核心定位 | 桌面DB + 表單/報表/快速應用 | 嵌入式RDBMS引擎 | 伺服器型RDBMS | 向量檢索導向的資料庫/引擎 |
| 是否需常駐服務 | 否(多為檔案) | 否 | 是(mysqld) | 常見可不需(視模式) |
| 主要儲存形態 | .accdb | .db | 伺服器管理的資料目錄/檔 | 本地目錄/檔(依實作) |
| 強項 | UI、報表、快速交付 | 輕量、可攜、離線 | 多人併發、權限、集中管理 | 向量相似度搜尋、RAG 檢索 |
| 常見情境 | 部門小系統 | App 內嵌資料 | 網站/企業系統 | RAG/語意檢索/embedding storage |
1. NTFS 與 Access:都能放檔案,但不同
-
NTFS 是 Windows 的檔案系統:目標是「管理檔案與資料夾」。用來存放任意檔案(PDF、PPT、Excel…)並提供目錄、權限、屬性(大小、時間戳)、檔名與路徑管理。
-
Access:資料庫 + 低程式碼應用平台 UI(桌面型關聯式資料庫 + 應用工具)
- 重點在結構化資料(表格、欄位、索引、關聯、查詢)
- 內建表單、報表、查詢設計器、巨集/VBA、匯入匯出
- 常用於快速做部門/桌面小系統
- Attachment(附件)欄位可把檔案「放進」資料庫,但通常不建議把大量/大型檔案直接塞進 Access(資料庫膨脹、備份慢、多人鎖定與效能風險)
- 使用 Access 的常見路徑(Windows 不內建 Microsoft Access):
- Microsoft Access (Office/Microsoft 365 Apps):可開發/設計(表單、報表、VBA、表結構)
- 免費的 Access Runtime:但不能設計
- 程式讀取 .accdb:可能透過 ACE OLEDB/ODBC 等驅動,也需相應元件
-
常見架構:
- 檔案放 NTFS/SharePoint/OneDrive
- Access 只存「路徑/URL + metadata + 關聯」(例如:檔名、版本、類別、日期、上傳者、與案件/客戶的關聯)
2. 「伺服器型」 vs 「嵌入式」:部署型態差異
伺服器型(MySQL)如何運作
伺服器型:程式連線到 DB service(MySQL/PostgreSQL/SQL Server)
- 有常駐的資料庫服務(例如 mysqld)。
- 多用戶/多程式透過網路連線(即使同機也走 client/server 模式)。
- DB 服務統一負責:連線管理、權限、併發控制(多人同時讀寫的協調)、交易一致性、備援等能力。
重點:你的程式不直接碰資料檔;一切由 DB server 管控。
嵌入式/檔案型(SQLite)如何運作
嵌入式:程式打開 DB 檔或呼叫本地引擎(SQLite/Access/LanceDB)
- 沒有必須常駐的 server。
- 應用程式把 SQLite 當作函式庫載入,直接讀寫某個
.db檔。 - 適合:單機、行動裝置、輕量部署、離線情境。
重點:你的程式**「打開檔案」就能用**,部署像帶著一個資料庫檔走。
3. 「通用 OLTP」是什麼?
-
OLTP 定義(Online Transaction Processing):大量短交易、小筆 CRUD、頻繁寫入/更新、需要交易一致性(ACID1)。例:訂單新增、付款記錄、庫存扣減、帳務轉帳。
-
「通用」的含義:指能處理多數一般業務系統需求,不是只針對某個特殊查詢領域(如全文檢索、向量近鄰搜尋)而生。
SQLite 被描述為「通用 OLTP 的嵌入式資料庫」,強在一般應用的本機資料儲存與交易操作。
4. LanceDB 是否是「向量資料庫版的 SQLite」?
- 按部署型態:LanceDB 更像 SQLite(嵌入式、本地資料)。
- 按資料庫功能:LanceDB 更像「向量檢索引擎 + 表格化資料能力」,而非 SQLite 那種通用關聯式資料庫。
可以類比的部分(部署型態)
LanceDB 常見使用方式偏「嵌入式/本地優先」:可用 SDK 指向本地路徑儲存資料與索引,部署簡單、可攜。在「像 SQLite 一樣容易帶著走」這點上,類比成立。
不等同的部分(功能取向)
- SQLite 是通用關聯式資料庫(RDBMS)取向:交易、通用查詢是主軸。
- LanceDB 的核心強項是向量相似度搜尋(ANN/向量檢索),以及搭配 metadata 欄位過濾等能力。
- 它不等於完整的「通用 RDBMS」(join、交易語義、完整 SQL 生態、企業級管理/權限/審計/複寫等通常不是主設計重心)。
補充:為什麼「向量庫不要拿來當主交易庫(主 OLTP DB)」?
1. 兩者設計目標不同
- **主交易庫(OLTP)**的核心是:大量小筆寫入/更新、強一致交易(ACID)、嚴謹約束(PK/FK/Unique)、可靠復原、權限稽核、多人高併發。
- 向量庫的核心是:用向量索引做近鄰搜尋(ANN),把「語意相近」的資料快速找出來;多數功能會圍繞索引建置、查詢、過濾與資料載入吞吐。
結果是:向量庫通常不是把「交易一致性 + 約束 + 複雜關聯查詢」放在第一優先序。
2. 常見風險(把向量庫當主交易庫時會遇到)
(A) 交易一致性與跨表/跨集合更新困難
主交易庫常見需求:建立訂單要寫 order、寫 order_items、扣庫存、寫付款狀態,任何一步失敗要回滾。向量庫多半不以「跨多實體的強交易」為主;你可能做到一半失敗,留下半套資料,之後要靠應用層自己補償(compensation)。
(B) 約束與資料品質控管不足
OLTP 常依賴:UNIQUE(避免重複帳號/單號)、FK(避免孤兒資料)、CHECK(欄位合法性)。向量庫通常不強在這些「資料治理」能力,久了更容易髒資料、重複資料、關聯斷裂。
(C) 更新/刪除成本與索引重建
向量索引通常偏向「為查詢速度犧牲更新成本」:頻繁更新 embedding 或 metadata,可能導致索引維護成本高、碎片化、延遲上升。
(D) 正確性語意:ANN 是近似,不是精確查詢
OLTP 很多查詢需要「準確」:查 user_id = 123 的資料。向量檢索是「相似度前 K 名」,天生是近似與排序問題;把它當主查詢依據,結果隨索引參數/版本/更新而波動——在交易系統是災難(因為你需要確定性)。
(E) 權限、審計、備援/複寫、營運工具鏈常不完整
主交易庫常需要:權限模型(到 schema/table/row)、審計記錄、風控稽核、PITR(時間點回復)、異地備援、複寫、監控、線上 schema migration。不少向量庫在「AI 檢索」情境足夠,但在「金融級/核心交易」要求上,可能要自己補很多周邊。
3. 典型「錯誤用法」範例
錯誤範例 1:把客戶主檔放向量庫
把 customer、address、contract、invoice 全放向量庫,然後用它當系統唯一資料源。問題:一旦需要嚴格唯一性、有效期限、狀態遷移、對帳與稽核,你會發現非常痛苦。
錯誤範例 2:用向量相似度來「找訂單」
用訂單描述 embedding 去找「那筆訂單」,試圖取代 order_id 精確查詢。問題:召回不保證、結果波動,且很難解釋與稽核。
4. 建議的正確架構:RDBMS 當主庫 + 向量庫當檢索副本
- 主交易庫(Source of Truth):PostgreSQL/MySQL/SQL Server(或 SQLite 若是單機 app)
- 存:結構化資料、狀態機、交易記錄、權限、約束
- 向量庫(Retrieval Index / Serving Index):
- 存:embedding、文件切片、可用於過濾的 metadata、以及指回主庫的 key(例如 doc_id / row_id)
流程常見是:
- 主庫資料新增/更新
- 非同步產生/更新 embedding
- 寫入向量庫(當作索引/副本)
- 查詢時:先向量庫召回 doc_id → 再回主庫用 doc_id 精準取詳細資料與做權限判斷
結論:主庫負責「正確性與交易」;向量庫負責「相關性與召回」
5. 什麼情況「幾乎可以」讓向量庫當主要儲存?
只有在下面這類情境才比較合理(仍不建議稱為主交易庫):
- 你的資料本質是「文件/段落/筆記」為主,不需要嚴格交易(例如純 RAG 知識庫)
- 寫入不頻繁、資料更新以批次為主
- 可接受 eventual consistency(晚一點同步沒關係)
- 權限/稽核要求低,或你有額外系統補足
換句話說:它可以是「主要檢索來源」,但仍不應承擔「核心交易正確性」。
6. 實務檢核清單(判斷你是不是快把向量庫當主交易庫了)
如果你有以下需求,主庫應該用傳統 RDBMS:
- 需要多步驟交易(跨多表/多步操作要回滾)
- 需要強約束(唯一性、外鍵、嚴格資料完整性)
- 需要準確查詢與可重現結果(稽核、對帳)
- 需要成熟的備援、權限、審計、治理工具鏈
- 高併發頻繁更新(尤其是狀態欄位一直變)
- A — Atomicity(原子性):交易中的操作要麼全部成功,要麼全部失敗並回滾,不會只完成一半。
- C — Consistency(一致性):交易前後資料都必須符合資料庫定義的規則/約束(例如外鍵、唯一性、檢查條件),不會把資料帶到不合法狀態。
- I — Isolation(隔離性):多個交易同時進行時,彼此不應互相干擾;效果要像是依序執行(細節依隔離等級而定)。
- D — Durability(持久性):交易一旦提交(commit)成功,即使斷電或當機,資料也不會丟失(通常靠 WAL/redo log 等機制)。