数据库内的分片队列制造技术

技术编号:13002011 阅读:53 留言:0更新日期:2016-03-10 14:05
提供了用于支持JMS会话排序的数据库内分片队列的方法和装置。来自多个入队器的消息被存储到特定队列的多个分片。针对每个入队器,所有消息只存储在多个分片的一个分片中。每个分片包括一个或多个子分片,每个子分片具有由关系数据库系统维护的队列表的一个或多个分区。来自第一入队器的所有消息被存储在被分配给多个分片的第一分片的队列表的分区中。来自第二入队器的所有消息被存储在被分配给多个分片的第二分片的队列表的分区中。使得特定队列的订户将来自多个分片的消息出队。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】数据库内的分片队列对相关申请的交叉引用;权益要求本申请要求在2013年6月12日提交的、名称为“An In-Database ShardedQueue That Supports JMS Session Ordering”的临时申请 61/834,246 的权益,根据 35U.S.C. § 119(e),此申请的全部内容以引用的方式被并入,如同在本文中被完全阐述。
本专利技术涉及队列,并且更具体地涉及在数据库系统中实施的分片队列。
技术介绍
在许多应用中,有必要让在计算机系统上执行的一个进程(计算机程序、模块或线程)与在相同的或其它的计算机系统上执行的一个或多个其它进程进行通信。用来执行这些通信的机制随系统而变化。在各种系统中促进进程到进程的通信的一种机制是“消息队列”。如图1所示,为了使用常规的消息队列,进程(“入队会话”)通过将消息放在消息队列100中来向其它进程(“出队会话”)发送信息。通过从消息队列100读取消息,出队会话从入队会话中获得信息。当需要从消息队列100中读取给定消息的全部出队会话已经读取所述给定消息时,此消息从消息队列100中移除。消息队列的实施方式在美国专利No. 7,181,482、美国专利No. 7,185,033、美国专利 No. 7,185,034、美国专利 No. 7,203,706、美国专利 No. 7,779,418、美国专利No. 7,818,386、美国专利No. 7,680,793、美国专利No. 6,058,389和美国专利No. 8,397,244中描述,所有这些专利的内容通过引用的方式被并入本申请。遗憾的是,消息队列的常规的实施方式扩展得不好。具体地,当出队会话的数量增加时,对队列头部的“热”消息的争用增加,从而降低性能。另外,当入队会话和出队会话跨若干个系统散布时,在系统之间的互连的通信量可以变得过多。在本节中描述的方法是可以寻求的方法,但不一定是先前已经构想或寻求的方法。因此,除非另外指示,不应当仅仅由于在本节中描述的任何方法被包含在本节中就假定它们可以作为现有技术。【附图说明】在附图中:图1是常规消息队列的框图;图2是根据实施例的分片队列的框图;图3是示出根据实施例、可以如何通过使用分区的队列表来实施分片队列的框图;图4是示出根据实施例的消息高速缓存的框图;图5是根据实施例的出队日志表的框图;图6是示出根据实施例的在入队操作期间被执行的步骤的流程图;图7是示出根据实施例、使用出队指针以跟踪订户的出队进展的框图;图8示出了可以在其上实施一个或多个实施例的计算机系统。【具体实施方式】在以下描述中,为了解释的目的,阐述了大量特定细节,以便提供对本专利技术的深入理解。但显而易见的是,在没有这些特定细节的情况下也可以实行本专利技术。在其它实例中,众所周知的结构和设备以框图形式被示出,以避免不必要地使本专利技术难以理解。总体概述本文描述用于使用“分片队列”在进程之间通信传送消息的技术。类似于常规的排队系统,入队会话向分片队列添加消息,并且出队会话消费来自分片队列的消息。但是,单个分片队列由多个分片实施,并且通过将消息放在实施特定队列的分片中的任何一个,消息可以被放在所述特定队列中。在一个实施例中,为了减少入队会话当中的争用,每个入队会话被分配给分片中的仅仅一个分片。因此,入队会话当中的争用被限制到被分配给相同分片的那些入队会话,而不是被限制到向队列发布消息的所有入队会话。消费来自特定分片队列的消息的订户必须将消息从那个特定分片队列的所有分片出队。针对具有单个数据库实例的环境,订户可以具有将消息从所有分片出队的单个出队会话。针对多个数据库实例共享相同的持久储存器的环境,订户可以具有多个出队会话,其中每个出队会话仅仅从与包含出队会话的实例有相关性的分片出队。出队会话使用出队日志跟踪它们的出队操作的进展。在一个实施例中,分片队列和出队日志均通过使用分区表而被实施。具体地,使用队列表中的一个或多个分区来实施每个分片,并且每个订户具有针对队列表的每个分区的出队日志表的分区。消息消息是要经由队列通信传送的数据。在一个实施例中,消息包括一组元数据和有效负载。每个消息由对应的消息标识符唯一地识别。消息的有效负载是消息中的数据。在一个实施例中,在消息句柄中每个有效负载具有存储在有效负载外面的关联的元数据。有效负载可以具有不同的大小。如下面将更详细解释的那样,有效负载的大小可以是确定有效负载被行内(in-line)存储、行外(out-of-line)存储还是被存储在数据库表中(未被高速缓存)的因素,并且可用的存储器可以确定消息究竟是否被高速缓存。分片队列图2是根据实施例的分片队列200的框图。参考图2,分片队列200由多个分片202、204和206组成。虽然在所示出的实施例中,分片队列200具有三个分片,但是被用于实施分片队列的分片的实际数量可以随实施方式而变化。例如,在一个实施例中,分片队列的分片的数量可以由管理员指定。在替代实施例中,上界和下界可以被指定,并且系统可以动态地改变针对入队可用的分片的数量。在所示出的实施例中,属于队列200的分片维护彼此分离,并且可以由不同的数据库服务器管理。在图2所示的示例中,分片202、204和206分别由数据库服务器的不同实例1、2和3维护。虽然所示出的实施例示出在每个数据库服务器实例中的一个分片,但是对于任何数据库服务实例可以具有的、在给定的分片队列中的分片的数量没有限制。分片202、204和206存储针对相同分片队列200的不同的消息集合。在图2所示的实施例中,在分片队列200中的分片202存储由在实例I中执行的入队会话入队的消息。类似地,在分片队列200中的分片202存储由在实例2中执行的入队会话入队的消息,而在分片队列200中的分片206存储由在实例3中执行的入队会话入队的消息。队列表根据一个实施例,使用分区队列表300实施分片队列200,如图3所示。参考图3,队列表300被分为六个分区302、304、306、308、310和312。队列表300的分区中的两个分区当前被分配给队列200的每个分片。具体地,分区302和304被分配给分片202,分区306和308被分配给分片204,而分区310和312被分配给分片206。虽然为了说明的目的,分片队列200的每个分片具有队列表300的两个分区,但是每个分片所使用的分区的数量可以基于各种因素而变,所述因素包括入队器将消息入队到每个分片的速度,以及出队器将消息从每个分片出队的速度。因此,任何给定分片中分区的数量可以随时间而变化,当入队器针对新消息用完存储器时,新分区被添加,并且当出队器完成分区中所有消息的出队时,分区被丢弃。在所示出的实施例中,每个分区具有队列表300的五行。但是,在典型的实施方式中,每个分区中的行的数量可以变化。例如,一些分区可以具有数万行。因为队列200是使用分区表而实施的,因此将持久消息入队涉及将行插入队列表300的分区中。例如,在实例I中执行的入队会话会通过将与消息对应的行插入与分片202关联的分区,诸如队列表300的分区302或分区304,将消息入队到队列表300。在一个实施例中,分片202被配置为维护当前插入点,使得消息基于分片202的当前插入本文档来自技高网...

【技术保护点】
一种方法,包括:将来自多个入队器的消息存储到特定队列的多个分片;其中,针对所述多个入队器的每个入队器,来自此入队器的所有消息只存储到所述分片中的一个分片;其中所述多个分片的每个分片包括一个或多个子分片;其中每个子分片包括由关系数据库系统维护的队列表的一行或多行;其中所述多个入队器包括第一入队器和第二入队器;其中存储来自所述多个入队器的消息包括:将来自所述第一入队器的所有消息存储到被分配给所述多个分片中的第一分片的队列表的行;以及将来自所述第二入队器的所有消息存储到被分配给所述多个分片中的第二分片的队列表的行;使所述特定队列的订户将来自所述多个分片的消息出队;其中所述方法是由一个或多个计算设备执行的。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:S·博塞D·辛格N·布哈特S·贾纳德哈南G·加尔格奇亮奭A·萨克斯埃纳A·多宁
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1