首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle高级队列LIFO

Oracle高级队列LIFO
EN

Database Administration用户
提问于 2011-02-23 22:16:32
回答 3查看 1.4K关注 0票数 6

有了甲骨文的高级排队,是否有一种方法可以按照LIFO (最后先出)顺序排出消息的队列?有由于缺乏信息而发出的暗示表示这不是一个选项,但也许有一种方法可以这样做,比如以不同的顺序排队。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2011-02-23 22:37:56

假设您使用PL/SQL来排除消息的队列(可能还有额外的JMS限制--我对JMS和AQ之间的相互作用知之甚少),您应该能够使用优先级队列来实现LIFO (尽管这有点麻烦)。当您将消息排成队列时,您可以指定一个优先级

优先级属性指定消息的优先级。它可以是任何数字,包括负数。较小的数字表示更高的优先级。

如果您创建了一个从某个非常大的数字中返回的序列,您可以分配一个不断增加的优先级。然后,您的优先级排队列将以LIFO顺序接收消息。

票数 6
EN

Database Administration用户

发布于 2011-09-04 12:07:04

要在Oracle中获取LIFO行为,可以使用PL/SQL对象实现堆栈:

堆栈保存有序的数据项集合。堆叠有顶部和底部。项目只能在顶部添加或删除。因此,添加到堆栈中的最后一项是删除的第一项。(想想自助餐厅里一堆干净的餐盘。)操作推送和弹出更新堆栈,同时保留LIFO (LIFO)行为。堆栈有许多应用程序。例如,在系统编程中使用它们来确定中断的优先级和管理递归。堆栈的最简单实现使用整数数组,数组的一端表示堆栈的顶部。

然后,您需要包装您的enqueue/dequeue函数,这样,它们将不是传递到AQ,而是转到您的堆栈中,而不是AQ表。

票数 2
EN

Database Administration用户

发布于 2017-02-02 04:18:54

Oracle 12c的白皮书显式地使用LIFO队列作为选项,但我在实际的doco中找不到一个很好的参考,说明您将如何做到这一点:

另外,也可以根据队列时间、提交时间或优先级对消息进行排序,以获得FIFO甚至LIFO顺序来消费这些消息“http://www.oracle.com/technetwork/database/oracleadvancedqueuingwp-2524215.pdf

(我能想到的一种选择是,在生产者中拥有一个优先级排序队列,优先级单调地增加:如果允许int64优先级,则会给出相当大的空间.)

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/1415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档