web-dev-qa-db-fra.com

L'interrogation est-elle le seul moyen de mettre à jour les données de l'application à partir d'une base de données?

Une application doit avoir des données plus fraîchement mises à jour d'une base de données que possible. Dans un tel cas, y a-t-il une autre manière pour obtenir les données, en plus d'une minuterie à la demande de la base de données?

Je travaille avec un serveur MS SQL Server 2008 (et des applications .NET + Entity Framework), mais j'aimerais également connaître également d'autres types de bases de données.

17
rem

Courtier de service pour SQL Server 2005+ peut le faire.

Désolé, je ne suis pas sûr d'autres RDBMS

5
gbn

Dans Oracle, vous pouvez utiliser le fichier intégré dbms_alert package pour faciliter cela.

DBMS_ALERT prend en charge la notification asynchrone des événements de base de données (alertes). Par utilisation appropriée de ce package et des déclencheurs de base de données, une application peut vous en informer chaque fois que des valeurs d'intérêt dans la base de données sont modifiées.

Supposons qu'un outil graphique affiche un graphique de certaines données d'une table de base de données. L'outil graphique peut, après avoir lu et graphique les données, attendez une alerte de base de données (serviette) couvrant les données simplement lues. L'outil se réveille automatiquement lorsque les données sont modifiées par un autre utilisateur. Tout ce qui est nécessaire, c'est qu'un déclencheur soit placé sur la table de base de données, qui effectue un signal (signal) chaque fois que la gâchette est tirée.

10
Leigh Riffel

Écouter/Notifier pour PostgreSQL

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

dans la base de données ...

NOTIFY static_channel_name, 'static-message';

ou dans une fonction/déclencheur:

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

dans le client de la base de données:

LISTEN some_channel_name; --note the lack of quotes

Le client d'écoute recevra l'ID de processus PostgreSQL, le nom du canal et la valeur du message.

Le pilote JDBC standard pour PostgreSQL n'aime pas les notifications, mais vous pouvez utiliser le conducteur https://github.com/impOSSIB/pgjdbc-ng à cet effet

8
Neil McGuigan

Certains fournisseurs de base de données fournissent également des bus de messagerie intégrés que votre application peut simplement vous abonner à:

Une alternative serait d'acheminer les données dans la base de données en premier lieu via un bus de message comme TIBCO/RV et simplement "Direction", sur le flux entrant dans la DB et l'une à votre application, Ou utilisez une couche de mise en cache comme cohérence entre votre application et la DB.

7
Gaius

Une autre solution Oracle: Nous avons développé des applications à l'aide du document DotNet à partir de Microsoft qui profite de Notification de changement de base de données Fonction d'Oracle en conjonction avec ODP.NET (fournisseur de données Oracle pour DotNet). En utilisant cela, la base de données notifie réellement l'application DotNet lorsque de nouvelles données sont arrivées, ce qui nous permet d'éviter une interrogation constante. Le lien I référence ci-dessus est un tutoriel Oracle pour faire cela. J'espère que cela vous aidera.

Je ne sais pas à propos de tout autre RDBMS.

5
ScottCher

Pour l'une de nos applications (accès au four Chrome et uniquement chrome), nous utilisons MySQL avec SYS_EXEC UDF . Fondamentalement, pourquoi Chrome - en raison du support WebSocket.

Une fois qu'une mise à jour/insertion/suppression critique se produit, un programme externe est invoqué à la nouvelle fonctionnalité SYS_EXEC nouvellement ajoutée intégrée à certains déclencheurs. À ce stade, nous avons tout ce dont nous avons besoin de relancer le message à chaque client connecté sans avoir besoin de sondage ni de plusieurs requêtes, car tout se passe en temps réel.

2
Furicane

Nous utilisons une combinaison d'oracle goldengate et du Java Persistence API (JPA) pour le faire avec la base de données Oracle, mais également avec DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, etc. est décrit ici: http://docs.oracle.com/middleware/1212/COHERENCE/COHIG/GOLDEN_G.HTM

Ce que Goldengate est transforme le journal des transactions de base de données dans un flux d'événements filtrable pouvant être consommé n'importe où sur le réseau. Nous l'utilisons pour transformer les transactions pertinentes dans des mises à jour de cache ou des invalidations de cache, qui peuvent également déclencher des événements de niveau d'application, par exemple. En appuyant sur les données sur les applications WebSocket Desktop ou HTML5.

(pour la divulgation complète, je travaille à Oracle sur l'un des produits à l'aide de Goldengate.)

1
cpurdy