Bom dia,
Estou com um dúvida sobre banco de dado em SaaS, deixa eu explicar melhor o cenário:
temos aqui na empresa um sistema Desktop especifico para um segmento de mercado temos perto de 1.000 clientes, estamos desenvolvendo um novo sistema porém esse será WEB e poderá ser fornecido em forma de serviço aos clientes. Acreditamos que no mínimo 10% de nossa base de clientes irá comprar o novo sistema como serviço (SaaS). O sistema para cada cliente será Multi-usuário e Multi-Filiais.
Como desenhar um banco de dados apra um sistema desses (será acessado com ORM, provavelmente Hibernate), pensei nas seguintes opções:
Fiz um levantamento prévio de quais seriam os problemas e as vantagens para cada abordagem
- Um banco de dados para cada cliente:
– Vantagens:
— segurança não há risco de misturar os dados entre os clientes caso algum BUG do sistema.
— é mais fácil de efetuar e de voltar backups
— é mais fácil de eu manter por exemplo 5 servidores para os banco de dados e apenas 1 para o servidor de aplicação.
– Desvantagens:
— preciso manter diversas SessionFactorys, ou ainda uma unica SessionFactory mas preciso passar a Connection na hora de criar a session.
— É muito dificil eu fazer um relatório administrativos que agrupe dados de diversos clientes.
— Difícil de atualizar o banco de dados quando mudar a versão do sistema.
- Um unico banco de dados para todos os clientes, porém com um Schema para cada cliente.
– Pra falar a verdade nunca trabalhei com Schemas de banco de dados e não sei bem como funciona isso e se serviria para o SaaS
- Um unico banco de dados com uma coluna CLIENTE em todas as tabelas :
– Vantagens
— Fácil de atualizar
— Economiza recursos
– Desvantagens
— Problemas de segurança, vai que eu esqueço de colocar o cliente no WHERE
— É impossível de voltar um backup por exemplo para um determinado cliente.
Andei lendo sobre o Multi-Tenancy do Hibernate 4 que seria um facilitador para o uso de um único banco de dados, alguém já usou? sabe se é bom?
Alguém aqui fornece sistema SaaS pode me dar umas dicas, ou indicar alguma outra abordagem que pode ser tomada nesse caso?
Muito Obrigado…