Pergunta

Eu tenho um aplicativo da web usado em vários continentes. A transação subjacente DB está travando quando grandes relatórios são executados. Eu quero:

  1. Faça um banco de dados SQL Server 2005 para um banco de dados de relatórios
  2. Direcione todos os relatórios para os relatórios DB

Em teoria, isso impedirá o bloqueio de transações para inserções e atualizações. Tudo bem se o DB relatórios for bloqueado temporariamente enquanto as transações continuarem. O DB de relatórios pode receber as novas transações quando estiver sob uma carga mais leve. Qual é a melhor maneira de manter uma cópia quase em tempo real do DB de transação? Devo usar replicação, espelhamento ou uma combinação dos dois? Que diretrizes gerais devo seguir?

Obrigado!

Foi útil?

Solução

Usar Replicação do SQL Server para implementar esse tipo de arquitetura. Por exemplo, replicar dados do seu servidor principal de banco de dados para o servidor de relatórios. Não é tempo real (poucos sistemas), mas podem estar muito próximos.

Existem vários sabores com a replicação do SQL Server e você provavelmente vai querer servidor para servidor. Veja também este artigo sobre data warehousing e relatórios. Ele descreve o cenário exato que você está enfrentando e seus objetivos:

Por design, a replicação transacional aborda os principais requisitos para este cenário:

  • Consistência transacional
  • Baixa latência
  • Alta taxa de transferência
  • Sobrecarga mínima

Outras dicas

Espelhamento = db inteiro, a replicação é um subconjunto usualmente Baseado no que você "publica"

Nesse caso, eu usaria a replicação se precisar quase em tempo real. Eu consideraria refletir se os relatórios pudessem ficar alguns minutos ou os relatórios devem ser "estáticos" por um período de tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top