Multi-Tenancy em Java. Qual a melhor abordagem?

1 resposta
A

Saudações companheiros! Preciso da opinião de vocês neste assunto, pois, está gerando muita polêmica por aqui.

Existe alguma informação espalhada pela web sobre o assunto, mas, gostaria de focar o assunto aqui em Java, para saber qual seria a melhor abordagem.

Generalizando, podemos dizer que existem 3 formas de implementar um SaaS.

Forma 1: Usar um só conjunto de tabelas no banco de dados sendo que todas possuem um campo “id_tenant” usado para separar as informações dos clientes. Essa forma é muito prática pois torna a manutenção do sistema muito fácil por existir apenas uma instância e um banco de dados, porém, deixa o sistema nas mãos da integridade referencial do banco de dados, cabendo a ela separar os dados dos usuários.

Forma 2: Bancos de dados tipo o Oracle e o PostgreSql permitem criar Sets de tabelas (Schemas), ou seja, cada tenant teria um conjunto de tabelas próprio, isolando seus dados. A vantagem é que não precisaria depender da integridade referencial para isolar os usuários, porém, tornaria a manutenção mais trabalhosa, pois a cada modificação no banco de dados, todos os Schemas teriam que ser alterados

Forma 3: Criar um banco de dados para cada tenant. Fornece isolamento total, mas, em questões de infra-estrutura nos hosts torna menos rentavel, além é claro, de trazer o mesmo problema da forma 2.

Gostaria da opinião dos companheiros em relação a essas abordagens no que diz respeito a um sistema desenvolvido JPA(EclipseLink, Hibernate, TopLink, o que preferirem…).

Qual destas formas o Java receberia mais amigavelmente?

1 Resposta

R

Amigo, estou trabalhando com a arquitetura 2, de múltiplos schemas.
Meu único problema está sendo com o Hibernate, a versão 3 não possui suporte para multi tenant, a versão 4 possui, mas não consegui implementar para utilizar múltiplos schemas, sem utilizar o connectionprovider.
Gostaria que tivesse somente uma conexão, e o hibernate simplesmente tratasse o schema na hora de montar as querys, tipo cliente.tabela trocar para cliente2.tabela. Não consegui implementar isto nele.
Você tomou qual rumo?

Criado 3 de março de 2011
Ultima resposta 9 de nov. de 2011
Respostas 1
Participantes 2