您可以使用 Datastore 模式的 Firestore (Datastore) 為在標準環境中執行的應用程式儲存資料。Datastore 會對應用程式執行的每個查詢套用索引。只要實體變更,這些索引就會隨之更新,因此應用程式執行查詢時,能夠快速得到結果。為此,Datastore 必須事先知道應用程式要執行哪些查詢。您可利用 index.yaml
設定檔指定應用程式需要哪些索引。請使用 Datastore 模擬器在您測試應用程式時自動產生檔案��或是自行撰寫檔案。您部署應用程式時必須上傳 index.yaml
檔案。
關於「index.yaml
」
應用程式執行的每個 Datastore 查詢都需要有對應的索引。系統會自動建立簡單查詢的索引 (例如針對單一屬性的查詢);適用於複雜查詢的索引則必須在 index.yaml
設定檔中定義。這個檔案會隨應用程式一起上傳,然後就會在 Datastore 中建立索引。
index.yaml
檔案的範例如下:
indexes:
- kind: Cat
ancestor: no
properties:
- name: name
- name: age
direction: desc
- kind: Cat
properties:
- name: name
direction: asc
- name: whiskers
direction: desc
- kind: Store
ancestor: yes
properties:
- name: business
direction: asc
- name: owner
direction: asc
index.yaml
的語法是 YAML 格式。如要進一步瞭解這種語法,請參閱 YAML 網站。
索引定義
index.yaml
具有名叫 indexes
的單一清單元素。清單中的每個元素都代表應用程式的一個索引。
索引元素可以有下列元素:
kind
- 查詢的實體種類。通常是定義實體模型的 Model 類別名稱。這是必要元素。
properties
依排序順序,以索引欄形式加入的屬性清單:先加入用於等式篩選器的屬性,再加入用於不等式篩選器的屬性,然後是排序順序及其排序方向。
此清單中的每個元素都具有下列元素:
name
- 屬性的資料儲存庫名稱。
direction
- 此為排序方向,
asc
代表遞增,desc
則代表遞減。只有用於查詢的排序順序屬性才需要此排序方向,且必須符合查詢所使用的方向。預設值為asc
。
ancestor
如果查詢包含祖系子句 (Query.ancestor() 或 GQL ANCESTOR IS 子句),則為
yes
。預設值為no
。
建立索引檔案
您可以使用文字編輯器並遵循上述檔案配置,以手動方式建立索引檔案。在本機測試應用程式時自動產生檔案則更有效率。您可以結合這兩種方法。
測試本機環境時,您可以使用 gcloud 模擬器指令來啟動能模擬 Datastore 的服務,然後再執行應用程式:
gcloud beta emulators datastore start --data-dir DATA-DIR
使用 --data-dir
標記來指定自動產生的 index.yaml
檔案所在的目錄。
您測試應用程式時,每產生一個 Datastore 查詢,模擬器就會將產生的索引定義新增至 index.yaml
。所有自動產生的索引定義都會顯示在下方行列底下的檔案中:
# AUTOGENERATED
開發網路伺服器會將這行上方的所有索引定義視為可手動控制的範圍,因此不會更新這些定義,而只會在該行下方進行變更,並且只在完整的 index.yaml
檔案未描述適用於應用程式執行查詢的索引時,才進行變更。如要控制自動索引定義,請將索引移至此行上方。
應用程式執行查詢時,模擬器可能會更新這個行列底下的現有定義。您在測試應用程式時,如果應用程式產生其能執行的每個查詢,則 index.yaml
中會具備完整的產生項目。您可能需要手動編輯檔案,刪除不是在實際工作環境中使用的索引,或定義非在測試期間建立的索引。
部署索引設定檔
如要部署index.yaml
設定檔,請執行下列指令:
gcloud app deploy index.yaml
刪除不再使用的索引
在索引設定中變更或移除索引時,原始索引並不會從 App Engine 中自動刪除。因此,您可以在執行舊版應用程式的同時建構新的索引,也可以在新版出現問題時立即將其還原為舊版。
如果確定已不再需要舊的索引,則可執行下列指令,將其從 App Engine 中刪除:
gcloud datastore indexes cleanup index.yaml