Multiplas bases de dados

(kmerlotti) #1

Olá pessoal, boa noite!

Estou iniciando um projeto que será multi-empresas e, neste cenário, tenho duas possibilidades: uma única base com um atributo ID_EMPRESA em todas as tabelas ou, o que estou pretendendo: um BD para cada empresa.

Para esta segunda opção eu teria um sistema central (conectado a um BD central) que, ao efetuar o login do usuário, identificaria qual seria o BD que o segundo sistema (multi-empresas) se conectaria e chamaria este segundo sistema já passando os parametros da conexão a ser realizada.

Como é possível fazer este tipo de situação? Seria possível fazer tudo em um único sistema ou realmente tem de ser projetos separados?

Desde já, muito obrigado.
Kelver Merlotti.

(Haroldo) #2

em banco de dados separado vc não vai conseguir consolidar os dados das empresas e relatórios únicos.
e
Mas no caso da segunda opção:
Um banco de dados com os dados das empresas, usuarios e usuariosxempresas, após o login, vc terá que alimentar as váriasveis de sessão que guardam o host name do banco, sugiro que cada banco tenha uma usuário padrão e senha igual a todos.

Outra dificuldade que eu vejo, é na parametrização de cada nova empresa, que terá que criar o banco de dados novo e todas as tabelas.

Vai ter perda de performance assim e usar muito mais processamento doque ter um banco único, e os recursos de memória vão ser cada vez mais altos a cada banco criado e com cursor aberto.

Vai perder o reaproveitamento de cache de i-o, pois cada banco vai criar o seu.

Outra: A manuteneção e melhorias no sistema com ele em produção vai dar muitomais mão de obra.

Eu poderia juntar aqui uma lista enorme negativa ao uso dessa metodologia (segundo formato)

(kmerlotti) #3

Boa noite Harold!

Muito obrigado pela sua atenção e opinião. Já me convenci da inviabilidade. :slight_smile:

Pensei nesta “segunda opção” imaginando o cenário que terei em breve: serão cerca de 100 empresas diferentes, com seus cadastros de clientes, fornecedores, produtos e movimentações financeiras independentes. A preocupação em deixar tudo em uma base é que, no momento em que 1 empresa estiver emitindo relatórios pesados, por exemplo, 99 sentirão a lentidão no sistema, não é mesmo?

Se eu tivesse uma base pra cada empresa, seria possível, por exemplo, distribuir os bancos em servidores de dados diferentes, dando fôlego ao sistema. Você concorda com esta questão?

De qualquer forma, esta precaução com a performance futura vai “encarecer” muito o projeto. Vou arriscar em uma única base mesmo.

Mais uma vez obrigado e até mais!
Kelver Merlotti.

(Haroldo) #4

Nada impede de vc ter o banco em servidores diferentes, existem recursos de replicação, alta disponibilidade compartilhando hardwares diferentes. Se por exemplo perceber gargalo na decima quinta empresa, crie a decima sexta em outro banco em outro servidor, tipo 15 num servidor + 15 em outro, o login centrado num unico lugar e redirecionando conforme a empresa, mas eu faria um sistema multiempresas, não um sistema multibancos.

(kmerlotti) #5

Não entendi muito bem este seu post.

Ao mesmo tempo que falou ser possível escalar o sistema com bases em máquinas diferentes, falou que faria multiempresas.

A idéia de separar 15 bases por servidor (por exemplo) cairia nos mesmos problemas que você mesmo levanto no início, não cairia?

Poderia me dar uma opinião mais clara da possibilidade do escalonamento futuro, considerando que o sistema será desenvolvido com o atributo ID_EMPRESA em todas as tabelas, como comentado na “primeira opção”?

Mais uma vez, muito obrigado pela atenção.
Kelver Merlotti

(Haroldo) #6

No meu ver, eu prefiro multiempresas, e todas num servidor único, se der gargalo investir em hardware e alta disponibilidade. Mas caso você não tenha condições de investir na infra, nada impede de dividir as empresas entre servidores, mesmo assim, eu não colocaria 15 bancos por sevidor (por exemplo), colocaria um banco só com 15 empresas. Um servidor de banco de dados, é muito mais requisitado quando o número de bancos aumenta sob sua responsabilidade, assim como os recursos de memória, e para dar manutenção em 100 bancos de dados, seria melhor dar manutenção em 5 bancos não acha?

(kmerlotti) #7

Agora entendi a sua opinião e concordo plenamente.
Muito obrigado pela atenção.
Um abraço!
Kelver Merlotti.

(Haroldo) #8

Assunto interessante:
Trabalhando com particionamento de tabelas
SQL Magazine edições 75 e 76.