Crear y usar claves de entidad

Cada entidad de Cloud Datastore tiene una clave que la identifica de manera única. La clave consta de los siguientes componentes:

  • El espacio de nombres de la entidad, que permite la función multiusuario
  • El tipo de entidad, que la clasifica con el propósito de realizar consultas de Cloud Datastore
  • Una ruta principal opcional que ubica la entidad dentro de la jerarquía de Cloud Datastore
  • Un identificador para la entidad individual, que puede ser

    • una string de nombre de clave
    • un ID de número entero

Debido a que el identificador es parte de la clave de la entidad, se encuentra asociado de forma permanente a la entidad y no se puede cambiar. El identificador se puede asignar de las siguientes dos maneras:

  • Especifica tu propia string de nombre de clave para la entidad.
  • Permite que Cloud Datastore asigne automáticamente un ID de número entero a la entidad.

Especificar un nombre de clave para una entidad

Para asignar un nombre de clave a la entidad, proporciona un argumento stringID que no esté vacío a datastore.NewKey:

// Create a key with a key name "asalieri".
key := datastore.NewKey(
	ctx,        // context.Context
	"Employee", // Kind
	"asalieri", // String ID; empty means no string ID
	0,          // Integer ID; if 0, generate automatically. Ignored if string ID specified.
	nil,        // Parent Key; nil means no parent
)

Para permitir que Cloud Datastore asigne un ID numérico automáticamente, utiliza un argumento stringID vacío:

// Create a key such as Employee:8261.
key := datastore.NewKey(ctx, "Employee", "", 0, nil)
// This is equivalent:
key = datastore.NewIncompleteKey(ctx, "Employee", nil)

Asignar identificadores

Puedes configurar Cloud Datastore para generar ID automáticos mediante dos políticas de ID automático distintas:

  • La política default genera una secuencia aleatoria de ID sin usar con una distribución aproximadamente uniforme. Cada ID puede tener hasta 16 dígitos decimales.
  • La política legacy crea una secuencia de ID no consecutivos más breves compuestos por números enteros.

Si deseas mostrar los ID de las entidades a los usuarios o depender de que estos los soliciten, lo más recomendable es que uses la asignación manual.

Usar las rutas principales

Las entidades de Cloud Datastore conforman un espacio con estructura jerárquica similar a la estructura de directorios de un sistema de archivos. Cuando creas una entidad, tienes la opción de designar otra entidad como principal, en cuyo caso la entidad nueva sería secundaria de la entidad principal (ten en cuenta que, a diferencia de lo que ocurre en un sistema de archivos, no es necesario que la entidad principal exista realmente). Las entidades que no tienen una entidad principal se denominan entidades raíz. La asociación entre una entidad y su entidad principal es permanente y no puede cambiarse una vez creada la entidad. Cloud Datastore nunca asignará el mismo ID numérico a dos entidades con la misma entidad principal, ni a dos entidades raíz (aquellas que no tienen una entidad principal).

El superior de una entidad, el superior de su superior y así sucesivamente son sus principales. Sus secundarios, los secundarios de sus secundarios y así sucesivamente son sus descendientes. Una entidad raíz y todos sus descendientes pertenecen al mismo grupo de entidades. La secuencia de entidades que comienza con una entidad raíz y sigue de superior a secundario, hasta llegar a determinada entidad, constituye la ruta principal de esa entidad. La clave completa que identifica a una entidad consta de una secuencia de pares de tipo identificador que especifican su ruta principal y finalizan los de la entidad en sí misma:

[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]

Para una entidad raíz, la ruta principal está vacía y la clave consta solo del tipo y del identificador de la entidad:

[Person:GreatGrandpa]

Este concepto se ilustra en el diagrama que figura a continuación:

Grupo de entidades

Para designar el superior de una entidad, utiliza el argumento parent en datastore.NewKey. El valor de este argumento debería ser la clave de la entidad principal. En el siguiente ejemplo, se crea una entidad del tipo Address y se designa una entidad Employee como su superior:

// Create Employee entity
employee := &Employee{ /* ... */ }
employeeKey, err := datastore.Put(ctx, datastore.NewIncompleteKey(ctx, "Employee", nil), employee)

// Use Employee as Address entity's parent
// and save Address entity to datastore
address := &Address{ /* ... */ }
addressKey := datastore.NewIncompleteKey(ctx, "Address", employeeKey)
_, err = datastore.Put(ctx, addressKey, address)
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Go