Une application doit disposer de données aussi fraîchement mises à jour à partir d'une base de données que possible. Dans un tel cas, existe-t-il un autre moyen d'obtenir les données, en plus d'un temporisateur demandant (interrogeant) la base de données?
Je travaille avec MS SQL Server 2008 (et les applications .NET + Entity Framework), mais j'aimerais également connaître d'autres types de bases de données.
Réponses:
Service Broker pour SQL Server 2005+ peut le faire.
Désolé, je ne suis pas sûr des autres SGBDR
la source
Dans Oracle, vous pouvez utiliser le package DBMS_ALERT intégré pour faciliter cela.
la source
Certains fournisseurs de bases de données proposent également des bus de messages intégrés auxquels votre application peut simplement s'abonner:
Une alternative consisterait à acheminer les données dans la base de données en premier lieu via un bus de messages comme Tibco / RV et simplement à le "brancher", en flux entrant dans la base de données et à destination de votre application, ou en utilisant une couche de mise en cache comme la cohérence entre votre application et la base de données.
la source
ÉCOUTEZ / NOTIFIEZ pour PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
dans la base de données ...
ou dans une fonction / déclencheur:
dans le client de base de données:
Le client LISTEN 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 pilote https://github.com/impossibl/pgjdbc-ng à cet effet
la source
Autre solution Oracle: nous avons développé des applications utilisant le framework dotnet de Microsoft qui tirent parti de la fonction de notification de modification de base de données d'Oracle en collaboration avec ODP.Net (le fournisseur de données Oracle pour dotnet). En utilisant cela, la base de données avertit réellement l'application dotnet lorsque de nouvelles données sont arrivées, ce qui nous permet d'éviter une interrogation constante. Le lien que je référence ci-dessus est un tutoriel Oracle pour faire exactement cela. J'espère que cela vous aidera.
Je ne connais aucun autre SGBDR.
la source
Pour l'une de nos applications (accessible via Chrome et UNIQUEMENT Chrome), nous utilisons MySQL avec sys_exec UDF . Fondamentalement, pourquoi Chrome - en raison de la prise en charge de WebSocket.
Une fois qu'une mise à jour / insertion / suppression critique se produit, un programme externe est appelé via la fonctionnalité sys_exec nouvellement ajoutée intégrée dans certains déclencheurs. À ce stade, nous avons tout ce dont nous avons besoin pour relayer le message à chaque client connecté sans avoir besoin d'interrogation ou de requêtes multiples, car tout se passe en temps réel.
la source
Nous utilisons une combinaison d'Oracle GoldenGate et de l'API Java Persistence (JPA) pour ce faire avec la base de données Oracle, mais aussi avec DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, etc. La fonctionnalité est décrite ici: http: // docs .oracle.com / middleware / 1212 / cohérence / COHIG / golden_g.htm
GoldenGate transforme le journal des transactions de la base de données en un flux d'événements filtrable qui peut être utilisé n'importe où sur le réseau. Nous l'utilisons pour transformer les transactions pertinentes en mises à jour de cache ou en invalidations de cache, qui peuvent toutes deux déclencher des événements au niveau de l'application, par exemple en poussant les données jusqu'à des applications de bureau ou HTML5 Websocket.
(Pour une divulgation complète, je travaille chez Oracle sur l'un des produits utilisant GoldenGate.)
la source