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?
Répondre
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é.
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.
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.
- 1. Utilisation d'objets dans toute l'application
- 2. Utilisation d'index dans Oracle
- 3. HSQLDB mange toute ma mémoire
- 4. Comment utiliser/configurer Unity Container IOC dans ma situation
- 5. Utilisation d'Unicode dans Oracle & php
- 6. Force Index utilisation dans Oracle
- 7. Utilisation d'une file d'attente dans une situation multithread en C#
- 8. Utilisation de collections Oracle dans Dynamic SQL
- 9. Les types NULL sont-ils parfaits pour ma situation?
- 10. @property, ok dans cette situation?
- 11. jqModal essaie d'exécuter toute ma page!
- 12. Oracle SQL utilisation Coalesce
- 13. tiny_mce affecte toute la zone de texte de ma page
- 14. situation intéressante dans C++
- 15. comprendre une situation avec plusieurs index qui se chevauchent dans Oracle
- 16. Utilisation de LINQ to SQL avec Oracle
- 17. Une bonne façon de définir le schéma xsd dans ma situation
- 18. L'application de messagerie Android par défaut ne peut pas être appelée dans ma situation, comment résoudre?
- 19. Rails situation simple routage
- 20. Utilisation de Pragma dans le corps de package Oracle
- 21. Utilisation de T-SQL avec Oracle DB
- 22. Utilisation bundler à l'intérieur de ma gemme
- 23. Tricky inclure situation dans C
- 24. L'utilisation de "goto" est-elle acceptable dans cette situation?
- 25. Est-ce que Retrofitting Entity Framework dans mon application est adapté à ma situation?
- 26. comment pointer vers ma bonne adresse dans cette situation ?! J'ai besoin d'aide
- 27. situation fuite de mémoire dans iphone
- 28. Utilisation des plages de dates dans PHP/Oracle
- 29. Utilisation de points-virgules dans les instructions SQL Oracle
- 30. Utilisation de Ref Cursor dans Oracle SQL Developer
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. –
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. –