Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SqlDependency-Zuverlässigkeit?

1) Ja, ich halte es für zuverlässig, da es den Zweck erfüllt, für den es entwickelt wurde (Cache-Invalidierung)

2) Nein. Aus diesem Grund können Sie sich nur über eine Abfrage anmelden, dies stellt sicher, dass es keinen Wettlauf zwischen dem Abrufen der Daten und der Benachrichtigung über neue Updates gibt

3) Der Neustart der Datenbank (oder Instanz) signalisiert alle ausstehenden Abfragebenachrichtigungen mit einem SqlNotificationInfo Wert von Restart . Lesen Sie, wie SqlDependency und auf Query Notification basiert zum besseren Verständnis. Als SqlDependency eine ständige Verbindung zur Datenbank aufrechterhält, wird eine Nichtverfügbarkeit der Datenbank von SqlDependency erkannt sogar vor einer expliziten Abfragebenachrichtigung

4) Nein. Mehr dazu weiter unten...

5) Es gibt keine „verpassten Daten“. Abfragebenachrichtigungen (und damit SqlDependency) benachrichtigen Sie niemals über was Daten geändert. Es benachrichtigt Sie nur, dass es sich geändert hat . Sie sollten immer zurückgehen und alles lesen die Daten zurück, um zu sehen, was sich geändert hat (und ich verweise zurück auf Frage/Antwort Nr. 2). Eine neu gestartete Anwendung hatte die Daten zunächst noch nicht abgefragt, es ist also keine Änderung zu melden. Nur nach es die Daten zuerst abgefragt hat, kann es eine Benachrichtigung erhalten.

Aus der Beschreibung Ihres Problems bin ich nicht überzeugt, dass Sie Abfragebenachrichtigungen benötigen. Es scheint mir, dass Sie auf jede Änderung reagieren möchten, egal wann sie aufgetreten ist, auch wenn Ihre Anwendung nicht ausgeführt wurde . Dies ist sicherlich keine Cache-Invalidierung, sondern Änderungsverfolgung. Daher müssen Sie eine Änderungsnachverfolgungstechnologie wie Datenerfassung ändern oder Änderungsverfolgung , die beide nur SQL Server 2008 und höher sind (in SQL Server 2005 nicht verfügbar). Bei SQL Server 2005 ist es nicht ungewöhnlich, einen Trigger bereitzustellen und eine Nachricht für Service Broker um das gleiche Problem zu behandeln, das Sie zu behandeln versuchen (Erkennen von Änderungen, Reagieren auf jede Zeile neuer Daten).