Prós / Contras de usar vários bancos de dados x usar um único banco de dados


14

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


Esta é uma área complexa e existem prós e contras - dê uma olhada aqui e links dentro.
Vérace 30/07/19

Respostas:


16

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:

  • integridade de dados
  • restaurar a integridade (os dados no DB7 serão posteriores ao DB1)

Você ganha complexidade:

  • segurança (usuários, funções, etc.) deve estar em todos os bancos de dados
  • você terá alguns dados que não se encaixam perfeitamente em um banco de dados

Opções:

  • dividir um banco de dados em discos separados pode ser feito com grupos de arquivos
  • use esquemas para separar logicamente os dados (com base em outra resposta)

6

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"?


O cliente ainda não explicou os detalhes sobre 'desempenho, estabilidade e otimização'. Também estou curioso para esta resposta. Estará falando com ele ainda esta semana.

5

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.


Minha idéia é (de fato) usar esquemas para domínios lógicos. Também estará usando modelos de dados da entidade. Como alternativa vou tentar do db 8 manequim :)

4

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.


2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.