Eine Anwendung muss Daten aus einer Datenbank so aktuell wie möglich haben. Gibt es in einem solchen Fall eine andere Möglichkeit zum Abrufen der Daten als die zeitgesteuerte Abfrage (Abfrage) der Datenbank?
Ich arbeite mit MS SQL Server 2008 (und .NET-Anwendungen + Entity Framework), möchte aber auch andere Datenbanktypen kennenlernen.
Antworten:
Service Broker für SQL Server 2005+ kann dies tun.
Leider bin ich mir anderer RDBMS nicht sicher
quelle
In Oracle können Sie das integrierte DBMS_ALERT-Paket verwenden , um dies zu vereinfachen.
quelle
Bestimmte Datenbankanbieter bieten auch integrierte Nachrichtenbusse an, die Ihre App einfach abonnieren kann:
Eine Alternative wäre, die Daten in erster Linie über einen Nachrichtenbus wie Tibco / RV in die Datenbank zu leiten und sie einfach "zu verzweigen", im Datenstrom in die Datenbank und in Ihre Anwendung zu übertragen, oder eine Caching-Ebene wie Coherence zu verwenden zwischen Ihrer App und der DB.
quelle
LISTEN / NOTIFY für PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
in der Datenbank ...
oder in einer Funktion / einem Trigger:
im Datenbank-Client:
Der LISTEN-Client erhält die PostgreSQL-Prozess-ID, den Kanalnamen und den Nachrichtenwert.
Der Standard-JDBC-Treiber für PostgreSQL mag keine Benachrichtigungen, Sie können jedoch den https://github.com/impossibl/pgjdbc-ng-Treiber für diesen Zweck verwenden
quelle
Eine weitere Oracle-Lösung: Wir haben Anwendungen unter Verwendung des Dotnet-Frameworks von Microsoft entwickelt, die die Database Change Notification- Funktion von Oracle in Verbindung mit ODP.Net (dem Oracle-Datenanbieter für Dotnet) nutzen. Auf diese Weise benachrichtigt die Datenbank die Dotnet-Anwendung, wenn neue Daten eingegangen sind, sodass wir keine ständigen Abfragen durchführen müssen. Der Link, auf den ich oben verweise, ist ein Oracle-Tutorial, um genau das zu tun. Hoffe das hilft dir weiter.
Kennen Sie keine anderen RDBMS.
quelle
Für eine unserer Anwendungen (auf die über Chrome und NUR Chrome zugegriffen wird) verwenden wir MySQL mit sys_exec UDF . Grundsätzlich, warum Chrome - aufgrund der WebSocket-Unterstützung.
Sobald ein kritisches Update / Insert / Delete auftritt, wird ein externes Programm über die neu hinzugefügte sys_exec-Funktionalität aufgerufen, die in bestimmte Trigger eingebettet ist. Zu diesem Zeitpunkt haben wir alles, was wir brauchen, um die Nachricht an jeden verbundenen Client weiterzuleiten, ohne dass Abfragen oder mehrere Abfragen erforderlich sind, da alles in Echtzeit erfolgt.
quelle
Wir verwenden eine Kombination aus Oracle GoldenGate und der Java Persistence API (JPA), um dies mit Oracle-Datenbanken, aber auch mit DB2, Sybase, Microsoft SQL Server, MySQL, Teradata usw. zu tun. Die Funktion wird hier beschrieben: http: // docs .oracle.com / middleware / 1212 / coherence / COHIG / golden_g.htm
GoldenGate wandelt das Datenbanktransaktionsprotokoll in einen filterbaren Ereignisstrom um, der überall im Netzwerk verwendet werden kann. Wir verwenden es, um relevante Transaktionen entweder in Cache-Aktualisierungen oder in Cache-Ungültigkeiten umzuwandeln. Beide können Ereignisse auf Anwendungsebene auslösen, z.
(Zur vollständigen Offenlegung arbeite ich bei Oracle an einem der Produkte, die GoldenGate verwenden.)
quelle