Le vote est la seule façon de mettre à jour les données d'application à partir d'une base de données?
-
16-10-2019 - |
Question
Une application doit disposer de données plus que fraîchement mis à jour à partir d'une base de données que possible. Dans ce cas, est-il un autre moyen pour obtenir les données, en plus d'un chronomètre en fonction de la demande (vote) la base de données?
Je travaille avec un MS SQL Server 2008 (et les applications .NET + Entity Framework), mais je voudrais savoir obtenir d'autres types de bases de données ainsi.
La solution
Service Broker pour 2005+ SQL Server peut le faire.
Désolé, je ne suis pas sûr d'autres SGBDR
Autres conseils
Dans Oracle vous pouvez utiliser le package intégré DBMS_ALERT pour faciliter ce processus.
DBMS_ALERT supporte asynchrone notification des événements de base de données (alertes). Par l'utilisation appropriée de cette déclencheurs du paquet et la base de donnée, un application peut notifier lui-même chaque fois Les valeurs d'intérêt à la base de données sont changé.
Supposons qu'un outil graphique est afficher un graphique de certaines données à partir d'un table de base de données. L'outil graphique peut, après avoir lu les données et de graphiques, attendre une alerte de base de données (WaitOne) couvrant les données de lire. L'outil se réveille automatiquement lorsque les données est modifié par tout autre utilisateur. Tout ça est nécessaire est qu'un déclencheur soit placé sur la table de base de données, effectue un signal (SIGNAL) chaque fois que le déclencheur est tiré.
Base de données Certains fournisseurs offrent également des bus de messages intégrés que votre application peut simplement vous abonner à:
- Oracle Advanced Queuing
- IBM DB2 avec MQseries (maintenant appelé WebSphere MQ)
- Sybase RTMS
Une alternative serait d'acheminer les données dans la base de données en premier lieu par l'intermédiaire d'un bus de message comme Tibco / RV et simplement « branche » il, le flux entrant dans la DB et celui qui va à votre application, ou utiliser une couche de mise en cache comme Coherence entre votre application et la DB.
LISTEN / NOTIFY pour PostgreSQL
http://www.postgresql.org/docs/current/ statique / SQL-notify.html
dans la base de données ...
NOTIFY static_channel_name, 'static-message';
ou dans une fonction / déclenchement:
perform pg_notify('dynamic-channel-name', 'dynamic-message');
dans la base de données client:
LISTEN some_channel_name; --note the lack of quotes
Le LISTEN client recevra l'ID de processus PostgreSQL, nom de la chaîne, et la valeur de message.
Le pilote standard JDBC pour PostgreSQL ne pas comme les notifications, mais vous pouvez utiliser le https: // github .com / impossibl / pgjdbc-ng pilote à cette fin
Une autre solution Oracle: Nous avons développé des applications utilisant le framework dotnet de Microsoft qui tirent avantage de la fonction de base de données d'Oracle Change notification conjointement avec ODP.Net (le fournisseur de données Oracle pour dotnet). Avec cela, la base de données notifie en fait l'application dotnet lorsque de nouvelles données arrivent qui nous a permis d'éviter l'interrogation constante. Le lien que je référence plus haut est un tutoriel Oracle pour faire cela. Espérons que cela vous aide.
Je ne sais pas à propos de tout autre
de SGBDR.Pour une de nos applications (accès creux Chrome et Chrome seulement), nous utilisons MySQL avec sys_exec UDF . Au fond, pourquoi Chrome -. Grâce à l'appui WebSocket
Une fois une mise à jour / insertion / suppression se produit critique, un programme externe est appelé creux fonctionnalité sys_exec nouvellement ajoutée incorporée dans certains déclencheurs. À ce moment-là, nous avons tout ce que nous devons transmettre le message à chaque client connecté sans avoir besoin d'interrogation ou plusieurs requêtes que tout se passe en temps réel.
Nous utilisons une combinaison d'Oracle GoldenGate et l'API JPA (Java Persistence) de le faire avec la base de données Oracle, mais aussi avec DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, etc. La fonction est décrite ici: http://docs.oracle.com/middleware/1212/coherence/COHIG/golden_g .htm
Qu'est-ce que GoldenGate est fait tourner le journal des transactions de base de données dans un flux d'événements filtrables qui peut être consommé partout à travers le réseau. Nous l'utilisons pour transformer les transactions pertinentes en soit mises à jour du cache ou invalidations de cache, les deux qui peuvent déclencher des événements au niveau de l'application, par exemple poussant les données tout le chemin vers le bureau ou HTML5 applications websocket.
(divulgation complète, je travaille au sein d'Oracle sur l'un des produits en utilisant GoldenGate.)