Arquitectura multicliente

Puedes admitir la arquitectura multitenant en tu aplicación proporcionando particiones de datos independientes para varias organizaciones de clientes, conocidas como tenants. De esta forma, puede personalizar los valores de datos de cada arrendatario y, al mismo tiempo, mantener el mismo esquema de datos para todos los arrendatarios. De esta forma, el aprovisionamiento de nuevos clientes es más eficiente, ya que no tiene que cambiar la estructura de los datos al añadir un cliente.

Ventajas de la arquitectura multicliente

Firestore en el modo de Datastore permite que una aplicación multiinquilino use silos de datos separados para cada inquilino y, al mismo tiempo, siga usando lo siguiente:

  • un solo proyecto
  • una única estructura lógica para los tipos
  • un único conjunto de definiciones de índice, ya que los tipos son lógicamente los mismos para cada arrendatario

El modo Datastore habilita la arquitectura multicliente proporcionando espacios de nombres.

Arquitectura multiempresa y datos con particiones

El modo Datastore usa particiones para aislar los datos de cada arrendatario. La combinación de un ID de proyecto y un ID de espacio de nombres forma un ID de partición, que identifica cada partición. Una entidad pertenece a una sola partición y las consultas se limitan a una sola partición.

Especificar un espacio de nombres para una entidad

El espacio de nombres se especifica al crear la entidad. Una vez creada, no se puede cambiar. Si no especificas un espacio de nombres para una entidad, se le asignará automáticamente el espacio de nombres predeterminado, que no tiene ningún identificador de cadena.

Usar espacios de nombres con entidades superiores

Una entidad y todos sus antecesores 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 entidad principal. No puedes especificar otro espacio de nombres.

Ejemplo de caso práctico

Una de las principales ventajas de la arquitectura multiinquilino es que la misma aplicación puede dar servicio a varias organizaciones de clientes. Para disfrutar de esta ventaja, tu aplicación debe comportarse de la misma forma para un tipo determinado, independientemente del espacio de nombres. Por ejemplo, desde el punto de vista de la aplicación, una entidad de tipo Task en un espacio de nombres debería ser lógicamente la misma que una entidad de tipo Task en todos los demás espacios de nombres. De esta forma, tu aplicación podría usar un único conjunto de definiciones de índice para admitir consultas Task, independientemente de los espacios de nombres que contengan entidades Task.

Por ejemplo, considera una aplicación de lista de tareas que aísla los datos por usuario. La aplicación podría definir espacios de nombres basados en el nombre de usuario, lo que daría lugar a 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 podría definir una estructura lógica de tipo Task de la siguiente manera para usarla 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 tipo Task, esta se almacena en la partición del usuario, lo que da lugar a datos aislados. La aplicación procesa las entidades Task de forma coherente en todos los espacios de nombres, ya que solo se usa un esquema para el tipo Task. Una aplicación con datos aislados y un comportamiento coherente sería multitenant.

Si la estructura lógica de un tipo Task difiere según el espacio de nombres, la aplicación no sería multitenant porque procesaría las entidades Task de forma diferente en los distintos espacios de nombres. Por ejemplo, considera los Task que tienen un esquema diferente en función del espacio de nombres:

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

La aplicación podría consultar la propiedad description de las entidades Task de Alicia, pero no la propiedad description de las entidades Task de Juan, por lo que la aplicación no sería multitenant.

Ver espacios de nombres en la consola

Para ver las estadísticas de los espacios de nombres utilizados en tu proyecto, visita la página Panel de control de Datastore de la Google Cloud consola. Para determinar mediante programación qué espacios de nombres se usan en tu proyecto, consulta Consultas de espacios de nombres.

Si necesitas agrupar datos en un inquilino, puedes categorizarlos por tipos. También puedes organizar datos muy relacionados con grupos de entidades.

Siguientes pasos