搭配使用 Cloud Firestore 與 Firebase 即時資料庫

您可以在應用程式中同時使用 Firebase Realtime DatabaseCloud Firestore,以及 並利用各項資料庫解決方案的優勢。舉例來說, 可能會想利用「Realtime Database」的支援來確保應用程式品質,如下方所述: Cloud Firestore 的建構優勢

進一步瞭解 資料庫之間的差異

將資料移至「Cloud Firestore

如果您決定將部分資料從 Realtime Database 遷移至 Cloud Firestore,請考慮下列流程。由於每個資料庫都有 因此不需要考量特定需求和結構性考量 自動化遷移路徑您可以改以下列一般進展操作:

  1. Realtime Database的資料結構和安全性規則對應至 Cloud FirestoreRealtime DatabaseCloud Firestore 都採用 Firebase 驗證。 因此您不需要變更應用程式的使用者驗證。不過, 安全性規則與資料模型不同,請務必審慎設定 因此在開始將資料遷移至雲端前,請先考量這些差異 以及 Firestore

  2. 移動歷來資料。 您在 Cloud Firestore 中設定新的資料結構時, 並將現有資料從 Realtime Database 對應到新的Cloud Firestore 執行個體。不過,如果您的應用程式同時使用這兩種資料庫 您不需要將歷來資料移出 Realtime Database

  3. 即時將新資料鏡像到 Firestore。 使用 Cloud Functions 將新資料寫入新 Cloud Firestore 加入 Realtime Database

  4. Cloud Firestore 設為遷移資料的主要資料庫。 如果您已遷移部分資料,請使用 Cloud Firestore 做為主要資料庫,減少遷移後的 Realtime Database 使用量 資料。考量仍在使用的應用程式版本 Realtime Database,並說明您打算如何繼續支援這些資料。

請務必考量帳單費用 兩者皆是 Realtime DatabaseCloud Firestore

對應資料

Realtime Database 中的資料採用單一樹狀結構,Cloud Firestore 支援更明確的資料階層,包括文件、集合和 子集合。如果您將部分資料從 Realtime Database 移到 Cloud Firestore,建議您考慮其他架構 以及 Cloud Storage

需要考量的主要差異

如果將資料從現有的「Realtime Database」樹狀結構移至「Cloud Firestore」 文件和集合,請牢記下列主要差異: 可能影響您在 Cloud Firestore 中建構資料結構的資料庫:

  • 淺層查詢可在階層式資料結構中更有彈性。
  • 複雜的查詢可提供更精細的資訊,並減少重覆需求的重複內容 資料。
  • 查詢遊標提供更強大的分頁功能。
  • 交易不再需要共用根目錄, 效率。
  • Realtime DatabaseCloud Firestore的帳單費用不同。在許多 例如,Cloud Firestore 可能比 Realtime Database 昂貴。 尤其是依賴許多小型作業時您可以考慮使用 減少資料庫作業數量 不必要的寫入作業進一步瞭解 Realtime Database之間的帳單Cloud Firestore

最佳做法應用實例

以下範例反映了您可能會需要留意的幾個重點 在資料庫之間移轉資料。您可以運用淺層讀取與改良版 可以查詢更多自然的資料結構 只在 Realtime Database

考慮使用城市導遊應用程式,協助使用者找到城市著名地標 也越來越多元由於 Realtime Database 沒有淺層讀取,您可能需要 您將資料建構在兩個頂層節點中,如下所示:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore 具有淺層讀取,因此查詢集合中的文件 而不會從子集合擷取資料方便您儲存地標 子集合中的資訊:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

文件的大小上限為 1 MB,因此必須儲存 把地標做為子集合,保留每份城市文件的小型地圖, 使用巢狀清單來混用文件。

Cloud Firestore 的進階查詢功能可減少 處理常見存取模式的資料重複問題以 城市指南應用程式,顯示按人口排序的所有首都城市。 在 Realtime Database 中,最有效率的做法是 與 cities 清單資料重複的大寫城市清單,如下所示:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Cloud Firestore 中,您可以依序呈現首都城市清單: 將母體視為單一查詢:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

進一步瞭解 Cloud Firestore 資料模型,並 參閱我們的解決方案,進一步瞭解如何建立 Cloud Firestore 資料庫。

確保資料安全

您是否使用 Cloud Firestore Security Rules 執行以下作業: Android、Apple 或 Web 用戶端,或 Identity Access Management (IAM) 對於伺服器,請確認您也保護 Cloud Firestore 中的資料 如 Realtime Database。兩種資料庫皆採用驗證機制 這樣您一開始就不用變更驗證的實作方式 使用 Cloud Firestore

需要考量的主要差異

  • 行動和網頁 SDK 使用 Cloud Firestore Security Rules,而伺服器則是 SDK 會使用 Identity Access Management (IAM) 保護資料。
  • 除非您使用萬用字元,否則 Cloud Firestore Security Rules 不會串聯。文件和 集合不會另外沿用規則。
  • 不必再個別驗證資料 (與 Realtime Database 相同)。
  • Cloud Firestore 會先檢查規則再執行查詢 使用者俱有適當存取權,可存取查詢傳回的所有資料。

將歷來資料移至 Cloud Firestore

您將資料和安全結構對應至 Cloud Firestore 後 資料和安全性模型,您就可以開始新增資料。 將應用程式從「Realtime Database」移出後,如果您打算查詢歷來資料 至 Cloud Firestore,請將舊資料的匯出項目新增至新 Cloud Firestore 資料庫。如果您打算同時使用 Realtime Database 和 可略過這個步驟。Cloud Firestore

為避免使用舊資料覆寫新資料,建議您新增 歷來資料。若您同時在兩個資料庫新增資料, 進行這項操作時,請務必優先處理 Cloud Functions前送達須付運費 Cloud Firestore

如要將歷來資料遷移至 Cloud Firestore,請按照下列步驟操作:

  1. Realtime Database 匯出資料或 請使用最近的備份
    1. 前往 Realtime Database部分 (在 Firebase 控制台中)。
    2. 在「資料」分頁中,選取資料庫的根層級節點,然後選取 從選單中「Export JSON」
  2. Cloud Firestore 中建立新的資料庫並 新增資料

    將部分資料移至 Cloud Firestore 時,請考慮以下策略:

    • 撰寫可攜碼轉移資料的自訂指令碼。雖然我們無法提供 這個指令碼的範本,因為每個資料庫都有其獨特的需求 Slack 頻道Cloud Firestore 名專家 或 Stack Overflow 上 可以查看您的腳本,或是針對您的特殊情況提供建議。
    • 使用伺服器 SDK (Node.js、Java、Python 或 Go) 直接寫入資料 至 Cloud Firestore。如需設定伺服器 SDK 的操作說明,請參閱 開始使用
    • 如要加快大量資料遷移速度,請使用 批次寫入 單一網路要求最多可傳送 500 個作業。
    • 如要避免超出 Cloud Firestore 頻率限制, 將作業量限制為每秒 500 次寫入。

新增資料至 Cloud Firestore

為了保持資料庫之間的一致性,請將新資料同時新增至 即時。使用 Cloud Functions 觸發寫入 Cloud Firestore 的作業 每當用戶端寫入 Realtime Database 時。請確認 Cloud Firestore 優先接收來自 Cloud Functions 的新資料 (而非任何寫入作業) 估算流量

建立函式,將全新資料或變更資料寫入 Cloud Firestore 每次用戶端將資料寫入 Realtime Database 時。進一步瞭解 Cloud FunctionsRealtime Database 個觸發條件

Cloud Firestore 設為遷移資料的主要資料庫

如果您選擇以 Cloud Firestore 做為 確定您已採用任何具備資料鏡像的功能 設定並驗證您的 Cloud Firestore Security Rules

  1. 如果您使用 Cloud Functions 來維持各資料庫之間的一致性, 請確保沒有重複的資料存放區 迴圈將函式改為寫入單一資料庫,或移除 並且開始逐步停止 已遷移仍與 Realtime Database 相連結的應用程式中的資料。如何處理 順應使用者的需求和使用者 打造更切合需求的應用程式

  2. 確認您的資料受到妥善保護。驗證 Cloud Firestore Security Rules 或是 IAM 設定