sql >> Databasteknik >  >> RDS >> Sqlserver

SqlDependency Tillförlitlighet?

1) Ja, jag anser att det är tillförlitligt eftersom det gör det korrekt som syftet var utformat för att göra (cache-ogiltigförklaring)

2) Nej. Det är därför du bara kan prenumerera genom att skicka en förfrågan, detta säkerställer att det inte finns någon kapplöpning mellan hämtning av data och nya uppdateringar som meddelas

3) Databas (eller instans) omstart signalerar alla väntande frågemeddelanden med en SqlNotificationInfo värdet för Restart . Läs hur SqlDependency och baseras på Query Notification för en bättre förståelse. Som SqlDependency håller en öppen anslutning till databasen hela tiden, en otillgänglighet i databasen kommer att upptäckas av SqlDependency även innan någon explicit frågemeddelande

4) Nej. Mer om detta längre ner...

5) Det finns ingen "missad data". Frågemeddelande (och därmed SqlDependency) meddelar dig aldrig om vad data ändras. Det meddelar dig bara att det har ändrats . Du ska alltid gå tillbaka och läsa alla uppgifterna tillbaka för att se vad som hade förändrats (och jag hänvisar dig tillbaka till fråga/svar nr 2). En nystartad applikation hade ännu inte frågat efter uppgifterna till att börja med, så det finns ingen förändring att meddelas om. Först efter den har först frågat efter data kan den få ett meddelande.

Från beskrivningen av ditt problem är jag inte övertygad om att du behöver aviseringar om frågor. Det verkar som om du vill agera på alla förändringar, oavsett när det hände, även om din applikation inte kördes . Detta är verkligen inte cache-ogiltigförklaring, det är förändringsspårning. Därför måste du implementera en ändringsspårningsteknik, som Ändra datafångst eller Ändringsspårning , som båda är endast SQL Server 2008 och senare (inte tillgängliga i SQL Server 2005). Med SQL Server 2005 är det inte ovanligt att distribuera en trigger och köa ett meddelande för Servicemäklare för att hantera samma problem som du försöker hantera (upptäcka ändringar, reagera på varje rad med ny data).



  1. Konvertera Oracle CLOB-data till sträng i c#

  2. Finns det någon sql-fråga för att kontrollera att värdet finns eller inte finns i db-tabellen

  3. Stort databashanteringssystem:Design och arkitekt

  4. Hur grupperar man efter månad och returnerar noll om inget värde för en viss månad?