Criei este aplicativo da web (php e mysql) que armazena informações para várias organizações (atualmente cerca de 20 clientes).
O cenário atual armazena informações relacionadas ao cliente em bancos de dados individuais, para que haja 20 bancos de dados do cliente e 1 banco de dados mestre.
Uma das principais vantagens aqui é que, à medida que cada banco de dados do cliente é isolado, a numeração dos artefatos do cliente (relatórios, auditorias) etc. é sequenciada; dando aos nossos clientes uma sensação de segurança.
Cada banco de dados possui aproximadamente 15 tabelas, e o maior número de linhas em uma tabela é de cerca de 2000. Espera-se que ele atinja 5.000 registros, no máximo.
Gerenciar uma única alteração no nível de banco de dados significa alterar 20 bancos de dados, mas no raro evento em que preciso fazer essa alteração, uso um script que faz isso em uma única chamada de função.
Estamos em um acordo de hospedagem compartilhada, e nosso ISP nos fornece um número limitado. de bancos de dados; e foi isso que me levou a pensar em termos de centralização do banco de dados; para que TODOS os dados do cliente possam ser armazenados no banco de dados mestre.
Obviamente, algumas questões importantes que surgem são:
uma. Mantendo a sequência do artefato (isso pode ser solucionado através da criação de uma chave de referência adicional) b. Velocidade e desempenho (nesse caso, posso criar índices para acelerar as coisas) c. Segurança: isso será gerenciado a cada consulta que buscar informações do cliente. também acompanhará o client_id
No futuro, poderemos considerar a comparação de conjuntos de dados de uma organização com outra, mas acredito que isso também pode ser alcançado em um banco de dados centralizado. Estou um pouco inclinado (por razões de desempenho e capacidade de manutenção) a mudar para um banco de dados centralizado.
Você acha que mudar para um banco de dados centralizado faz mais sentido do que permanecer como estamos (em bancos de dados individuais)?
Obrigada pelo Conselho.
Respostas:
Existem riscos e recompensas herdados para ambos os sistemas. Eu trabalhei para uma empresa financeira que suportava aproximadamente 40 clientes (bancos nacionais) em um banco de dados. Em seguida, adquirimos outra empresa que vendia software semelhante e possuía 1 banco de dados por cliente. Finalmente, a empresa faliu e tivemos que exportar todos os dados do usuário. Aqui está o que as pessoas com quem trabalhei e encontrei:
Profissionais do banco de dados único:
Con's do banco de dados único:
Profissionais de vários bancos de dados:
Contras de vários bancos de dados:
No final, minha recomendação de ter visto e feito as duas coisas é ter "disciplina"! Eu acho que a escolha multi-db é um pouco melhor porque protege você, mas você nunca pode permitir que os clientes façam uma escolha que faça com que você adicione funcionalidade apenas a eles ou você estará se colocando no caminho do fracasso.
fonte
Eu teria um banco de dados separado para clientes separados. Um cliente pode exigir isso por motivos de segurança - ou seja, apenas o site tem acesso aos dados. Isso também significa que, se um cliente deseja mover seus dados, será muito mais fácil gerenciar.
Isso também significa que, se houver um problema com o banco de dados de um cliente, ele não afetará todos os outros.
Se você deseja comparar dados entre clientes, faça isso separadamente.
Se você estiver ficando sem bancos de dados, talvez esteja pensando em mudar de provedor de hospedagem.
fonte
A única razão pela qual eu não teria um banco de dados individual para cada cliente é se você terá 100s ou 1000s de clientes / bancos de dados. Isso pode ser muito complicado de gerenciar, incluindo fazer alterações no banco de dados ou fazer algo em todos os bancos de dados. As ações que ocorrem em um grande número de bancos de dados múltiplos também podem ser lentas, pois você precisa abrir (e, portanto, fechar) muitas tabelas.
Mas, além desse caso, acho que vários bancos de dados são melhores.
Uma vantagem, que pode não ser importante, mas pode ser útil, é que cada cliente obtém seus próprios IDs seqüenciais (em vez de possivelmente pular um monte porque outro (s) cliente (s) adicionou registros).
Além disso, vários bancos de dados permitem que as sub-tabelas (como o tipo de telefone) sejam facilmente personalizáveis por cliente, sem a necessidade de um ID de registro pai nessas tabelas.
fonte
Primeiro o sequenciamento de artefato. Presumo que você esteja usando chaves primárias inteiras para fornecer isso. Realmente, você deve ter uma coluna "número de artefato" separada. PK deve ser PK e nada mais. As pessoas falam sobre "chaves naturais" e coisas do gênero, e eu me encolho. Sempre que você confia no PK para ser mais do que um identificador, ele volta a mordê-lo. Se você deseja saber a sequência de algo, armazene uma data ou um número de sequência.
Eu acho que no seu caso, o gerenciamento de configuração o levaria a um único banco de dados. Veja quanto custa a tempo de manter e atualizar bancos de dados. Quais custos estão associados a cada versão do software? Pense também no custo quando você recebe um novo cliente e precisa criar um banco de dados e configurar o aplicativo para ele. Qualquer coisa pode ser automatizada, a questão é: valerá a pena quando você tiver 100 bancos de dados?
No futuro, é mais fácil dimensionar (particionamento, hardware, sharding etc.) um único banco de dados do que fazer o mesmo para 100 bancos de dados.
Eu acho que os outros pôsteres fizeram alguns pontos excelentes, então eu não os reparei.
fonte
Para adicionar aos prós / contras listados até agora:
Profissionais de vários bancos de dados:
Problemas de bloqueio são evitados; temos bancos de dados em que os clientes podem acionar alterações de DDL em algumas das tabelas. Para tabelas maiores (registros> 2m), isso bloqueia a tabela por um período considerável de tempo. As únicas pessoas em desvantagem são seus próprios usuários, portanto isso é aceitável.
Flexibilidade - alguns clientes têm desejos específicos em relação aos dados que desejam armazenar; o banco de dados múltiplo nos permitiu a flexibilidade de alterar seu banco de dados especificamente, sem ter que desorganizar o modelo de dados para os outros clientes.
Contras:
Boa sorte na escolha!
fonte
Sei que você já escolheu uma resposta, mas parece que há outra solução que não foi sugerida:
Mova tudo para um banco de dados, mas crie tabelas para cada cliente, usando um prefixo, como este:
É o melhor dos dois mundos.
fonte