Multiusuario

Puedes admitir multiusuarios en tu aplicación si proporcionas particiones de datos independientes a organizaciones de varios clientes, conocidas como usuarios. Esto te permite personalizar los valores de datos de cada instancia, al tiempo que mantienes el mismo esquema de datos para todas las instancias. Esto permite que el aprovisionamiento de nuevas instancias sea más eficiente, ya que no es necesario que cambies la estructura de datos cuando agregas una instancia.

Beneficios del multiusuario

Firestore en modo Datastore permite que una aplicación multiusuario use entornos independientes de datos para cada usuario, a la vez que usa los siguientes elementos:

  • un solo proyecto
  • una única estructura lógica para las categorías;
  • un solo conjunto de definiciones de índice, ya que las categorías son las mismas lógicamente para cada usuario

El modo Datastore proporciona espacios de nombres a fin de permitir el uso de multiusuarios.

Datos de multiusuario y de partición

El modo Datastore usa particiones para almacenar los datos de cada instancia de manera aislada. La combinación del ID de un proyecto y un ID de espacios de nombres forma un ID de partición, que identifica cada partición. Una entidad pertenece a una partición única y el alcance de las consultas es de una sola partición.

Especifica un espacio de nombres para una entidad

Puedes especificar el espacio de nombres cuando creas la entidad: después de crear una entidad, no puedes cambiar el espacio de nombres. Si no especificas de manera explícita un espacio de nombres para una entidad, se asigna automáticamente al espacio de nombres predeterminado, que no tiene un identificador de string.

Usa espacios de nombres con entidades principales

Una entidad y todos sus principales pertenecen a un único espacio de nombres. Esto significa que cuando creas una entidad con otra entidad designada como principal, la entidad secundaria se encuentra en el mismo espacio de nombres que su principal: no puedes especificar otro espacio de nombres.

Caso práctico de muestra

Un beneficio clave del multiusuario es que la misma aplicación se entregue a varias organizaciones de clientes. A fin de lograr este beneficio, para una categoría determinada, tu aplicación debe comportarse del mismo modo sin importar cuál sea el espacio de nombres. Por ejemplo, desde la perspectiva de la aplicación, una entidad de categoría Task en un espacio de nombres, por lógica, debe ser lo mismo que una entidad de categoría Task en todos los otros espacios de nombres. Tu aplicación podría usar un solo conjunto de definiciones de índice para admitir consultas Task, sin importar qué espacios de nombres contienen las entidades Task.

Por ejemplo, considera una aplicación de listas de tareas que almacene los datos de manera aislada por cada uno de los usuarios. La aplicación podría definir los espacios de nombres según el nombre de usuario, lo que genera las siguientes particiones:

Partition ID: project:"my_project_id"/namespace:"Joe"
Partition ID: project:"my_project_id"/namespace:"Alice"
Partition ID: project:"my_project_id"/namespace:"Charlie"

La aplicación puede definir una estructura lógica de una categoría Task de la siguiente manera, para usar en todos los espacios de nombres:

kind: Task
properties:
 - "done", Boolean
 - "created", DateTime
 - "description", String, excluded from index

Cuando un usuario crea una entidad de categoría Task, la entidad se almacena en la partición propia del usuario, lo que genera el almacenamiento de datos aislados. La aplicación procesa las entidades Task de manera coherente en los espacios de nombres porque se usa solo un esquema para la categoría Task. Una aplicación con datos almacenados aislados y de comportamiento coherente sería multiusuario.

Si la estructura lógica de una categoría Task difiere en el espacio de nombres, la aplicación no sería multiusuario, ya que procesa las entidades Task de forma diferente entre los espacios de nombres. Por ejemplo, considera las categorías Task que tienen un esquema diferente según el espacio de nombres:

  • Las entidades Task en el espacio de nombres Joe excluyen la propiedad description del índice.
  • Las entidades Task en el espacio de nombres Alice incluyen la propiedad description del índice.

La aplicación puede consultar la propiedad description en las entidades Task de Alice, pero no puede consultar la propiedad description en las entidades Task de Joe, por lo que la aplicación no sería multiusuario.

Ve los espacios de nombres en la consola

Para ver estadísticas de los espacios de nombres usados en tu proyecto, visita la página del panel de Datastore en Google Cloud Console. Si deseas determinar de manera programática qué espacios de nombres se usan en tu proyecto, visita Consultas de espacios de nombres.

Si necesitas agrupar los datos dentro de una instancia, puedes clasificar tus datos por categorías y, también, puedes organizar los datos altamente relacionados con grupos de entidades.

¿Qué sigue?