使用 Cloud Datastore

您可以使用 Google Cloud Datastore 儲存來自 App Engine 應用程式的資料。Cloud Datastore 是為了協助應用程式開發作業打造的資料庫,能夠自動調整資源配置並具有卓越效能。

本文件說明如何透過 App Engine 應用程式中的 Cloud Datastore,使用 Google Cloud 用戶端程式庫儲存和擷取資料。

必備條件和設定

請依照 App Engine 上 Java 適用的「Hello, World!」操作說明來設定您的環境和專案,並進一步瞭解如何在 App Engine 中建構 Java 應用程式。請記下並儲存您的專案 ID,因為您需要這些資訊才能執行本文件所描述的範例應用程式。

複製存放區

下載 (複製) 此範例:

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

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

pom.xml 中,設定讓依附元件允許您使用 Cloud Datastore:

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-datastore</artifactId>
  <version>1.83.0</version>
</dependency>

應用程式碼

這個範例應用程式會記錄、擷取及顯示訪客 IP。您可以看到記錄檔項目是簡單的兩欄類別,獲指派的類型為 visit,且系統是使用資料儲存庫的 add() 指令將其儲存至 Cloud Datastore 中。然後,系統會使用 run 指令擷取資料儲存庫,以遞減順序呈現最近十個造訪記錄。

@SuppressWarnings("serial")
@WebServlet(name = "datastore", value = "")
public class DatastoreServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException,
      ServletException {
    // store only the first two octets of a users ip address
    String userIp = req.getRemoteAddr();
    InetAddress address = InetAddress.getByName(userIp);
    if (address instanceof Inet6Address) {
      // nest indexOf calls to find the second occurrence of a character in a string
      // an alternative is to use Apache Commons Lang: StringUtils.ordinalIndexOf()
      userIp = userIp.substring(0, userIp.indexOf(":", userIp.indexOf(":") + 1)) + ":*:*:*:*:*:*";
    } else if (address instanceof Inet4Address) {
      userIp = userIp.substring(0, userIp.indexOf(".", userIp.indexOf(".") + 1)) + ".*.*";
    }

    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
    KeyFactory keyFactory = datastore.newKeyFactory().setKind("visit");
    IncompleteKey key = keyFactory.setKind("visit").newKey();

    // Record a visit to the datastore, storing the IP and timestamp.
    FullEntity<IncompleteKey> curVisit = FullEntity.newBuilder(key)
        .set("user_ip", userIp).set("timestamp", Timestamp.now()).build();
    datastore.add(curVisit);

    // Retrieve the last 10 visits from the datastore, ordered by timestamp.
    Query<Entity> query = Query.newEntityQueryBuilder().setKind("visit")
        .setOrderBy(StructuredQuery.OrderBy.desc("timestamp")).setLimit(10).build();
    QueryResults<Entity> results = datastore.run(query);

    resp.setContentType("text/plain");
    PrintWriter out = resp.getWriter();
    out.print("Last 10 visits:\n");
    while (results.hasNext()) {
      Entity entity = results.next();
      out.format("Time: %s Addr: %s\n", entity.getTimestamp("timestamp"),
          entity.getString("user_ip"));
    }
  }
}

使用 index.yaml 檔案

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

本機測試

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

瞭解詳情

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

本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
Java 適用的 App Engine 彈性環境文件