CN105404592B - 管理消息队列 - Google Patents
管理消息队列 Download PDFInfo
- Publication number
- CN105404592B CN105404592B CN201510686148.XA CN201510686148A CN105404592B CN 105404592 B CN105404592 B CN 105404592B CN 201510686148 A CN201510686148 A CN 201510686148A CN 105404592 B CN105404592 B CN 105404592B
- Authority
- CN
- China
- Prior art keywords
- queue
- data
- written
- space
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5016—Session
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/508—Monitor
Abstract
一种方法、相应系统及软件,其被描述为用于向多个队列写入数据,所述数据的每一部分被写入到相应的一个队列。该方法包括,无需同时锁定多于一个队列,确定每一队列中是否有空间可用以写入所述数据的相应部分,如果有,则预留所述队列的所述空间。该方法包括将所述数据的每一部分写入到相应的一个队列。
Description
本申请是申请日为2006年6月22日、申请号为200680023379.1、发明名称为“管理消息队列”的申请的分案申请,其全部内容通过参考援引于此。
背景技术
本发明涉及管理消息队列。
消息队列可用于提供适合于访问实体(例如服务器、操作系统、软件模块等)的异步通信协议,以进行消息交换。存放于消息队列中的消息以队列数据结构的方式存储,直到接收者(例如消息队列的订阅者(subscriber))取回(retrieve)它们。
消息队列系统可以提供“持久性”以确保在系统发生故障的情况下消息不会丢失(或能够恢复任何丢失的消息)。实现持久性的一种方法是:例如在接收到一定数量的输入消息或数据字节后,利用非易失性存储器来同步在易失性存储器中存储的消息。
发明内容
在总体方案中,本发明的特征在于提供一种用于将数据写入到多个队列的方法、相应的软件和系统,其中数据的每一部分被写到相应的一个队列。该方法包括,无需同时锁定多于一个队列,确定每一队列中是否有空间可用以写入数据的相应部分,如果有,则预留(reserve)队列中的这些空间。该方法包括将数据的每一部分写入到相应的一个队列。
该方案包括如下一个或多个特征。
将数据的每一部分写入到相应的一个队列发生在预留队列中所有空间之后。
该方法还包括在相应队列中写入一部分数据之后,释放为在该队列中写入将该部分数据而预留的空间。
确定每一队列中是否有空间可用,以及如果有则预留所述空间的步骤包括,对于多个队列中的每一个:锁定该队列;确定该队列中的空间是否可用;如果可用则预留该空间;以及解锁该队列。
被写入到相应的一个队列的所述数据的每一部分包括记录。
该方法还包括在将所述记录写入到任何队列之前写入日志记录。
该方法还包括在写入日志记录之前将每一队列同步至非易失性存储器。
该方法还包括,在将除了所述记录之一之外的数据写入到第一队列之前,如果该第一队列中已预留了空间,则锁定该第一队列,同时确定在将其它数据写入到该第一队列之前,对于所述其它数据该第一队列中的额外空间是否可用。
该方法还包括,在将除了所述记录之一之外的数据写入到第一队列之前,如果该第一队列中还没有预留空间,则将所述数据写入到该第一队列而不需要锁定该第一队列。
确定每一队列中是否有空间可用以写入所述数据的相应部分的步骤包括:确保每一队列中有足够空间可用于写入关于该队列的任何未完成事务的提交记录。
该方法还包括在确定至少一个队列中没有预留足够的空间来写入关于该队列的任何未完成事务的提交记录之后,中止向所述多个队列中的每一个写入相应的提交记录。
预留队列中的空间的步骤包括递增每一队列的相应计数。
在另一总体方案中,本发明的特征在于一种方法及相应的软件和系统,包括:在第一数据结构中存储队列的多个消息,该第一数据结构与用于该队列的第二数据结构分开;提交与所述消息有关的事务;以及从相邻存储位置(contiguous memory location)读取至少一些所述消息。
该方案包括如下一个或多个特征。
该方法还包括在该第二数据结构中存储指向该第一数据结构的指针。
从相邻存储位置读取至少一些所述消息的步骤包括从该第一数据结构中读取至少一些所述消息。
提交事务的步骤包括将所述消息从该第一数据结构移至该第二数据结构。
从相邻存储位置读取至少一些所述消息的步骤包括从该第二数据结构中读取至少一些所述消息。
该第一数据结构被存储在易失性存储器中,以及该第二数据结构被存储在非易失性存储器中。
该方法还包括将所述消息从该第一数据结构移至第三数据结构;以及在该第二数据结构中存储指向该第三数据结构的指针。
从相邻存储位置读取至少一些所述消息的步骤包括从该第三数据结构中读取至少一些所述消息。
本发明的方案具有如下一个或多个优点。
复合提交操作保证成功地将记录写入到多个队列中的每一个,而无需同时锁定多于一个队列,从而提高了计算资源的利用。将大型写事务中的消息写入到分开的数据结构避免了在读取其它消息时不得不浏览该大型写事务的记录。在将写事务中的消息添加到队列之前,将它们写入到分开的数据结构或写缓冲器中,这降低了许多其它消息与该写事务中的所述消息的交叉存取,从而提高了输入/输出(I/O)效率。
从下面的描述和权利要求书中,本发明的其它特征和优点将变得清楚。
附图说明
图1A为排队系统的示意图。
图1B为队列数据结构的示意图。
图2A至图2E为写缓冲器和队列数据结构的示意图。
图3A和图3B为写缓冲器和两个队列数据结构的示意图。
图4为队列数据结构和相应读数据结构的示意图。
图5为队列数据结构和大型事务数据结构的示意图。
图6为作为复合提交操作部分的队列数据结构的示意图。
图7为复合提交操作的流程图。
图8A为开启操作(open operation)的流程图。
图8B和图8C分别为复合提交操作和相关写操作的流程图。
图9A和图9B分别为复合提交操作和相关写操作的流程图。
具体实施方式
1.概况
图1A示出排队系统100,其中一组受信的访问实体102A-102M均包括队列事务模块104,队列事务模块104用于与队列管理器106直接进行相互作用。排队系统100还包括一组不受信的访问实体108A-108N,不受信的访问实体108A-108N均包括通过远程程序调用(RPC)管理器112与队列管理器106进行相互作用的远程队列事务模块110。
排队系统100提供一种通过一个或多个消息队列在访问实体之间传递消息的机制。访问实体为模块提供接口,以与排队系统100相互作用。例如分布式计算系统中的“发布者”(publisher)计算模块能够将包括被处理的数据元(element)的消息传递到一个或多个“订阅者”(subscriber)计算模块。
队列管理器106与输入/输出(I/O)管理器114相互作用,输入/输出管理器114为具有相应队列数据结构队列A-队列P的一组消息队列管理存储容量(memory storage),在易失性存储器118(例如半导体随机存取存储器(RAM))中为每一组消息队列分配存储空间(例如,一组磁盘页面),易失性存储器118是一种临时工作存储器,其对于读取和写入数据提供相对较快的访问。I/O管理器114也管理非易失性存储器116(例如磁盘系统),非易失性存储器116是一种永久性存储器,其提供相对更持久的数据,以及与易失性存储器相比,其对于读取和写入数据提供相对较慢的访问。任选地,可具有处理所有队列的I/O的一个I/O管理器,或者存在并行运行的多个I/O管理器,其中每一I/O管理器处理队列子集的I/O。
队列数据结构存储包括“消息记录”(也简单地称作“消息”)和“控制记录”的记录,其中消息记录包括被发送的消息数据,控制记录包括由排队系统100使用以管理队列的信息。图1B示出含有一系列消息记录的示例性的队列数据结构队列M,每一消息记录包括消息报头130和消息数据132。任选地,队列可将消息数据与消息报头130一起存储,或者可将指针134与消息报头130一起存储,其中指针134用于指定外部存储的消息数据136的地址。在下文描述的“大型事务间接技术”中,任选地,记录可包括指向用于存储消息顺序的大型事务数据结构122的指针138。
排队系统100支持包括发布-订阅数据分布模型的各种数据分布模型。起到队列“发布者”作用的访问实体(受信的或不受信的)在“写事务”中能将一条或多条消息添加到队列(也称作“主题”)。起到队列“订阅者”作用的访问实体(受信的或不受信的)在“读事务”中能从队列中读取一条或多条消息。多个发布者可向同一队列中添加消息,以及多个订阅者可从同一队列中读取相同的消息。在队列的所有订阅者均已经读取消息之后,队列管理器106将该消息从队列中移走。可选地,在点对点数据分布模型中,多个访问实体可向队列添加消息,但是由一个访问实体从队列中读取每一消息。“复合事务(compoundtransaction)”包括与多于一个的队列的相互作用,在下文中对其进行详细描述。
可以以与原子性(atomicity)、一致性、隔离性和持久性的“ACID”属性中的一个或多个属性相一致的方式执行此处描述的写事务、读事务和复合事务。
为启动写事务,发布者从队列管理器106获取事务识别符(ID),并将在写事务中要被添加到队列的一条或多条消息传递给队列管理器106。所添加的消息与写事务的事务ID有关,其中所述消息在该写事务中被添加到队列。队列管理器106将所述消息传递给I/O管理器114以使其写入到易失性存储器118,以及最终写入到非易失性存储器116。由队列管理器106和I/O管理器114执行的功能的替代部分(alternative division)也可被使用。
在发布者将在写事务中待添加的所有消息提供给队列管理器106后,发布者可请求队列管理器106“提交”或“回滚(roll back)”写事务。为了提交写事务,队列管理器106将“提交记录”添加至非易失性存储器中的相应队列数据结构。提交记录表示提交的写事务的消息(“提交消息”)能被传递给订阅者。在提交写事务之前,通过确保相关消息从易失性存储器同步至非易失性存储器(如果相关消息还没有被同步)来使得相关消息持久。
如果已被回滚的写事务中的消息还没有被同步至非易失性存储器,则队列管理器106将这些消息丢弃。如果消息已被同步至非易失性存储器,则将“回滚记录”写入到合适的(appropriate)队列数据结构,以表示不提交该事务中的消息并且所述消息最终被丢弃。在一些实施方式中,如果在预定时间量(例如1小时)后写事务没有被提交或回滚,则队列管理器106可任意自动地回滚该事务,例如以避免为建立这些事务而浪费存储空间。
为启动读事务,订阅者从队列管理器106获取事务ID并接收下一个或多个未读的消息。I/O管理器114负责从合适的队列数据结构取回消息,而队列管理器106将所述消息传递给订阅者。由于只有被提交的消息才被传递给订阅者以及已被提交的消息可与还没有被提交的消息被交叉存取,所以消息可以按照或者不按照其被写入到队列数据结构的相同顺序被传回。队列管理器106通过建立“读数据结构”来确定将队列中的哪些消息传递至订阅者,下文将对其进行详细描述。
在“复合事务”中,访问实体(access entity)可将与同一事务ID相关的所有消息写入至多于一个的队列和/或从其读取。复合事务也可被提交或回滚。当复合事务被提交时,在“复合提交”操作中,提交记录被添加至在复合事务中被写入消息的每一个队列。这些“队列提交记录”用于以信号的方式告知相应的提交消息能被传递至订阅者。
在写入这些“队列提交记录”之前,将包括被提交的复合事务的事务ID的“日志提交记录”写入到日志数据结构124中。任选地,该日志提交记录也可包括其它信息,例如参与复合事务的访问实体和所涉及的队列数据结构。复合提交操作作为原子操作被执行,所述原子操作确保在事务中被写入的所有消息均被持久存储或者没有任何消息被持久存储(例如,一旦发生故障则所有添加的消息将被回滚)。日志提交记录的写入是完成复合提交操作的原子动作(atomic action)。如果在日志提交记录(journal commit record)被写入之后但在所有的队列提交记录被写入之前出现故障,则排队系统100能够基于持久存储的日志提交记录进行恢复并写入剩余的队列提交记录。
为提高I/O效率,通过在与队列数据结构分开的数据结构中存储新的队列消息,队列管理器106任选地使用各种技术来降低对来自不同事务的消息的交叉存取(interleaving)。例如,排队系统100包括下文描述的用以降低这种消息交叉存取的两种技术:“写缓冲技术”和“大型事务间接技术”。
在写缓冲技术中,I/O管理器114首先将未提交的队列消息临时存储在易失性存储器118的写缓冲器120中。当提交与所述消息相关的写事务时,将所述消息从写缓冲器120移至合适的队列数据结构。也可在写事务提交之前(例如写缓冲器120满了或在预定时间量过后)将所述消息从写缓冲器120移至合适的队列数据结构。可选地,写缓冲器120可被存储在非易失性存储器116中并仍提供一些相同的功能(例如,降低来自不同事务的消息的交叉存取)。
在大型事务间接技术中,发布者将包括大量消息(例如大于10,000、100,000、1,000,000等,其依赖于计算环境的特点)的写事务识别为“大型事务”。队列管理器106将大型事务消息存储在大型事务数据结构(LTDS)122中,并将指向LTDS 122的指针存储在队列数据结构中。任选地,队列管理器106在写事务中检测到一定量的消息后可自动将写事务实时(on the fly)转换为大型事务。写缓冲技术和大型事务间接技术均能增加将消息数据存储在相邻存储位置的可能性,从而提高了I/O效率。
2.添加和读取消息
当将用于任何特定写事务的消息存储至非易失性存储器118中的有序队列数据结构时,I/O管理器114以将所述消息提供给队列管理器106的顺序保持所述消息。例如,通过作为队列数据结构当前部分的磁盘页面的链接列表来确定在队列数据结构中存储的消息的顺序。用于不同写事务的消息可在队列数据结构中被交叉存取。如果在先前启动的写事务被提交之后启动新的写事务,则在队列数据结构中,与该新的写事务相关的所有消息出现在先前写事务的所有消息之后。
订阅者可启动读事务,在所述读事务中订阅者从队列请求一个或多个消息。由订阅者接收到的消息可以来自一个写事务、来自一个写事务的子集或来自多个写事务。如下文详细描述的,队列管理器106将来自所提交的写事务的消息传递给订阅者。在同一写事务中写入的消息以该写事务的顺序提供给订阅者。将来自不同写事务的消息以写事务被提交的顺序提供给订阅者。对于由不同订阅者向队列读取的相同的消息,由这些订阅者以相同顺序查看(see)。
就来自不同写事务的消息在队列数据结构中被交叉存取来说,降低了读事务的I/O效率。例如,直到已确定消息被提交,队列管理器106才向订阅者传递该消息。用于分开(separate)消息和对应于该消息的提交记录的数据越多,所用的管理资源越多(例如,更多的存储器或更多的读操作)。例如,如果添加消息与提交相关的写事务之间的时间量较长,则与写事务相关的消息(尤其是写事务中的第一个消息)可能与该写事务的提交记录相隔很远。在这段时间期间,所述消息可被存储在队列数据结构中,与其它消息(例如,与其它写事务相关的消息)被交叉存取。此外,在该写事务中的消息可位于相隔很远的磁盘页面上。在读事务中,队列管理器106可能必须浏览用于提交记录的队列数据结构,然后返回并交换存储有该写事务的消息的所有页面。
2.1写缓冲
图2A至图2E示出在上述写缓冲技术的示例执行期间写缓冲器120和队列数据结构队列A的状态。写缓冲器120是队列记录(例如,消息记录和表示写事务开始的“开启(open)”记录)的临时存储器。写缓冲器120保存所述记录直到相应的事务已提交或直到写缓冲器120为“满”。队列管理器106可基于最大数据量、最多消息数或基于数据量和消息数的结合来确定写缓冲器120何时为满。在这个实例中,为了举例说明,写缓冲器120保存最多三条消息。写缓冲器120以有序的数据结构(例如,链接列表)被实施,所述有序数据结构用于保存添加消息的顺序。写缓冲器120和队列数据结构队列A作为列表示出,其中消息被添加到列表底部的“报头”。
参照图2A,队列数据结构队列A保存表示写事务T1开始的“开启T1”记录和表示事务T2开始的“开启T2”记录。写缓冲器120保存具有如下报头的消息:“T1:添加M1”,“T2:添加M1”和“T1:添加M2”。每条消息的消息数据也与相应的消息报头一起存储在写缓冲器120中。在该实例中,例如,由于T1和T2由不同的发布者同时写入,所以关于写事务T1的两条消息与关于写事务T2的消息被交叉存取。
参照图2B,在将事务T1的消息M1和M2(包括消息报头和相关消息数据)移至队列A并确保所述消息已被同步至非易失性存储器后,队列管理器106执行写事务T1的提交操作。在完成所述消息的提交操作之后,提交记录“提交T1”被写入到队列A。在将T1消息移至队列A之后,在写缓冲器中保留单个T2消息(由于T2还没有被提交)。
参照图2C,发布者开启新的写事务T3并将具有报头“T3:添加M1”和“T3:添加M2”的两条消息添加至队列,所述消息均被存储在具有两个空存储槽(empty slot)的写缓冲器120中。然后,在将具有报头“T2:添加M1”的单个写事务T2的消息M1移至队列A之后,队列管理器106执行写事务T2的提交操作。然后,发布者开启新的写事务T4并将具有报头“T4:添加M1”的消息添加至写缓冲器120的最后剩余的存储槽中的队列。虽然与写事务T1和T2相关的消息最初是被交叉存取的,但是作为从写缓冲器120到队列A的转移部分,它们已被解交叉存取并邻近地存储在队列数据结构队列A中。
参照图2D,由于写缓冲器120是满的,所以当发布者添加第二条T4消息时,队列管理器106将有关于T3的消息从写缓冲器120转移至队列A。这种转移为第二条T4消息在写缓冲器120中空出了空间。因此,在提交之前可以将写事务中的消息从写缓冲器120中移出。
参照图2E,队列管理器106执行写事务T4的提交操作,接收新的T3消息并执行写事务T3的提交操作。这个实例示出当写缓冲减少消息的交叉存取(或“瞬态碎片(temporalfragmentation)”)时,由于写缓冲器120的添满,所以导致即使使用写缓冲仍然可能出现一些瞬态碎片。可选地,当写缓冲器120添满时,一个或多个写事务能够被转换成大型事务,释放了写缓冲器120中的空间而不会在队列数据结构中导致瞬态碎片。
在一些实施方式中,每个队列具有其自己的写缓冲器。可选地,写缓冲器120可为多个队列保存消息。在一个实例中,将三个写事务T1-T4的消息添加至两个队列。图3A示出当写缓冲器120为满(在该实例中写缓冲器120保存10条消息)时写缓冲器120和队列数据结构队列A和队列B的状态。图3B示出在添加了两个新消息(用于写事务T1和T4)之后写缓冲器120和队列数据结构队列A和队列B的状态。与最早期的事务T1相关的消息被移送至队列A,从而释放了写缓冲器120中的空间以用于新消息。
2.2读数据结构
队列管理器106通过依次浏览队列中的消息记录并仅读取消息报头以确定每条消息与哪个事务相关,来建立读数据结构。队列管理器106使用读数据结构来记录(keeptrack of)潜在的多个写事务。对于每个队列,队列管理器106为该队列的每个订阅者存储读数据结构。
图4示出对应于队列A的示例性读数据结构400。在该实例中,读数据结构400包括先进先出(FIFO)子列表401-404的有序列表。每当队列管理器106遇到对应于新的写事务的消息时,新的FIFO子列表被添加到通过该写事务的事务ID识别的读数据结构400中。队列管理器106以消息被浏览的顺序(即消息被添加到队列的顺序)将指向与对应的写事务相关的每一消息的指针添加至每一FIFO子列表。
在浏览图4所示的队列数据结构队列A期间,队列管理器106为具有指向消息M1和M2的指针的写事务T1生成第一FIFO子列表401。直到确认消息已被提交(即,直到浏览到相关事务的提交记录之后),队列管理器106才开始将所述消息传回给相应的订阅者(响应读事务)。在得到T1的提交记录之后,完成T1的FIFO子列表401,并且队列管理器106暂时停止建立读数据结构400、基于FIFO子列表401中的指针取回下一个消息并在订阅者请求新消息时将该消息传递给订阅者。在所完成的FIFO子列表401中的所有消息已被传递给订阅者后,队列管理器106开始再次浏览队列A以继续建立读数据结构400直到完成下一个FIFO子列表402。队列管理器交替进行将来自完成的FIFO子列表的消息传递给订阅者的操作与浏览队列数据结构以建立读数据结构的操作。在该实例中,由于T4的提交记录出现在T3的提交记录之前,所以在T3的消息M1-M3之前将T4的消息M1和M2传递给订阅者。在可选实施方式中,在完成的FIFO子列表中的所有消息已被传递给订阅者之前,队列管理器能从向订阅者传递消息改变为建立读数据结构。
保持每个FIFO子列表直到相应的订阅者接收到该FIFO子列表中的所有消息后,或者直到队列管理器106确定相应的写事务不会被提交(例如读到回滚记录后)。在提交读事务后,将提交记录写入到表示订阅者已读取了哪些消息的日志数据结构124。在队列管理器106结束读数据结构400的建立之后,为来自同一订阅者的相同队列的下一读事务保留读数据结构400。
2.3大型事务间接技术
参照图5,当队列管理器106开启(open)大型事务T2时,队列管理器106在非易失性存储器116中配置大型事务数据结构(LTDS)122。当大型事务的消息到达时,直接将它们写入到作为邻近消息列表的LTDS 122。当大型事务被提交时,队列管理器106关闭LTDS 122,并将指向LTDS 122的指针存储在队列数据结构队列P中的间接消息500中。间接消息500还包括大型事务T2的事务ID。
当队列管理器106为队列P建立读数据结构时,T1消息被浏览两次,一次是在将指针写入到读数据结构的FIFO子列表时,一次是在读取消息以将其传回给订阅者时。如果大型事务T2中的大量消息被存储在队列P中,则这两次浏览是徒劳的。取代上述方法,当队列管理器106正在为队列P建立读数据结构并浏览单个间接消息500时,队列管理器106将来自LTDS 122的消息直接传递至订阅者,而不需要T2的FIFO子列表。由于大型事务消息自动表示为被提交,所以在将大型事务消息传回(pass back)给订阅者之前,不需要对它们进行浏览。此外,也不需要浏览不同事务的“未交叉存取”消息的另一功能。在传回大型事务T2的所有消息之后,队列管理器106返回至队列数据结构。
大型事务可以是由发布者选择的选项或者可根据队列实时推出。
3.复合提交
在复合提交操作中,队列管理器106确保写入到多个队列的复合事务的所有添加消息均被持久存储。部分复合提交操作包括将提交记录写入到这些队列。提供这样一种机制是有用的,该机制在执行复合提交操作的同时允许一个或多个实体同时访问队列,而不允许访问实体干扰复合提交操作。
通过将日志提交记录写入至日志数据结构124,队列管理器106指示复合事务的消息已被持久存储(即,已被同步至非易失性存储器)。随后,队列管理器106将队列提交记录写入至在复合事务中写入消息的每一队列(例如为了使得对队列浏览提交记录以建立读数据结构)。由于队列数据结构具有有限的存储空间,因此对于复合提交操作有可能某些队列没有剩余足够的空间以至于在超时时间段内(例如5秒)不能写入提交记录。即使在复合提交操作开始时队列数据结构具有可用空间,但在队列提交记录被写入前,同时发生的写操作能够用完所述空间。由于日志数据结构124表示消息已被提交,但是在队列中不存在使得订阅者接收所述消息的相应提交记录,因此队列中缺少用于提交记录的空间是个潜在问题。
在用于管理复合提交操作的队列提交记录的一种方法中,通过在写入提交记录的同时锁定每一队列以防止在提交操作期间用完空间,队列管理器106确保在每一队列中具有足够的可用空间来提交记录。在第二种和第三种方法中,为了更有效地执行复合提交操作,队列管理器106使用一种确保将提交记录成功写入到多个队列中的每一个而不用同时锁定多个队列的方法。下文更详细地描述这三种方法中的每一个。
参照图6,队列数据结构队列A和队列D包括用于具有事务ID T1、T2和T3的复合事务及具有事务ID T4的写事务的消息。复合事务T1已被提交,并且T1的提交记录已被写入到队列A和队列D。事务T2、T3和T4还没有被提交。与用于复合事务T2的复合提交操作相关的队列A和队列D的操作将在下文关于三种示例性方法中的每一种进行描述。
3.1第一种方法
图7示出提交记录写操作700的流程图。队列管理器106锁定复合事务中包括的每一个队列,如步骤702。在图6的实例中,队列管理器106锁定队列A和队列D(例如通过设定锁定标志)。这种锁定可防止任何其它处理占用队列数据结构的可用空间。
在步骤702锁定每一队列之后,队列管理器106检查每一队列中的可用存储空间,如步骤704。在图6的实例中,队列数据结构队列A具有一块可用存储空间600,队列数据结构队列B具有一块可用存储空间602。队列管理器106将每一队列中的可用空间量与将要用于写入正提交的复合事务的提交记录所需的空间量进行比较。如果任何队列均没有为提交记录预留足够可用的空间,则队列管理器106中止复合提交操作,如步骤706。队列管理器106可稍后尝试复合提交操作,和/或尝试为一个或多个队列获取更多的存储空间。
如果队列具有为提交记录预留的足够存储空间,则队列管理器106同步每一队列以确保存储在易失性存储器中的任何消息均已被移至非易失性存储器中,如步骤708。在同步每一队列之后,队列管理器106将提交记录写入到日志数据结构126,如步骤710。在写入日志提交记录之后,队列管理器106将提交记录写入至每一队列,如步骤712。在将提交记录写入到队列之后,队列管理器106解锁所述队列,如步骤714。
日志提交记录的写入是限定复合提交操作可恢复的位置的原子动作。如果在步骤710的队列管理器106写入日志提交记录之前,排队系统100在复合提交操作期间出现故障,则中止对所有队列的提交操作(由于某些队列可能还没有被同步至非易失性存储器以及还没有提交记录被写入到任何队列)。如果在步骤710的队列管理器106写入日志提交记录之后,排队系统100在复合提交操作期间出现故障,则完成对所有队列的提交操作(由于每一队列已被同步至非易失性存储器以及从日志提交记录可恢复提交记录)。
3.2第二种方法
在第二种方法中,队列管理器106将每个队列中的可用空间量与要用于写入正在提交的复合写事务和任何未完成的事务(此处使用的“未完成的事务”包括复合事务和写事务)的提交记录的空间量进行比较。队列数据结构队列A包括一块预留的存储空间604,用于写入T2和未完成事务T3的提交记录。队列数据结构队列B包括一块预留的存储空间606,用于写入T2和未完成事务T3及T4的提交记录。
图8A示出在写事务开始时执行的“开启操作”800的流程图。对于每一队列queue_i,队列管理器106记录未完成事务Ti的个数,对于未完成事务来说其提交记录还没有被写入。在开启关于queue_i的新事务和递增Ti之前,队列管理器106锁定队列(简单写事务的单个队列或在复合事务中被添加消息的每一个队列),如步骤802,并检查队列以确保存在用于“开启记录(open record)”和提交记录的空间,如步骤804。队列管理器106将当前可用空间与下面给出的D0进行比较:
D0=1条开启记录的大小+1条提交记录的大小×(Ti+1)
如果可用空间大于或等于D0,则队列管理器106解锁queue_i,如步骤806,写入“开启记录”,如步骤808,以及递增未完成事务Ti的数量,如步骤810。否则,如果可用空间小于D0,则队列管理器106解锁queue_i,如步骤812,并中止开启(open)操作800,如步骤814。
图8B和图8C分别示出提交记录写操作840和相关写操作850的流程图。队列管理器106(或I/O管理器114)使用提交记录写操作840进行提交操作,并使用写操作850(可能同时地)将除了提交记录之外的任何数据写入到队列。在这种方法中,由于在将任何数据写入到队列数据结构之前,写操作850包括检查队列的可用空间,所以提交记录写操作840不需要检查队列中的可用空间。如下文具体描述的,队列管理器106确保每一队列queue_i为该队列的Ti个未完成事务的每一个的提交记录预留足够的空间。因此,当执行提交记录写操作840时,队列管理器106可安全地认为已经为每一提交记录预留了空间。
参照图8B,在提交记录写操作840中,队列管理器106首先同步每一队列,如步骤842。在同步每一队列之后,队列管理器106写入日志提交记录,如步骤844。在写入日志提交记录之后,队列管理器106将提交记录写入到每一队列,如步骤846。
参见图8C,队列管理器106使用写操作850将数据写入到队列数据结构。队列管理器106首先确定待写入的数据是否是提交记录,如步骤852。如果是,则队列管理器106写入提交记录,如步骤854,并递减未完成事务Ti的数量,如步骤856。如果否,则队列管理器106锁定队列,如步骤858,并检查该队列中的可用存储空间,如步骤860。队列管理器106将当前可用空间与下面给出的Dw进行比较:
Dw=待写入的数据的大小+1条提交记录的大小×Ti
其中数据的大小反映以合适单位(例如字节)表示的数据大小。如果可用空间大于或等于Dw,则队列管理器106写入数据,如步骤862,并解锁队列,如步骤864。否则,如果可用空间小于Dw,则队列管理器106解锁队列,如步骤866,并中止写操作850,如步骤868。在该方法中,当检查存储空间时仅锁定单个队列,该队列是正被写入数据的队列。
3.3第三种方法
图9A和图9B示出提交记录写操作900和相关写操作950的流程图。在这种方法中,队列管理器106在写事务开始时使用图8A中所示的“开启操作”800。提交记录写操作900和写操作950均检查队列中的可用空间。此外,在该方法中每次仅锁定单个数列。对于每个队列queue_i,队列管理器106记录未完成事务Ti的数量(利用开启操作800递增Ti)。队列管理器106确保每一队列数据结构为Ti未完成事务的每一个的提交记录预留足够空间。然而,在该方法中,当队列处于“预留模式”时,在将数据写入到队列之前,队列管理器106仅锁定队列以检查空间。预留模式提供了一种用信号通知提交操作处于进行中而不用同时锁定所有参与队列的方式。
参照图9A,在提交记录写操作900中,首先,队列管理器106为提交记录写操作900中包括的每一队列queue_i(即,i=1……操作900中的队列数)执行一次循环(loop)902(或等效控制结构)。循环902以能够说明同时被执行的多个复合提交操作的可能性的方式开启queue_i的预留模式。在该实例中,循环902递增queue_i的预留模式计数Ri,如步骤904。预留模式计数从初始值,例如Ri=0开始,其中queue_i不处于预留模式。当Ri>0时,queue_i处于预留模式。这使得队列的预留模式状态响应于队列已被置于预留模式的次数。
在递增预留模式计数之后,在循环902中,队列管理器106锁定queue_i,如步骤906,并检查queue_i中的可用存储空间,如步骤908。队列管理器106将当前可用空间与下面给出的Dc进行比较:
Dc=1条提交记录的大小×Ti
如果可用空间大于或等于Dc,则队列管理器106解锁queue_i,如步骤910,并继续进行操作。否则,如果可用空间小于Dc,则队列管理器106解锁queue_i,如步骤912,并中止提交记录写操作900,如步骤914。
在循环902之后,队列管理器106同步每一队列,如步骤916。在同步每一队列之后,队列管理器106写入日志提交记录,如步骤918。在写入日志提交记录之后,队列管理器106将提交记录写入每一队列,如步骤920。在将提交记录写入队列之后,队列管理器106递减该队列的预留模式计数,如步骤922。
参照图9B,队列管理器106使用写操作950将数据写入到队列数据结构。队列管理器106首先确定待写入的数据是否是提交记录,如步骤952。如果是,则队列管理器106写入该提交记录,如步骤954,并递减未完成事务Ti的个数,如步骤956。如果待写入的数据不是提交记录,则队列管理器106确定队列是否处于预留模式(例如通过是否Ri>0来确定),如步骤958。如果队列不是处于预留模式,则队列管理器106写入数据,如步骤960。如果队列处于预留模式,则队列管理器106锁定该队列,如步骤962,并检查该队列中的可用存储空间,如步骤964。队列管理器106将当前可用空间与如上第二种方法中确定的Dw进行比较。如果可用空间大于或等于Dw,则队列管理器106写入数据,如步骤966,并解锁队列,如步骤968。否则,如果可用空间小于Dw,则队列管理器106解锁队列,如步骤970,并中止写操作950,如步骤972。
3.4其它方法
其它方法也可能管理提交操作以保证成功将提交记录写入到多个队列中的每一个,而无需同时锁定多个队列。例如,在第三种方法的改型中,取代使用所有未完成事务Ti的计数,队列管理器106使用处于预留模式Ri的队列的数量来计算Dc和/或Dw。在一些方法中,在写入日志提交记录之前,由于缺少用于队列提交记录的空间从而使得提交操作失败。
4.实施
可使用在计算机上执行的软件来实施此处所述的队列管理功能。例如,所述软件形成用于运行一个或多个程序化或可编程计算机系统(其可以是各种结构,例如分布式、客户机/服务器或栅格(grid))的一个或多个计算机程序中的步骤,其中每一计算机系统包括至少一个处理器、至少一个数据存储系统(包括易失性和非易失性存储器和/或存储单元)、至少一个输入装置或端口、和至少一个输出装置或端口。所述软件可形成大程序的一个或多个模块,例如用于提供与计算图的设计或结构相关的其它服务。此处描述的数据结构可实施为在计算机可读介质中存储的数据结构,或与在数据仓库中存储的数据模型一致的其它有组织的数据。
可在介质(例如由通用或专用可编程计算机读取的CD-ROM)上提供所述软件,或通过网络将所述软件发送(将其编码在传播信号中)至运行所述软件的计算机。可在专用计算机上执行所有功能,或使用诸如协处理器的专用硬件执行所有功能。可以分布的方式执行所述软件,其中由不同的计算机来执行软件规定的不同计算部分。优选地,将每一个这种计算机程序存储或下载至由通用或专用可编程计算机可读取的存储介质或装置上(例如,固态存储器或介质,或磁或光介质),用于在计算机系统读取所述存储介质或装置以执行此处所述的步骤时配置和运行所述计算机。也可考虑将本发明的系统实施为配置有计算机程序的计算机可读存储介质,其中这样配置的存储介质使计算机系统以特定和预定的方式操作,从而执行此处所述的功能。
应理解,前面的描述旨在举例说明而非限制本发明保护的范围,本发明的保护范围由所附的权利要求限定。例如,可以不同的顺序执行上述的多个功能步骤而不会在实质上影响总体处理。其它实施例也包括在权利要求的范围内。
Claims (45)
1.一种向多个队列写入第一数据并向所述多个队列的至少一个写入第二数据的方法,第一数据被写入到不同的相应的一个队列,该方法包括:
无需同时锁定多于一个队列,确定每一队列中是否有空间可用于写入第一数据,如果有,则预留所述每一队列中的所述空间以确保所述每一队列中的所述空间保持可用,直到第一数据被写入到所述每一队列为止;
在写所写入的第一数据时,将第一数据写入到不同的相应的一个队列,而不锁定所述相应的一个队列;以及
将不同于第一数据的所述第二数据写入所述多个队列的至少一个队列,同时为不同于所述第二数据的第一数据预留空间,包括:锁定将要被写入所述第二数据的队列,确定所述队列中有空间可用于写入第一数据和所述第二数据,以及写入所述第二数据。
2.如权利要求1所述的方法,其中将第一数据写入到不同的相应的一个队列的步骤发生在所述多个队列中为第一数据预留空间之后。
3.如权利要求1所述的方法,还包括:
在该不同的相应的一个队列中写入第一数据之后,释放为在该不同的相应的一个队列中写入第一数据而预留的空间。
4.如权利要求1所述的方法,其中确定所述每一队列中是否有空间可用,以及如果有则预留所述空间的步骤包括,对于所述多个队列中的每一个:
锁定该队列;
在锁定该队列之后,确定该队列中的空间是否可用;
如果可用,则预留该空间;以及
在预留该空间之后,解锁该队列。
5.如权利要求1所述的方法,其中被写入到该不同的相应的一个队列的第一数据包括一个记录。
6.如权利要求5所述的方法,还包括:
在将所述记录写入到任一所述队列之前写入一个日志记录。
7.如权利要求6所述的方法,还包括:
在写入所述日志记录之前将所述每一队列同步至非易失性存储器。
8.如权利要求5所述的方法,还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中已经预留有空间,则锁定所述第一个队列,同时,在将另一个数据写入所述第一个队列之前,确定在所述第一个队列中是否有另外的空间可用于所述另一个数据。
9.如权利要求5所述的方法,还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中还没有预留空间,则将所述数据写入所述第一个队列,而不需要请求锁定所述第一个队列。
10.如权利要求1所述的方法,其中确定所述每一队列中是否有空间可用于写入第一数据包括:
确保所述每一队列中有足够空间可用于写入关于该队列的任何未完成事务的提交记录。
11.如权利要求10所述的方法,还包括:
在确定至少一个所述队列中没有预留足够空间用于写入关于该队列的任何未完成事务的提交记录之后,中止向所述多个队列中的每一个写入相应的提交记录。
12.如权利要求1所述的方法,其中在所述多个队列中预留空间包括:
为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示。
13.如权利要求12所述的方法,其中为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示包括:
递增所述每一队列的相应计数。
14.如权利要求12所述的方法,还包括:
在锁定将要被写入所述第二数据的所述队列之后,并且在写入所述第二数据之前,确定在所述队列中可获得所述第二数据的大小加上尚未被写入所述队列的所有第一数据的大小的空间。
15.如权利要求1所述的方法,其中将第一数据写入所述多个队列的操作作为原子操作被执行,所述原子操作确保被写入到所述不同的相应的一个队列的与第一数据相对应的所有消息均被持久存储,或者均没有被持久存储。
16.一种向多个队列写入第一数据并向所述多个队列的至少一个写入第二数据的系统,第一数据被写入到不同的相应的一个队列,该系统包括:
无需同时锁定多于一个队列,确定每一队列中是否有空间可用于写入第一数据,如果有,则预留所述每一队列中的所述空间以确保所述每一队列中的所述空间保持可用,直到第一数据被写入到所述每一队列为止的装置;
在写所写入的第一数据时,将第一数据写入到不同的相应的一个队列,而不锁定所述相应的一个队列的装置;以及
将不同于第一数据的所述第二数据写入所述多个队列的至少一个队列,同时为不同于所述第二数据的第一数据预留空间,包括:锁定将要被写入所述第二数据的队列,确定所述队列中有空间可用于写入第一数据和所述第二数据,以及写入所述第二数据的装置。
17.如权利要求16所述的系统,其中将第一数据写入到不同的相应的一个队列的步骤发生在所述多个队列中为第一数据预留空间之后。
18.如权利要求16所述的系统,还包括:
在该不同的相应的一个队列中写入第一数据之后,释放为在该不同的相应的一个队列中写入第一数据而预留的空间的装置。
19.如权利要求16所述的系统,其中确定所述每一队列中是否有空间可用,以及如果有则预留所述空间的步骤包括,对于所述多个队列中的每一个:
锁定该队列;
在锁定该队列之后,确定该队列中的空间是否可用;
如果可用,则预留该空间;以及
在预留该空间之后,解锁该队列。
20.如权利要求16所述的系统,其中被写入到该不同的相应的一个队列的第一数据包括一个记录。
21.如权利要求20所述的系统,还包括:
在将所述记录写入到任一所述队列之前写入一个日志记录的装置。
22.如权利要求21所述的系统,还包括:
在写入所述日志记录之前将所述每一队列同步至非易失性存储器的装置。
23.如权利要求20所述的系统,还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中已经预留有空间,则锁定所述第一个队列,同时,在将另一个数据写入所述第一个队列之前,确定在所述第一个队列中是否有另外的空间可用于另一个数据的装置。
24.如权利要求20所述的系统,还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中还没有预留空间,则将所述数据写入所述第一个队列,而不需要请求锁定所述第一个队列的装置。
25.如权利要求16所述的系统,其中确定所述每一队列中是否有空间可用于写入第一数据包括:
确保所述每一队列中有足够空间可用于写入关于该队列的任何未完成事务的提交记录。
26.如权利要求25所述的系统,还包括:
在确定至少一个所述队列中没有预留足够空间用于写入关于该队列的任何未完成事务的提交记录之后,中止向所述多个队列中的每一个写入相应的提交记录的装置。
27.如权利要求16所述的系统,其中在所述多个队列中预留空间包括:
为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示。
28.如权利要求27所述的系统,其中为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示包括:
递增所述每一队列的相应计数。
29.如权利要求27所述的系统,还包括:
在锁定将要被写入所述第二数据的所述队列之后,并且在写入所述第二数据之前,确定在所述队列中可获得所述第二数据的大小加上尚未被写入所述队列的所有第一数据的大小的空间的装置。
30.如权利要求16所述的系统,其中将第一数据写入所述多个队列的操作作为原子操作被执行,所述原子操作确保被写入到所述不同的相应的一个队列的与第一数据相对应的所有消息均被持久存储,或者均没有被持久存储。
31.一种计算机可读存储介质,其存储有用于使计算机系统执行包括以下步骤的方法的程序,所述方法用于向多个队列写入第一数据并向所述多个队列的至少一个写入第二数据,第一数据被写入到不同的相应的一个队列,并且所述方法包括:
无需同时锁定多于一个队列,确定每一队列中是否有空间可用于写入第一数据,如果有,则预留所述每一队列中的所述空间以确保所述每一队列中的所述空间保持可用,直到第一数据被写入到所述每一队列为止;
在写所写入的第一数据时,将第一数据写入到不同的相应的一个队列,而不锁定所述相应的一个队列;以及
将不同于第一数据的所述第二数据写入所述多个队列的至少一个队列,同时为不同于所述第二数据的第一数据预留空间,包括:锁定将要被写入所述第二数据的队列,确定所述队列中有空间可用于写入第一数据和所述第二数据,以及写入所述第二数据。
32.如权利要求31所述的计算机可读存储介质,其中将第一数据写入到不同的相应的一个队列的步骤发生在所述多个队列中为第一数据预留空间之后。
33.如权利要求31所述的计算机可读存储介质,所述方法还包括:
在该不同的相应的一个队列中写入第一数据之后,释放为在该不同的相应的一个队列中写入第一数据而预留的空间。
34.如权利要求31所述的计算机可读存储介质,其中确定所述每一队列中是否有空间可用,以及如果有则预留所述空间的步骤包括,对于所述多个队列中的每一个:
锁定该队列;
在锁定该队列之后,确定该队列中的空间是否可用;
如果可用,则预留该空间;以及
在预留该空间之后,解锁该队列。
35.如权利要求31所述的计算机可读存储介质,其中被写入到该不同的相应的一个队列的第一数据包括一个记录。
36.如权利要求35所述的计算机可读存储介质,所述方法还包括:
在将所述记录写入到任一所述队列之前写入一个日志记录。
37.如权利要求36所述的计算机可读存储介质,所述方法还包括:
在写入所述日志记录之前将所述每一队列同步至非易失性存储器。
38.如权利要求35所述的计算机可读存储介质,所述方法还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中已经预留有空间,则锁定所述第一个队列,同时,在将另一个数据写入所述第一个队列之前,确定在所述第一个队列中是否有另外的空间可用于另一个数据。
39.如权利要求35所述的计算机可读存储介质,所述方法还包括:
在将不同于所述记录的数据写入所述多个队列的第一个队列之前,如果在所述第一个队列中还没有预留空间,则将所述数据写入所述第一个队列,而不需要请求锁定所述第一个队列。
40.如权利要求31所述的计算机可读存储介质,其中确定所述每一队列中是否有空间可用于写入第一数据包括:
确保所述每一队列中有足够空间可用于写入关于该队列的任何未完成事务的提交记录。
41.如权利要求40所述的计算机可读存储介质,所述方法还包括:
在确定至少一个所述队列中没有预留足够空间用于写入关于该队列的任何未完成事务的提交记录之后,中止向所述多个队列中的每一个写入相应的提交记录。
42.如权利要求31所述的计算机可读存储介质,其中在所述多个队列中预留空间包括:
为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示。
43.如权利要求42所述的计算机可读存储介质,其中为所述每一队列存储尚未被写入该队列的所有第一数据的大小的指示包括:
递增所述每一队列的相应计数。
44.如权利要求42所述的计算机可读存储介质,所述方法还包括:
在锁定将要被写入所述第二数据的所述队列之后,并且在写入所述第二数据之前,确定在所述队列中可获得所述第二数据的大小加上尚未被写入所述队列的所有第一数据的大小的空间。
45.如权利要求31所述的计算机可读存储介质,其中将第一数据写入所述多个队列的操作作为原子操作被执行,所述原子操作确保被写入到所述不同的相应的一个队列的与第一数据相对应的所有消息均被持久存储,或者均没有被持久存储。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/169,074 US7865684B2 (en) | 2005-06-27 | 2005-06-27 | Managing message queues |
US11/169,074 | 2005-06-27 | ||
CN200680023379.1A CN101208671B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680023379.1A Division CN101208671B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105404592A CN105404592A (zh) | 2016-03-16 |
CN105404592B true CN105404592B (zh) | 2019-06-04 |
Family
ID=37568981
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680023379.1A Active CN101208671B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
CN201010548569.3A Active CN101996098B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
CN201510686148.XA Active CN105404592B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680023379.1A Active CN101208671B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
CN201010548569.3A Active CN101996098B (zh) | 2005-06-27 | 2006-06-22 | 管理消息队列 |
Country Status (8)
Country | Link |
---|---|
US (2) | US7865684B2 (zh) |
EP (1) | EP1913481A4 (zh) |
JP (3) | JP5762669B2 (zh) |
KR (1) | KR101372978B1 (zh) |
CN (3) | CN101208671B (zh) |
AU (1) | AU2006262163B2 (zh) |
CA (2) | CA2613496C (zh) |
WO (1) | WO2007002245A2 (zh) |
Families Citing this family (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2549343C (en) * | 2002-12-17 | 2008-08-19 | Breathablebaby, Llc | Crib shield system and other breathable apparatus |
US7490083B2 (en) * | 2004-02-27 | 2009-02-10 | International Business Machines Corporation | Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates |
US8688634B2 (en) * | 2004-02-27 | 2014-04-01 | International Business Machines Corporation | Asynchronous peer-to-peer data replication |
GB0519033D0 (en) * | 2005-09-17 | 2005-10-26 | Ibm | Optimistic processing of messages in a messaging system |
US8554846B2 (en) * | 2005-09-27 | 2013-10-08 | Oracle International Corporation | System and method for providing a messaging kernel |
EP1955221A4 (en) * | 2005-12-01 | 2009-03-11 | Firestar Software Inc | SYSTEM AND METHOD FOR EXCHANGING INFORMATION BETWEEN EXCHANGE APPLICATIONS |
US9898517B2 (en) * | 2006-04-21 | 2018-02-20 | Adobe Systems Incorporated | Declarative synchronization of shared data |
WO2007134008A2 (en) * | 2006-05-08 | 2007-11-22 | Firestar Software, Inc. | System and method for exchanging transaction information using images |
US7996849B2 (en) * | 2007-02-14 | 2011-08-09 | International Business Machines Corporation | Method, apparatus and software for managing a transactional message queue |
JP5669338B2 (ja) * | 2007-04-26 | 2015-02-12 | 株式会社日立製作所 | 半導体装置 |
US9021503B2 (en) * | 2007-11-16 | 2015-04-28 | Microsoft Technology Licensing, Llc | Coordinating application state and communication medium state |
US8719841B2 (en) * | 2007-11-16 | 2014-05-06 | Microsoft Corporation | Dispatch mechanism for coordinating application and communication medium state |
US8505030B2 (en) * | 2007-11-16 | 2013-08-06 | Microsoft Corporation | Coordinating resources using a volatile network intermediary |
US8037024B1 (en) * | 2008-06-04 | 2011-10-11 | Google Inc. | Data propagation in a multi-shard database system |
TW201032535A (en) | 2008-10-14 | 2010-09-01 | Ibm | A method of handling a message |
US8572627B2 (en) * | 2008-10-22 | 2013-10-29 | Microsoft Corporation | Providing supplemental semantics to a transactional queue manager |
US8301706B2 (en) | 2009-06-15 | 2012-10-30 | Microsoft Corporation | Routing of pooled messages via an intermediary |
JP5610773B2 (ja) * | 2010-01-06 | 2014-10-22 | キヤノン株式会社 | メッセージ処理装置およびメッセージ処理方法 |
US8549538B2 (en) | 2010-03-18 | 2013-10-01 | Microsoft Corporation | Coordinating communication medium state for subtasks |
US8250234B2 (en) | 2010-04-26 | 2012-08-21 | Microsoft Corporation | Hierarchically disassembling messages |
US20110320530A1 (en) * | 2010-06-29 | 2011-12-29 | International Business Machines Corporation | Method for processing a unit of work |
US8724645B2 (en) | 2010-09-28 | 2014-05-13 | Microsoft Corporation | Performing computations in a distributed infrastructure |
US8516032B2 (en) * | 2010-09-28 | 2013-08-20 | Microsoft Corporation | Performing computations in a distributed infrastructure |
US8341134B2 (en) * | 2010-12-10 | 2012-12-25 | International Business Machines Corporation | Asynchronous deletion of a range of messages processed by a parallel database replication apply process |
ES2891092T3 (es) | 2011-03-11 | 2022-01-26 | Intercontinental Great Brands Llc | Método de conformación de producto de confitería de múltiples capas |
US9015303B2 (en) | 2011-09-12 | 2015-04-21 | Microsoft Corporation | Message queue behavior optimizations |
US9690638B2 (en) * | 2011-09-29 | 2017-06-27 | Oracle International Corporation | System and method for supporting a complex message header in a transactional middleware machine environment |
US8832217B2 (en) * | 2011-09-29 | 2014-09-09 | Oracle International Corporation | System and method for supporting different message queues in a transactional middleware machine environment |
US9116761B2 (en) | 2011-09-29 | 2015-08-25 | Oracle International Corporation | System and method for preventing single-point bottleneck in a transactional middleware machine environment |
CN103136139A (zh) * | 2011-11-30 | 2013-06-05 | 英业达科技有限公司 | 现场可更换单元信息的读取方法及写入方法 |
US8965861B1 (en) * | 2012-06-28 | 2015-02-24 | Amazon Technologies, Inc. | Concurrency control in database transactions |
US10180901B2 (en) * | 2012-10-19 | 2019-01-15 | Oracle International Corporation | Apparatus, system and method for managing space in a storage device |
JP2014085896A (ja) * | 2012-10-25 | 2014-05-12 | International Business Maschines Corporation | トランザクション処理方法、プログラム及びシステム |
US9245053B2 (en) | 2013-03-12 | 2016-01-26 | International Business Machines Corporation | Efficiently searching and modifying a variable length queue |
US9928104B2 (en) * | 2013-06-19 | 2018-03-27 | Nvidia Corporation | System, method, and computer program product for a two-phase queue |
US20150032961A1 (en) * | 2013-07-23 | 2015-01-29 | Lexmark International Technologies S.A. | System and Methods of Data Migration Between Storage Devices |
SG11201603105VA (en) | 2013-10-21 | 2016-05-30 | Ab Initio Technology Llc | Checkpointing a collection of data units |
US9727625B2 (en) | 2014-01-16 | 2017-08-08 | International Business Machines Corporation | Parallel transaction messages for database replication |
US20150301726A1 (en) * | 2014-04-16 | 2015-10-22 | Societe Bic | Systems and Methods for Displaying Free-Form Drawing on a Contact-Sensitive Display |
US9965336B2 (en) * | 2014-04-30 | 2018-05-08 | International Business Machines Corporation | Delegating iterative storage unit access in a dispersed storage network |
US9584593B2 (en) * | 2014-06-27 | 2017-02-28 | Amazon Technologies, Inc. | Failure management in a distributed strict queue |
US9575820B2 (en) * | 2014-06-27 | 2017-02-21 | Amazon Technologies, Inc. | Client control in a distributed strict queue |
US9577961B2 (en) * | 2014-06-27 | 2017-02-21 | Amazon Technologies, Inc. | Input/output management in a distributed strict queue |
US9571414B2 (en) * | 2014-06-27 | 2017-02-14 | Amazon Technologies, Inc. | Multi-tiered processing using a distributed strict queue |
US9577878B2 (en) * | 2014-06-27 | 2017-02-21 | Amazon Technologies, Inc. | Geographic awareness in a distributed strict queue |
US9591101B2 (en) * | 2014-06-27 | 2017-03-07 | Amazon Technologies, Inc. | Message batching in a distributed strict queue |
US9577972B1 (en) * | 2014-09-09 | 2017-02-21 | Amazon Technologies, Inc. | Message inspection in a distributed strict queue |
CN104536916B (zh) * | 2014-12-18 | 2018-04-10 | 华为技术有限公司 | 一种多核系统的仲裁方法及多核系统 |
US9634962B2 (en) | 2015-04-14 | 2017-04-25 | International Business Machines Corporation | Pre-staging messages at a remote location |
US11102313B2 (en) * | 2015-08-10 | 2021-08-24 | Oracle International Corporation | Transactional autosave with local and remote lifecycles |
US10582001B2 (en) | 2015-08-11 | 2020-03-03 | Oracle International Corporation | Asynchronous pre-caching of synchronously loaded resources |
US10419514B2 (en) | 2015-08-14 | 2019-09-17 | Oracle International Corporation | Discovery of federated logins |
US10452497B2 (en) | 2015-08-14 | 2019-10-22 | Oracle International Corporation | Restoration of UI state in transactional systems |
US10582012B2 (en) | 2015-10-16 | 2020-03-03 | Oracle International Corporation | Adaptive data transfer optimization |
US9984142B2 (en) * | 2015-11-05 | 2018-05-29 | Oracle International Corporation | Single unit of work |
US11226852B2 (en) * | 2016-11-25 | 2022-01-18 | Genetec Inc. | System for inter-process communication |
CN111158936B (zh) * | 2017-06-15 | 2024-04-09 | 北京忆芯科技有限公司 | 队列交换信息的方法及系统 |
US10606604B2 (en) | 2017-08-22 | 2020-03-31 | Bank Of America Corporation | Predictive queue control and allocation |
CN108021448B (zh) * | 2017-11-30 | 2021-06-15 | 北京东土科技股份有限公司 | 一种内核空间的优化方法及装置 |
US10541953B2 (en) | 2017-12-13 | 2020-01-21 | Chicago Mercantile Exchange Inc. | Streaming platform reader |
TWI678087B (zh) * | 2018-11-22 | 2019-11-21 | 財團法人工業技術研究院 | 訊息佇列發佈與訂閱之同步方法及其系統 |
US10990459B2 (en) | 2019-08-30 | 2021-04-27 | Chicago Mercantile Exchange Inc. | Distributed threaded streaming platform reader |
US11178091B1 (en) | 2020-11-12 | 2021-11-16 | Chicago Mercantile Exchange Inc. | Message ordering buffer |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694388B1 (en) * | 2000-05-31 | 2004-02-17 | 3Com Corporation | Dynamic queuing system incorporating multiple queues sharing a single memory |
CN1496510A (zh) * | 2001-03-07 | 2004-05-12 | ���Ĺ��ʹ�˾ | 分布式共享磁盘系统中的磁盘写操作 |
US6862595B1 (en) * | 2000-10-02 | 2005-03-01 | International Business Machines Corporation | Method and apparatus for implementing a shared message queue using a list structure |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5958552A (ja) * | 1982-09-28 | 1984-04-04 | Fujitsu Ltd | スロ−ダウン制御方式 |
US4482956A (en) * | 1982-11-04 | 1984-11-13 | International Business Machines Corporation | Parallel queueing method |
US5319773A (en) | 1990-05-16 | 1994-06-07 | International Business Machines Corporation | Asynchronous resynchronization of a commit procedure |
JP2667039B2 (ja) * | 1990-05-18 | 1997-10-22 | 株式会社東芝 | データ管理システムおよびデータ管理方法 |
US5426747A (en) * | 1991-03-22 | 1995-06-20 | Object Design, Inc. | Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system |
US5715447A (en) * | 1991-08-06 | 1998-02-03 | Fujitsu Limited | Method of and an apparatus for shortening a lock period of a shared buffer |
US5504899A (en) * | 1991-10-17 | 1996-04-02 | Digital Equipment Corporation | Guaranteeing global serializability by applying commitment ordering selectively to global transactions |
US5371850A (en) * | 1992-04-20 | 1994-12-06 | Storage Technology Corporation | Interprocess message queue |
US5530848A (en) * | 1992-10-15 | 1996-06-25 | The Dow Chemical Company | System and method for implementing an interface between an external process and transaction processing system |
US5455944A (en) * | 1993-03-16 | 1995-10-03 | International Business Machines Corporation | Method for managing logging and locking of page free space information in a transaction processing system |
JPH07105120A (ja) * | 1993-10-06 | 1995-04-21 | Oki Electric Ind Co Ltd | 入出力制御装置 |
US5586312A (en) * | 1994-10-11 | 1996-12-17 | Unisys Corporation | Method and apparatus for using an independent transaction processing application as a service routine |
US5797005A (en) * | 1994-12-30 | 1998-08-18 | International Business Machines Corporation | Shared queue structure for data integrity |
US5906658A (en) * | 1996-03-19 | 1999-05-25 | Emc Corporation | Message queuing on a data storage system utilizing message queuing in intended recipient's queue |
US5909658A (en) * | 1996-06-18 | 1999-06-01 | International Business Machines Corporation | High speed electron beam lithography pattern processing system |
US5857204A (en) * | 1996-07-02 | 1999-01-05 | Ab Initio Software Corporation | Restoring the state of a set of files |
US5881316A (en) * | 1996-11-12 | 1999-03-09 | Hewlett-Packard Company | Dynamic allocation of queue space using counters |
US6353834B1 (en) * | 1996-11-14 | 2002-03-05 | Mitsubishi Electric Research Laboratories, Inc. | Log based data architecture for a transactional message queuing system |
US6240479B1 (en) * | 1998-07-31 | 2001-05-29 | Motorola, Inc. | Method and apparatus for transferring data on a split bus in a data processing system |
US6173373B1 (en) * | 1998-10-15 | 2001-01-09 | Compaq Computer Corporation | Method and apparatus for implementing stable priority queues using concurrent non-blocking queuing techniques |
US6557056B1 (en) * | 1998-12-30 | 2003-04-29 | Nortel Networks Limited | Method and apparatus for exchanging data between transactional and non-transactional input/output systems in a multi-processing, shared memory environment |
US6594751B1 (en) * | 1999-03-25 | 2003-07-15 | Progress Software Corporation | Method and apparatus for pointer relocation optimization for virtual memory mapping and transaction management in a database system |
US6601089B1 (en) * | 1999-06-21 | 2003-07-29 | Sun Microsystems, Inc. | System and method for allocating buffers for message passing in a shared-memory computer system |
US6763447B2 (en) * | 1999-12-02 | 2004-07-13 | Ants Software, Inc. | Lock-free list for use with computer system utilizing FIFO queue for tracking order of various sublists |
US6898650B1 (en) * | 2000-08-10 | 2005-05-24 | Novell, Inc. | Queueing method supporting multiple client accesses simultaneously |
US7068604B2 (en) * | 2001-08-23 | 2006-06-27 | International Business Machines Corporation | Managing memory resident queues to control resources of the systems using the queues |
US20030182464A1 (en) | 2002-02-15 | 2003-09-25 | Hamilton Thomas E. | Management of message queues |
US20040006633A1 (en) * | 2002-07-03 | 2004-01-08 | Intel Corporation | High-speed multi-processor, multi-thread queue implementation |
GB0215808D0 (en) | 2002-07-09 | 2002-08-14 | Ibm | A system and method for managing transactions in a messaging system |
US7185033B2 (en) * | 2002-08-01 | 2007-02-27 | Oracle International Corporation | Buffered message queue architecture for database management systems with unlimited buffered message queue with limited shared memory |
JP4291060B2 (ja) * | 2003-07-01 | 2009-07-08 | 富士通株式会社 | トランザクション処理方法,トランザクション制御装置およびトランザクション制御プログラム |
US7644118B2 (en) | 2003-09-11 | 2010-01-05 | International Business Machines Corporation | Methods, systems, and media to enhance persistence of a message |
-
2005
- 2005-06-27 US US11/169,074 patent/US7865684B2/en active Active
-
2006
- 2006-06-22 CN CN200680023379.1A patent/CN101208671B/zh active Active
- 2006-06-22 KR KR1020077030364A patent/KR101372978B1/ko active IP Right Grant
- 2006-06-22 JP JP2008519405A patent/JP5762669B2/ja active Active
- 2006-06-22 AU AU2006262163A patent/AU2006262163B2/en active Active
- 2006-06-22 CA CA2613496A patent/CA2613496C/en active Active
- 2006-06-22 CA CA2834146A patent/CA2834146C/en active Active
- 2006-06-22 WO PCT/US2006/024233 patent/WO2007002245A2/en active Application Filing
- 2006-06-22 CN CN201010548569.3A patent/CN101996098B/zh active Active
- 2006-06-22 CN CN201510686148.XA patent/CN105404592B/zh active Active
- 2006-06-22 EP EP06773738A patent/EP1913481A4/en not_active Ceased
-
2010
- 2010-12-06 US US12/960,648 patent/US8078820B2/en active Active
-
2012
- 2012-04-09 JP JP2012088219A patent/JP5657599B2/ja active Active
-
2015
- 2015-04-03 JP JP2015076899A patent/JP6046760B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694388B1 (en) * | 2000-05-31 | 2004-02-17 | 3Com Corporation | Dynamic queuing system incorporating multiple queues sharing a single memory |
US6862595B1 (en) * | 2000-10-02 | 2005-03-01 | International Business Machines Corporation | Method and apparatus for implementing a shared message queue using a list structure |
CN1496510A (zh) * | 2001-03-07 | 2004-05-12 | ���Ĺ��ʹ�˾ | 分布式共享磁盘系统中的磁盘写操作 |
Also Published As
Publication number | Publication date |
---|---|
CA2613496C (en) | 2016-02-02 |
CN101996098B (zh) | 2014-03-26 |
CA2834146C (en) | 2017-08-29 |
US8078820B2 (en) | 2011-12-13 |
CN101208671A (zh) | 2008-06-25 |
AU2006262163A2 (en) | 2007-01-04 |
EP1913481A4 (en) | 2009-12-09 |
CA2834146A1 (en) | 2007-01-04 |
JP2012155740A (ja) | 2012-08-16 |
CN101208671B (zh) | 2015-11-25 |
JP2008547130A (ja) | 2008-12-25 |
JP5657599B2 (ja) | 2015-01-21 |
CN105404592A (zh) | 2016-03-16 |
KR20080018212A (ko) | 2008-02-27 |
CN101996098A (zh) | 2011-03-30 |
JP6046760B2 (ja) | 2016-12-21 |
EP1913481A2 (en) | 2008-04-23 |
US20060294333A1 (en) | 2006-12-28 |
WO2007002245A2 (en) | 2007-01-04 |
AU2006262163B2 (en) | 2012-11-15 |
KR101372978B1 (ko) | 2014-03-13 |
WO2007002245A3 (en) | 2007-04-26 |
CA2613496A1 (en) | 2007-01-04 |
US20110078214A1 (en) | 2011-03-31 |
AU2006262163A1 (en) | 2007-01-04 |
US7865684B2 (en) | 2011-01-04 |
JP5762669B2 (ja) | 2015-08-12 |
JP2015127981A (ja) | 2015-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105404592B (zh) | 管理消息队列 | |
CN110113420B (zh) | 基于nvm的分布式消息队列管理系统 | |
US6012094A (en) | Method of stratified transaction processing | |
CN109977171A (zh) | 一种保证事务一致性和线性一致性的分布式系统和方法 | |
JP5387757B2 (ja) | 並列データ処理システム、並列データ処理方法及びプログラム | |
CN113396407A (zh) | 用于利用区块链技术扩充数据库应用的系统和方法 | |
CN108874588A (zh) | 一种数据库实例恢复方法和装置 | |
US20120109895A1 (en) | Versatile in-memory database recovery | |
JPH09505681A (ja) | リアルタイムシステムにおけるデータ管理システム | |
CN107148617A (zh) | 日志协调存储组的自动配置 | |
CN103546440B (zh) | 一种客户端发起事务的事务实现方法和系统 | |
Grand | Java Enterprise Design Patterns, Volume 3: Patterns in Java | |
JP2015514248A (ja) | 2フェーズコミットコールの厳密な順序付けに基づいたトランザクションリカバリをサポートするためのシステムおよび方法 | |
CN108958903A (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
Kotselidis et al. | Investigating software transactional memory on clusters | |
CN109086030A (zh) | 一种优化的Java Web三层架构及优化方法 | |
CN116701387A (zh) | 数据分段写入方法、数据读取方法及装置 | |
CN113391933A (zh) | 一种处理资金的方法 | |
JP3866448B2 (ja) | ノード間共用ファイル制御方式 | |
CN108958904A (zh) | 嵌入式多核中央处理器的轻量级操作系统的驱动程序框架 | |
Wittman et al. | Mozartspaces tutorial | |
Kumar et al. | Non-Blocking Commit Protocol |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |