Eu estava trabalhando em um novo projeto que tem o requisito de usar 7 bancos de dados, argumentando que desempenho, estabilidade e otimização são mais facilmente implementados.
Embora eu não concorde, estou tendo problemas para coletar bons argumentos para usar um único banco de dados (dividir as tabelas em domínios lógicos).
Até agora, um argumento que tenho é a integridade dos dados (não posso usar chaves estrangeiras entre bancos de dados).
Quais são os bons prós / contras do uso de um ou mais bancos de dados?
[resumo até agora]
Argumentos contra vários bancos de dados:
Perdendo a integridade dos dados (não é possível usar chaves estrangeiras nos bancos de dados)
Perder a integridade da restauração
Ganhando complexidade (usuários / funções de banco de dados)
Pequenas probabilidades servidor / banco de dados vai cair
Soluções:
Use esquemas para separar domínios.
POC: use dados fictícios para provar o ponto nos planos de execução de 7/1 db
Respostas:
Nenhum desempenho, estabilidade, otimização são verdadeiros. Alguém tem um argumento sólido ou artigo de referência por que isso seria verdade?
Os recursos não são alocados para um banco de dados: a Instância do SQL Server equilibra os recursos para que não faça diferença
Você perdeu:
Você ganha complexidade:
Opções:
fonte
Boas razões para criar bancos de dados separados seria oferecer suporte a diferentes requisitos de disponibilidade ou simplificar a administração. Por exemplo, se seus bancos de dados exigirem agendamentos de backup muito diferentes ou modelos de recuperação diferentes. Outro motivo seria se você quiser executá-los em diferentes instâncias.
Não há otimizações de desempenho disponíveis com vários bancos de dados que você também não pode obter com um banco de dados. Você pode dar mais detalhes sobre o que você quer dizer com "desempenho, estabilidade, otimização"?
fonte
Se você estiver depois de dividir os dados por domínio lógico, sempre poderá usar os esquemas no SQL2008 (afastando-se do padrão dbo.), Mas isso é doloroso e pode causar problemas nas OR / Ms que não esperam esquema padrão.
Estive na posição de coletar dados de mais de um banco de dados e isso é doloroso e está longe de ter alto desempenho. Você acaba armazenando dados em cache ou, pelo menos, usando truques para manter a velocidade.
Como teste, crie 7 bancos de dados fictícios. Crie uma consulta que exija dados simultaneamente de todos os 7, ou pelo menos um bom número deles.
Em seguida, compare os planos de execução! Eu acho que você vai ganhar o seu caso ali.
fonte
Experiência de pensamento: em vez de dividir seu banco de dados em sete partes, divida-o em 7.000. Qual é a probabilidade de uma falha de hardware impactar seu aplicativo? Se houver uma chance de 0,1% de que um servidor em particular morra em um dia específico, suas chances são melhores ou piores de que você será impactado por uma falha de hardware ao aumentar o número de máquinas das quais depende?
Eu acho que é importante dividir a noção de "banco de dados" em duas partes: o esquema e os dados versus o hardware usado para servir os dados.
Quebrar o banco de dados em várias máquinas não é bom pelos vários motivos explicados pelas outras respostas neste tópico.
Se você usar várias máquinas para obter confiabilidade e desempenho aprimorado, talvez seja possível estruturá-las para que você tenha um servidor mestre com várias máquinas de espera quente / quente, que também podem ser usadas para distribuir consultas. Dessa forma, se qualquer máquina apresentar uma falha, você não perderá dados e, na pior das hipóteses, terá que reiniciar uma consulta. Claro, é mais complexo que isso, mas o básico se aplica.
fonte
Concordo com um banco de dados e usando as opções de arquivo e esquema.
Existem casos extremos onde a divisão em várias partes faz sentido.
Configuração do ambiente de aplicativos (dev, test, prod), como servidores FTP, caminhos de arquivos de exportação, etc ..., Coisas que você deseja armazenar por servidor e não ser sobrescrito em uma restauração.
Também como uma maneira de isolar as alterações de procedimentos específicos do cliente.
Mas esses são problemas de suporte e não de desempenho.
fonte