Ich möchte, dass meine Datenbank (SQL) Aktualisierungen an die Clientanwendung sendet oder benachrichtigt
War ich die Entwicklung dieser Anwendung auf VB.net 2010
und SQL 2008
.
Ich wollte, dass die Kunden benachrichtigt werden, für updates auf die db, und die Anwendung verwendet, um überprüfen Sie die db nach änderungen in den angegebenen minute mit dem timer, das ist wirklich nicht effizient. Ich lese über query notification
, sqldependency
, service broker
, aber dann habe ich etwas gelesen, die sagten, Sie könnten nicht effizient sein, wenn ich 100 Kunden und ich bin mit query-Benachrichtigungen push-Benachrichtigungen für meine Anwendung.
Würde jemand helfen, was ich tun sollte, und wie ich es tun kann (wäre wirklich hilfreich, wenn Beispiele vorhanden sind). Vielen Dank im Voraus!
InformationsquelleAutor der Frage mike.dev | 2013-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abfrage-Benachrichtigung drücken, um einen Service Broker-Dienst, der nicht direkt an die Anwendung. Sehen Die Mysteriöse Meldung zu verstehen, wie es funktioniert. Ihre Anwendung wartet auf Benachrichtigungen, indem wir eine
WAITFOR(RECEIVE)
Anweisung auf die Datenbank. Was bedeutet, dass jeder der 100 Kunden ist, belegt eine SQL Server-Arbeitsthread (die begrenzt sind, sehenmax worker threads
option). Ich habe gesehen, dass dieses arbeiten in der Produktion mit +1000 clients (nach stoßen sich die option max worker threads), aber ich würde Ihnen raten gegen.Meine Empfehlung wäre, haben eine service-überwachung für die änderung, die Verwendung von SqlDependency/QueryNotifications. Dieser service würde dann push-Benachrichtigungen, mit WCF-zum Beispiel, um alle Ihre Laufenden Anwendungen. Sie würden abonnieren generische änderungen (
the table Foo was changed
), nicht zu spezifisch (the row x in table Foo was inserted
).Als Allgemeine Regel SqlDependency/Query-Benachrichtigungen können Sie nur darüber informieren, dass die Daten geändert hat, aber es nicht schieben Sie den neue Daten. Der Antrag muss die Aktualisierung seiner lokalen Datensätze durch ausführen der Abfragen wieder, einmal benachrichtigt.
InformationsquelleAutor der Antwort Remus Rusanu
Vorsichtig mit SqlDependency Klasse - es hat die Probleme mit Speicherverlusten. Hovewer, Sie können ein open-source-Realisierung der SqlDependency-Klasse - SqlDependencyEx. Es verwendet eine Datenbank-trigger und einheitlichen Service Broker-notification zu erhalten Ereignisse über der Tabelle geändert werden. Dies ist ein Beispiel zur Verwendung:
Mit SqlDependecyEx Sie sind in der Lage zu überwachen, AKTUALISIEREN Sie einfach, vermeiden, LÖSCHEN und EINFÜGEN. Hoffe, das hilft.
InformationsquelleAutor der Antwort dyatchenko