Use o Firestore no modo Datastore (Datastore)

O Firestore é uma base de dados de documentos NoSQL criada para escala automática, elevado desempenho e facilidade de programação de aplicações. É a versão mais recente do Datastore e introduz várias melhorias em relação ao Datastore. Uma vez que o Firestore no modo Datastore (Datastore) está otimizado para exemplos de utilização de servidores e para o App Engine, recomendamos a utilização do Datastore para bases de dados que vão ser usadas principalmente por apps do App Engine. O Firestore no modo nativo é mais útil para casos de utilização de notificações em tempo real e para dispositivos móveis. Para mais informações sobre os modos do Firestore, consulte o artigo Escolher entre o modo nativo e o modo Datastore.

Este documento descreve como usar as bibliotecas cliente da Google Cloud para armazenar e obter dados numa base de dados do modo Datastore.

Pré-requisitos e configuração

  • Configure o seu ambiente e projeto para compreender como as apps estão estruturadas no App Engine. Anote e guarde o ID do projeto, porque vai precisar dele para executar a aplicação de exemplo descrita neste documento.

Clone o repositório

Transfira (clone) o exemplo:

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

Edite a configuração do projeto e defina dependências

Inclua a biblioteca google-cloud-datastore no ficheiro requirements.txt. Esta é a biblioteca cliente para o modo Datastore.

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

Código da aplicação

A aplicação de exemplo regista, obtém e apresenta os IPs dos visitantes. Pode ver que uma entrada de registo é uma classe de dois campos que recebe o tipo visit e é guardada no modo Datastore através do comando put. Em seguida, as dez visitas mais recentes são obtidas por ordem descendente através do 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"}

A usar ficheiros index.yaml

A app de exemplo executa consultas. As consultas do modo Datastore mais elaboradas requerem um ou mais índices, que tem de especificar num ficheiro que carrega juntamente com a sua app. Este ficheiro pode ser criado manualmente ou gerado automaticamente durante o teste da sua app localmente.index.yaml

Testes locais

Se precisar de desenvolver e testar a sua aplicação localmente, pode usar o emulador do modo Datastore.

Para obter mais informações

Para ver informações completas sobre o modo Datastore, incluindo otimizações e conceitos, consulte a documentação do Firestore no modo Datastore.