設定 Datastore 索引

App Engine 會對應用程式執行的每個查詢套用 Cloud Datastore 中的索引。只要實體有了變更,這些索引就會隨之更新,因此應用程式執行查詢時,能夠快速得到結果。為達到上述目的,Cloud Datastore 必須事先知道應用程式將會執行哪些查詢。您可利用設定檔指定應用程式需要哪些索引。本機開發伺服器可以在您測試應用程式時自動產生索引設定檔。

本指南提供了建立和管理索引的操作說明,如需進一步瞭解背景資訊,請參閱 Datastore 索引一文。

建立 Datastore 索引

應用程式執行的每個 Cloud Datastore 查詢都需要有一個對應的索引。系統會自動建立簡單查詢的索引 (例如針對單一屬性的查詢),但是您必須在名為 index.yaml 的設定檔中定義複雜查詢的索引。這個檔案會隨應用程式一起部署,然後就會在 Cloud 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

使用開發伺服器建立索引

當應用程式嘗試執行需要索引的查詢時,如果設定檔中沒有合適的索引項目,開發網路伺服器 (dev_appserver.py) 會自動在該檔案中新增項目。

如果您在開發伺服器上使用過應用程式所會執行的所有查詢,則開發伺服器會在 index.yaml 檔案中產生完整的項目清單。

當開發網路伺服器將產生的索引定義新增到 index.yaml 時,會視需要將定義插入到以下這行底下:

# AUTOGENERATED

開發網路伺服器會認為此行底下的所有索引定義都是自動產生的,且可能會在應用程式執行查詢時,更新這行底下的現有定義。

手動建立索引

您可以手動將索引新增到 index.yaml 檔案,或者編輯現有的項目。如果是手動控制的查詢,請務必將索引新增到加註 AUTOGENERATED 的該行上方。

系統會將此行上方的所有索引定義視為手動控制,因此開發網路伺服器不會更新這些定義。開發伺服器只會變更該行下方的項目,而且變更的前提是,完整的 index.yaml 檔案描述的索引所負責的並非應用程式執行的查詢。如要控制自動索引定義,請將定義移到該行上方。

關於語法資訊,請參閱 index.yaml 參考資料一文。

更新索引

請使用 index.yaml 指令,將 gcloud 設定檔上傳到 Cloud Datastore。如果 index.yaml 檔案定義的索引在 Cloud Datastore 中不存在,則系統會建立這些新索引。

Cloud Datastore 可能需要一些時間才能建立所有索引,因此這些索引不會馬上提供給 App Engine 使用。如果您的應用程式已設定為接收流量,當查詢所需的索引仍在建構時,便會發生例外情況。

為了避免例外發生,請讓系統有充裕的時間來建構所有索引。如果需要建立索引的進一步資訊及相關範例,請參閱部署 Python 應用程式一文。

如要將索引設定上傳至 Cloud Datastore,請在 index.yaml 的所在目錄執行下列指令:

gcloud

gcloud datastore create-indexes index.yaml

詳情請參閱 gcloud datastore 參考資料

appcfg

appcfg.py update_indexes [YOUR_APP_DIRECTORY]

可使用 GCP 主控台查看索引狀態

刪除未使用的索引

變更或移除 index.yaml 中的索引時,原本的索引並「不會」自動從 Cloud Datastore 刪除。因此,您可以在建構新索引的同時執行舊版的應用程式,也可以在新版出現問題時,立即將版本還原為舊版。

當確定已不再需要這些保留在 Cloud Datastore 中的舊索引時,可以執行以下指令,將 index.yaml 檔案中並未定義的索引刪除:

gcloud

gcloud datastore cleanup-indexes index.yaml

詳情請參閱 gcloud datastore 參考資料

appcfg

appcfg.py vacuum_indexes [YOUR_APP_DIRECTORY]
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
App Engine standard environment for Python