2010-03-15 5 views
3

J'écris un système de workflow qui est entièrement piloté à chaque étape par une interaction humaine explicite. C'est-à-dire qu'une tâche est assignée à une personne, cette personne sélectionne parmi quelques options limitées {approuver, rejeter, transférer}, puis elle est envoyée à la personne suivante ou terminée. Juste curieux si Oracle Streams/AQ a quelque chose à offrir sur les tables plates gérées par le code de l'application web régulière. La quantité de traitement après chaque action est assez limitée et le volume n'est pas très élevé, il n'y a donc pas vraiment besoin de ralentir les choses en les jetant dans une file d'attente. Quels sont certains des avantages de l'introduction d'une structure de file d'attente, ou est-ce trop pour ma situation?Oracle AQ/Streams de toute utilisation dans ma situation?

+0

C'est la première fois que j'ai voté pour deux réponses opposées (David Sykes + Adam Musch). Les deux ont de bons points à mon humble avis. À la fin de la journée, c'est une décision de conception que vous devrez appeler. –

+0

Oui, je n'ai pas travaillé avec Streams AQ autant que 9i/10g ère AQ. Il a certainement fallu s'engager dans une méthodologie de développement, et étant donné la clause SKIP LOCKED dans 11g, une implémentation de AQ complète pour un système SOA non distribué est probablement exagérée. –

Répondre

3

Il existe de nombreuses raisons pour lesquelles un système de files d'attente est bénéfique, mais je ne suis pas sûr qu'elles s'appliquent à votre situation. Il semble que vous ayez un seul système stocké dans une seule base de données. En tant que tel, je ne pense pas que la file d'attente fournirait un avantage par rapport aux tables normales.

situations où AQ offre les avantages suivants: - comme mécanisme pour différents systèmes (bases de données multiples) de parler à l'autre

  • lorsque vous avez lâchement systèmes couplés - un producteur de messages envoyer à un nombre inconnu des abonnés

Comme un moyen de gérer l'état dans un seul système, tel que vous décrivez, je pense que Streams/AQ serait exagéré.

4

Le gros avantage de la mise en file d'attente réside dans le fait qu'elle permet de résoudre des problèmes de simultanéité qui sont vraiment très difficiles (afficher un et un seul thread pour cet enregistrement). Sans mise en file d'attente, vous pourriez essayer, mais pas assurer, ce genre de comportement, et vous devriez finir par faire beaucoup de mise à jour de l'état intermédiaire et vérifier les threads qui ont échoué. Dans les versions 10g et suivantes, Oracle a implémenté l'opération de mise en file d'attente transactionnelle avec la syntaxe SKIP LOCKED pour laquelle les utilisateurs finaux n'étaient pas autorisés. En 11g, cette syntaxe a été exposée pour permettre aux gens de résoudre ce problème (montrez-moi l'enregistrement suivant) sans avoir besoin des implémentations AQ .

Un avantage secondaire de AQ est que le nettoyage de la file d'attente est asynchrone. Le gros inconvénient d'AQ est sa taille et sa maintenance - on crée de l'ordre de 7 tables/IOTs pour une seule file d'attente/sujet, et on ne peut pas maintenir directement ces objets de base de données, mais vous avez effectuer la maintenance via les packages DBMS_AQ et DBMS_AQADM.

0

Si votre application a vraiment un volume aussi faible et si l'on admet que quelques minutes de latence sont acceptables, j'éviterais les deux et j'utiliserais les triggers old school pour remplir mes propres tables de journalisation. Je traiterais alors ces derniers avec des travaux de pl. Tout pour éviter les fonctionnalités supplémentaires/complexités apportées par AQ.

Questions connexes