AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 61212
Accepted
NibblyPig
NibblyPig
Asked: 2014-03-20 02:21:52 +0800 CST2014-03-20 02:21:52 +0800 CST 2014-03-20 02:21:52 +0800 CST

Em que ponto um banco de dados por cliente se torna inviável?

  • 772

Para um de nossos sistemas, temos dados confidenciais do cliente e armazenamos os dados de cada cliente em um banco de dados separado. Temos cerca de 10 a 15 clientes para esse sistema.

No entanto, estamos desenvolvendo um novo sistema que terá de 50 a 100 clientes, talvez mais. Estou pensando que pode ser inviável ter um banco de dados por cliente nesta instância (para armazenar registros confidenciais e histórico de auditoria). Porém não sei se isso é perfeitamente normal ou não, ou se existe outra forma de manter a segurança.

Alguma opinião sobre isso?

database-design sql-server-2012
  • 3 3 respostas
  • 7153 Views

3 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-03-20T05:30:44+08:002014-03-20T05:30:44+08:00

    Gerenciar 100 ou 500 bancos de dados não é tão diferente de gerenciar 5 ou 10 - você só precisa adotar a automação e ter um plano de escalabilidade implementado (e não planeja usar recursos de alto custo por banco de dados, como espelhamento em todos clientes).

    Em meu trabalho anterior, usávamos essa arquitetura e eu nunca teria pensado em mesclar dois clientes em um único banco de dados, mesmo que alguns dos desafios possam ser "difíceis".

    Os grandes benefícios são modelos de recuperação independentes ( apodem ser simples, bpodem ser completos, etc.), a capacidade de restaurar em um ponto no tempo (ou remover totalmente) um cliente sem interromper os outros, a capacidade de mover facilmente um cliente com muitos recursos para seu próprio armazenamento ou para um servidor completamente diferente com muito pouca transparência (você atualiza um arquivo de configuração ou tabela que informa ao aplicativo onde encontrar esse cliente).

    Abordo várias das objeções e/ou como abordar os problemas nestes posts:

    • Lidando com o número crescente de inquilinos na arquitetura de banco de dados multilocatário

    • Banco de dados multilocatário usando SQL Server 2008?

    • Automação de backups de grande número de banco de dados

    Dito isso, acho que nenhum de nós pode dizer a você o ponto em que o gerenciamento se torna impraticável para você - apenas saiba que quaisquer que sejam os desafios específicos que você encontrar, você pode perguntar sobre esses problemas individualmente.

    • 51
  2. Remus Rusanu
    2014-03-20T05:07:00+08:002014-03-20T05:07:00+08:00

    Recomendo que você leia Multi-Tenant Data Architecture , um white paper que discute as opções que você tem e os prós e contras. Para resumir, ele oferece três opções:

    • bancos de dados separados
    • esquemas separados
    • esquema compartilhado

    Agora você está no estágio de bancos de dados separados, que oferece a melhor separação (isolamento entre inquilinos), mas é o mais difícil de gerenciar. À medida que você crescer e se tornar centenas de inquilinos, perceberá que a logística de administrar centenas de bancos de dados está longe de ser trivial. Pense em backup-restauração (localização de arquivos de backup, tarefas, agendamentos, etc.). Pense em como você monitorará e gerenciará a alocação de arquivos, o espaço em disco usado e o crescimento do banco de dados em centenas de bancos de dados. Pense em qual será seu cenário de alta disponibilidade/recuperação de desastres em um futuro próximo com 1.000 inquilinos? 1.000 bancos de dados espelhados, 1.000 sessões de envio de log? Pense e se em 6 meses sua equipe de desenvolvimento chegar até você e disser "Eu sei como dar esse recurso incrível ao nosso produto, usaremos replicação transacional!", o que você dirá? "claro, deixe-me configurar 500 editores,"! Não é impossível gerenciar centenas de bancos de dados, mas se você planeja, é melhor aprimorar suas habilidades do PowerShell e parar de usar as ferramentas de gerenciamento de interface do usuário agora mesmo .

    Além disso, você precisa considerar que vários (centenas) bancos de dados têm um impacto mensurável no desempenho e no custo:

    • o espaço em disco físico é usado com menos eficiência (todo banco de dados deve ter algum espaço livre, você terá esse espaço livre multiplicado pelo número de bancos de dados)
    • Não há como criar um disco de log dedicado para tarefas intensivas de gravação, você terá que mover todos esses LDFs para um (ou mais) armazenamento SSD
    • as gravações de log serão menos eficientes em confirmações frequentes, pois se espalham por muitos registros de bloco de log individuais versus agregados em um (você obterá blocos de log subutilizados). Veja O que é um LSN: Log Sequence Number para entender do que estou falando.

    Bancos de dados separados vêm com algumas vantagens devido ao isolamento, sendo a principal vantagem o backup/restauração independente.

    Cenários como o seu são candidatos perfeitos para bancos de dados do SQL Azure . Sem administração de espaço em disco, sem necessidade de fornecer HA/DR, crescer para centenas/milhares de bancos de dados, etc.

    • 17
  3. Kromey
    2014-03-20T16:35:42+08:002014-03-20T16:35:42+08:00

    No meu trabalho anterior, hospedávamos não apenas um banco de dados por cliente - na maioria dos casos, era mais do que isso! Quando saí, havia mais de 4.500 bancos de dados em execução em um cluster MariaDB, quase 7.000 em outro cluster (ironicamente menor) e 4 "shards" (servidores de banco de dados e web completamente separados e independentes, mesmo em um data center totalmente separado), cada um hospedando 200-500 bancos de dados em um único servidor MySQL. E essa empresa ainda está crescendo em um bom ritmo.

    O longo e o curto é que o sucesso dessa empresa prova que tal arquitetura é realmente viável. (Advertência: ao contrário dos ganhos aparentes no isolamento usando bancos de dados separados, todos os dados foram acessados ​​por meio de um trio de aplicativos fortemente acoplados que usaram o mesmo usuário/senha do banco de dados! Suspeito que o desempenho pode ter sofrido um pouco se cada cliente tinha um usuário/senha separado -- mas apenas um pouco.)

    Pelas minhas experiências trabalhando de perto com os administradores de sistema (tecnicamente, eu era um programador da empresa, mas na realidade eu era o melhor DBA que eles tinham e a única pessoa que sabia como configurar um firewall!), relacionados ao desempenho as preocupações se resumiam a acessos simultâneos, complexidade/tempo de consulta, desempenho do índice, etc. - todos os suspeitos de sempre, em outras palavras, e o número de bancos de dados no servidor não desempenhou nenhum papel perceptível, uma conclusão afirmada pelo especialista altamente pago consultores que consultamos regularmente.

    O ponto principal é que você deve concentrar suas preocupações em seu aplicativo, em sua infraestrutura e não no número de bancos de dados que você possui. Todos esses outros fatores serão mais do que suficientes para mantê-lo ocupado resolvendo problemas de desempenho e gargalos.

    • 3

relate perguntas

  • O que é SQL Server "Denali"? O que há de novo?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve