Domanda

Una domanda deve disporre di dati come più di recente aggiornato da un database il più possibile. In tal caso, c'è qualche altro modo per ottenere i dati, oltre che di un temporizzatore basato richiesta (polling) il database?

Io lavoro con un 2008 (e .NET le applicazioni + Entity Framework) MS SQL Server, ma mi piacerebbe ottenere sapere su altri tipi di database pure.

È stato utile?

Soluzione

Service Broker per SQL Server 2005 + può fare questo.

Siamo spiacenti, non sono sicuro di altri RDBMS

Altri suggerimenti

In Oracle è possibile utilizzare il costruito nel DBMS_ALERT per facilitare questo.

DBMS_ALERT supporta asincrono notifica degli eventi del database (avvisi). Con l'utilizzo appropriato di questo pacchetti e database trigger, un applicazione può notificare stessa ogniqualvolta I valori di interesse nel database sono cambiato.

Supponiamo che un tool grafico è la visualizzazione di un grafico di alcuni dati da un tabella del database. La lattina strumento grafico, dopo aver letto e rappresentare graficamente i dati, aspettare un avviso di database (WaitOne) che copre i dati appena letto. Lo strumento si sveglia automaticamente quando i dati viene modificato da qualsiasi utente. Tutto quello è richiesto è che sia un trigger posto sulla tabella di database, che esegue un segnale (SIGNAL) ogniqualvolta il grilletto è stato sparato.

Alcuni database di fornitori anche fornire autobus messaggi integrati che la vostra applicazione può semplicemente iscriversi a:

Un'alternativa sarebbe quella di passare i dati nel database, in primo luogo tramite un bus messaggio come Tibco / RV e semplicemente "ramo" di esso, il flusso di andare in DB e quello che va alla vostra applicazione, o utilizzare uno strato di caching come Coherence tra la vostra applicazione e DB.

LISTEN / NOTIFY per PostgreSQL

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

nel database ...

NOTIFY static_channel_name, 'static-message';

o in una funzione / innesco:

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

nel client di database:

LISTEN some_channel_name; --note the lack of quotes

Il LISTEN cliente riceverà l'ID del processo di PostgreSQL, il nome del canale, e il valore del messaggio.

Il driver standard JDBC per PostgreSQL non come le notifiche, tuttavia è possibile utilizzare il https: // GitHub .com / impossibl / pgjdbc-ng driver per questo scopo

Un'altra soluzione Oracle: Abbiamo sviluppato applicazioni utilizzando il framework dotnet da Microsoft che sfruttano funzione Database Change Notification di Oracle in combinazione con ODP.Net (il fornitore di dati Oracle per dotnet). Usando questo, il database in realtà notifica all'applicazione dotnet quando i nuovi dati è arrivato consentendo di evitare costante polling. Il link che ho riferimento di cui sopra è un tutorial Oracle per fare proprio questo. Spero che questo ti aiuta.

Non so in merito a tutti gli altri RDBMS.

Per una delle nostre applicazioni (accessibile attraverso Chrome e Chrome SOLO), stiamo usando MySQL con sys_exec UDF . In sostanza, il motivo per cui Chrome -. Grazie al supporto WebSocket

Una volta / inserimento / cancellazione si verifica un aggiornamento critico, un programma esterno viene richiamato attraverso appena aggiunto funzionalità sys_exec incorporato in alcuni trigger. A quel punto, abbiamo tutti abbiamo bisogno di inoltrare il messaggio ad ogni client connesso senza bisogno di polling o query multiple come tutto avviene in tempo reale.

Usiamo una combinazione di Oracle GoldenGate e Java Persistence API (JPA) per fare questo con il database Oracle, ma anche con DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, ecc La funzione è descritto qui: http://docs.oracle.com/middleware/1212/coherence/COHIG/golden_g htm

Che GoldenGate fa è girare il log delle transazioni database in un flusso di eventi filtrabile che può essere consumato in qualsiasi attraverso la rete. L'usiamo per trasformare operazioni rilevanti in entrambi gli aggiornamenti della cache o invalidazione della cache, entrambi i quali possono innescare eventi a livello di applicazione, per esempio spingendo i dati tutta la via d'uscita per desktop o HTML5 websocket applicazioni.

(Per completezza di informazione, io lavoro in Oracle su uno dei prodotti che utilizzano GoldenGate.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top