Crear, recuperar, actualizar y borrar entidades

Los objetos de datos en Cloud Datastore se denominan entidades y cada una de ellas se clasifica en un tipo a los efectos de las consultas. Por ejemplo, si estás escribiendo una aplicación de recursos humanos, puedes representar a cada empleado con una entidad del tipo Employee. Ten en cuenta que los valores de datos de la entidad están en forma de propiedades. Para obtener más información sobre las entidades, consulta el documento de concepto Entidades, propiedades y claves.

Crear entidades y configurar propiedades

En Go, si quieres crear una entidad nueva, debes construir una instancia de una estructura de Go, propagar sus campos y llamar a datastore.Put para guardarla en Cloud Datastore. Solo los campos exportados (que empiecen con una letra mayúscula) se guardarán en Cloud Datastore. Para especificar el nombre de clave de la entidad, puedes pasar un argumento stringID que no esté vacío a datastore.NewKey.

El siguiente ejemplo crea una entidad de tipo Employee, propaga sus valores de propiedades y la guarda en Cloud Datastore.

import (
	"time"

	"golang.org/x/net/context"

	"google.golang.org/appengine/datastore"
)

type Employee struct {
	FirstName          string
	LastName           string
	HireDate           time.Time
	AttendedHRTraining bool
}

func f(ctx context.Context) {
	// ...
	employee := &Employee{
		FirstName: "Antonio",
		LastName:  "Salieri",
		HireDate:  time.Now(),
	}
	employee.AttendedHRTraining = true

	key := datastore.NewIncompleteKey(ctx, "Employee", nil)
	if _, err := datastore.Put(ctx, key, employee); err != nil {
		// Handle err
	}
	// ...
}

El tipo Employee declara cuatro campos para el modelo de datos: FirstName, LastName, HireDate y AttendedHRTraining.

Si provees un nombre de clave vacío o usas datastore.NewIncompleteKey, Cloud Datastore generará un ID numérico para la clave de la entidad de forma automática:

employee := &Employee{
	FirstName: "Antonio",
	LastName:  "Salieri",
	HireDate:  time.Now(),
}
employee.AttendedHRTraining = true
key := datastore.NewIncompleteKey(ctx, "Employee", nil)
_, err = datastore.Put(ctx, key, employee)

Recuperar entidades

Para recuperar una entidad identificada con una clave determinada, pasa *datastore.Key como argumento de la función datastore.Get. Puedes generar *datastore.Key con la función datastore.NewKey.

employeeKey := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
addressKey := datastore.NewKey(ctx, "Address", "", 1, employeeKey)
var addr Address
err = datastore.Get(ctx, addressKey, &addr)

La función datastore.Get propaga una instancia de la estructura de Go apropiada.

Actualizar entidades

Para actualizar una entidad existente, modifica los atributos de la estructura y, a continuación, llama a datastore.Put. Los datos reemplazan la entidad existente. El objeto entero se envía a Cloud Datastore con cada llamada a datastore.Put.

Borrar entidades

Si tienes la clave correspondiente, puedes borrar una entidad con la función datastore.Delete:

key := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
err = datastore.Delete(ctx, key)

Borrar entidades de manera masiva

Si necesitas borrar un gran número de entidades, te recomendamos usar Cloud Dataflow para borrar entidades de manera masiva.

Usar operaciones por lotes

Si quieres operar sobre varias entidades con una sola llamada de Cloud Datastore, puedes usar las siguientes operaciones por lotes:

Este es un ejemplo de una llamada por lotes:

// A batch put.
_, err = datastore.PutMulti(ctx, []*datastore.Key{k1, k2, k3}, []interface{}{e1, e2, e3})

// A batch get.
var entities = make([]*T, 3)
err = datastore.GetMulti(ctx, []*datastore.Key{k1, k2, k3}, entities)

// A batch delete.
err = datastore.DeleteMulti(ctx, []*datastore.Key{k1, k2, k3})

Las operaciones por lotes no afectan los costos. Se te cobrará por cada clave en una operación por lotes, independientemente de si la clave existe o no. El tamaño de las entidades involucradas en una operación no afecta el costo.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Go