Gostaria de entender qual a melhor solução com relação a (performance e escalonabilidade) de uma um Sistema Web que ao logar (email e senha) cada cliente possui acesso aos seus dados (Ex: Relatório de Vendas, Estoque, Cadastro de Clientes, Produtos…etc).
Estava verificando um Software de ERP em que o cliente entra com o seu login e senha e consegue visualizar os dados acima mencionados, minha dúvida é para cada cliente é criado uma base de dados ou é uma base de dados e a cada registro é criada uma tabela para cada cliente?
As duas abordagens são possíveis, cabe ver o que é melhor em cada. Geralmente, o que vejo é uma base para cada cliente/empresa, e toda a estrutura (tabelas, etc) é replicada.
Abraço.
Entendi @TerraSkilll, e quanto a performance, imaginemos que está aplicação web receba de 100 a 200 clientes. Cada cliente teria um banco de dados único?
Eu andei pesquisando algumas coisas relacionadas a Multi Latency, não sei bem se enquadraria no que estamos discutindo.
Multitenancy você quer dizer? Se for, a resposta é sim, cada tenant teria seu próprio BD e schema.
Sobre a performance, isso vai depender da arquitetura do banco de dados escolhido, de como vai ser configurado e onde será hospedado. Pesquise sobre multitenancy no cloud e verá muitas opções por aí.
Atualmente trabalho com projeto multitenancy, cada cliente teu seu próprio DNS, host, configurações, BD.
Obrigado @leandronsp , eu andei lendo sobre Multitenancy interessante, mas confesso que ainda possuo algumas dúvidas.
A minha noção de banco de dados (Mysql) estende até criação de banco de dados e as consultas SQL.
Com relação a hospedagem sempre trabalhei com a Locaweb, e confesso que por comodismo meu de não buscar outras e novas soluções.
Para que eu monte um sistema web único que atenda a vários clientes e estes sem ter acesso é claro aos dados dos outros clientes, para qual caminho eu devo seguir? O que eu deveria estudar ou ler, qual tipo de serviço de hospedagem procurar e qual abordagem é a melhor, cada cliente com um banco de dados, um banco de dados único e cada cliente com um schema ou um banco de dados e um schema e dividir os dados dos clientes através de um Identificador (ID)?
Confesso que buscaria pela segurança dos dados, menos oneroso e melhor escalável, já que seria disponibilizado para futuros clientes.
Você pode começar lendo estes artigos:
Multi tenant storage with amazon dynamodb
Multi tenancy and cloud
Mas acima de tudo, não importa onde está hospedado. Oq diferencia é a oferta de produtos que a empresa de cloud vai te oferecer pra facilitar a arquitetura. Você pode perguntar pra Locaweb como proceder numa arquitetura assim, etc e tal.
Eu atualmente trabalho com Amazon EC2 e meu banco de dados é NoSQL, nunca trabalhei com multi tenant em base relacional como o MySQL, mas acredito que você pode fazer teste local (prova de conceito) simulando dois potenciais clientes, dado que teus clientes vão utilizar o mesmo schema:
- sobe duas instâncias do web server, cada uma com um nome específico, como se fosse cada cliente
- cria dois banco de dados diferentes no MySQL, sendo que o nome de cada um tem que ser exatamente o mesmo nome da instância do web server
- dentro da aplicação, você precisa conectar no banco correto a partir do nome da instância
Tenta seguir estes passos, talvez deve funcionar no teu caso, e se funcionar, é questão de replicar isso no cloud de forma mais adequada. Entretanto, caso você no futuro precise que cada cliente tenha schema de dados diferente, é muito provável que terá que partir pra uma solução NoSQL, como por exemplo MongoDB.