Usar Firestore en modo Datastore (Datastore)

Firestore es una base de datos de documentos NoSQL creada para el escalado automático, el alto rendimiento y la facilidad de desarrollo de aplicaciones. Es la versión más reciente de Datastore e incluye varias mejoras con respecto a Datastore. Como Firestore en el modo de Datastore (Datastore) se ha optimizado para casos prácticos de servidores y para App Engine, te recomendamos que uses Datastore en las bases de datos que vayan a usar principalmente las aplicaciones de App Engine. Firestore en el modo nativo es más útil en casos prácticos de notificaciones móviles y en tiempo real. Para obtener más información sobre los modos de Firestore, consulta Elegir entre el modo nativo y el modo Datastore.

En este documento se describe cómo usar las bibliotecas de cliente de Cloud para almacenar y recuperar datos en una base de datos en modo Datastore.

Requisitos previos y configuración

  • Configura tu entorno y tu proyecto para saber cómo se estructuran las aplicaciones en App Engine. Anota y guarda el ID de tu proyecto, ya que lo necesitarás para ejecutar la aplicación de ejemplo descrita en este documento.

Clonar el repositorio

Descarga (clona) la muestra:

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

Editar la configuración del proyecto y definir dependencias

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

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

Código de aplicación

La aplicación de ejemplo registra, obtiene y muestra las IPs de los visitantes. Puedes ver que una entrada de registro es una clase de dos campos a la que se le asigna el tipo visit y se guarda en el modo Datastore mediante el comando put. A continuación, se recuperan las diez visitas más recientes en orden descendente con 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"}

Usar archivos index.yaml

La aplicación de ejemplo realiza consultas. Las consultas más elaboradas del modo Datastore requieren uno o varios índices, que debes especificar en un archivo index.yaml que debes subir junto con tu aplicación. Este archivo se puede crear manualmente o se puede generar automáticamente al probar tu aplicación de forma local.

Pruebas locales

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

Más información

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