Frage

Eine Anwendung muss Daten so frisch wie möglich aus einer Datenbank aktualisiert haben. Gibt es in einem solchen Fall eine andere Möglichkeit, die Daten zu erhalten, abgesehen von einem Timer -basierten Anfragen (Umfragen) der Datenbank?

Ich arbeite mit einem MS SQL Server 2008 (und .NET Applications + Entity Framework), aber ich möchte auch über andere Arten von Datenbanken wissen.

War es hilfreich?

Lösung

Service Broker Für SQL Server 2005+ kann dies dies tun.

Entschuldigung, ich bin mir nicht sicher, ob andere RDBMs

Andere Tipps

In Oracle können Sie das eingebaute in verwenden DBMS_ALERT -Paket Um dies zu erleichtern.

DBMS_ALERT unterstützt die asynchrone Benachrichtigung von Datenbankereignissen (Warnungen). Durch die angemessene Verwendung dieses Pakets und dieser Datenbankauslöser kann sich eine Anwendung selbst benachrichtigen, wenn Werte, die in der Datenbank interessiert sind, geändert werden.

Angenommen, in einem Grafikwerkzeug wird ein Diagramm einiger Daten aus einer Datenbanktabelle angezeigt. Das Grafik -Tool kann nach dem Lesen und Grafieren der Daten auf einer Datenbankalarm (Waitone) warten, die die gerade gelesenen Daten abdeckt. Das Tool wacht automatisch auf, wenn die Daten von einem anderen Benutzer geändert werden. Alles, was erforderlich ist, ist, dass ein Auslöser in der Datenbanktabelle platziert wird, die ein Signal (Signal) ausführt, wenn der Auslöser abgefeuert wird.

Bestimmte Datenbankanbieter bieten auch integrierte Nachrichtenbusse an, die Ihre App einfach abonnieren kann:

Eine Alternative wäre es, die Daten in erster Linie über einen Nachrichtenbus wie in die Datenbank zu übertragen Tibco/RV und einfach "verzweigen", im Stream in die DB und eines zu Ihrer Anwendung oder verwenden Sie eine Caching -Ebene wie Kohärenz Zwischen Ihrer App und der DB.

Hören / Benachrichtigen für PostgreSQL

http://www.postgresql.org/docs/current/static/sql-notify.html

in der Datenbank ...

NOTIFY static_channel_name, 'static-message';

oder in einer Funktion/einem Trigger:

perform pg_notify('dynamic-channel-name', 'dynamic-message');

im Datenbankclient:

LISTEN some_channel_name; --note the lack of quotes

Der Listen -Client erhält die PostgreSQL -Prozess -ID, den Kanalnamen und den Nachrichtenwert.

Der Standard -JDBC -Treiber für PostgreSQL mag keine Benachrichtigungen, aber Sie können die verwenden https://github.com/impossibl/pgjdbc-ng Fahrer zu diesem Zweck

Eine andere Oracle -Lösung: Wir haben Anwendungen mithilfe des DOTNET -Frameworks von Microsoft entwickelt, das den Vorteil nutzt Datenbankänderungsbenachrichtigung Funktion von Oracle in Verbindung mit ODP.NET (dem Oracle -Datenanbieter für DOTNET). Mit diesem Fall benachrichtigt die Datenbank die DOTNET -Anwendung tatsächlich, wenn neue Daten eingetroffen sind, sodass wir konstante Umfragen vermeiden können. Der Link, den ich oben referenziert, ist ein Oracle -Tutorial für genau das. Hoffe das hilft dir aus.

Ich weiß nichts über andere RDBMs.

Für eine unserer Anwendungen (abgerufen von Chrom und nur Chrom) verwenden wir MySQL mit sys_exec udf. Grundsätzlich warum Chrome - aufgrund von Support von Websocket.

Sobald ein kritisches Update / Einfügen / Löschen auftritt, wird ein externes Programm durch neu hinzugefügte SYS_EXEC -Funktionalität aufgerufen, die in bestimmte Auslöser eingebettet ist. Zu diesem Zeitpunkt haben wir alles, was wir brauchen, um die Nachricht an jeden angeschlossenen Kunden weiterzugeben, ohne dass es für Umfragen oder mehrere Abfragen erforderlich ist, da alles in Echtzeit passiert.

Wir verwenden eine Kombination aus Oracle Goldengate und der Java Persistence API (JPA), um dies mit Oracle -Datenbank zu tun, aber auch mit DB2, Sybase, Microsoft SQL Server, MySQL, Teradata usw. Die hier beschriebene Funktion wird beschrieben: http://docs.oracle.com/middleware/1212/coherence/cohig/golden_g.htm

Was Goldengate tut, ist, das Datenbank -Transaktionsprotokoll in einen filterbaren Ereignisstrom zu verwandeln, der überall im Netzwerk konsumiert werden kann. Wir verwenden es, um relevante Transaktionen entweder in Cache-Updates oder in Cache-Ungültigmachungen umzuwandeln, die beide Ereignisse auf Anwendungsebene auslösen können, z. B. die Daten bis hin zu Desktop- oder HTML5-WebSocket-Anwendungen.

(Zur vollständigen Offenlegung arbeite ich bei Oracle an einem der Produkte mit Goldengate.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top