Usar o Firestore no modo Datastore (Datastore)

O Firestore é um banco de dados de documentos NoSQL criado para oferecer escalonamento automático, alto desempenho e facilidade no desenvolvimento de aplicativos. O Firestore é a mais nova versão do Datastore e apresenta várias melhorias em relação a ele. Como o Firestore no modo Datastore (Datastore) é otimizado para casos de uso do servidor e para o App Engine, recomendamos usar o Datastore para bancos de dados que serão usados principalmente por aplicativos do App Engine. O Firestore no modo nativo é mais útil para casos de uso de notificações móveis e em tempo real. Para mais informações sobre os modos do Firestore, consulte Como escolher entre o modo nativo e o modo Datastore.

Este documento descreve como usar as Bibliotecas de cliente do Cloud para armazenar e e recuperar dados em um banco de dados no modo Datastore. Você pode usar o aplicativo de exemplo deste guia para qualquer versão compatível de Python, especificando a versão do ambiente de execução e o sistema operacional no seu arquivo app.yaml.

Pré-requisitos e configuração

  • Configure o ambiente e o projeto para entender como os apps são estruturados no App Engine. Anote e salve o ID do projeto. Você precisará dele para executar o aplicativo de amostra descrito neste documento.

Clonar o repositório

Faça o download ou clone da amostra:

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

Editar a configuração do projeto e definir as dependências

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

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

Código do aplicativo

O aplicativo de amostra registra, recupera e exibe IPs de visitantes. A entrada de registro é uma classe de dois campos que recebe o tipo visit e é salva no modo Datastore com o comando put. Em seguida, as 10 visitas mais recentes são recuperadas em ordem decrescente usando o 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"}

Como usar arquivos index.yaml

O aplicativo de exemplo realiza consultas. Consultas mais elaboradas do modo Datastore exigem um ou mais índices, que você precisa especificar em um arquivo index.yaml que você envia com seu app. Esse arquivo pode ser criado manualmente ou ser gerado automaticamente ao testar seu app localmente.

Teste local

Se precisar desenvolver e testar seu aplicativo localmente, é possível usar o emulador de modo Datastore.

Mais informações

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