Es una base de datos multiinquilino:
- ¿Un servidor de base de datos que tiene una base de datos / esquema (idéntico) diferente para cada cliente / inquilino ?; o
- ¿Un servidor de base de datos que tiene una base de datos / esquema donde los clientes / inquilinos comparten registros dentro de las mismas tablas?
Por ejemplo, en la Opción # 1 anterior, podría tener un servidor MySQL en, digamos mydb01.example.com
, y podría tener una customer1
base de datos dentro de él. Esta customer1
base de datos puede tener, por ejemplo, 10 tablas que potencian mi aplicación para ese cliente en particular (Cliente # 1). También podría tener una customer2
base de datos con exactamente las mismas 10 tablas, pero que solo contenga datos para el Cliente # 2. Puede tener una customer3
base de datos, una customer4
base de datos, etc.
En la Opción # 2 anterior, solo habría una única base de datos / esquema, digamos myapp_db
, nuevamente con 10 tablas (las mismas que las anteriores). Pero aquí, los datos de todos los clientes existen dentro de esas 10 tablas y, por lo tanto, "comparten" las tablas. Y en la capa de aplicación, la lógica y el control de seguridad a los que los clientes tienen acceso a qué registros en esas 10 tablas, y se tiene mucho cuidado para garantizar que el Cliente # 1 nunca inicie sesión en la aplicación y vea los datos del Cliente # 3, etc.
¿Cuál de estos paradigmas constituye un DB tradicional "multiinquilino"? Y si ninguno de los dos, ¿alguien puede darme un ejemplo (usando los escenarios descritos anteriormente) de lo que es un DB multiinquilino?
Respuestas:
Ambos conceptos se llaman multicliente, ya que es solo un concepto lógico "en el que una sola instancia de software se ejecuta en un servidor y sirve a múltiples inquilinos" (de Wikipedia ). Pero cómo implementar este concepto "físicamente" depende de usted.
Por supuesto, la aplicación necesita un concepto de base de datos que permita separar los datos de diferentes inquilinos, y la idea de la tenencia múltiple es compartir algunos recursos del servidor (al menos el hardware) para una mejor utilización de los recursos y una administración más fácil. Por lo tanto, una "base de datos de múltiples inquilinos" es la que admite esto directamente , donde se comparten partes del modelo o tablas db.
Para ser precisos, es posible construir una aplicación multiinquilino con una base de datos no multiinquilino, proporcionando una instancia de base de datos individual por cliente. Sin embargo, esto impide compartir los recursos de la base de datos directamente entre los inquilinos, y la capa de aplicación debe asegurarse de conectar el inquilino correcto a la base de datos correcta.
fuente
Según Microsoft, el término tiene 3 significados potenciales (una base de datos para todos los inquilinos o una base de datos por inquilino).
Para usar su ejemplo, cada cliente sería su propio inquilino.
Una base de datos por inquilino (cliente)
Una base de datos compartida, esquema separado.
Una base de datos compartida, esquema compartido.
Hay pros y contras para cada uno, bien explicados en este artículo: https://msdn.microsoft.com/en-us/library/aa479086.aspx
Bonificación: puedes considerarlo como una vivienda (muy simplificada).
Cada inquilino tiene su propia casa. Pueden hacer lo que quieran, y si se quema, realmente no afecta a nadie más.
Cada inquilino está en el mismo edificio, pero tiene su propio apartamento.
Todos viven en el mismo departamento, y todas las cosas están marcadas con una nota adhesiva para mostrar quién es el propietario.
fuente