Question

J'écris un système de workflow qui est entraîné entièrement à chaque étape par l'interaction humaine explicite. Autrement dit, une tâche est assignée à une personne, cette personne choisit de quelques options limitées {approuvez, rejetez avant}, puis il est soit envoyé en même temps à la personne suivante ou fin.

Juste curieux de savoir si Oracle Streams / AQ a quelque chose à offrir sur les tables plates gérées par le code d'application Web régulière. La quantité de traitement après chaque action est assez limitée et le volume est pas très élevé, donc il n'y a pas vraiment besoin de choses en les étrangler jetant dans une file d'attente. Quels sont quelques-uns des avantages de l'introduction d'une structure de file d'attente, ou est-ce trop pour ma situation?

Était-ce utile?

La solution

Il y a beaucoup de raisons pour lesquelles un système de mise en attente est bénéfique, mais je ne suis pas sûr qu'ils appliquent dans votre situation. Il semble que vous avez un seul système tous stockés dans une seule base de données. En tant que tel, je ne pense pas faire la queue fournirait un avantage sur les tables normales.

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

  • lorsque vous avez des systèmes à couplage lâche - un producteur de l'envoi de messages à un nombre inconnu d'abonnés

En tant que moyen de gérer l'état dans un seul système, tel que vous décrivez, je pense que Streams / AQ seraient trop puissantes.

Autres conseils

Le grand avantage de faire la queue est-il peut faire des questions de concurrence qui sont par ailleurs très dur (montrer un et un seul fil ce record pour le traitement) vraiment facile. Sans faire la queue, vous pouvez essayer, mais pas d'assurer, ce genre de comportement, et vous auriez à finir par faire beaucoup de mise à jour de l'état intermédiaire et la vérification des fils défectueux.

10g et au-dessous, Oracle a mis en œuvre l'opération de dequeue transactionnelle avec la syntaxe SKIP LOCKED que les utilisateurs finaux ne sont pas autorisés. En 11g, cette syntaxe a été exposée pour permettre aux gens de résoudre ce problème (me montrer l'enregistrement suivant) sans qu'il soit nécessaire AQ mises en œuvre.

Un avantage secondaire de AQ est que le nettoyage de la file d'attente est asynchrone.

Le grand inconvénient de AQ est sa taille et l'entretien - on finit par créer de l'ordre de 7 tables / IOT pour une seule file d'attente / sujet persistant, et on ne peut pas maintenir directement les objets de base de données, mais vous devez faire l'entretien par les paquets DBMS_AQ et DBMS_AQADM.

Si votre application est vraiment faible volume et en supposant quelques minutes de latence est acceptable, il faut éviter à la fois et d'utiliser la vieille école déclenche pour remplir mes propres tables de journalisation. Je puis traiter ces emplois avec pl. Tout pour éviter les fonctionnalités supplémentaires / complexité AQ apporte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top