在 Datastore 模式下使用 Firestore (Datastore)

Firestore 是 NoSQL 文件資料庫,專為自動調整資源配置、提供高效能,以及協助輕鬆開發應用程式而打造。這是 Datastore 的最新版本,推出了 Datastore 的多項改進功能。由於 Firestore 在 Datastore 模式 (Datastore) 是針對伺服器用途和 App Engine 進行最佳化,因此建議您將 Datastore 用於主要由 App Engine 應用程式使用的資料庫。原生模式的 Firestore 最適合用於行動裝置和即時通知用途。如要進一步瞭解 Firestore 模式,請參閱「選擇原生模式或 Datastore 模式」。

本文件說明如何使用 Cloud 用戶端程式庫,在 Datastore 模式資料庫中儲存及擷取資料。 您可以在 app.yaml 檔案中指定執行階段版本和作業系統,即可使用本指南中的範例應用程式,適用於任何支援的 Python 版本。

事前準備和設定

  • 設定環境和專案,瞭解應用程式在 App Engine 中的結構。請記下並儲存您的專案 ID,因為您需要這些資訊才能執行本文說明的範例應用程式。

複製存放區

下載 (複製) 此範例:

  git clone https://github.com/GoogleCloudPlatform/python-docs-samples
  cd python-docs-samples/appengine/flexible/datastore

編輯專案設定並設定依附元件

requirements.txt 檔案中加入 google-cloud-datastore 程式庫。這是 Datastore 模式的用戶端程式庫。

Flask==3.0.3
google-cloud-datastore==2.20.2
gunicorn==23.0.0

應用程式程式碼

範例應用程式會記錄、擷取及顯示訪客 IP。您可以看到記錄項目是雙欄位類別,其中註明類型 visit,且透過 put 指令儲存在 Datastore 模式中。然後,系統會使用 query() 指令,以遞減順序擷取最近的十筆造訪記錄。

@app.route("/")
def index():
    ds = datastore.Client()

    user_ip = request.remote_addr

    # Keep only the first two octets of the IP address.
    if is_ipv6(user_ip):
        user_ip = ":".join(user_ip.split(":")[:2])
    else:
        user_ip = ".".join(user_ip.split(".")[:2])

    entity = datastore.Entity(key=ds.key("visit"))
    entity.update(
        {
            "user_ip": user_ip,
            "timestamp": datetime.datetime.now(tz=datetime.timezone.utc),
        }
    )

    ds.put(entity)
    query = ds.query(kind="visit", order=("-timestamp",))

    results = []
    for x in query.fetch(limit=10):
        try:
            results.append("Time: {timestamp} Addr: {user_ip}".format(**x))
        except KeyError:
            print("Error with result format, skipping entry.")

    output = "Last 10 visits:\n{}".format("\n".join(results))

    return output, 200, {"Content-Type": "text/plain; charset=utf-8"}

使用 index.yaml 檔案

範例應用程式會執行查詢。 更精細的 Datastore 模式查詢作業需要使用一或多個索引,因此您必須在與應用程式一併上傳的 index.yaml 檔案中指定這些索引。這個檔案可透過手動方式建立,或是在本機上測試應用程式時自動產生。

本機測試

如果需要在本機環境中開發及測試您的應用程式,可以使用 Datastore 模式模擬器

瞭解詳情

如需 Datastore 模式的完整資訊,包括最佳化作業與相關概念,請參閱 Datastore 模式的 Firestore 說明文件