Puedes admitir multiusuarios en tu aplicación si les proporcionas particiones de datos por separado para organizaciones de varios clientes, conocidas como instancias. 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 propiedaddescription
del índice. - Las entidades
Task
en el espacio de nombres Alice incluyen la propiedaddescription
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 las estadísticas de los espacios de nombres usados en tu proyecto, visita Panel de Datastore en la consola de Google Cloud. 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.