Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Confiabilidade SqlDependency?


1) Sim, considero confiável, pois faz corretamente a finalidade a que se destina (invalidação de cache)

2) Não. É por isso que você só pode se inscrever emitindo uma consulta, isso garante que não haja corrida entre a busca dos dados e a notificação de novas atualizações

3) A reinicialização do banco de dados (ou instância) sinaliza todas as notificações de consulta pendentes com um SqlNotificationInfo valor de Restart . Leia como SqlDependency e é baseado na notificação de consulta para um melhor entendimento. Como SqlDependency mantém uma conexão aberta com o banco de dados o tempo todo, uma indisponibilidade do banco de dados será detectada pelo SqlDependency mesmo antes de qualquer notificação de consulta explícita

4) Não. Mais sobre isso mais abaixo...

5) Não há 'dados perdidos'. Notificação de consulta (e, portanto, SqlDependency) nunca notifica você sobre o que dados alterados. Ele apenas notifica que mudou . Você sempre deve voltar e ler todos os dados de volta para ver o que mudou (e eu encaminhei você de volta para a pergunta/resposta nº 2). Um aplicativo recém-iniciado ainda não consultou os dados para começar, portanto, não há nenhuma alteração a ser notificada. Somente depois ele primeiro consultou os dados pode receber uma notificação.

Pela descrição do seu problema, não estou convencido de que você precise de notificações de consulta. Parece-me que você deseja agir em qualquer alteração, não importa quando ela aconteceu, mesmo que seu aplicativo não estivesse em execução . Isso certamente não é invalidação de cache, é rastreamento de alterações. Portanto, você precisa implantar uma tecnologia de rastreamento de alterações, como Alterar captura de dados ou Acompanhamento de alterações , ambos são apenas SQL Server 2008 e posterior (não disponível no SQL Server 2005). Com o SQL Server 2005 não é incomum implantar um gatilho e enfileirar uma mensagem para Service Broker para lidar com o mesmo problema que você está tentando lidar (detectar alterações, reagir a cada linha de novos dados).