Usa Cloud Datastore

Puedes usar Google Cloud Datastore para almacenar los datos de tu app de App Engine. Cloud Datastore es una base de datos creada para el ajuste de escala automático, un alto rendimiento y un desarrollo de aplicaciones fácil.

En este documento, se describe cómo usar la biblioteca cliente de Google Cloud para almacenar y recuperar datos mediante Cloud Datastore en una app de App Engine.

Requisitos previos y configuración

Sigue las instrucciones en “Hello, World!” para Java en App Engine a fin de configurar tu entorno y proyecto, y comprender cómo se estructuran las apps de Java en App Engine. Anota y guarda el ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

Clona el repositorio

Descarga (clona) la muestra:

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

Edita la configuración del proyecto y configura las dependencias

En pom.xml, configura las dependencias que te permitan usar Cloud Datastore:

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

Código de la aplicación

La aplicación de muestra registra, recupera y muestra las IP de los visitantes. Puedes ver que una entrada de registro es una clase simple de dos campos que recibe el tipo visit y se guarda en Cloud Datastore con el comando add() del almacén de datos. Luego, se recuperarán las últimas diez visitas en orden descendente con el comando run() del almacén de datos.

@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"));
    }
  }
}

Usa archivos de index.yaml

La app de muestra realiza consultas sencillas. Las consultas más complejas de Datastore requieren uno o más índices, que debes especificar en un archivo index.yaml que se sube junto con tu app. Este archivo puede crearse de forma manual o generarse de manera automática cuando pruebas tu aplicación de manera local.

Pruebas locales

Si necesitas desarrollar y probar la aplicación de forma local, puedes usar el emulador de Cloud Datastore.

Más información

Para obtener toda la información sobre Cloud Datastore, incluidos los conceptos y las optimizaciones, consulta la documentación de Cloud Datastore.