Skip to main content

為你的 Flutter 應用程式選擇資料庫

比較 Cloud Firestore、Firebase SQL Connect、SQLite 與 鍵值儲存,為你的 Flutter 應用程式挑選合適的資料庫。

Flutter 並未內建資料庫,因此你可以依據資料的形態以及 資料需要存放的位置來選擇。 對大多數 Flutter 應用程式而言,可以從下列選項開始:

  • Cloud Firestore:適用於可擴充的 NoSQL 資料, 並能在多個裝置之間即時同步。
  • Firebase SQL Connect:適用於需要結構化 SQL 結構描述 (schema) 的 關聯式資料。
  • 裝置端 SQLite 或 鍵值儲存:適用於預設 不需要雲端後端的本機資料。

比較資料庫選項

#

以下簡要說明各選項如何儲存與同步資料:

選項資料模型資料位置即時更新離線存取
Cloud Firestore NoSQL 文件與集合 雲端,並附本機快取 是 內建(讀取與寫入)
Firebase SQL Connect 關聯式 (PostgreSQL) 雲端 是 可選的查詢快取
裝置端 SQLite 關聯式 預設位於裝置 本機串流(搭配 drift) 一律在本機
鍵值儲存 鍵值對 僅限裝置 否 一律在本機

以 Cloud Firestore 處理 NoSQL 資料

#

當你的應用程式需要可擴充的雲端資料庫, 並讓資料在使用者與裝置之間保持同步時, 例如聊天應用程式、協作工具、即時多人遊戲, 或需要離線快取的現場服務與檢查應用程式, 建議預設選擇 Cloud Firestore。 它以文件的形式儲存資料,並將文件組織成集合, 而 cloud_firestore 套件讓你的 Flutter 應用程式 能直接從用戶端程式碼讀取與寫入資料, 並以 Cloud Firestore Security Rules 保護資料安全。

當你的應用程式需要以下特性時,Cloud Firestore 會是很好的選擇:

  • 即時同步: 監聽單一文件或查詢, 並在資料變更時重新建置 UI, 例如搭配 StreamBuilder 元件 (Widget)。
  • 離線支援: 裝置離線時仍可讀取與寫入快取資料, 並在連線恢復後自動同步變更, 無須自行建置離線佇列。離線持久化功能 在 Android 與 Apple 平台上預設啟用, 在 Web 上也可以啟用。
  • 彈性且可演進的資料: 無須預先定義結構描述, 就能儲存巢狀或半結構化的資料。
  • 自動擴充: 在流量成長時無須 佈建或管理伺服器。

若要將 Cloud Firestore 加入專案,請執行:

flutter pub add cloud_firestore

接著依照 Cloud Firestore 快速入門 來設定你的資料庫。

以 Firebase SQL Connect 處理 SQL 資料

#

對於結構化的關聯式資料,例如電商店面、 預約系統、個人財務追蹤工具或庫存系統, 建議預設選擇 Firebase SQL Connect(前身為 Firebase Data Connect)。 SQL Connect 以 Cloud SQL 上完全託管的 PostgreSQL 資料庫作為後盾。你以 GraphQL 定義結構描述、查詢 與變更操作 (mutation),將它們部署到伺服器, 再透過由 firebase_data_connect 套件驅動、 自動產生且型別安全的 Dart SDK,從 Flutter 應用程式呼叫。

主要功能包括:

  • 關聯式資料: 為具有關聯的實體(例如使用者、訂單與商品)建立模型, 並跨實體進行查詢。
  • 嚴格的結構描述: 在資料庫中強制執行資料型別、關聯式約束 與外部索引鍵 (foreign key)。
  • 型別安全的產生式 SDK: 針對每個預先定義的 伺服器查詢與變更操作呼叫產生的 Dart 方法,無須撰寫原始查詢 或手動重複定義資料模型。由於 SQL Connect 直接依據你的後端結構描述 產生用戶端 SDK,你的 Flutter 應用程式 能與資料庫保持同步,不會出現跨語言的結構描述偏移。
  • 即時更新: 訂閱查詢,在資料變更時 自動或依設定重新整理。
  • 可選的查詢快取: 在用戶端快取查詢回應, 以減少網路請求,並在離線時讀取快取結果。
  • 向量搜尋: 在你的關聯式資料之上, 建置由 AI 驅動的功能,例如語意搜尋。

若要將 SQL Connect 插件加入專案,請執行:

flutter pub add firebase_data_connect

接著,請依照指南,在 SQL Connect 中 使用產生的 Flutter SDK。

在本機使用 SQLite 或鍵值儲存

#

如果你的資料不需要離開裝置, 就可以在沒有雲端後端的情況下將它儲存在本機:

預設情況下,裝置端的 SQLite 與鍵值套件只會把資料儲存在 本機裝置上,因此資料不會跨裝置同步, 若使用者解除安裝你的應用程式,且沒有備份或同步服務,資料也不會保留。 如果使用者期望能跨裝置,或在更換手機後 自動取得自己的資料,請改用 Cloud Firestore 或 Firebase SQL Connect 這類雲端資料庫。

結合雲端與本機儲存

#

你不需要只選擇一種選項。 例如,你的應用程式可以使用 Cloud Firestore 或 Firebase SQL Connect 處理共享、同步的資料,同時以 shared_preferences 儲存 裝置專屬的設定,像是深色模式開關。 若想了解如何結合本機與遠端資料來源,讓應用程式在沒有網路連線時 仍能正常運作,請參考 離線優先支援。

Cloud Firestore 與 Firebase SQL Connect 也都能搭配 其他 Firebase 服務使用,包括 Firebase Authentication(firebase_auth)、 Cloud Storage for Firebase(firebase_storage) 以及 Firebase AI Logic(firebase_ai)。 例如,你的應用程式可以拍攝收據或檢查照片、 上傳到 Cloud Storage、以 Firebase AI Logic 擷取結構化欄位, 再將產生的紀錄同步到 Cloud Firestore 或 SQL Connect,全部都在同一個專案內完成。

如果你的應用程式需要自訂的後端邏輯,也可以撰寫 以 Dart 開發的 Cloud Functions for Firebase 或後端伺服器, 並在 Flutter 用戶端與後端之間,共用同一個 Dart 套件 來處理資料模型、序列化與驗證邏輯。

後續步驟

#

若要開始使用雲端資料庫進行開發,請參考以下資源: