Data 服務
在 Game Services 的範疇中,提供資料服務是最重要功能之一,比如存放個人面向資料:使用者資料、消費歷程...,或是存放公用面向資料資:排行榜資料...等等。在實際的使用面上,各資料儲存系統都有其優缺點,比如:schemaless, security rule, indexing 能力, atomic operation 支援度...等等,也可能會同時使用多種資料儲存服務
常見的 BaaS 服務中,在建立或申請好服務的同時,通常就帶有 Data 服務。我們接著把 Parse, Firebase Realtime Database, Firebase Cloud Firestore 資料服務從「資料模型」、「資料格式類型」、「資料查詢與索引」、「資料原子性操作」、「資料可靠性與拓展性」、「權限控制」、「使用性限制」...等等各方面進行比較,方便在設計各種功能時,能簡易的找到適合的選項
資料模型
Parse
Realtime Database
Cloud Firestore
以多個 Class 為基礎,每個 Class 為 Object(資料)的集合
以節點為基礎,母節點即為一個 JSON 結構
以多個 Collection 為基礎,每個 Collection 為 Document(資料)的集合
可預先定義 Class 的結構格式,也可透過資料直接新增欄位,經定義後的結構即具有約束性
Schemaless,任意節點與資料皆沒有約束性(可透過設定 Database Rules 來驗證資料)
無法預先定義 Collection 資料格式,即使在同一個 Collection 中的 Document 亦沒有相互約束性
Parse 的 Data Model 最類似傳統的 RDBMS,如果您有相關的使用經驗,應該沒有太大的轉移成本
資料格式類型
Parse
Realtime Database
Cloud Firestore
String
String
String
Number
Number
Number
Boolean
Boolean
Boolean
Object
Map < String, Object >
Object
Array
List < Object >
Array
DateTime
Timestamp
GeoPoint
Geopoint
Polygon
File
Pointer
Reference
Relation
Null
Null
三個資料服務,都能夠完整對應 JSON 格式
地理位置 GeoPoint,僅在 Parse 以及 Cloud Firestore 支援
指標資料 Pointer, Reference,僅在 Parse 以及 Cloud Firestore 支援
檔案指標 File,僅在 Parse 支援。其餘服務可搭配 Cloud Storage 自行設計資料格式
多邊形資料 Polygon,僅在 Parse 支援
資料查詢與索引
Parse
Realtime Database
Cloud Firestore
Compound Query
O
X(僅能對單一屬性做 Sort 或 Filter)
O
Auto Index
O(可自行於資料庫優化)
X(需手動設定)
O
GeoPoint Index
O
X
O
Query Optimization
O(支援 Select Field)
X
O(可 Query SubCollections)
Live Listening
P(須透過 Live Query)
O
O
資料原子性操作
Parse
Realtime Database
Cloud Firestore
僅支援 Number, Array 的增減操作
針對整個資料庫特定節點執行 Transaction
可 Batch 多個寫入指令來執行 Transaction
資料可靠性與拓展性
Parse
Realtime Database
Cloud Firestore
取決於資料庫可靠性
可用於「上線服務」的成熟產品,有 SLA
還在 Beta 中(2018 Feb)
資料有區域可用性
具有全球化的可靠性與拓展能力
超過上限時須手動 Shard(100k同時連線,1k次寫入/秒)
自動化拓展
權限控制
Parse
Realtime Database
Cloud Firestore
支援 Class-Level Permissions 與 Access Control Lists,可分別針對整個 Class 或特定 Object 進行權限控管
僅能透過 Database Rules 來規範可存取的使用者或資料驗證
可透過 Security Rules 與 Identity and Access Management 控管使用者端與伺服器端權限
使用性限制
Parse
Realtime Database
Cloud Firestore
同時連線數 100,000/資料庫
寫入限制 2.5 MiB/秒/資料庫
同時監聽回應數 100,000/資料庫
同時連線數 100,000/資料庫(Beta 限制)
單一 Cloud Function 寫入數量 1000
Subcollection 深度 100
事件驅動寫入大小 1 MB
文件大小 1 MiB
傳送至 Cloud Function 資料 10 MB/秒
單一欄位大小 1 MiB - 89 bytes
單一回應文件大小 256 MB
API Request 大小 10 MiB
Query 執行時間限制 15 分鐘
單一文件寫入 1/秒
單一寫入資料庫大小 SDK 16 MB, REST 256 MB
單一 Collection 中寫入文件數量 500/秒
Simultaneous Write 64 MB/分鐘
Transaction Commit 寫入文件數量 500
Transaction 執行時間限制 270秒
不列舉 naming, index 限制
Last updated