認識 Cloud Firestore:Cloud Native NoSQL 資料庫完整介紹

簡介

Cloud Firestore 是一個快速、完全託管、Cloud Native 的 NoSQL 資料庫。適用於在 Firebase 和 GCP 上進行手機 App、網頁和後端開發。Cloud Firestore 目前已 GA 而且已佈署在更多地區,並且支援多種語言,包括:Swift、Java、Go、Python、Node.js 等。

儲存類型

Cloud Firestore 是檔案導向的 NoSQL 資料庫。不像 SQL 資料庫有 table、rows,Cloud Firestore 的資料都是存在檔案 (document),而這些檔案則是以資料夾 (collection)。每個檔案是以 key-value 做儲存資料的格式。

主要功能

高彈性 支援高彈性、階層式的儲存格式。資料存入檔案,由資料夾儲存各個檔案。資料夾也支援複雜的巢狀儲存型態。
簡易存取 可以藉由使用者設定的參數存取單一、特定的檔案或是整個資料夾。
即時更新 讓所有連接之設備同步至最新的資料。
離線支援 即時設備離線,應用程式還是能在做更新資料。當設備上線時,應用程式的所有變更會同步至 Cloud Firestore。
高擴展性 Cloud Firestore 支援 multi-region 的自動化備份、高一致性、批次執行的單一性、transaction 支援。

Cloud Firestore v.s. Realtime Database

Firebase 提供兩種 Cloud Native 的資料庫,Realtime Database 以及 Cloud Firestore。可以把 Cloud Firestore 視為 Realtime Database 的下一代,延續 Realtime Database 的低延遲特性,新增的功能讓存取更快速、擴展性更好。

 

Realtime Database Cloud Firestore
資料類型 JSON 格式,較複雜的階層式資料較難管理 檔案與資料夾格式,較好管理複雜的階層式資料
離線支援 支援 iOS, Android 使用者 支援 iOS, Android, Web 使用者
Queries
  • 對於 sort, filter 有一定的限制。一個 Query 只能使用 sort 或是 filter
  • 每次 Query 一定會取回整個 subtree
  • 一個 Query 能使用多個 sort, filter 組合
  • Queries 預設是會有索引(index),Query 的效能是根據輸出結果的大小而非整個 dataset
寫入以及 transactions
  • 視寫入資料為單獨一個動作
  • transactions 需要完整的 callback
  • 原子性的批次寫入
  • transaction 會自動重複動作直到寫入完成。
可靠性以及效能
  • Regional solution
  • 低延遲
  • 資料庫被限制在 zonal 的可用性
  • Multi-region solution
  • 低延遲
  • 幫使用者備份資料至各個資料中心,以增加可用性、擴展性
擴展性
  • 需要對資料庫進行 sharding 才能擴展
  • 目前支援同時間最高 十萬個連線、單一資料庫每秒一千筆寫入
  • Firestore 會自動幫您自動擴展
  • 目前支援同時間最高一百萬個連線、一萬筆寫入
安全性
  • 一連串的讀寫規則驗證
  • Firebase Database Rules 為唯一的安全性選擇
  • 使用者需要使用 validate rule 驗證資料
  • 更簡易、更安全的安全防護
  • 手機與網頁 SDK 可以使用 Cloud Firestore Security Rules。Server SDK 可以使用 IAM
  • 自動進行資料驗證
價格
  • 按網路流量與儲存大小計費,但是單位計價較高。
  • 按資料庫讀寫的次數、網路流量、儲存大小計費,單位計價較低。

Cloud Firestore 與  Realtime Database 相關比較

區域

在使用 Cloud Firestore 之前,必須先選擇資料庫的區域 (location)。為了降低延遲以及增加可用性,請選擇距離您的使用者或服務較近的區域。

使用者可以選擇兩種區域類型,分別為 Multi-region 以及 Regional。Multi-region 顧名思義就是會把資料庫部署在多個 region,可用性較高但是目前只可以選擇歐洲或是美洲的 region。Regional 就是一個特定的區域,例如:asia-east1(台灣)。

註:參考資料

資料加密

Cloud Firestore 在把資料寫入硬碟前會自動加密,使用者不需要額外設定。在存取資料時,也會自動為有權限的使用者解密。

註:參考連結

價格

Cloud Firestore 主要針對以下動作進行收費:

  • 讀寫、刪除每個檔案(document)的次數
  • 資料庫儲存的大小,包括元數據(metadata)、indexes 等
  • 使用的網路流量

假如使用者不是要查詢檔案(document),而是要查詢所有的資料夾(collection) ID,那會以查詢一個檔案的價格收費。

更多詳細的收費範例

註:參考連結

Cloud Firestore 資料庫類型

在創建 Cloud Firestore 資料庫時可以選擇 Native mode 或是 Datastore mode。以下會比較 Native mode 以及 Datastore mode 的差別。官方文件是建議使用者如果有新的 server projects 可以選擇用 Datastore mode 如果是手機及網頁端的應用程式 projects 則可以選擇 Native mode。

需要注意一個 project 只能選擇一種 mode,兩種 mode 不能供存於同一個 project。

 

Native Mode Datastore Mode
資料類型 資料庫由 document 以及 collections 組成。 資料庫由 entity 以及 kind 組成。(原先 Datastore 的格式)
Queries 以及

Transactions

  • 高一致性
  • 一個 transaction 可以橫跨高達 500 個 document
  • 限制:沒有 collection group queries 以及 projection queries.
  • 高一致性
  • 一個 transaction 可以橫跨任意個 entity groups
Datastore v1 API 不支援 支援
Firestore v1 API 支援 不支援
即時更新 支援 listen document 的功能,當 document 更新時 client 端會收到最新的資料 不支援
Client 函式庫
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS
  • Web
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
價格 價格相同

目前在台灣(asia-east1) 還沒有支援 Cloud Firestore,距離較近的區域為東京(asia-northeast1)、香港(asia-east2)。

註:參考連結

 


連絡「GCP 專門家」