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 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 para 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 github.com/GoogleCloudPlatform/golang-samples/appengine_flexible/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.

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. Uma entrada de registro é uma classe de dois campos simples que recebe o tipo visit e é salva no Cloud Datastore usando o comando put do Datastore Client. Em seguida, as dez visitas mais recentes são recuperadas em ordem decrescente, usando os comandos NewQuery e GetAll do Datastore Client.

// Copyright 2015 Google Inc. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.

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

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

	"cloud.google.com/go/datastore"

	"golang.org/x/net/context"

	"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. As consultas mais detalhadas do Datastore exigem um ou mais índices, que precisam ser especificados 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 app no local.

Para saber mais

Consulte a documentação do Cloud Datastore para ver todas as informações 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