Como usar o Cloud Datastore

Use o Google Cloud Datastore para armazenar os dados do seu aplicativo do App Engine. O Cloud Datastore é um banco de dados criado para garantir escalonamento automático, alto desempenho e facilidade no desenvolvimento de aplicativos.

Este documento mostra como usar a biblioteca de cliente do Google Cloud (em inglês) para armazenar e recuperar dados usando o Cloud Datastore em um aplicativo do App Engine.

Pré-requisitos e configuração

Siga as instruções em "Hello, World!" para Go no App Engine se quiser configurar o ambiente e o projeto, além de compreender como aplicativos Go são estruturados no App Engine. Anote e salve o código do projeto porque você precisará dele para executar o aplicativo de amostra descrito neste documento.

Clonar o repositório

Faça o download ou clone da amostra:

go get -u -d -v github.com/GoogleCloudPlatform/golang-samples/datastore
cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/appengine_flexible/datastore

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

Em app.yaml, defina GCLOUD_DATASET_ID para o projeto. Esse valor é o código do seu projeto.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

runtime: go
env: flex

automatic_scaling:
  min_num_instances: 1

env_variables:
  GCLOUD_DATASET_ID: your-project-id

Código do aplicativo

O aplicativo de amostra registra, recupera e exibe IPs de visitantes. A entrada de registro é uma classe de dois campos simples que recebe o tipo visit e é salva no Cloud Datastore com o comando put do cliente do Datastore. Em seguida, as dez visitas mais recentes são recuperadas em ordem decrescente pelos comandos NewQuery e GetAll do cliente do Datastore (conteúdo dos links em inglês).


// Sample datastore demonstrates use of the cloud.google.com/go/datastore package from App Engine flexible.
package main

import (
	"context"
	"fmt"
	"log"
	"net/http"
	"os"
	"time"

	"cloud.google.com/go/datastore"
	"google.golang.org/appengine"
)

var datastoreClient *datastore.Client

func main() {
	ctx := context.Background()

	// Set this in app.yaml when running in production.
	projectID := os.Getenv("GCLOUD_DATASET_ID")

	var err error
	datastoreClient, err = datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatal(err)
	}

	http.HandleFunc("/", handle)
	appengine.Main()
}

func handle(w http.ResponseWriter, r *http.Request) {
	if r.URL.Path != "/" {
		http.NotFound(w, r)
		return
	}

	ctx := context.Background()

	// Get a list of the most recent visits.
	visits, err := queryVisits(ctx, 10)
	if err != nil {
		msg := fmt.Sprintf("Could not get recent visits: %v", err)
		http.Error(w, msg, http.StatusInternalServerError)
		return
	}

	// Record this visit.
	if err := recordVisit(ctx, time.Now(), r.RemoteAddr); err != nil {
		msg := fmt.Sprintf("Could not save visit: %v", err)
		http.Error(w, msg, http.StatusInternalServerError)
		return
	}

	fmt.Fprintln(w, "Previous visits:")
	for _, v := range visits {
		fmt.Fprintf(w, "[%s] %s\n", v.Timestamp, v.UserIP)
	}
	fmt.Fprintln(w, "\nSuccessfully stored an entry of the current request.")
}

type visit struct {
	Timestamp time.Time
	UserIP    string
}

func recordVisit(ctx context.Context, now time.Time, userIP string) error {
	v := &visit{
		Timestamp: now,
		UserIP:    userIP,
	}

	k := datastore.IncompleteKey("Visit", nil)

	_, err := datastoreClient.Put(ctx, k, v)
	return err
}

func queryVisits(ctx context.Context, limit int64) ([]*visit, error) {
	// Print out previous visits.
	q := datastore.NewQuery("Visit").
		Order("-Timestamp").
		Limit(10)

	visits := make([]*visit, 0)
	_, err := datastoreClient.GetAll(ctx, q, &visits)
	return visits, err
}

Como usar arquivos index.yaml

O aplicativo de amostra faz consultas simples. Nas consultas mais detalhadas do Datastore, é necessário especificar um ou mais índices em um arquivo index.yaml. O upload desse arquivo é feito com o aplicativo. É possível criá-lo manualmente ou gerá-lo automaticamente ao testar o aplicativo no local.

Teste local

Se for preciso desenvolver e testar o aplicativo localmente, use o emulador do Cloud Datastore.

Para saber mais

Consulte a documentação do Cloud Datastore para informações completas sobre ele, incluindo otimizações e conceitos.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para Go