oracle - Oracle AQ/Streams 对我的情况有用吗?

标签 oracle queue oracle-aq oracle-streams

我正在编写一个工作流系统,该系统的每一步都完全由明确的人机交互驱动。也就是说,一项任务被分配给一个人,该人从几个有限的选项中进行选择{批准、拒绝、转发},然后将其发送给下一个人或终止。

只是好奇 Oracle Streams/AQ 是否可以提供与由常规 Web 应用程序代码管理的平面表相比的任何功能。每个 Action 之后的处理量相当有限,而且处理量也不是特别高,因此实际上没有必要通过将它们放入队列来限制它们。引入队列结构有哪些好处,或者它对我的情况来说是否过大?

最佳答案

排队的一大优势是它可以使原本非常困难的并发问题变得非常容易(显示一个且只有一个线程处理该记录)。如果不排队,您可以尝试但不能确保这种行为,并且您最终必须进行大量中间状态更新并检查失败的线程。

在 10g 及以下版本中,Oracle 使用终端用户不允许的 SKIP LOCKED 语法实现事务性出队操作。在 11g 中,该语法已被公开,允许人们在不需要 AQ 的情况下解决该问题(显示下一条记录) 实现。

AQ 的第二个优势是队列清理是异步的。

AQ 的最大缺点是它的大小和维护——一个人最终会为一个持久队列/主题创建大约 7 个表/IOT,并且不能直接维护这些数据库对象,但你必须通过 DBMS_AQ 和 DBMS_AQADM 包进行维护。

关于oracle - Oracle AQ/Streams 对我的情况有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450563/

相关文章:

Oracle:存储过程的可变数量的参数

.net - ORACLE SDO_GEOMETRY ToString()?

java - JMS Push Consumer 从 Oracle AQ 获取消息时出现延迟

java - JMS 112 使用 spring ds 的连接无效

mysql - 前面带有 'NOT'的SQL完整性约束

java - 如何自定义 BlockingQueue 的阻塞行为

c++ - 队列的排序 vector

queue - SGE : Jobs stuck in qw state

java - 如何在 Oracle AQ 中停止在未经确认的情况下删除消息?

sql - 我应该添加主键列作为 Oracle RDBMS 中索引的最后一列吗?