É um banco de dados multilocatário:
- Um servidor de banco de dados que possui um banco de dados / esquema (idêntico) diferente para cada cliente / inquilino ?; ou
- Um servidor de banco de dados que possui um banco de dados / esquema em que clientes / inquilinos compartilham registros dentro das mesmas tabelas?
Por exemplo, na Opção # 1 acima, eu posso ter um servidor MySQL em, digamos mydb01.example.com
, e ele pode ter um customer1
banco de dados dentro dele. Esse customer1
banco de dados pode ter, digamos, 10 tabelas que alimentam meu aplicativo para esse cliente em particular (cliente nº 1). Também pode ter um customer2
banco de dados com exatamente as mesmas 10 tabelas, mas contendo apenas os dados do Cliente 2. Pode ter um customer3
banco de dados, um customer4
banco de dados e assim por diante.
Na Opção nº 2 acima, haveria apenas um único banco de dados / esquema, digamos myapp_db
, novamente com 10 tabelas (as mesmas que acima). Mas aqui, os dados de todos os clientes existem nessas 10 tabelas e, portanto, "compartilham" as tabelas. E na camada do aplicativo, controle lógico e de segurança a que os clientes têm acesso a quais registros nessas 10 tabelas, e é tomado muito cuidado para garantir que o Cliente nº 1 nunca efetue login no aplicativo e veja os dados do Cliente nº 3, etc.
Qual desses paradigmas constitui um banco de dados "multilocatário" tradicional? E se não, alguém pode me fornecer um exemplo (usando os cenários descritos acima) do que é um banco de dados de vários inquilinos?
fonte
Respostas:
Ambos os conceitos são chamados de multilocação, pois é apenas um conceito lógico "no qual uma única instância de software é executada em um servidor e atende a vários inquilinos" (da Wikipedia ). Mas como você implementa esse conceito "fisicamente" é com você.
Obviamente, o aplicativo precisa de um conceito de banco de dados que permita separar os dados de diferentes inquilinos, e a idéia da multilocação é compartilhar alguns recursos do servidor (pelo menos o hardware) para melhor utilização dos recursos e administração mais fácil. Portanto, um "banco de dados multi-inquilino" é aquele que suporta isso diretamente , onde partes do modelo ou tabelas do banco de dados são compartilhadas.
Para ser preciso, é possível criar um aplicativo multilocatário com um banco de dados não multilocatário, fornecendo uma instância de banco de dados individual por cliente. No entanto, isso impede o compartilhamento de quaisquer recursos de banco de dados diretamente entre os inquilinos, e a camada de aplicativo deve garantir a conexão do inquilino certo ao banco de dados correto.
fonte
Segundo a Microsoft, o termo tem três significados em potencial (um banco de dados para todos os inquilinos ou um banco de dados por inquilino).
Para usar seu exemplo, cada cliente seria seu próprio inquilino.
Um banco de dados por inquilino (cliente)
Um banco de dados compartilhado, esquema separado.
Um banco de dados compartilhado, esquema compartilhado.
Há prós e contras para cada um, bem explicados neste artigo: https://msdn.microsoft.com/en-us/library/aa479086.aspx
Bônus: você pode pensar nisso como um alojamento (simplificado).
Todo inquilino tem sua própria casa. Eles podem fazer o que quiserem e, se queimar, realmente não afeta ninguém.
Cada inquilino está no mesmo prédio, mas tem apartamento próprio.
Todo mundo mora no mesmo apartamento, e todas as coisas são marcadas com um lembrete para mostrar quem é o dono.
fonte