JP2008547130A - メッセージ待ち行列の管理 - Google Patents

メッセージ待ち行列の管理 Download PDF

Info

Publication number
JP2008547130A
JP2008547130A JP2008519405A JP2008519405A JP2008547130A JP 2008547130 A JP2008547130 A JP 2008547130A JP 2008519405 A JP2008519405 A JP 2008519405A JP 2008519405 A JP2008519405 A JP 2008519405A JP 2008547130 A JP2008547130 A JP 2008547130A
Authority
JP
Japan
Prior art keywords
queue
data
data structure
queues
messages
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.)
Granted
Application number
JP2008519405A
Other languages
English (en)
Other versions
JP5762669B2 (ja
Inventor
スピロ ミハイロフ
サンジーブ バナージ
クレイグ ダブリュ スタンフィル
Original Assignee
エービー イニティオ ソフトウェア コーポレーション
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by エービー イニティオ ソフトウェア コーポレーション filed Critical エービー イニティオ ソフトウェア コーポレーション
Publication of JP2008547130A publication Critical patent/JP2008547130A/ja
Application granted granted Critical
Publication of JP5762669B2 publication Critical patent/JP5762669B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5016Session
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Abstract

データのそれぞれの部分を待ち行列の内の対応する一つへ書き込む、複数の待ち行列へデータを書き込むための方法、ならびに対応するシステムおよびソフトウエアを説明する。本方法は、二つ以上の待ち行列を同時にロックする必要なく、データの対応する部分を書き込むために利用できる空間が、それぞれの待ち行列にあるかどうかを判定し、利用できる場合は、待ち行列内にその空間を予約するステップを含む。本方法は、待ち行列の内の対応する一つへデータのそれぞれの部分を書き込むステップを含む。

Description

発明の詳細な説明
背景
本発明は、メッセージ待ち行列の管理に関する。
メッセージ待ち行列を用いて、アクセスエンティティ(例えば、サーバ、オペレーティングシステム、ソフトウエアモジュール等)がメッセージを交換するための非同期通信プロトコルを提供することができる。メッセージ待ち行列上に置かれたメッセージは、受信者(例えば、メッセージ待ち行列の契約者)がそのメッセージを取り出すまで、待ち行列データ構造内に格納される。
メッセージ待ち行列システムは、システム欠陥が起きてもメッセージが失われない(または、どの失われたメッセージも復元できる)のを保証する「永続性」を提供できる。永続性を達成する一方法は、揮発性メモリに格納されるメッセージを、例えば、入ってくるメッセージまたはデータのバイトを所与の数だけ受信した後、不揮発性メモリと同期させることである。
概要
一般的な態様では、本発明は、複数の待ち行列へデータを書き込むための方法、ならびに対応するソフトウエアおよびシステムを特徴とし、データのそれぞれの部分は、待ち行列の内の対応する一つへ書き込まれる。本方法は、二つ以上の待ち行列を同時にロックする必要なく、データの対応する部分を書き込むための空間が、それぞれの待ち行列内で利用できるかどうかを判定し、利用できる場合は、待ち行列内にその空間を予約するステップを含む。本方法は、待ち行列の内の対応する一つへそれぞれのデータ部分を書き込むステップを含む。
本態様は、下記の特徴の内の一つ以上を含むことができる。
それぞれのデータ部分を待ち行列の内の対応する一つへ書き込むステップは、待ち行列内の全ての空間を予約したステップの後に行われる。
本方法は、データ部分を対応する待ち行列へ書き込むステップの後、その待ち行列内に書き込まれたデータ部分に対する空間の予約を解放するステップを更に含む。
空間がそれぞれの待ち行列内で利用できるかどうかを判定し、利用できる場合、空間を予約するステップが、多数の待ち行列のそれぞれに対して:待ち行列をロックするステップ;空間が待ち行列内で利用できるかどうかを判定するステップ;利用できる場合、空間を予約するステップ;および待ち行列のロックを外すステップ;を含む。
待ち行列の内の対応する一つへ書き込まれたデータ部分のそれぞれは、レコードを含む。
本方法は、ジャーナルレコードを書き込んでから、何れかの待ち行列へレコードを書き込むステップを更に含む。
本方法は、待ち行列のそれぞれを不揮発性メモリと同期してから、ジャーナルレコードを書き込むステップを更に含む。
本方法は、レコードの内の一つ以外の他のデータを待ち行列の内の第1のものに書き込む前に、空間が第1待ち行列内に予約されていれば、第1待ち行列をロックし、その一方で、他のデータのために第1待ち行列内の追加の空間が利用可能かどうかを判定してから、他のデータを第1待ち行列へ書き込むステップを更に含む。
本方法は、レコードの内の一つ以外の他のデータを待ち行列の内の第1のものに書き込む前に、空間が第1待ち行列内にまだ予約されていなければ、第1待ち行列を必ずしもロックする必要なく、第1待ち行列へデータを書き込むステップを更に含む。
それぞれの待ち行列内で、データの対応する部分を書き込むための空間が利用できるかどうかを判定するステップは、待ち行列との何らかの未解決トランザクションに対するコミットレコードを書き込むために十分な空間が、それぞれの待ち行列内で利用できる、ということを確実にするステップを含む。
本方法は、待ち行列との何らかの未解決トランザクションに対するコミットレコードを書き込むために十分な空間が、待ち行列の少なくとも一つに予約されないと判定した後、対応するコミットレコードを複数の待ち行列のそれぞれへ書き込むのを中断するステップを含む。
待ち行列内に空間を予約するステップは、それぞれの待ち行列に対応するカウンタをインクリメントするステップを含む。
別の一般的な態様では、本発明は、待ち行列に対する第2データ構造とは別の第1データ構造内に、待ち行列に対する複数のメッセージを格納するステップ;メッセージと関係付けられるトランザクションをコミットするステップ;および連続メモリ場所から少なくとも幾つかのメッセージを読み出すステップを含む方法、ならびに対応するソフトウエアおよびシステムを特徴とする。
本態様は、一つ以上の下記特徴を含むことができる。
本方法は、第1データ構造を指すポインタを第2データ構造内に格納するステップを更に含む。
連続メモリ場所から少なくとも幾つかのメッセージを読み出すステップは、第1データ構造から少なくとも幾つかのメッセージを読み出すステップを含む。
トランザクションをコミットするステップは、第1データ構造から第2データ構造へメッセージを移動するステップを含む。
連続メモリ場所から少なくとも幾つかのメッセージを読み出すステップは、第2データ構造から少なくとも幾つかのメッセージを読み出すステップを含む。
第1データ構造は揮発性メモリ内に格納され、第2データ構造は不揮発性メモリ内に格納される。
本方法は、メッセージを第1データ構造から第3データ構造へ移動するステップ;および第3データ構造を指すポインタを第2データ構造内に格納するステップを更に含む。
連続メモリ場所から少なくとも幾つかのメッセージを読み出すステップは、第3データ構造から少なくとも幾つかのメッセージを読み出すステップを含む。
本発明の態様は、下記利点の内の一つ以上を含むことができる。
複合コミット動作が、複数の待ち行列のそれぞれへのレコードの書き込み成功を、二つ以上の待ち行列の同時ロックを必要とせずに保証するので、演算リソースの利用率が増加する。大規模書き込みトランザクションにおいて別のデータ構造へメッセージを書き込むと、他のメッセージを読み出す場合に、大規模書き込みトランザクションのレコードをスキャンする必要がなくなる。書き込みトランザクションにおいて別のデータ構造または書き込みバッファへメッセージを書き込んでから、それらを待ち行列へ追加すると、書き込みトランザクションにおいてそれらのメッセージとインターリーブされる他のメッセージの数が減少し、入力/出力(I/O)の効率が向上する。
本発明の他の特徴および利点は、下記説明、およびクレームにより明らかになる。
説明
1 概観
図1Aは、一セットの信頼済みアクセスエンティティ102A〜102Mそれぞれが、待ち行列マネージャ106と直接相互作用するための待ち行列トランザクションモジュール104を備える待ち行列システム100を示す。待ち行列システム100は、一セットの未信頼アクセスエンティティ108A〜108Nをも含み、それぞれのエンティティは、リモート手順呼出し(RPC)マネージャ112を通じて待ち行列マネージャ106と相互作用するための、リモート待ち行列トランザクションモジュール110を含む。
待ち行列システム100は、一つ以上のメッセージ待ち行列を通じて、アクセスエンティティ間でメッセージを渡すためのメカニズムを提供する。アクセスエンティティは、モジュールが待ち行列システム100と相互作用するためのインターフェースを提供する。例えば、分散演算システム内の「発行者」演算モジュールは、処理されたデータ要素を含むメッセージを、一つ以上の「契約者」演算モジュールへ渡すことができる。
待ち行列マネージャ106は、一セットのメッセージ待ち行列に対するメモリ格納を管理する入力/出力(I/O)マネージャ114と相互作用し、そのメッセージ待ち行列は、対応する待ち行列データ構造QUEUE_A〜QUEUE_Pを有し、この待ち行列データ構造はそれぞれ、揮発性メモリ格納118(半導体ランダムアクセスメモリ(RAM)等)内の格納空間(例えば、一セットのディスクページ)を割り当てられ、揮発性メモリ格納は、データの読み出しおよび書き込みについて比較的高速のアクセスを提供する一時的作業の格納である。I/Oマネージャ114は、揮発性メモリ格納よりデータの永続性が比較的高い恒久的格納であり、読み出しおよび書き込みのアクセスが比較的低速な不揮発性メモリ格納116(磁気ディスクシステム等)も管理する。オプションとして、全ての待ち行列に対するI/Oを扱う単一I/Oマネージャがあり、または待ち行列のサブセットに対するI/Oをそれぞれが扱う並列に実行されるマルチI/Oマネージャがある。
待ち行列データ構造は、配布中のデータメッセージを含む「メッセージレコード」(単に「メッセージ」とも称する)、および待ち行列システム100が待ち行列を管理するのに用いる情報を含む「制御レコード」を含むレコードを格納する。図1Bは、メッセージヘッダ130およびメッセージデータ132をそれぞれが含む一連のメッセージレコードを含む例示の待ち行列データ構造QUEUE_Mを示す。待ち行列は、オプションで、メッセージヘッダ130を伴うメッセージデータを格納でき、または代替として、外部に格納したメッセージデータ136のアドレスを規定するメッセージヘッダ130を伴うポインタ134を格納できる。後述の「大規模トランザクション間接技法」では、レコードは、メッセージシーケンスを格納する大規模トランザクションデータ構造122を指すポインタ138をオプションで含むことができる。
待ち行列システム100は、発行者−契約者データ配布モデルを含む各種のデータ配布モデルをサポートする。待ち行列に対して「発行者」として作用するアクセスエンティティ(信頼済みまたは未信頼のエンティティ)は、「書き込みトランザクション」内の待ち行列(トピックとも称する)へ一つ以上のメッセージを追加することができる。待ち行列に対して「契約者」として働くアクセスエンティティ(信頼済みまたは未信頼のエンティティ)は、「読み出しトランザクション」内の待ち行列から一つ以上のメッセージを読み出すことができる。複数の発行者が、同一待ち行列へメッセージを追加することができ、複数の契約者が、同一待ち行列から同一メッセージを読み出すことができる。待ち行列マネージャ106は、待ち行列に対する全ての契約者がメッセージを読み出した後、その待ち行列からメッセージを削除する。代替として、ポイント対ポイントのデータ配布モデルでは、多数のアクセスエンティティが待ち行列へメッセージを追加できるが、それぞれのメッセージは単一のアクセスエンティティにより待ち行列から読み出される。「複合トランザクション」は、詳細に後述するように、二つ以上の待ち行列との相互作用を含む。
本明細書で説明する書き込みトランザクション、読み出しトランザクションおよび複合トランザクションは、原子性(Atomicity)、整合性(Consistency)、分離性(Isolation)、および永続性(Durability)の頭字からなる「ACID」特性の内の一つ以上と調和する方法で実行することができる。
書き込みトランザクションを開始するには、発行者はトランザクション識別子(ID)を待ち行列マネージャ106から取得し、書き込みトランザクションにおいて待ち行列へ追加すべき一つ以上のメッセージを、待ち行列マネージャ106へ渡す。追加されたメッセージは、それらが待ち行列へ追加された書き込みトランザクションのトランザクションIDと関係付けられる。待ち行列マネージャ106は、メッセージをI/Oマネージャ114へ渡して、揮発性メモリ格納118へ書き込み、最終的に不揮発性メモリ格納116へ書き込む。待ち行列マネージャ106およびI/Oマネージャ114が実行する機能の役割分担を代替することができる。
発行者が、書き込みトランザクションにおいて追加すべき全てのメッセージを待ち行列マネージャ106に提供した後、発行者は、待ち行列マネージャ106に書き込みトランザクションを「コミット」または「ロールバック(元に戻す)」するようリクエストできる。書き込みトランザクションをコミットするためには、待ち行列マネージャ106は、不揮発性メモリ内の対応する待ち行列データ構造へ「コミットレコード」を追加する。コミットレコードは、コミット済み書き込みトランザクションのメッセージ(「コミット済みメッセージ」)を契約者へ渡すことができることを示す。書き込みトランザクションをコミットする前に、関係付けられるメッセージを揮発性メモリから不揮発性メモリに確実に同期する(まだ同期されていない場合)ことにより、メッセージを永続性のあるものにする。
待ち行列マネージャ106は、ロールバックされた書き込みトランザクションにおけるメッセージを、これらのメッセージが不揮発性メモリと同期されていない場合、破棄する。メッセージが不揮発性メモリと同期されている場合、「ロールバックレコード」を適切な待ち行列データ構造へ書き込んで、そのトランザクションにおけるメッセージはコミットされず、そのメッセージは最終的に破棄することができることを示す。実装によっては、所定の時間(例えば、1時間)が経過した後、書き込みトランザクションがコミットされず、またはロールバックされない場合、待ち行列マネージャ106は、オプションで自動的にトランザクションをロールバックして、例えば、これらのトランザクションの蓄積が格納空間を浪費するのを防ぐことができる。
読み出しトランザクションを開始するには、契約者は、トランザクションIDを取得し、一つ以上の次の未読メッセージを待ち行列マネージャ106から受信する。I/Oマネージャ114は、適切な待ち行列データ構造からメッセージを取り出すステップを扱い、待ち行列マネージャ106は、それらを契約者へ渡す。コミット済みメッセージだけが契約者へ渡され、コミットされたメッセージはまだコミットされていないメッセージとインターリーブされ得るので、メッセージは、それらが待ち行列データ構造へ書き込まれたのと同一の順序で渡しても、同一の順序で渡さなくてもよい。待ち行列マネージャ106は、詳細に後述するように、「読み出しデータ構造」を蓄積することにより、待ち行列内のどのメッセージを契約者へ渡すべきかを判定する。
「複合トランザクション」では、アクセスエンティティは、全てのメッセージが同一トランザクションIDと関係付けられる二つ以上の待ち行列へ、書き込みおよび/またはそこから読み出すことができる。複合トランザクションをコミットまたはロールバックすることもできる。複合トランザクションがコミットされると、「複合コミット」動作では、その複合トランザクションにおいてメッセージを書き込まれている待ち行列のそれぞれへ、コミットレコードが追加される。これらの「待ち行列コミットレコード」は、対応するコミット済みメッセージを契約者へ渡すことができることを表すのに用いる。
これらの「待ち行列コミットレコード」を書き込む前に、コミットされている複合トランザクションのトランザクションIDを含むジャーナルデータ構造124へ、「ジャーナルコミットレコード」を書き込む。ジャーナルコミットレコードは、オプションで、複合トランザクションに参加しているアクセスエンティティおよび関与する待ち行列データ構造のような他の情報も含むことができる。トランザクションに書き込まれるメッセージ全てを永続的に格納するか、またはどれも永続的に格納しないか、の何れかを確実に行う(例えば、追加されたメッセージ全てを、障害が発生するとロールバックする)原子動作として、複合コミット動作を実行する。ジャーナルコミットレコードの書き込みは、複合コミット動作を完了させる原子作用である。ジャーナルコミットレコードが書き込まれた後に障害が起きて、それが待ち行列コミットレコード全てが書き込まれる前であった場合、待ち行列システム100は、永続的に格納されたジャーナルコミットレコードに基づいて復元でき、残りの待ち行列コミットレコードを書き込む。
I/O効率を向上させるために、待ち行列マネージャ106は、オプションで、待ち行列データ構造とは別のデータ構造内に、待ち行列に対する新規メッセージを格納することにより、異なるトランザクションからのメッセージのインターリーブを減少させる技法を用いる。例えば、待ち行列システム100は、この種のメッセージインターリーブを減少させる二つの技法を含む:後述する「書き込みバッファ技法」および「大規模トランザクション間接技法」である。
書き込みバッファ技法では、I/Oマネージャ114は、最初に、待ち行列に対する未コミットメッセージを、揮発性メモリ格納118内の書き込みバッファ120内に一時的に格納する。メッセージと関係付けられる書き込みトランザクションがコミットされたら、それらのメッセージを書き込みバッファ120から適切な待ち行列データ構造へ移動する。例えば、書き込みバッファ120が一杯か、または所定の時間経過後の場合は、書き込みトランザクションがコミットされる前に、メッセージを書き込みバッファ120から適切な待ち行列データ構造へ移動してもよい。代替として、書き込みバッファ120を、不揮発性メモリ格納116内に格納することができ、それでも同一機能の内の一部を提供できる(例えば、異なるトランザクションからのメッセージのインターリーブを減少させる)。
大規模トランザクション間接技法では、大規模数のメッセージ(例えば、コンピュータ環境の特性に応じて、10,000、100,000、1,000,000等を越える等)を含む書き込みトランザクションは、発行者により「大規模トランザクション」として識別される。待ち行列マネージャ106は、大規模トランザクションのメッセージを大規模トランザクションデータ構造(LTDS)122内に格納し、LTDS122を指すポインタを待ち行列データ構造内に格納する。待ち行列マネージャ106は、オプションで、書き込みトランザクション内に所定の数のメッセージを検出したら、書き込みトランザクションを大規模トランザクションへオンザフライで自動的に変換できる。書き込みバッファ技法と大規模トランザクション間接技法はともに、メッセージデータを連続メモリ場所内に格納する可能性を高めて、I/O効率を向上させる。
2 メッセージの追加および読み出し
I/Oマネージャ114は、不揮発性メモリ118内の順序付けられた待ち行列データ構造へメッセージを格納する場合、どの特定の書き込みトランザクションに対するメッセージも、待ち行列マネージャ106へ提示された順序で維持する。待ち行列データ構造内に格納されたメッセージの順序は、例えば、現在、待ち行列データ構造の一部となっているディスクページのリンクリストにより判定される。異なる書き込みトランザクションに対するメッセージは、待ち行列データ構造内でインターリーブすることができる。新規の書き込みトランザクションを、前に開始された書き込みトランザクションをコミットした後で開始する場合、新規書き込みトランザクションと関係付けられる全てのメッセージは、前の書き込みトランザクション内のメッセージ全てが待ち行列データ構造内で処理された後に行われる。
契約者は、読み出しトランザクションを開始し、その中で待ち行列から一つ以上のメッセージをリクエストすることができる。契約者が受信するメッセージは、一つの書き込みトランザクションから来ることも、書き込みトランザクションのサブセットから来ることも、または二つ以上の書き込みトランザクションから来ることもある。詳細に後述するように、待ち行列マネージャ106は、コミット済み書き込みトランザクションからメッセージを契約者へ渡す。同一の書き込みトランザクション内に書き込まれていたメッセージは、書き込みトランザクションの順序で契約者へ提供される。異なる書き込みトランザクションからのメッセージは、書き込みトランザクションがコミットされた順序で契約者へ提供される。待ち行列の異なる契約者が読み出すメッセージは、これらの契約者が同一順序で見る。
異なる書き込みトランザクションからのメッセージが、待ち行列データ構造内にインターリーブされるという程度にまで、読み出しトランザクションのI/O効率が低下することがある。例えば、待ち行列マネージャ106は、メッセージがコミットされたと判断するまで、メッセージを契約者へ渡さない。メッセージおよびそのメッセージと対応するコミットレコードを分離するデータが多いほど、用いられる管理リソース(例えば、メモリ、または読み出し動作)は多くなる。書き込みトランザクションと関係付けられるメッセージ(特に、書き込みトランザクションの最初のメッセージ)は、例えば、メッセージが追加されてから、関係付けられる書き込みトランザクションがコミットされるまでの間に長い時間を要する場合、その書き込みトランザクションに対するコミットレコードと遠く離れていることがある。その時間の間、メッセージは、他のメッセージ(例えば、他の書き込みトランザクションと関係付けられるメッセージ)とインターリーブされる待ち行列データ構造内に格納されることになる。更に、その書き込みトランザクション内のメッセージは、遠く離れたディスクページ上に存在することもある。読み出しトランザクションでは、待ち行列マネージャ106は、コミットレコードに対する待ち行列データ構造をスキャンし、その書き込みトランザクションに対するメッセージが格納されるページ全てを遡ってスワップしなければならないことになる。
2.1 書き込みバッファ
図2A〜図2Eは、上記に説明した書き込みバッファ技法の例示を実行している間の、書き込みバッファ120および待ち行列データ構造QUEUE_Aの状態を示す。書き込みバッファ120は、待ち行列レコード(例えば、メッセージレコードおよび書き込みトランザクションの開始を示す「オープン」レコード)に対する一時的な格納である。書き込みバッファ120は、対応するトランザクションがコミットされるか、または書き込みバッファ120が「一杯」になるまで、レコードを保持する。待ち行列マネージャ106は、データの最大量、メッセージの最大数に基づいて、またはデータの量とメッセージの数の組み合わせに基づいて、書き込みバッファ120が一杯になる時間を判定できる。本実施例では、説明のために過ぎないが、書き込みバッファ120は、最大3つのメッセージを保持する。書き込みバッファ120は、メッセージが追加された順序を保存する順序付けデータ構造(例えば、リンクリスト)とともに実装する。書き込みバッファ120および待ち行列データ構造QUEUE_Aを、メッセージがリストの底部の「ヘッド」へ追加されるリストとして示す。
図2Aを参照すると、待ち行列データ構造QUEUE_Aは、書き込みトランザクションT1の開始を示す「OPEN
T1」レコード、およびトランザクションT2の開始を示す「OPEN T2」レコードを保持する。書き込みバッファ120は、ヘッダ:「T1:ADD M1」、「T2:ADD
M1」、および「T1:ADD M2」を有するメッセージを保持する。各メッセージのメッセージデータも、対応するメッセージヘッダと併せて書き込みバッファ120内に格納する。本実施例では、書き込みトランザクションT1と関係付けられる二つのメッセージが、書き込みトランザクションT2と関係付けられるメッセージとインターリーブされる。これは、例えば、T1およびT2が異なる発行者により同時に書き込まれたためである。
図2Bを参照すると、待ち行列マネージャ106は、トランザクションT1(メッセージヘッダおよび関係付けられるメッセージデータを含む)に対するメッセージM1およびM2を、QUEUE_Aへ移動し、メッセージを不揮発性メモリへ同期したことを確認した後、書き込みトランザクションT1に対するコミット動作を実行する。コミットレコード「COMMIT
T1」をメッセージの後でQUEUE_Aへ書き込んで、コミット動作を完了させる。T1メッセージをQUEUE_Aへ移動した後、単一のT2メッセージが書き込みバッファ内に残る(T2はまだコミットされていないので)。
図2Cを参照すると、発行者が、新規書き込みトランザクションT3を開いて、ヘッダ「T3:ADD M1」および「T3:ADD M2」を有する二つのメッセージを待ち行列へ追加する。両者は、二つの空いているスロットを有する書き込みバッファ120内に格納される。次いで、待ち行列マネージャ106は、ヘッダ「T2:ADD
M1」を有するT2の唯一のメッセージM1をQUEUE_Aへ移動した後、書き込みトランザクションT2に対するコミット動作を実行する。次いで、発行者は、新規の書き込みトランザクションT4を開いて、ヘッダ「T4:ADD
M1」を有するメッセージを、最後に残っている書き込みバッファ120のスロット内の待ち行列へ追加する。書き込みトランザクションT1およびT2と関係付けられるメッセージは、当初インターリーブされていたが、インターリーブを解かれて、書き込みバッファ120からQUEUE_Aへの転送の一部として、待ち行列データ構造QUEUE_A内に連続して格納されている。
図2Dを参照して、発行者がT4に対する第2メッセージを追加すると、書き込みバッファ120が一杯なので、待ち行列マネージャ106は、T3と関係付けられるメッセージを書き込みバッファ120からQUEUE_Aへ転送する。この転送は、第2のT4メッセージに対して書き込みバッファ120内の空間を空ける。このように、書き込みトランザクション内のメッセージは、コミットされる前に書き込みバッファ120から転送されることもある。
図2Eを参照すると、待ち行列マネージャ106は、書き込みトランザクションT4に対するコミット動作を実行し、新規のT3メッセージを受信し、書き込みトランザクションT3に対するコミット動作を実行する。本実施例は、書き込みのバッファ処理がメッセージのインターリーブ(または一時的な断片化)を低減するが、書き込みバッファ120が一杯になることにより、書き込みバッファ処理を用いても何らかの一時的な断片化が依然として起きることを示す。代替として、書き込みバッファ120が一杯の場合、一つ以上の書き込みトランザクションを大規模トランザクションに変換して、待ち行列データ構造に一時的な断片化を起こさずに、書き込みバッファ120内の空間を空けることができる。
実装によっては、それぞれの待ち行列は自身の書き込みバッファを有する。代替として、書き込みバッファ120は二つ以上の待ち行列に対するメッセージを保持してもよい。一実施例では、三つの書き込みトランザクションT1〜T4に対するメッセージを二つの待ち行列へ追加する。図3Aは、書き込みバッファ120が一杯の場合(本実施例では、書き込みバッファ120が10個のメッセージを保持する)の、書き込みバッファ120および待ち行列データ構造QUEUE_A、QUEUE_Bの状態を示す。図3Bは、二つの新規メッセージ(書き込みトランザクションT1、T4に対する)が追加された後の、書き込みバッファ120および待ち行列データ構造QUEUE_A、QUEUE_Bの状態を示す。最も古いトランザクションT1と関係付けられるメッセージはQUEUE_Aへ転送され、新規メッセージのための書き込みバッファ120内の空間が空いている。
2.2 読み出しデータ構造
待ち行列マネージャ106は、待ち行列内のメッセージレコードを順次スキャンし、メッセージヘッダだけを読み出して、それぞれのメッセージがどのトランザクションと関係付けられるかを判定することにより読み出しデータ構造を蓄積する。待ち行列マネージャ106は、読み出しデータ構造を用いて、多数となる可能性のある書き込みトランザクションの経過を追跡する。それぞれの待ち行列に対して、待ち行列マネージャ106は、その待ち行列の各契約者に対する読み出しデータ構造を格納する。
図4は、QUEUE_Aと対応する例示の読み出しデータ構造400を示す。本実施例では、読み出しデータ構造400は、先入れ先出し(FIFO)のサブリスト401〜404の順序付けられたリストを含む。待ち行列マネージャ106が、新規書き込みトランザクションと対応するメッセージを見付けるたびに、新規のFIFOサブリストを、その書き込みトランザクションのトランザクションIDにより識別される読み出しデータ構造400へ追加する。待ち行列マネージャ106は、各FIFOサブリストへ、対応する書き込みトランザクションと関係付けられるそれぞれのメッセージを指すポインタを、スキャンされる順序で(例えば、待ち行列へ追加した順序で)追加する。
図4に示す待ち行列データ構造QUEUE_Aをスキャンする際には、待ち行列マネージャ106は、メッセージM1およびM2を指すポインタを有する、書き込みトランザクションT1に対する第1FIFOサブリスト401を生成する。待ち行列マネージャ106は、メッセージがコミットされたことを確認するまで(すなわち、関係するトランザクションに対するコミットレコードをスキャンするまで)、対応する契約者へ(読み出しトランザクションへ応答して)メッセージを返すのを開始しない。T1に対するコミットレコードに到達した後、T1に対するFIFOサブリスト401が完成し、待ち行列マネージャ106は、読み出しデータ構造400を蓄積するのを一時的に停止して、FIFOサブリスト401内のポインタに基づいて次のメッセージを取り出し、契約者が新規メッセージを請求した場合、そのメッセージを契約者へ渡す。完成したFIFOサブリスト401内の全てのメッセージを契約者へ渡した後、待ち行列マネージャ106は、QUEUE_Aのスキャンを再開して、次のFIFOサブリスト402が完成するまで、読み出しデータ構造400の蓄積を継続する。待ち行列マネージャは、完成したFIFOサブリストから契約者へメッセージを渡すことと、待ち行列データ構造をスキャンして読み出しデータ構造を蓄積することとを交互に行う。本実施例では、T4のコミットレコードはT3のコミットレコードの前に行われるので、T3に対するメッセージM1〜M3の前に、T4に対するメッセージM1およびM2を契約者へ渡す。代替の実施では、待ち行列マネージャは、完成したFIFOサブリスト内の全メッセージを契約者へ渡す前に、契約者へメッセージ渡すことから読み出しデータ構造の蓄積へと移行することができる。
それぞれのFIFOサブリストは、対応する契約者がそのFIFOサブリスト内の全メッセージを受け取るまで、または待ち行列マネージャ106が、対応する書き込みトランザクションはコミットされないと判定する(例えば、ロールバックレコードを読んだ後)まで、維持される。読み出しトランザクションをコミットしてから、契約者がどのメッセージを読み出したかを示すジャーナルデータ構造124へコミットレコードを書き込む。待ち行列マネージャ106が読み出しデータ構造400の蓄積を終了した後、読み出しデータ構造400を、同一契約者に対する同一待ち行列からの次の読み出しトランザクションのために維持する。
2.3 大規模トランザクション間接化
図5を参照して、待ち行列マネージャ106が大規模トランザクションT2を開くと、待ち行列マネージャ106は、不揮発性メモリ格納116内に大規模トランザクションデータ構造(LTDS)122を配置する。大規模トランザクションのメッセージが到着すると、メッセージの連続リストとしてLTDS
122へ直接書き込まれる。大規模トランザクションがコミットされると、待ち行列マネージャ106は、LTDS 122を閉じ、待ち行列データ構造QUEUE_P内の間接メッセージ500内にLTDS 122へのポインタを格納する。間接メッセージ500は、大規模トランザクションT2のトランザクションIDも含む。
待ち行列マネージャ106が、QUEUE_Pに対する読み出しデータ構造を蓄積すると、T1メッセージは二回スキャンされる。一回目は、読み出しデータ構造のFIFOサブリストを指すポインタを書き込むとき、もう一回目は、契約者へ返すメッセージを読み出すときである。この二回のスキャンは、大規模トランザクションT2の多数のメッセージがQUEUE_P内に格納されるとしたら、非効率であろう。その代わりに、待ち行列マネージャ106がQUEUE_Pに対する読み出しデータ構造を蓄積していて、単一の間接メッセージ500をスキャンする場合、待ち行列マネージャ106は、T2に対するFIFOサブリストを必ずしも必要とせずに、LTDS
122からメッセージを契約者へ直接渡すことができる。大規模トランザクションがコミットされていると自動的に指示されるので、どの大規模トランザクションメッセージも、契約者へ渡す前にスキャンする必要はない。また、スキャンの別の機能、異なるトランザクションからのメッセージの「非インターリーブ化」が不要になる。大規模トランザクションT2内の全てのメッセージを返した後、待ち行列マネージャ106は、待ち行列データ構造へ戻る。
大規模トランザクションは、発行者により選択されるか、または待ち行列によりオンザフライで推定されるオプションとすることができる。
3 複合コミット
複合コミット動作では、待ち行列マネージャ106は、複数の待ち行列へ書き込む複合トランザクションの追加メッセージ全てが、確実に、永続的に格納されているようにする。複合コミット動作の一部は、これらの待ち行列へコミットレコードを書き込むステップを含む。一つ以上のアクセスエンティティが待ち行列に同時にアクセスでき、その一方で、アクセスエンティティに複合コミット動作へ干渉させずに、複合コミット動作を実行するメカニズムを提供することが有用である。
待ち行列マネージャ106は、ジャーナルデータ構造124へジャーナルコミットレコードを書き込むことにより、複合トランザクションのメッセージが永続的に格納されている(すなわち、不揮発性メモリと同期されている)ことを示す。続いて、待ち行列マネージャ106は、複合トランザクションにおいてメッセージが書き込まれている待ち行列のそれぞれに、待ち行列コミットレコードを書き込む(例えば、読み出しデータ構造を蓄積するためにコミットレコードに対して待ち行列をスキャンできるように)。待ち行列データ構造には格納空間の制約があるので、複合コミット動作に対するタイムアウト期間内に(例えば、5秒間)、コミットレコードを書き込むのに十分な残り空間を幾つかの待ち行列が持っていない可能性がある。待ち行列データ構造が複合コミット動作の開始時に利用できる空間を持っていたとしても、同時に行われる書き込み動作が、待ち行列コミットレコードが書き込まれる前にその空間を使い切ってしまうこともある。コミットレコードに対する待ち行列内の空間の不足は、メッセージがコミットされていることをジャーナルデータ構造124が示すにもかかわらず、契約者にそのメッセージを受信させるための対応コミットレコードが待ち行列内にないので、潜在的な問題となる。
複合コミット動作に対する待ち行列コミットレコード管理の一手法では、待ち行列マネージャ106が、コミットレコードを書き込む間、各待ち行列を同時にロックし、コミット動作中に空間が使い尽くされるのを防ぐことにより、待ち行列のそれぞれにコミットレコードのための十分な空間を利用できるのを確実にする。第2、第3の手法では、複合コミット動作を更に効率的に実行するため、待ち行列マネージャ106は、二つ以上の待ち行列の同時ロックを必要としないで、複数の待ち行列のそれぞれへのコミットレコードの書き込み成功を保証する方法を用いる。これら3つの各方法については詳細に後述する。
図6を参照すると、待ち行列データ構造QUEUE_AおよびQUEUE_Dは、トランザクションIDがT1、T2およびT3の複合トランザクションのメッセージならびにトランザクションIDがT4の書き込みトランザクションを含む。複合トランザクションT1はコミットされていて、T1のコミットレコードは、QUEUE_AおよびQUEUE_Dへ書き込まれている。トランザクションT2、T3およびT4はまだコミットされていない。複合トランザクションT2に対する複合コミット動作と関係付けられるQUEUE_AおよびQUEUE_Dの動作を、3つの例示の手法それぞれについて下記に説明する。
3.1 第1手法
図7は、コミットレコード書き込み動作700のフロー図を示す。待ち行列マネージャ106は、複合トランザクション内に含まれる各待ち行列をロックする702。図6の実施例では、待ち行列マネージャ106は、QUEUE_AおよびQUEUE_Dをロックする(例えば、ロックフラグを設定することにより)。このロックは、何らかの他のプロセスが、待ち行列データ構造内の利用できる空間を占有するのを防ぐ。
各待ち行列をロック702した後、待ち行列マネージャ106は各待ち行列内の利用できる格納空間をチェックする704。図6の実施例では、待ち行列データ構造QUEUE_Aは、利用できる格納600のブロックを有し、待ち行列データ構造QUEUE_Bは、利用できる格納602のブロックを有する。待ち行列マネージャ106は、各待ち行列内の利用できる空間量を、コミットされる複合トランザクションに対するコミットレコードを書き込むのに用いるであろう空間量と比較する。どの待ち行列も、コミットレコードに確保される利用可能な空間を十分に持たない場合、待ち行列マネージャ106は、複合コミット動作を中断する706。待ち行列マネージャ106は、後で複合コミット動作を試みることができ、および/または一つ以上の待ち行列に対する格納空間の更なる取得を試みることができる。
待ち行列が、コミットレコードに確保される格納空間を十分に持つ場合、待ち行列マネージャ106は、それぞれの待ち行列を同期して708、揮発性メモリ内に格納されるどのメッセージも不揮発性メモリへ移動したことを確認する。それぞれの待ち行列が同期されてから、待ち行列マネージャ106は、コミットレコードをジャーナルデータ構造126へ書き込む710。ジャーナルコミットレコードを書き込んだ後、待ち行列マネージャ106は、それぞれの待ち行列へコミットレコードを書き込む712。コミットレコードを待ち行列へ書き込んだ後、待ち行列マネージャ106はその待ち行列のロックを外す714。
ジャーナルコミットレコードの書き込みは、複合コミット動作を復元可能な時点を定義する原子動作である。待ち行列システム100が、待ち行列マネージャ106がジャーナルコミットレコードを書き込む710前に、複合コミット動作中に障害を起こした場合、コミット動作を待ち行列全てに対して中断する(待ち行列の幾つかが不揮発性格納へ同期されていないかもしれず、コミットレコードがどの待ち行列にも書き込まれていないこともあるからである)。待ち行列システム100が、待ち行列マネージャ106がジャーナルコミットレコードを書き込んだ710後、複合コミット動作中に障害を起こした場合、コミット動作を、待ち行列全てに対して完了させる(それぞれの待ち行列が不揮発性格納へ同期されていて、コミットレコードをジャーナルコミットレコードから復元できるからである)。
3.2 第2手法
第2手法では、待ち行列マネージャ106は、各待ち行列内の利用できる空間量を、コミットされる複合書き込みトランザクションおよび何らかの未解決トランザクションに対するコミットレコードを書き込むのに用いるであろう空間量と比較する(本明細書で使用しているように、「未解決トランザクション」は、複合トランザクションおよび書き込みトランザクションの両方を含む)。待ち行列データ構造QUEUE_Aは、T2および未解決トランザクションT3に対するコミットレコードを書き込むために予約される記憶装置604のブロックを含む。待ち行列データ構造QUEUE_Bは、T2および未解決トランザクションT3およびT4に対するコミットレコードを書き込むために予約される記憶装置606のブロックを含む。
図8Aは、書き込みトランザクションの開始時に実行される「オープン動作」800のフロー図を示す。各待ち行列QUEUE_iに対して、待ち行列マネージャ106は、コミットレコードが未だ書き込まれていない未解決トランザクションの数Tiの経過を追跡する。QUEUE_iに関する新規トランザクションを開き、およびTiをインクリメントする前に、待ち行列マネージャ106は、待ち行列(単純な書き込みトランザクションについては単一の待ち行列、または複合トランザクションにおいてはメッセージが追加されているそれぞれの待ち行列)をロックし802、チェックして804、「オープンレコード」およびコミットレコードに対する空間が存在するよう確保する。待ち行列マネージャ106は、現在利用できる空間を次式により与えられるDoと比較する:
o = size_of(1オープンレコード)+size_of(1コミットレコード)×(Ti+1)
利用できる空間がDo以上の場合、待ち行列マネージャ106は、QUEUE_iのロックを外し806、「オープンレコード」を書き込み808、未解決トランザクションの数Tiをインクリメントする810。あるいは、利用できる空間がDo未満の場合、待ち行列マネージャ106は、QUEUE_iのロックを外し812、オープン動作800を中断する814。
図8Bおよび図8Cは、コミットレコード書き込み動作840および関係する書き込み動作850それぞれのフロー図を示す。待ち行列マネージャ106(またはI/Oマネージャ114)は、コミット動作に対するコミットレコード書き込み動作840を用いるとともに、書き込み動作850を用いて(同時に起きる可能性がある)、待ち行列へコミットレコード以外の何らかのデータを書き込む。この手法では、コミットレコード書き込み動作840は、待ち行列内の利用できる空間に対するチェックを必要としない。その理由は、書き込み動作850が、待ち行列データ構造へ何らかのデータを書き込む前にこのチェックを含むからである。待ち行列マネージャ106は、詳細に後述するように、各待ち行列QUEUE_iが、その待ち行列に対するTi個の未解決トランザクションそれぞれに対するコミットレコードのための十分な空間予約を確保する。従って、コミットレコード書き込み動作840を実行する際、待ち行列マネージャ106は、空間が各コミットレコードのために予約されたことを前提とすることができる。
図8Bを参照すると、コミットレコード書き込み動作840では、待ち行列マネージャ106は、最初に各待ち行列を同期させる842。各待ち行列を同期させた後、待ち行列マネージャ106は、ジャーナルコミットレコードを書き込む844。ジャーナルコミットレコードを書き込んだ後、待ち行列マネージャ106は各待ち行列へコミットレコードを書き込む846。
図8Cを参照すると、待ち行列マネージャ106は、待ち行列データ構造へ書き込まれるデータに対して書き込み動作850を用いる。待ち行列マネージャ106は、書き込まれるデータがコミットレコードかどうかを最初に判定する852。Yesであれば、待ち行列マネージャ106は、コミットレコード854を書き込み、未解決トランザクションの数Tiをデクリメントする856。Noであれば、待ち行列マネージャ106は待ち行列をロックし858、待ち行列内で利用できる格納空間をチェックする860。待ち行列マネージャ106は、現在の利用できる空間を次式で与えられるDwと比較する:
w = size_of(書き込まれるデータ)+size_of(1コミットレコード)×Ti
ここで、size_of(data)は、適切な単位(例えばバイト)のdataのサイズを返す。利用できる空間がDw以上の場合、待ち行列マネージャ106は、データを書き込み862、待ち行列のロックを外す864。あるいは、利用できる空間がDW未満の場合、待ち行列マネージャ106は、待ち行列のロックを外し866、書き込み動作850を中断する868。本手法では、格納空間をチェックする間、データを書き込む待ち行列である単一の待ち行列だけがロックされる。
3.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における待ち行列の数)、ループ902(または、等価の制御構造)を実行する。ループ902は、多数の複合コミット動作が同時に実行される可能性があることを考慮できる方法で、QUEUE_iに対する予約モードをONにする。本実施例では、ループ902は、QUEUE_iに対する予約モードカウンタRiをインクリメントする904。予約モードカウンタは、QUEUE_iが予約モード状態にない初期値、例えば、Ri=0、で開始する。Ri>0の場合、QUEUE_iは予約モード状態にある。これにより、待ち行列の予約モード状態が、その待ち行列が予約モードとなった回数に対応するようになる。
予約モードカウンタをインクリメントした後、ループ902内で、待ち行列マネージャ106はQUEUE_iをロックし906、QUEUE_i内で利用できる格納空間をチェックする908。待ち行列マネージャ106は、現在の利用できる空間を、次式により与えられるDcと比較する:
c = size_of(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。Yesであれば、待ち行列マネージャ106は、コミットレコード954を書き込み、未解決トランザクションの数Tiをデクリメントする956。Noであれば、待ち行列マネージャ106は、待ち行列が予約モード状態かどうかを判定する958(例えば、Ri>0かどうかを判定することにより)。待ち行列が予約モード状態にない場合、待ち行列マネージャ106は、データを書き込む960。待ち行列が予約モード状態の場合、待ち行列マネージャ106は待ち行列をロックし962、待ち行列内で利用できる格納空間をチェックする964。待ち行列マネージャ106は、現在の利用できる空間を第2手法について上記で定義したDwと比較する。利用できる空間がDw以上の場合、待ち行列マネージャ106は、データを書き込み966、待ち行列のロックを外す968。あるいは、利用できる空間がDW未満の場合、待ち行列マネージャ106は、待ち行列のロックを外し970、書き込み動作950を中断する972。
3.4 他の手法
二つ以上の待ち行列を同時ロックせずに、多数の待ち行列のそれぞれへの、コミットレコードの書き込み成功を保証するコミット動作を管理するための他の手法が可能である。例えば、第3の手法の変形形態では、全ての未解決トランザクションのカウントTiを用いる代わりに、待ち行列マネージャ106は、Dcおよび/またはDWの計算に対して予約モードRi状態の待ち行列の数を用いる。手法によっては、ジャーナルコミットレコードを書き込む前に、待ち行列コミットレコードに対する空間が不足しているためにコミット動作が失敗しても許容される。
4 実装
本明細書で説明した待ち行列管理機能をコンピュータ上で実行するためにソフトウエアを用いて実装することができる。例えば、ソフトウエアは、一台以上のプログラム済みまたはプログラム可能なコンピューターシステム(分散型、クライアント/サーバ型、またはグリッド型等の各種アーキテクチャから構成できる)上で実行される一つ以上のコンピュータープログラム内の手順を形成する。それぞれのコンピューターシステムは、少なくとも一つのプロセッサ、少なくとも一つのデータ格納システム(揮発性メモリおよび不揮発性メモリおよび/または記憶素子を含む)、少なくとも一つの入力装置またはポート、および少なくとも一つの出力装置またはポートを含む。ソフトウエアは、例えば、計算グラフの設計および構成と関連する他のサービスを提供する、規模の大きなプログラムの内の一つ以上のモジュールを形成してもよい。本明細書で説明するデータ構造を、コンピュータ可読媒体内に格納したデータ構造、またはデータ収納庫内に格納したデータモデルへ準拠する他の体系化したデータ、として実装することができる。
本ソフトウエアは、汎用または専用のプログラム可能なコンピュータにより読み込むことができるCD−ROMのような媒体上で提供するか、またはネットワークを介してソフトウエアが実行される場所であるコンピュータへ配布する(伝搬信号で符号化される)ことができる。機能全てを専用コンピュータ上で、またはコプロセッサ等の専用ハードウエアを用いて、実行することができる。本ソフトウエアは、ソフトウエアにより規定される異なる計算部分を異なるコンピュータで実行する分散型で実装できる。このようなコンピュータープログラムはそれぞれ、格納媒体または汎用もしくは専用のプログラム可能なコンピュータに可読の装置(例えば、固体メモリもしくは媒体、または磁気もしくは光学媒体)に格納するか、ダウンロードして、格納媒体または格納装置をコンピューターシステムが読み出す際に、本明細書で説明した手順を実行するようにコンピュータを構成し、動作させるのが好ましい。本発明のシステムは、コンピュータープログラムで構成されたコンピュータ可読格納媒体として実装し、そのように構成される格納媒体が、コンピューターシステムを規定の方法、所定の方法で動作させて、本明細書で説明した機能を実行させると考えることもできる。
理解すべきは、上記説明が説明を意図していて本発明の範囲を限定する意図はなく、本発明の範囲は、付帯のクレーム範囲により定義されるということである。例えば、上記説明の機能ステップの幾つかは、全体の処理に実質的に影響を与えることなく異なる順序で実行してもよい。他の実施の形態は以下のクレームの範囲内にある。
図1Aは、待ち行列システムの図である。 図1Bは、待ち行列データ構造の図である。 図2Aは、書き込みバッファおよび待ち行列データ構造の図である。 図2Bは、書き込みバッファおよび待ち行列データ構造の図である。 図2Cは、書き込みバッファおよび待ち行列データ構造の図である。 図2Dは、書き込みバッファおよび待ち行列データ構造の図である。 図2Eは、書き込みバッファおよび待ち行列データ構造の図である。 図3Aは、書き込みバッファおよび二つの待ち行列データ構造の図である。 図3Bは、書き込みバッファおよび二つの待ち行列データ構造の図である。 図4は、待ち行列データ構造および対応する読み出しデータ構造の図である。 図5は、待ち行列データ構造および大規模トランザクションデータ構造の図である。 図6は、複合コミット動作の一部である待ち行列データ構造の図である。 図7は、複合コミット動作のフロー図である。 図8Aは、オープン動作のフロー図である。 図8Bは、複合コミット動作および関係する書き込み動作それぞれのフロー図である。 図8Cは、複合コミット動作および関係する書き込み動作それぞれのフロー図である。 図9Aは、複合コミット動作および関係する書き込み動作それぞれのフロー図である。 図9Bは、複合コミット動作および関係する書き込み動作それぞれのフロー図である。

Claims (24)

  1. 複数の待ち行列へデータを書き込むための方法であって、前記データのそれぞれの部分は前記待ち行列の内の対応する一つへ書き込まれ、前記方法は:
    二つ以上の待ち行列を同時にロックする必要なく、それぞれの待ち行列内に、前記データの対応する部分を書き込むための空間が利用できるかどうかを判定し(902)、利用できる場合は、前記待ち行列内に前記空間を予約するステップ;および、
    前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込む(920)ステップ;を含む方法。
  2. 前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込むステップは、前記待ち行列内の前記空間全てを予約した後に行われる、
    請求項1の方法。
  3. 前記データの一部を前記対応する待ち行列内に書き込んだ後、その待ち行列内に書き込まれた前記データの一部のための前記空間の前記予約を開放するステップを更に含む、
    請求項1の方法。
  4. それぞれの待ち行列内に前記空間が利用できるかどうかを判定し、利用できる場合は、前記空間を予約するステップは、多数の前記待ち行列のそれぞれに対して:
    前記待ち行列をロックするステップ;
    前記空間が前記待ち行列内に利用できるかどうかを判定するステップ;
    利用できる場合は前記空間を予約するステップ;および、
    前記待ち行列のロックを外すステップ;を含む、
    請求項1の方法。
  5. 前記待ち行列の内の対応する一つへ書き込まれる前記データのそれぞれの部分は、レコードを含む、
    請求項1の方法。
  6. ジャーナルレコードを書き込んでから、前記待ち行列の何れかへ前記レコードを書き込むステップを更に含む、
    請求項5の方法。
  7. 前記待ち行列のそれぞれを不揮発性メモリへ同期してから、前記ジャーナルレコードを書き込むステップを更に含む、
    請求項6の方法。
  8. 前記待ち行列の内の第1のものへ、前記レコードの内の一つ以外の他のデータを書き込む前に、前記第1待ち行列内に空間が予約されている場合、前記他のデータに対して、前記第1待ち行列内に追加空間が利用できるかどうかを判定する間、前記第1待ち行列をロックしてから、前記他のデータを前記第1待ち行列へ書き込むステップを更に含む、
    請求項5の方法。
  9. 前記待ち行列の内の第1のものへ、前記レコードの内の一つ以外の他のデータを書き込む前に、前記第1待ち行列内に空間が未だ予約されていない場合、前記第1待ち行列を必ずしもロックする必要なく、前記データを前記第1待ち行列へ書き込むステップを更に含む、
    請求項5の方法。
  10. それぞれの待ち行列内に、前記データの対応する部分を書き込むための空間が利用できるかどうかを判定するステップは、それぞれの待ち行列内に、前記待ち行列との何れかの未解決トランザクションに対するコミットレコードを書き込むのに十分な空間が利用できることを確実にするステップを含む、
    請求項1の方法。
  11. 前記待ち行列の少なくとも一つに、前記待ち行列との何れかの未解決トランザクションに対するコミットレコードを書き込むのに十分な空間が予約されていないと判定した後、前記複数の待ち行列のそれぞれへ前記対応するコミットレコードを書き込むのを中断するステップを更に含む、
    請求項10の方法。
  12. 前記待ち行列内に前記空間を予約するステップは、それぞれの待ち行列に対応するカウンタをインクリメントするステップを含む、
    請求項1の方法。
  13. 複数の待ち行列へデータを書き込むためのコンピュータ可読媒体上に格納されるソフトウエアであって、前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込み、前記ソフトウエアは:
    二つ以上の待ち行列を同時にロックする必要なく、それぞれの待ち行列内に、前記データの対応する部分を書き込むための空間が利用できるかどうかを判定し(902)、利用できる場合は、前記待ち行列内に前記空間を予約するステップ;および、
    前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込む(920)ステップ;をコンピューターシステムに実行させるための命令を含むソフトウエア。
  14. 複数の待ち行列へデータを書き込むためのシステムであって、前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込み、前記システムは:
    二つ以上の待ち行列を同時にロックする必要なく、それぞれの待ち行列内に、前記データの対応する部分を書き込むための空間が利用できるかどうかを判定し(902)、利用できる場合は、前記待ち行列内に前記空間を予約するための手段;および、
    前記データのそれぞれの部分を前記待ち行列の内の対応する一つへ書き込む(920)ための手段;を含むシステム。
  15. 待ち行列に対する複数のメッセージを第1データ構造(122)内に格納するステップであって、前記第1データ構造(122)は、前記待ち行列に対する第2データ構造とは別である;
    前記メッセージと関係付けられるトランザクションをコミットするステップ;および、
    連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すステップ;を含む方法。
  16. 前記第2データ構造内に、前記第1データ構造を指すポインタを格納するステップを更に含む、
    請求項15の方法。
  17. 連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すステップは、前記第1データ構造から前記メッセージの少なくとも幾つかを読み出すステップを含む、
    請求項16の方法。
  18. 前記トランザクションをコミットするステップは、前記第1データ構造から前記第2データ構造へ前記メッセージを移動するステップを含む、
    請求項15の方法。
  19. 連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すステップは、前記第2データ構造から前記メッセージの少なくとも幾つかを読み出す

    ステップを含む、
    請求項18の方法。
  20. 前記第1データ構造を揮発性メモリ内に格納し、前記第2データ構造を不揮発性メモリ内に格納する、
    請求項18の方法。
  21. 前記第1データ構造から第3データ構造へ前記メッセージを移動するステップ;および、
    前記第2データ構造内に、前記第3データ構造を指すポインタを格納するステップ;を更に含む、
    請求項15の方法。
  22. 連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すステップは、前記第3データ構造から前記メッセージの少なくとも幾つかを読み出すステップを含む、
    請求項21の方法。
  23. コンピュータ可読媒体上に格納されるソフトウエアであって:
    待ち行列に対する複数のメッセージを第1データ構造(122)内に格納するステップであって、前記第1データ構造(122)は、前記待ち行列に対する第2データ構造とは別である;;
    前記メッセージと関係付けられるトランザクションをコミットするステップ;および、
    連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すステップ;をコンピューターシステムに実行させるための命令を含むソフトウエア。
  24. 待ち行列に対する複数のメッセージを第1データ構造(122)内に格納するための手段であって、前記第1データ構造(122)は、前記待ち行列に対する第2データ構造とは別である;
    前記メッセージと関係付けられるトランザクションをコミットするための手段;および、
    連続するメモリ場所から前記メッセージの少なくとも幾つかを読み出すための手段;を含むシステム。
JP2008519405A 2005-06-27 2006-06-22 メッセージ待ち行列の管理 Active JP5762669B2 (ja)

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
PCT/US2006/024233 WO2007002245A2 (en) 2005-06-27 2006-06-22 Managing message queues

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2012088219A Division JP5657599B2 (ja) 2005-06-27 2012-04-09 メッセージ待ち行列の管理
JP2015076899A Division JP6046760B2 (ja) 2005-06-27 2015-04-03 メッセージ待ち行列の管理

Publications (2)

Publication Number Publication Date
JP2008547130A true JP2008547130A (ja) 2008-12-25
JP5762669B2 JP5762669B2 (ja) 2015-08-12

Family

ID=37568981

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2008519405A Active JP5762669B2 (ja) 2005-06-27 2006-06-22 メッセージ待ち行列の管理
JP2012088219A Active JP5657599B2 (ja) 2005-06-27 2012-04-09 メッセージ待ち行列の管理
JP2015076899A Active JP6046760B2 (ja) 2005-06-27 2015-04-03 メッセージ待ち行列の管理

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2012088219A Active JP5657599B2 (ja) 2005-06-27 2012-04-09 メッセージ待ち行列の管理
JP2015076899A Active JP6046760B2 (ja) 2005-06-27 2015-04-03 メッセージ待ち行列の管理

Country Status (8)

Country Link
US (2) US7865684B2 (ja)
EP (1) EP1913481A4 (ja)
JP (3) JP5762669B2 (ja)
KR (1) KR101372978B1 (ja)
CN (3) CN105404592B (ja)
AU (1) AU2006262163B2 (ja)
CA (2) CA2834146C (ja)
WO (1) WO2007002245A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141695A (ja) * 2010-01-06 2011-07-21 Canon Inc メッセージ処理装置およびメッセージ処理方法

Families Citing this family (62)

* Cited by examiner, † Cited by third party
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
US8688634B2 (en) * 2004-02-27 2014-04-01 International Business Machines Corporation Asynchronous peer-to-peer data replication
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
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
US20070180150A1 (en) 2005-12-01 2007-08-02 Firestar Software, Inc. System and method for exchanging information among exchange applications
US9898517B2 (en) * 2006-04-21 2018-02-20 Adobe Systems Incorporated Declarative synchronization of shared data
EP2038822A4 (en) * 2006-05-08 2011-07-27 Firestar Software Inc SYSTEM AND METHOD FOR THE EXCHANGE OF 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
US8505030B2 (en) * 2007-11-16 2013-08-06 Microsoft Corporation Coordinating resources using a volatile network intermediary
US8719841B2 (en) * 2007-11-16 2014-05-06 Microsoft Corporation Dispatch mechanism for coordinating application and communication medium state
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
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
US8516032B2 (en) * 2010-09-28 2013-08-20 Microsoft Corporation Performing computations in a distributed infrastructure
US8724645B2 (en) 2010-09-28 2014-05-13 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
EP2683251B1 (en) 2011-03-11 2021-08-25 Intercontinental Great Brands LLC Method of forming multilayer confectionery
US9015303B2 (en) 2011-09-12 2015-04-21 Microsoft Corporation Message queue behavior optimizations
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
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
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
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
WO2015159154A2 (en) * 2014-04-16 2015-10-22 Societe Bic Systems and methods for displaying free-form drawing on a contact sensitive display
US9542239B2 (en) * 2014-04-30 2017-01-10 International Business Machines Corporation Resolving write request conflicts in a dispersed storage network
US9577961B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Input/output management in a distributed strict queue
US9575820B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Client control in a distributed strict queue
US9577878B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Geographic awareness in a distributed strict queue
US9584593B2 (en) * 2014-06-27 2017-02-28 Amazon Technologies, Inc. Failure 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
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
CN109144742B (zh) * 2017-06-15 2020-02-07 北京忆芯科技有限公司 通过队列交换信息的方法和处理队列的系统
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 (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5958552A (ja) * 1982-09-28 1984-04-04 Fujitsu Ltd スロ−ダウン制御方式
JP2005025432A (ja) * 2003-07-01 2005-01-27 Fujitsu Ltd トランザクション処理方法,トランザクション制御装置およびトランザクション制御プログラム

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US7200623B2 (en) * 1998-11-24 2007-04-03 Oracle International Corp. Methods to perform disk writes in a distributed shared disk system needing consistency across failures
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
WO2000057276A1 (en) * 1999-03-25 2000-09-28 Excelon 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
US7228549B2 (en) * 1999-12-02 2007-06-05 Ants Software, Inc. Method and system for enhanced concurrency in a computing environment
US6898650B1 (en) * 2000-08-10 2005-05-24 Novell, Inc. Queueing method supporting multiple client accesses simultaneously
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
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
US7644118B2 (en) 2003-09-11 2010-01-05 International Business Machines Corporation Methods, systems, and media to enhance persistence of a message

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5958552A (ja) * 1982-09-28 1984-04-04 Fujitsu Ltd スロ−ダウン制御方式
JP2005025432A (ja) * 2003-07-01 2005-01-27 Fujitsu Ltd トランザクション処理方法,トランザクション制御装置およびトランザクション制御プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141695A (ja) * 2010-01-06 2011-07-21 Canon Inc メッセージ処理装置およびメッセージ処理方法

Also Published As

Publication number Publication date
US20060294333A1 (en) 2006-12-28
WO2007002245A2 (en) 2007-01-04
JP5657599B2 (ja) 2015-01-21
JP6046760B2 (ja) 2016-12-21
CN101996098B (zh) 2014-03-26
EP1913481A4 (en) 2009-12-09
KR101372978B1 (ko) 2014-03-13
US8078820B2 (en) 2011-12-13
CN101208671A (zh) 2008-06-25
CN101996098A (zh) 2011-03-30
AU2006262163A2 (en) 2007-01-04
AU2006262163A1 (en) 2007-01-04
CA2834146C (en) 2017-08-29
CN105404592B (zh) 2019-06-04
CN105404592A (zh) 2016-03-16
CA2613496A1 (en) 2007-01-04
CA2834146A1 (en) 2007-01-04
JP2015127981A (ja) 2015-07-09
WO2007002245A3 (en) 2007-04-26
JP2012155740A (ja) 2012-08-16
AU2006262163B2 (en) 2012-11-15
KR20080018212A (ko) 2008-02-27
US7865684B2 (en) 2011-01-04
JP5762669B2 (ja) 2015-08-12
CN101208671B (zh) 2015-11-25
EP1913481A2 (en) 2008-04-23
CA2613496C (en) 2016-02-02
US20110078214A1 (en) 2011-03-31

Similar Documents

Publication Publication Date Title
JP6046760B2 (ja) メッセージ待ち行列の管理
CN110691062B (zh) 一种数据写入方法、装置及其设备
CN110113420B (zh) 基于nvm的分布式消息队列管理系统
US9996403B2 (en) System and method for providing message queues for multinode applications in a middleware machine environment
US20050223163A1 (en) Synchronous message queues
US7549151B2 (en) Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
US20090132868A1 (en) Message state maintenance at a message log
CN110413689B (zh) 一种内存数据库的多节点数据同步方法与装置
JP4280306B2 (ja) トランザクションメッセージキューイングシステムのためのログベースデータアーキテクチャ
JP3627619B2 (ja) 二相コミット回避方式およびそのプログラム記録媒体
CN117149137A (zh) 一种分布式系统序号发生器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090604

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20100624

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120110

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20120316

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120404

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120419

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121115

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150403

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150610

R150 Certificate of patent or registration of utility model

Ref document number: 5762669

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250