Usa Firestore en modo Datastore (Datastore)

Firestore es una base de datos de documentos NoSQL creada a fin de proporcionar ajuste de escala automático, alto rendimiento y facilidad para el desarrollo de aplicaciones. Es la versión más reciente de Datastore y presenta varias mejoras con respecto a Datastore. Debido a que Firestore en modo Datastore (Datastore) está optimizado para los casos de uso del servidor y para App Engine, recomendamos usar Datastore para las bases de datos que las apps de App Engine usarán en gran medida. Firestore en modo nativo es más útil para casos de uso de notificaciones móviles y en tiempo real. Para obtener más información sobre los modos de Firestore, consulta Elige entre el modo nativo y el modo Datastore.

En este documento, se describe cómo usar las bibliotecas cliente de Cloud para almacenar y recuperar datos en una base de datos en modo Datastore. Puedes usar la aplicación de ejemplo en esta guía para cualquier versión compatible de Python, especificando la versión del entorno de ejecución y el sistema operativo en tu archivo app.yaml.

  • Configura tu entorno y proyecto para comprender cómo se estructuran las apps 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/python-docs-samples
  cd python-docs-samples/appengine/flexible/datastore

Edita la configuración del proyecto y establece las dependencias

Incluye la biblioteca google-cloud-datastore en el archivo requirements.txt. Esta es la biblioteca cliente para el modo Datastore.

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

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 de dos campos que tiene el tipo visit y se guarda en modo Datastore mediante el comando put. Luego, se recuperarán las últimas diez visitas en orden descendente mediante el comando 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"}

Usa archivos index.yaml

La app de muestra realiza consultas. Las consultas más elaboradas del modo Datastore requieren uno o más índices, que debes especificar en un archivo index.yaml que subes junto con la app. Este archivo puede crearse de forma manual o generarse automáticamente mientras se prueba la app a nivel local.

Pruebas locales

Si necesitas desarrollar y probar tu aplicación de forma local, puedes usar el emulador del modo Datastore.

Para obtener más información

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