JP2009522638A - デルタページャを使用した状態の管理 - Google Patents

デルタページャを使用した状態の管理 Download PDF

Info

Publication number
JP2009522638A
JP2009522638A JP2008548512A JP2008548512A JP2009522638A JP 2009522638 A JP2009522638 A JP 2009522638A JP 2008548512 A JP2008548512 A JP 2008548512A JP 2008548512 A JP2008548512 A JP 2008548512A JP 2009522638 A JP2009522638 A JP 2009522638A
Authority
JP
Japan
Prior art keywords
transaction
database
pointer
state
current state
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
JP2008548512A
Other languages
English (en)
Other versions
JP5021677B2 (ja
JP2009522638A5 (ja
Inventor
アール.ハウエル ジョナサン
アール.ドゥサー ジョン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009522638A publication Critical patent/JP2009522638A/ja
Publication of JP2009522638A5 publication Critical patent/JP2009522638A5/ja
Application granted granted Critical
Publication of JP5021677B2 publication Critical patent/JP5021677B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99938Concurrency, e.g. lock management in shared database

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

デルタページャとは、原子的な分離されたトランザクションによってデータベースを維持するものである。トランザクションがデータベースを変更しようとする際、デルタページャは変更を書き込みバッファに格納し、介入するトランザクションが、事実上または実質上、トランザクションに依拠してデータベースの状態を変更しない場合、この変更を適用する。デルタページャは変更を適用して、データベースの状態を表す新しいデータ構造を形成するように、書き込みバッファとデータベースの現行状態とを結合させることによって、トランザクションをコミットする。デルタページャは、データベースの選択された状態を保持するために、デルタページャが遵守するスナップショットに従って、効率を維持するために書き込みバッファを合体する。デルタページャは、選択されたデータを永続ストアへ移動することによって、データベースの選択されたセクションを永続的にする。デルタページャは、データへの効率的なアクセスを促進するために、永続ストアと現行トランザクションとの間にキャッシュオブジェクトも提供する。

Description

データベーストランザクションを実行する際の重要な問題は、データベースの整合性である。データベースの整合性を保持するためには、トランザクションが原子性(atomicity)および分離性などの諸要件を確実に監視することが重要である。原子性要件は、トランザクションのタスクのすべてが実行されるか、またはそれらがまったく実行されないかの、いずれかであることを要求するため、不完全なトランザクションはデータベースに適用されない。分離性要件は、トランザクションが他のトランザクションとは別々に処理されることを要求するため、トランザクションが、他のトランザクションの中間状態にアクセスすること、またはこれに干渉することはない。原子性要件および分離性要件を監視することによって、トランザクションが互いに破損し合うこと、およびデータベース全体を破損することを防ぐ。
ネットワークシステムでは、多くのユーザおよび多くのアプリケーションが同時に同じデータ上でトランザクションを実行しようとする場合がある。たとえスタンドアロン型システムであっても、複数のアプリケーションが同時に同じデータ上でトランザクションを実行しようとする場合があり、各アプリケーションの複数の処理スレッドが競合し合う可能性がある。トランザクションが競合または矛盾する変更をデータベースに適用する可能性があるすべての状況を防止することはもちろん、予測することも困難であるため、データベースの整合性を維持することは、重要な課題である。
データベースの整合性を保持する方法の1つが、現行トランザクションによって使用されているデータベースの一部分をロックすることである。データベースの一部分をロックすることにより、現行トランザクションが完了するまで、他のトランザクションによるデータの読み取りまたは上書きを防止する。他のトランザクションによるデータベースの一部分の読み取りを防止することで、他のトランザクションが、現行トランザクションが変更する可能性のある値に基づく結果に達しないことが保証される。同様に、他のトランザクションがデータベースのその部分を上書きするのを防止することで、他のトランザクションが現行トランザクションに影響を与えないことが保証される。
しかしながら、データベースの一部分をロックすることは、データの整合性を保持するのを助ける可能性はあるが、それに対抗するコストが生じる可能性もある。いくつかのトランザクションがアクセスしようとしているデータベースの一部分をロックすることで、トランザクションのバックログが大量に生じる可能性がある。待機中のトランザクションの一部またはすべてが、データベースの現行状態を変更しない可能性があるか、または、現行トランザクションが使用している特定の値からの読み取り、この値への書き込み、またはこの値の変更を行わない可能性がある。それでもやはり、データベースの一部分をロックすることは、たとえデータベースへのアクセスが遅くなっても、データベースの整合性を保持することになる。
ロックの1つの形がリースである。リースとは、アパート、ビル、車、および設備のリースの場合とまったく同様の、限定期間にわたる独占許可である。したがって、あるトランザクションが選択されたデータに関するリースを認められた場合、そのトランザクションには、ある限定期間にわたる選択されたデータへの独占的なアクセス権が与えられる。データへの独占的アクセス権をある期間に限定することによって、トランザクションが完了した際にトランザクションがデータの解放に失敗した場合、またはトランザクションが実行されているシステムがクラッシュした場合、データはロック解除され、他のトランザクションはデータへのアクセスを無期限に待つ必要がなくなる。通常、選択されたデータを待っている各トランザクションは、事前にデータに関するキューに入れられたすべてのトランザクションがそのデータの使用を完了するまで、または各トランザクションに割り振られたリースが満了するまで、待つ必要がなくなる。
リースされたデータへのアクセスをいくつかのトランザクションが待っている場合、潜在的にかなりの遅延が存在する可能性がある。加えて、データのリースを制御しているシステムは、データにアクセスしようとすると障害を引き起こす可能性がある。このリースを制御しているシステムは、データアクセスに関する単一の制御ポイントとして、リース要求に応答しようとするとトランザクションの遅延を発生させる可能性がある。さらにこのシステムは、選択された同じデータに関する複数の要求を受信している可能性があるため、これら多数の潜在的に繰り返される要求を処理することは、計算サイクルの無駄となり、結果として、同じデータまたは任意の他のデータを求めるトランザクションにさらなる遅延を発生させる。
デルタページャ(delta pager)とは、原子的な分離されたトランザクションによってデータベースを維持するものである。トランザクションがデータベースを変更しようとする際、デルタページャは変更を書き込みバッファに格納し、介入するトランザクションが、事実上または実質上、トランザクションに依拠してデータベースの状態を変更しない場合、この変更を適用する。デルタページャは変更を適用して、データベースの状態を表す新しいデータ構造を形成するように、書き込みバッファとデータベースの現行状態とを結合させることによって、トランザクションをコミットする。デルタページャは、選択されたデータベースの状態を保持するために、デルタページャが遵守するスナップショットに従って、効率を維持するために書き込みバッファを合体(coalesce)する。デルタページャは、選択されたデータを永続ストアへ移動することによって、データベースの選択されたセクションを永続的にする。デルタページャは、データへの効率的なアクセスを促進するために、永続ストアと現行トランザクションとの間にキャッシュオブジェクトも提供する。
この課題を解決するための手段は、以下の発明を実施するための最良の形態でより詳細に説明する概念の選択を簡略化された形で紹介するために提供される。この課題を解決するための手段は、主張された主題の主要な特徴または不可欠な特徴を識別することを意図するものでなく、また、主張された主題の範囲を決定する際の一助として使用されることを意図するものでもない。
添付の図面を参照しながら、詳細な記述について説明する。図面では、3桁の参照番号の一番左の数字または4桁の参照番号の左側2つの数字が、その参照番号が最初に示された図面を識別するものである。同じ参照番号が異なる図面で使用される場合、同様または同一のアイテムであることを示す。
概要
「デルタページャ」という用語は、データベースの整合性を維持し、データベースの選択された状態を保持しながら、データベースへの変更を処理するための、方法およびシステムの諸実施形態を記述する。認識されたオブジェクト間でのポインタの不変性を遵守することによって、デルタページャは、効率性も維持しながらデータベースの状態の整合性を保持する。
1つのモードでは、デルタページャは、データベースに格納されたすべてのデータの完全マッピングを含む、データベースの現行状態を追跡するために、現行状態ポインタを使用することによって、トランザクションを管理する。完全マッピングでは、データベースに関して定義された各アドレスまたはアドレスの表現について、データ値またはヌル(null)値が存在することになる。部分マッピングは、トランザクションが開始された時点で存在するデータベースの現行状態に対して、トランザクションが適用しようとする変更を格納するために、デルタページャが使用する、1つまたは複数のオブジェクトを含むことができる。トランザクションがデータベースにコミットされた場合、新しい現行状態を形成するために、データベースのオリジナルの現行状態に部分マッピングが付加される。新しく適用された部分マッピングを介して新しい現行状態にアクセスされた場合、部分マッピングにおけるアドレスへの値の割り当ては、オリジナル状態におけるそれらよりも優先されるため、データベースのオリジナル状態におけるデータの値は効果的に上書きまたは変更される。
本説明で使用される用語を明確にするためおよび区別するために、データベースのマッピングとは、アドレス値の、データ値への割り当てを言い表す。データベースの完全マッピングとは、データベース内のすべてのアドレスの、それらのアドレスで格納されたデータ値(またはヌル値)への割り当ての、完全なセットを言い表す。部分マッピングとは、トランザクションがデータを書き込もうとするアドレス、およびトランザクションがアドレスに書き込もうとするデータ値を含む、トランザクションがデータベースに対して実行するかまたは実行しようとする変更または上書きのセットを言い表す。トランザクションがデータベースにコミットされた場合、部分マッピングを以前の完全マッピングに追加することが可能であり、結果としてデータベースの現在のマッピングが更新される。したがって、データベースの現在の完全マッピングは一連の部分マッピング(a series of partial mappings)を含むことが可能であり、後で追加された部分マッピングは、以前の部分マッピングに含まれるアドレスの割り当てを上書きまたは変更することができる。
データベースの状態とは、データベースのマッピングが格納される、メモリ、ディスク、または大容量記憶装置に格納されたオブジェクトの集まりを言い表す。状態内のオブジェクトは、トランザクションがデータベースに書き込もうとする変更、ならびにバッファを内部に集めることができる他のオブジェクトを格納するために、デルタページャがトランザクションに対して作成するバッファを含む。バッファ、他のオブジェクト、ならびに、これらのオブジェクトが結合、合体、および他の方法で処理される方法について、以下で詳細に説明する。データベースの現行状態は、データベースの現在の完全マッピングを提示するそれらのオブジェクトを含む。以下で説明するように、デルタページャは、トランザクションが開始された時点で存在するデータベースの状態などの、他の状態も維持する。デルタページャは、トランザクションをデータベースにコミットすべきであるかどうかを判別するために、この状態を追跡する。デルタページャは、それらの状態、ならびに後で使用するためにそれらの状態が表すデータベースのマッピングを保持するために、選択された状態も維持する。
各トランザクションが開始されると、デルタページャは、トランザクションが開始された時点で存在していたデータベースの状態に基づいて、トランザクションを実行させることができる。その後、トランザクションは、書き込みバッファなどの少なくとも1つのオブジェクトを作成し、トランザクションが開始された時点で存在していたデータベースの状態に書き込みバッファをポイントさせる。デルタページャは、一連のバッファを使用することが可能であり、ここで各バッファは、トランザクションがデータベースに適用しようとする単一の変更を格納し、各バッファは、データベースの状態を保持するために先行バッファをポイントする。別の方法として、デルタページャは、トランザクションが実行しようとするすべての変更を、トランザクションが開始された時点のデータベースの現行状態をポイントする累積書き込みバッファに格納することもできる。トランザクションが開始された時点の状態をポイントするバッファまたは他のオブジェクトは、トランザクションがデータベースに適用しようとする変更の部分マッピングを表す。
1つまたは複数の介在トランザクションが現行トランザクションの適用を妨げているというインディケーションを、デルタページャが見つけなかった場合、デルタページャは、データベースの現行状態の追跡にデルタポインタが使用する現行状態ポインタを、トランザクション用に作成された最後のバッファまたは唯一のバッファをポイントするように変更することによって、トランザクションをコミットする。このバッファをポイントするように現行状態ポインタを変更することによって、データベースの新しい更新された状態を生成し、データベースの完全マッピングにおけるデータ値を変更することができる。
デルタページャは、読み取りバッファおよび書き込みバッファを使用してトランザクションを処理することができる。読み取りバッファは、トランザクションがアクセスするデータを追跡する。現行トランザクションが完了した場合、デルタページャは読み取りバッファを使用して、トランザクションをコミットするかどうかを決定する。読み取りバッファが、介入トランザクションによって上書きまたは変更されたデータを現行トランザクションが読み取ったことを示す場合、デルタページャはトランザクションを打ち切ることができる。
デルタページャがデータベースへの複数の変更をコミットした後、デルタページャは効率性のために、データベースの現行状態においてバッファまたは他のオブジェクトを合体することができる。デルタページャは、1つの部分マッピングにおける複数のオブジェクトを、他の部分マッピングにおけるオブジェクトと合体することができる。2つの部分マッピングのうちの新しい方におけるアドレスの割り当ては、古い方の部分マッピングに含められた割り当てに追加されるか、またはこれと置き換えられることになる。合体の結果、メモリオブジェクトまたは永続オブジェクトを含む1つまたは複数の合体オブジェクトが生じる可能性があるか、あるいはデルタページャは、バッファに格納された変更をデータベースのオリジナル状態に適用することによってバッファを合体することができる。デルタページャは、選択された状態を保持できるようにするためにスナップショットポインタを提供する。スナップショットポインタに関連付けられたいかなる状態も、スナップショットポインタによって保持された状態に対して実行された変更を表すバッファと合体されることはない。
デルタページャは、データベースおよびデータベースに対して実行された変更を、永続的にすることができる。デルタページャは、データベースの現行状態を維持するために使用された1つまたは複数のオブジェクトを、永続的な不揮発性ストレージにコピーすることができる。デルタページャは、デルタページャが永続的にするために不揮発性ストレージに移動した現行状態の一部を含む、大容量記憶媒体に格納されたデータベースの現行状態の一部へのより高速なアクセスを提供するための、キャッシュオブジェクトも備える。デルタページャは、領域照会を容易にするために、このキャッシュオブジェクトを使用してヌルデータの領域をデータベースの状態に格納することができる。
書き込みバッファを使用したトランザクションの処理
図1は、データベースの現行状態100を示す。現行状態100は、データベースの例示的なオリジナル状態110を含む。データベースは、揮発性メモリまたは不揮発性メモリに常駐することができる。デルタページャは、現行状態ポインタ120を使用して、図1ではオリジナル状態110のみを含む現行状態をポイントすることができる。
オリジナル状態110は、レコード0 130、レコード1 140、レコード2 150、レコード3 160、およびレコード4 170の、それぞれが現在はヌル値を格納している5つのレコードを維持するオブジェクトである。ヌル値は、実際にオリジナル状態に格納されている必要がないことに留意されたい。またオリジナル状態110は、トランザクションが変更を適用する可能性のある、ヌルおよび非ヌルの値を含む、任意の初期状態を含むことができる。
図2は、複数の命令210〜270を含む例示的トランザクションである、トランザクション1 200を示す。命令1 220、「x=Read(3)」などのいくつかの命令は、データベースからデータを読み取ろうとする。命令3 240、「Write(2,x)」などの他の命令は、結果としてデータベース内のアドレスに値を割り当てるかまたは再割り当てすることになる、データベースへの変更を適用しようとする。
図3は、データベースに対してトランザクション1 200などのトランザクションを開始する、デルタページャの1つのモードを示す。トランザクション1 200は、トランザクション開始命令、trans_start 210で開始される。トランザクション1 200が開始された後、現行状態ポインタ120は、トランザクションが開始された時点のデータベースの状態、すなわちオリジナル状態110を、引き続きポイントする。デルタページャは第1の書き込みバッファ310を作成し、デルタページャは、トランザクション1 200が適用しようとする変更をここに格納することになる。デルタページャは、現行状態ポインタ120によって示された、トランザクション2 200が開始された時点の状態に、書き込みバッファ310をポイントさせる。デルタページャはトランザクションポインタ320も作成し、このトランザクションポインタ320を第1の書き込みバッファ300にポイントさせ、この第1の書き込みバッファは現行状態をポイントする。
図4〜6は、デルタページャがトランザクション1 200を処理する方法を示す。図2を参照すると、命令1 220、「x=Read(3)」は、ヌルである現行値xをアドレス3から読み取る。命令2 230、「x=x+1」は、xの値を1だけ増分し、このケースではxの値を1に変更する。命令3 240、「Write(2,x)」は、コンピューティングシステムにxの値をアドレス2に書き込むように命じる。
デルタページャは値1をオリジナル状態110のアドレス2には書き込まない。その代わりに図4に示されるように、デルタページャは第2の書き込みバッファ410を作成する。第2の書き込みバッファ410は第1の書き込みバッファ310をポイントし、デルタページャは、トランザクション2 200が、トランザクションが開始された時点のデータベースの状態を修正する方法を示す、データベースの部分マッピングを維持するために、トランザクションポインタ320が第2の書き込みバッファ410をポイントするように切り替える。デルタページャは、このアドレス2への値1の書き込みの変更を、第2の書き込みバッファ410に格納する。
図5は、トランザクション1 200がデータベースに実行しようとするデルタページャの第2の変更への応答を示す。命令4 250、「Write(4,「DOG」)」は、文字列「DOG」をアドレス4に格納するようにコンピューティングシステムに命じる。ここでも、変更をオリジナル状態110に書き込む代わりに、デルタページャは、第2の書き込みバッファ410をポイントする第3の書き込みバッファ510を作成する。さらにデルタページャは、トランザクション1 200がこれを修正しようとした場合にデータベースの状態を保持するために、トランザクションポインタ320が第3の書き込みバッファ510をポイントするように変更し、文字列「DOG」を第3の書き込みバッファ510に格納する。したがって、トランザクションポインタ320から読み取る、トランザクション21200に関するデータベースの部分マッピングは、アドレス2が値1を格納し、アドレス4が文字列「DOG」を格納するという修正を含む。しかしながら、トランザクションは、オリジナル状態110も、現行状態ポインタ120によって示される現行状態も変更していない。
図6は、デルタページャがトランザクション1 200をデータベースにコミットする方法を示す。トランザクションポインタ320は、書き込みバッファ510、410、および310を通るか、または現行状態ポインタ120がポイントするのと同じ状態をポイントするため、デルタページャは、トランザクション1 200がデータベースにコミットされないようにするために、いかなる介入トランザクションもデータベースの現行状態を変更していないものと判別する。したがってデルタページャは、書き込みバッファ310、410、および510によって修正された場合にオリジナル状態110を含む、トランザクション1 200に対して作成された部分マッピングをポイントするように現行状態ポインタ120を変更することによって、トランザクション1200をデータベースにコミットする。したがってデルタページャは、トランザクション1 200によって追加された最新の書き込みバッファである、第3の書き込みバッファ510をポイントするように、現行状態ポインタ120を変更する。次にデルタページャは、トランザクションポインタ320を削除する。これで現行状態ポインタ120は、書き込みバッファ310、410、および510に格納された変更によって更新されたオリジナル状態110を含む、データベースの更新された状態をポイントすることになる。
図6の現行状態を使用して、トランザクションがデータベースにアクセスする場合、デルタページャは、現行状態ポインタ120によって識別される、トランザクションが開始される時点で存在するデータベースの状態を使用する。この現行状態を使用して、トランザクションがバッファ510内でアドレス4のコンテンツを識別しようとした場合、文字列「DOG」を見つけることになる。他方で、トランザクションがアドレス2のコンテンツを求めた場合、バッファ510内には見つからないことになる。したがって、トランザクションはバッファ410に進み、ここでトランザクションは値1を見つけることになる。図6の例で、トランザクションが他の値を求めた場合、オリジナル状態110が他のアドレスについてヌル値のみを含むことを見つけるまで、トランザクションはすべてのバッファにアクセスすることになる。このようにしてデルタページャは、データベースの現行状態にバッファまたは他のオブジェクトを追加することによって、データを変更する。
デルタページャの不変条件(invariant)とは、デルタページャが作成したそれぞれのポインタの不変性を遵守することである。不変性の不変条件とは、各オブジェクトが依存する状態、したがって各オブジェクトがポイントする状態が、ポインタがそのオブジェクトをポイントする限りは変更されないことを維持するものである。たとえば、第1の書き込みバッファ310は、データベースのオリジナル状態110をポイントする。その後の変更にかかわらず、トランザクション1 200はデータベースに適用し、第1の書き込みバッファ310は、オリジナル状態110のみを含むデータベースの状態を常にポイントする。同様に、第2の書き込みバッファ410は第1の書き込みバッファ310をポイントする。第2の書き込みバッファ410は、オリジナル状態110およびオリジナル状態110を修正しない書き込みバッファ310を含む、データベースの不変状態もポイントする。第3の書き込みバッファ510は、第2の書き込みバッファ410をポイントするため、第2の書き込みバッファ410によって修正された場合のオリジナル状態110を含む、データベースのそれ独自の部分マッピングをポイントする。これらのポインタの不変性は、以下で説明する利点を有する。
累積書き込みバッファおよび単一書き込みバッファの再書き込み
今説明したモードでは、デルタページャは、トランザクションを開始するため、およびトランザクションがデータベースに適用しようとする各変更を格納するために、新しい書き込みバッファを作成する。別の方法として、デルタページャは、累積バッファなどの異なるタイプのオブジェクトを採用することができるか、またはデルタページャは、1つまたは複数の変更を格納するために既存のバッファを上書きすることができる。
図7は、累積書き込みバッファを使用してトランザクションを処理するデルタページャを示す。図3の例と同様に、デルタページャは、現行状態ポインタ120によって示されるように、トランザクションが開始されたときに存在した現行状態をポイントする第1の累積バッファ710を作成することによって、トランザクション1 200を開始する。デルタページャは、トランザクションポインタ320を再度作成し、これを、最も新しく作成された書き込みバッファにポイントさせて、トランザクション1 200によって修正されるようにデータベースの部分マッピングを維持する。
図8は、第1の累積バッファ710をポイントする第2の累積バッファ810を追加することによってトランザクションの処理を続行する、デルタページャを示す。デルタページャは、トランザクションポインタ320を、最も新しく作成された書き込みバッファである第2の累積バッファ810にポイントさせる。デルタページャは、トランザクション1 200がデータベースに適用しようとする、アドレス2の値を1に設定する変更を、第2の累積バッファ810に格納する。トランザクション1 200はこれまで1つの変更しか試みてこなかったため、第2の累積バッファ810は累積的には見えない。
図9は、第2の累積バッファ810をポイントする第3の累積バッファ910を追加することによってトランザクション1 200の処理を続行する、デルタページャを示す。デルタページャは、トランザクションポインタ320を、最も新しく作成された書き込みバッファである第3の累積バッファ910にポイントさせる。ここでデルタページャは、トランザクション1 200がデータベースに適用しようとする、アドレス2の値を1に設定する変更と、アドレス4で文字列「DOG」を格納する変更の両方を格納する。
図10および図11は、デルタページャが累積書き込みバッファを使用するモードの利点を示す。図10は、第3の累積バッファ910に格納されたトランザクション1 200によって求められたすべての変更と共に、トランザクション1 200がデータベースに適用することになるすべての変更の部分マッピングが、単一のオブジェクトである累積書き込みバッファ910に含められることを示す。図10の例に示されるように、部分マッピングは、たとえ累積バッファ710および810が除外された場合であっても保持される。
不変性の不変条件により、いかなるトランザクションもトランザクションの中間状態に干渉またはアクセスすることができないため、トランザクションポインタ320によって示される状態の整合性を維持するために書き込みバッファ710および810を保存する必要はない。結果として、累積書き込みバッファ710および810が格納した変更が、最も新しく作成された累積バッファ910にも格納された後で、累積書き込みバッファ710および810を維持する必要はない。
したがって、図11が示すように、デルタページャが新しい累積バッファを作成し、そのそれぞれに書き込む場合、デルタページャは先行するバッファを破棄することができる。第1の段階1100は、アドレス2の値を1に設定するという第1の変更が第2の累積バッファ810に書き込まれた後の、トランザクション1 200の現行状態を示す。第2の累積バッファ810は、第1の書き込みバッファ710に格納されたいずれの変更も含むため、第2の段階1110でデルタページャは、第2の累積バッファ810を、第1の累積バッファ710がポイントした状態にポイントさせ、トランザクションポインタ320によって示された状態を変更せずに、第1の累積バッファ710およびそのポインタを解放することができる。トランザクションポインタ320がポイントする状態は、第2の累積バッファ810に格納された同じデータのサブセットのみを含むバッファを通過しないため、より短い。第3の段階1120で、デルタページャは、第1の累積バッファ710を格納するために使用されたメモリを解放し、他に使用するためにメモリを確保することができる。デルタページャが、トランザクション1 200の次の変更を格納するために、図11に示されたものと同様の段階を適用した場合、結果は図10に示されたものと同じになる。
図12は、デルタページャがトランザクションを処理するために使用するモードを示す。流れ図1200は、ブロック1202がトランザクションを受け取ると開始される。ブロック1204は、トランザクションがデータベースに適用しようとする任意の変更をポイントすることになる、トランザクションポインタを作成する。ブロック1206は、第1の書き込みバッファを作成し、そのバッファを、トランザクションが受け取られた時点で存在する現行状態にポイントさせる。ブロック1208は、トランザクションポインタを第1の書き込みバッファにポイントさせ、第1の書き込みバッファはトランザクションが開始された時点の現行状態をポイントする。
ブロック1210は、トランザクションが、たとえばデータベースからデータを読み取るだけではなく、データベースに変更を適用しようとするかどうかを判別する。変更を適用しようとする場合、ブロック1212は追加の書き込みバッファを作成し、これを、以前作成されたバッファにポイントさせる。追加の書き込みバッファは、単一書き込みバッファまたは累積書き込みバッファとすることができる。1つのモードで累積書き込みバッファが使用される場合、ブロック1212は、追加の累積バッファを、以前のバッファがポイントした状態にポイントさせ、図11を参照しながら説明したように以前のバッファを解放する。
ブロック1214は、トランザクションがデータベースに適用しようとする変更を、追加の書き込みバッファに格納する。ブロック1216は、トランザクションポインタを追加の書き込みバッファにポイントさせる。ブロック1218は、トランザクションが任意の追加の変更をデータベースに適用しようとするかどうかを判別する。適用しようとする場合、流れ図1200はブロック1212にループし、ブロック1212は追加のバッファを作成する。他方で、ブロック1218が、トランザクションは追加の変更を適用しようとしないものと判別した場合、後で説明するように、ブロック1220は変更のコミットを試行することになる。ブロック1224は、他のトランザクションの受け取りを待つ。
他方で、ブロック1210が、トランザクションがいかなる変更もデータベースに適用しようとしなかったものと判別した場合、第1の書き込みバッファおよびトランザクションポインタは不要であるため、ブロック1222はこれらを解放する。ブロック1224は、再度、他のトランザクションの受け取りを待つ。
デルタページャは、一連の累積バッファを使用する代わりに、図13に示されたような単一の再書き込み可能書き込みバッファを使用することもできる。第1の段階1300で、デルタページャはトランザクションを受け取り、単一書き込みバッファ1310を作成して、これを現行状態にポイントさせる。次にデルタページャは切り替えトランザクションポインタ1320を作成し、これを、単一書き込みバッファ1310にポイントさせる。切り替えポインタ1320は、以下で説明するように、デルタページャ内のポインタの不変性を保持する。このようにバッファに上書きまたは再書き込みすることにより、それぞれの変更を格納するために複数のバッファを使用する代わりに、トランザクションが適用しようとする変更を格納するために単一の累積バッファを使用して、デルタページャによって認識される不変性の不変条件を保持する。
単一書き込みバッファ1310の使用の第2の段階1330で、デルタページャは、切り替えポインタ1320を単一書き込みバッファ1310を避けてポイントさせ、トランザクションによって示された変更または追加の変更で単一書き込みバッファを更新する。前述のように、デルタページャはすべてのポインタの不変性を保持する。したがって技術的には、切り替えポインタが引き続き単一書き込みバッファ1310をポイントする場合、バッファ1310に変更を書き込むと、不変性の不変条件が破られることになり、切り替えポインタによって示される状態は変化するように見える。したがって1つのモードでは、デルタページャは、単一書き込みバッファ1310を避けてポイントすることが可能な切り替えポインタ1320を使用する。
第3の段階1340で、デルタページャは単一書き込みバッファを更新すると、トランザクションがデータベースに適用しようとする変更の部分マッピングを維持するために、再度切り替えポインタ1320を単一書き込みバッファ1310にポイントさせる。第4の段階1350で、デルタページャは、再度、切り替えポインタ1320を単一書き込みバッファ1310を避けてポイントさせ、トランザクションによって示された他の変更を追加するように単一書き込みバッファを更新する。第5の段階1360で、デルタページャが追加の変更を単一書き込みバッファに追加すると、デルタページャは部分マッピングを維持するために、再度切り替えポインタ1320を単一書き込みバッファ1310にポイントさせる。
デルタページャは、実際にはバッファ1310を避けてポイントされる切り替えポインタ1320を、事実上使用する必要がないことに留意されたい。不変性の不変条件が論理的に保持されるのを示すために、デルタページャは、切り替えポインタ1320によって示された再書き込み可能バッファを使用するものとして説明される。別の方法として、システムのどの部分も再書き込みが発生した間ポインタを逆参照(dereference)しないように、再書き込みが原子的に発生した場合、不変条件が依然として有効に保持されている間、通常のトランザクションポインタ320を代わりに使用することが可能であり、ポインタは、だれもその値を監視していない場合、ポインタではない。したがってこの限られたケースでは、デルタページャは、不変性の不変条件を保持することからインプレース再書き込みを使用する。
図14は、デルタページャが単一書き込みバッファを使用することによってトランザクションを処理するために使用する、図13に示されたモードを示す。流れ図1400は、ブロック1402がトランザクションを受け取ると開始される。ブロック1404は、トランザクションがデータベースに適用しようとする変更の部分マッピングを示すことになる、切り替えポインタを作成する。ブロック1406は、単一書き込みバッファを作成し、そのバッファを、トランザクションが受け取られた時点の現行状態にポイントさせる。ブロック1408は、トランザクションがデータベースに適用しようとする部分マッピングを示すために、切り替えポインタを単一書き込みバッファにポイントさせる。
ブロック1410は、トランザクションがデータベースに変更を適用しようとするかどうかを判別する。適用しようとする場合、ブロック1412は切り替えポインタを単一書き込みバッファを避けてポイントさせる。ブロック1414は、変更を単一書き込みバッファに格納する。図13に示されるように、単一書き込みバッファは累積的であるため、複数の変更を単一書き込みバッファに追加することができる。ブロック1416は、再度切り替えポインタを単一書き込みバッファにポイントさせる。
ブロック1418は、トランザクションがデータベースに任意の追加の変更を適用しようとするかどうかを判別する。適用しようとする場合、流れ図1400はブロック1412にループし、ブロック1412は追加のバッファを作成する。他方で、ブロック1418が、トランザクションが追加の変更を適用しようとしないものと判別した場合、後で説明するように、ブロック1420は変更のコミットを試行することになる。ブロック1424は、他のトランザクションの受け取りを待つ。
他方で、ブロック1410が、トランザクションがデータベースにいかなる変更も適用しようとしなかったものと判別した場合、単一書き込みバッファおよび切り替えポインタは不要であるため、ブロック1422はこれらを解放する。ブロック1424は他のトランザクションの受け取りを待つ。
トランザクションのコミット
デルタページャは、トランザクションをコミットするタイミングを決定するための異なるモードをサポートする。デルタページャは、複数のトランザクションが、各トランザクションが開始された時点で存在するデータベースの状態に同時にアクセスできるようにする。しかしながら、複数のトランザクションが同時に実行された場合、最初のデータベースへのコミットにより、他の同時に実行しているトランザクションが依拠するデータベースの状態が変更される可能性がある。古くなったかまたは取って代わられたデータベースの状態に基づくトランザクションがデータベースにコミットされると、無効の結果につながる可能性がある。したがってデルタページャは、現行トランザクションが依拠したデータベースの状態に介入トランザクションが干渉しなかった場合にのみ、現行トランザクションをコミットする。
図15は、デルタページャがトランザクション1 200と同時に処理し、結果としてトランザクションの競合を発生させる可能性のある、第2のトランザクションである、トランザクション2(T×2)1500を示す。競合する可能性のあるトランザクションを考えた場合、デルタページャは、どのトランザクションをデータベースにコミットし、どのトランザクションを打ち切るかを決定する。トランザクション2 1500は、複数の命令1510〜1570を呼び出す。命令1 1520、「x=Read(0)」などのいくつかの命令は、データベースからデータを読み取ろうとするが、命令4 1550、「Write(3,「CAT」)」などの他の命令は、変更をデータベースに適用しようとする。
図16は、デルタページャがトランザクション1 200およびトランザクション2 1500の両方を受け取り、同時に処理する状況を示す。2つのトランザクションのうちのどちらかを、どちらかのトランザクションがデータベースにコミットされる前に、他方よりも先に開始することができる。どちらのトランザクションも、現行状態ポインタ120が引き続きオリジナル状態110、すなわちその時点での現行状態をポイントするものとして開始された。
デルタページャは、前述のように、現行状態ポインタ120によって示されたオリジナル状態110をポイントする第1の書き込みバッファ310を作成することによって、トランザクション1 200を開始し、そのトランザクションに関して最も新しく作成された書き込みバッファをポイントするトランザクションポインタ320を作成する。デルタページャは、トランザクション1 200がデータベースに対して実行しようとする変更を格納する、追加の書き込みバッファ410および510を作成する。
トランザクション2 1500の場合、デルタページャは、オリジナル状態110をポイントする第1の書き込みバッファ1610と、そのトランザクションに関して最も新しく作成された書き込みバッファを示すためのトランザクションポインタ1620とを作成する。同様にデルタページャは、トランザクション2 1500に関する追加の書き込みバッファを作成する。図16では、命令1 1520である「x=Read(0)」、および命令2 1530である「y=Read(1)」は、どちらもオリジナル状態110からヌル値を読み取る。したがって条件付き命令3 1540、「if y=x then」は真であり、命令4 1550、「Write(3,「CAT」)」が実行される。デルタページャは、第1の書き込みバッファ1610をポイントする追加の書き込みバッファ1630を作成し、命令4 1550によって示された変更をこの追加の書き込みバッファ1630に格納し、トランザクションポインタ1620を、この追加の書き込みバッファ1630にポイントさせる。トランザクションポインタ320およびトランザクションポインタ1620は、どちらも、各トランザクションがデータベースに適用することになる変更を含む部分マッピングをポイントする。
トランザクション1 200およびトランザクション2 1500は、データベースに対して競合する変更を行う可能性があるか、あるいは、命令3 1540などの条件付き命令は、他のトランザクションが変更する可能性のあるデータに依拠する可能性がある。デルタページャのモードは、これらの潜在的な競合を様々な方法で説明する。
介入トランザクションが現行状態を変更した場合のトランザクションの打ち切り
図17および図18は、デルタページャがデータベースの状態を変更する介入トランザクションをコミットした後にトランザクションを打ち切ることによって、デルタページャが競合する可能性のあるトランザクションを処理するために使用する1つのモードを示す。図17では、図6に関して前述したように、デルタページャは、トランザクション1 200をデータベースにコミットしており、トランザクションポインタ320は除去され、現行状態ポインタ120は、トランザクションに関して作成された最新の書き込みバッファ510をポイントするように切り替えられる。トランザクション1 200をデータベースにコミットした後、デルタページャは、トランザクション2 1500が実行を完了したものと決定し、データベースへコミットしようとする。
トランザクション2 1500をデータベースにコミットするかどうかを決定する場合、デルタページャは、トランザクション1 200などの介入トランザクションが、現行のトランザクション、すなわちトランザクション2 1500が開始された時点で存在したデータベースの状態を変更したかどうかを判別する。この判別を行う場合、デルタページャは、第1の書き込みバッファ1610がポイントする状態を決定することによって、トランザクション2 1500が開始された時点のデータベースの状態と比較する。次にデルタページャは、これを、現行状態ポインタ120がポイントするデータベースの現行状態と比較する。言い換えれば、デルタページャは、それらが両方とも同じオブジェクトをポイントしているかどうかを判別するために、現行状態ポインタ120と、トランザクションポインタ1620ならびに挿入された書き込みバッファ1610および1630とを比較する。トランザクション1 200をデータベースにコミットした後、デルタページャは、現行状態ポインタ120が書き込みバッファ510をポイントする一方で、トランザクション2 1500は、その第1の書き込みバッファ1610を通ってオリジナル状態110をポイントすることを決定する。
トランザクション2 1500は、現行状態ポインタ120によって示される現行状態以外の状態をポイントするため、デルタページャはトランザクション2 1500を打ち切る。図18は、デルタページャが、データベースの現行状態の一部とはならないメモリを解放するために、書き込みバッファ1610および1630ならびにトランザクションポインタ1620を削除することによって、トランザクション2 1500を打ち切ることを示す。
現行状態におけるいずれかの変更のためにトランザクションを打ち切ることは、競合するトランザクションのコミットを避けるためのリスクを嫌った手法である。図16〜図18の例に示されるように、トランザクション1 200は、トランザクション2 1500が実行された時点で存在したデータベースの状態におけるいかなる値も変更しなかった。しかしながら、介入するトランザクション1 200が、トランザクション2 1500が依拠したデータを変更した可能性はある。トランザクション1 200はデータベースの現行状態を変更したため、トランザクション2 1500が依拠したデータを変更した可能性がある。
トランザクション2 1500は打ち切られたが、図19および図20に示されるように、このトランザクションは再開することができる。図19で、デルタページャは、トランザクション1 200がコミットした後に、トランザクション2 1500を開始する。したがって、トランザクション2 1500が開始された場合、デルタページャは、トランザクション2 1500が再開された時点で存在する状態をポイントする、第1の書き込みバッファ1910を作成する。この状態は、トランザクション1 200によって状態に追加された書き込みバッファ510をポイントする、現行状態ポインタ120によって示される。次にデルタページャは、元々は書き込みバッファ1910をポイントしていたトランザクションポインタ1920を作成する。デルタページャは、トランザクション2 1500がデータベースに適用しようとする変更をデルタページャが格納する追加の書き込みバッファ1930を追加し、その後、デルタページャは、トランザクション2 1500がデータベースに適用しようとする変更を示す部分マッピングを示すために追加の書き込みバッファ1930をポイントするように、トランザクションポインタ1920を変更する。
今回は、トランザクション2 1500が完了したものとデルタページャが決定し、データベースにトランザクションをコミットしようとすると、デルタページャには、トランザクション2 1500が依拠した状態からデータベースの現行状態を変更した介入トランザクションがないことがわかる。トランザクションポインタ1920は、書き込みバッファ1930および1910を通って、書き込みバッファ510をポイントする。現行状態ポインタが依然として書き込みバッファ510をポイントしているため、トランザクションポインタ1920は依然として現行状態をポイントする。
図20は、デルタページャがトランザクション2 1500をデータベースにコミットしていることを示す。デルタページャは、トランザクション2 1500によって追加された最新のバッファ、すなわち書き込みバッファ1930をポイントするように、現行状態ポインタ120を変更する。次にデルタページャは、トランザクションポインタ1920を削除する。現行状態ポインタが現在ポイントしている現行状態は、トランザクション1 200によって適用された書き込みバッファ410および510と、トランザクション2 1500によって適用された書き込みバッファ1930とに格納された変更によって修正された場合、オリジナル状態110を含む。
図21は、デルタページャがトランザクションをコミットするかまたは打ち切るかどうかを決定するために使用する、第1のモードを示す。流れ図2100は、ブロック2102で開始される。ブロック2102は、完了されたトランザクションがデータベースへのコミットを求める場合を決定し、流れ図2100は、トランザクションがデータベースへのコミットを求めるまで、ブロック2102にループする。ブロック2102が、コミットしようとする完了されたトランザクションを検出した場合、ブロック2104は、現行状態が、たとえば現行トランザクションに関してトランザクションポインタによって示されるように、トランザクションが開始された時点で存在した状態と同じであるかどうかを判別する。言い換えれば、ブロック2104は、トランザクションのために作成された第1の書き込みバッファが、現行状態ポインタがポイントするのと同じ状態をポイントするかどうかを判別する。ポイントする場合、ブロック2106は、現行状態ポインタに、トランザクションポインタもポイントするバッファである、トランザクションのために作成された最新のバッファをポイントさせ、トランザクションがコミットされる結果としてデータベースの更新を完了する。ブロック2108はトランザクションポインタを削除し、関連するメモリを解放する。流れ図2100は、データベースにコミットしようとする次の完了されたトランザクションを検出するために、ブロック2102へとループする。
他方で、ブロック2104が、現行状態が、トランザクションが開始された時点で存在した状態と同じでないと決定した場合、ブロック2104は、現行状態が変更されたものと決定する。ブロック2110は、トランザクションの書き込みバッファを解放する。ブロック2112は、トランザクションの打ち切りが完了したトランザクションポインタを削除する。前述のように、打ち切られたトランザクションは再開することが可能であり、デルタページャは、トランザクションが完了し、コミットしようとする場合、トランザクションがデータベースにコミットされるべきであるかどうかを判別することになる。
トランザクションが不必要に打ち切られるのを防ぐための読み取りバッファ
トランザクションが現行状態と一致しない状態をポイントする場合に必ず、デルタページャが現行トランザクションを打ち切る代わりに、デルタページャは、現行トランザクションが読み取ったデータを介入トランザクションが書き込んだ場合に、現行トランザクションを打ち切ることができる。現行状態が変更された場合に必ず現行トランザクションを打ち切ることによって、競合する変更がデータベースに適用されないことが保証される。しかしながら、同時に多くのトランザクションが実行している可能性がある場合、および、それらのトランザクションの一部が長いかまたは複雑な計算を含む可能性がある場合、トランザクションの打ち切りは計算リソースを無駄にする。したがって、介入トランザクションが、現行トランザクションが読み取ったかまたは依拠したいかなるデータにもアクセスしなかったかまたはこれを変更しなかった場合、デルタページャが現行トランザクションを打ち切る必要はない。
デルタページャのあるモードは、各トランザクションに対して読み取りバッファを作成する。読み取りバッファは、トランザクションがアクセスする任意のデータを追跡する。完了したトランザクションがデータベースへのコミットを試行するが、介入トランザクションがデータベースの状態を変更したことがわかった場合、デルタページャは、読み取りバッファとデータベースの現行状態とを比較して、現行トランザクションの打ち切りが必要であるかどうかを判別することができる。他のモードでは、デルタページャは、現行状態が変更され、現行トランザクションが読み取ったデータを介入トランザクションが変更または上書きした場合に、現行トランザクションを打ち切る。このモードでは、デルタページャは、介入トランザクションが現行トランザクションによって読み取られたアドレスにデータを書き込んだ場合に、トランザクションを打ち切ることができるか、または、デルタページャは、データの値が実際に変更したかどうか判別するために、現行トランザクションによって読み取られた実際のデータと、介入トランザクションによって書き込まれたデータとを、比較することができる。
図22〜24は、現行トランザクションによって読み取られたデータを介入トランザクションが書き込んだ場合に、読み取りバッファを使用してトランザクションを打ち切る、デルタページャのモードを示す。図22は、データベースの現行状態に対して実行される、トランザクション1 2200およびトランザクション2 2250という2つのトランザクションを示す。現行状態ポインタ120はオリジナル状態110をポイントし、これによって現行状態またはデータベースの現行状態を示す。トランザクション1 2200の場合、デルタページャは、読み取りバッファ2210、書き込みバッファ2220、およびトランザクションポインタ2230を作成する。前述のように、デルタページャは、各トランザクションについて1つまたは複数の書き込みバッファを作成することができる。デルタページャは、読み取りバッファがサイズまたはその他の理由で制限されている場合、複数の読み取りバッファを作成することもできる。デルタページャは、読み取りバッファ2210を現行状態にポイントさせ、書き込みバッファ2220を読み取りバッファ2210にポイントさせ、トランザクションポインタ2230を書き込みバッファ2220にポイントさせる。これに対応して、トランザクション2 2250の場合、デルタページャは読み取りバッファ2260、書き込みバッファ2270、およびトランザクションポインタ2280を作成する。デルタページャは、読み取りバッファ2260を現行状態にポイントさせ、書き込みバッファ2270を読み取りバッファ2260にポイントさせ、トランザクションポインタ2280を書き込みバッファ2270にポイントさせる。
トランザクション1 2200についての読み取りバッファ2210は、トランザクション1 2200がアドレス3でデータを読み取ったことを示す。トランザクション2 2250についての読み取りバッファ2260も、トランザクション2 2250がアドレス3でデータを読み取ったことを示す。しかしながら、たとえそれぞれのトランザクションが同じデータを読み取ったとしても、どちらのトランザクションもそのアドレスのデータを変更しようとしない。したがって、デルタページャはどちらのトランザクションも打ち切らなくてよい。
空の書き込みバッファと同様に、読み取りバッファは、データベースの状態を変更しない。したがって、デルタページャの諸実施形態は、データが格納されたオブジェクトであるかのように、データベースの現行状態にない読み取りバッファを採用することができる。その代わりに、デルタページャは、トランザクションが適用しようとする変更を格納するためにデルタページャが作成できる部分マッピングの外部に格納することができる。読み取りバッファは、別の場所に格納することが可能であり、トランザクションポインタは、読み取りバッファの場所を示すために別のポインタを維持することができる。
介入トランザクションが現行トランザクションによって読み取られたアドレスのデータを変更する場合にのみ、デルタページャが現行トランザクションを打ち切る場合、図25〜図27を参照しながら以下で説明するように、読み取りバッファは、読み取ったアドレスおよび値を格納するはずである。他方で、介入トランザクションが現行トランザクションによって読み取られたデータを上書きした場合に、デルタページャがトランザクションを打ち切る場合、たとえ介入トランザクションが同じ値を書き込んだとしても、読み取りバッファは、図22〜図24に示されるように、トランザクションが読み取る1つまたは複数のアドレスを含むだけでよい。
図23は、デルタページャがトランザクション1 2200をデータベースにコミットした後のデータベースの状態を示す。デルタページャは、トランザクション1 2200について作成された最新の書き込みバッファ2220にポイントするように、現行状態ポインタ120を変更し、トランザクションポインタ2230を削除する。トランザクション2 2250が完了すると、デルタページャはトランザクション2 2250をコミットすべきかどうかを判別する。ここでも、デルタページャがトランザクション2 2250をコミットする前にデータベースの現行状態が変更されているため、図15〜図21を参照しながら前述したトランザクションをコミットするかどうかを判別するモードで、デルタページャはトランザクション2 2250を打ち切ることになる。これに対して、現行のモードは、より現実的な評価をする。
このモードでは、たとえデータベースの現行状態が変更されていても、介入トランザクションが現行トランザクションによってアクセスされるアドレスにデータを書き込んでいない限り、デルタページャは現行トランザクションを打ち切らない。デルタページャは、トランザクション2 2250がデータを読み取ったアドレスに、介入トランザクションであるトランザクション1 2200が書き込まれたかどうかを判別するために、トランザクション2 2250の読み取りバッファ2260を比較し、それによって、トランザクション2 2250の処理が依拠した状態を変更する。トランザクション2 2250は、読み取りバッファ2260に従って、アドレス3からデータを読み取るだけである。しかしながら、現行状態ポインタ120によって示された現行状態をチェックすると、トランザクション1 2200は、書き込みバッファ2220に従ってアドレス4にデータを書き込んだのみである。したがってデルタページャは、データベースにトランザクション2 2250をコミットする。
図24は、データベースの現行状態にトランザクション2 2250をコミットしているデルタページャを示す。デルタページャは、トランザクション2 2250の読み取りバッファ2260を、現行状態ポインタによって示されたオブジェクトである、トランザクション1 2200の書き込みバッファ2220にポイントさせる。次にデルタページャは、トランザクション2 2250の書き込みバッファ2270を指示するように、現行状態ポインタ120を変更し、トランザクション2 2250をデータベースにコミットする。
図25〜図27は、介入トランザクションがデータを書き込んだアドレスに介入トランザクションが書き込むだけでなく、現行トランザクションが読み取ったデータ値を介入トランザクションが実際に変更する場合に、デルタページャが現行トランザクションを打ち切るだけの、それほどリスクを嫌わないモードを示す。図25は、データベースの現行状態に対して実行される、トランザクション1 2500およびトランザクション2 2550の、2つのトランザクションを示す。現行状態は、データベースのオリジナル状態110をポイントする、現行状態ポインタ120によって示される。トランザクション1 2500の場合、デルタページャは、読み取りバッファ2510、書き込みバッファ2420、およびトランザクションポインタ2530を作成する。デルタページャは、読み取りバッファ2510をその時点での現行状態にポイントさせ、書き込みバッファ2520を読み取りバッファ2510にポイントさせ、トランザクションポインタ2230を書き込みバッファ2520にポイントさせる。これに対応して、トランザクション2 2550の場合、デルタページャは読み取りバッファ2560、書き込みバッファ2570、およびトランザクションポインタ2580を作成する。デルタページャは、読み取りバッファ2560をその時点での現行状態にポイントさせ、書き込みバッファ2570を読み取りバッファ2560にポイントさせ、トランザクションポインタ2580を書き込みバッファ2570にポイントさせる。
図22〜図24の例とは対照的に、トランザクション1 2500についての読み取りバッファ2510は、トランザクション1 2500がアドレス3の値を読み取ったこと、およびアドレス3から読み取られた値がヌルであったことを示す。トランザクション2 2550についての読み取りバッファ2560は、トランザクション2 2500もアドレス3の値を読み取ったこと、および、アドレス3から読み取られた値もヌルであったことを見つけたことを示す。トランザクション2 2550についての書き込みバッファ2570は、アドレス3の値への変更を格納し、格納された値を文字列「CAT」に変更する。
図26は、デルタページャがトランザクション2 2550をデータベースにコミットした後のデータベースの現行状態を示す。したがってデルタページャは、トランザクション2 2550がデータベースに適用するいずれかの変更を格納している書き込みバッファ2570をポイントするように、現行状態ポインタ120を変更し、トランザクションポインタ2580を破棄する。このモードでは、トランザクション1 2500が完了すると、デルタページャは、トランザクション2 2550が変更した値をトランザクション1 2500が読み取ったかどうかを判別する。
デルタページャは、トランザクション1 2510の読み取りバッファ2510と、現行状態ポインタ120によって示されるデータベースの現行状態とを比較する。読み取りバッファ2510によれば、トランザクション1はアドレス3を読み取り、値がヌルであることがわかった。さらにデルタページャは現行状態ポインタ120によって示されるデータベースの現行状態を追い、トランザクション2 2550がアドレス3で格納された値を「CAT」に変更したことを見つける。したがって、トランザクション1 2500がデータベースに適用しようとするいかなる変更も、今では古くなったデータに基づいている可能性がある。
したがって、デルタページャは、図27に示されるようにトランザクション1 2500を打ち切る。デルタページャは、読み取りバッファ2510、書き込みバッファ2520、およびトランザクションポインタ2530を解放または削除し、デルタページャは、現行状態ポインタ120を、トランザクション2 2550がデータベースに適用した変更を格納している書き込みバッファ2570をポイントしたままにする。所望であれば、トランザクション1 2200を前述のように再開することができる。
たとえトランザクション2 2550がトランザクション1 2200によって読み取られたアドレスに新しい値を書き込んだとしても、トランザクション2 2250が書き込んだデータがトランザクション1 2500の結果を変更している可能性はないことに留意されたい。しかしながら、トランザクション1 2500の結果が、トランザクション2 2550によって書き込まれたデータの結果として変更されるかどうかを判別するために、トランザクション1 2500を再実行しなければならない。デルタページャのこのモードは、現行状態が変更されているというだけで、トランザクション1 2500を打ち切らず、トランザクション1 2550の再実行にかかる時間が足りない現行トランザクションを打ち切るべきであるかどうかのいくつかの実質的な分析を提供する。
図28は、デルタページャがトランザクションをコミットすべきであるかどうかを判別するより実質的なモードを容易にするために、読み取りバッファおよび単一書き込みバッファを作成することによって、デルタページャがトランザクションを処理するために使用するモードを示す。デルタページャは、読み取りバッファの使用と共に単一書き込みバッファの使用に限定されておらず、単一書き込みバッファの選択は、単なる1つの可能な代替である。
流れ図2800は、ブロック2802がトランザクションを受け取ると開始される。ブロック2804は、トランザクションがデータベースに適用しようとする変更の部分マッピングを示すことになる、切り替えポインタを作成する。ブロック2806は読み取りバッファを作成し、これを、トランザクションが開始された時点で存在した状態にポイントさせる。ブロック2808は単一書き込みバッファを作成し、この単一書き込みバッファを読み取りバッファにポイントさせる。ブロック2810は、トランザクションが適用しようとする変更の部分状態を示すために、切り替えポインタを単一書き込みバッファにポイントさせる。
ブロック2812は、トランザクションによって読み取られたすべてのデータを読み取りバッファに格納する。前述のように、介入トランザクションが現行トランザクションと同じデータを読み取った場合、デルタページャがトランザクションを打ち切ることができるモードでは、読み取りバッファは単に読み取ったデータのアドレスを格納すればよい。他方で、現行トランザクションによって読み取られたデータを介入トランザクションが書き込んだかどうかに基づいて、トランザクションをコミットするかどうかをデルタページャが判別する場合、読み取りバッファはアドレスとそのアドレスから読み取ったデータとの両方を格納すべきである。
ブロック2814は、トランザクションがデータベースに変更を適用しようとするかどうかを判別する。適用しようとする場合、ブロック2816は、切り替えポインタを単一書き込みバッファを避けてポイントさせる。ブロック2818は、単一書き込みバッファへの変更を格納する。ブロック2820は、切り替えポインタを再度単一書き込みバッファにポイントさせる。
ブロック2822は、トランザクションが完了するかまたは実行を継続するかを判別する。トランザクションが完了しない場合、流れ図2800はブロック2812にループして、トランザクションによって読み取られたデータがあれば読み取りバッファに格納する。他方で、ブロック2822がトランザクションを完了すると判別した場合、ブロック2824はトランザクションによって実行された変更のコミットを試行することになる。ブロック2826は他のトランザクションの受け取りを待つ。
図29は、デルタページャが読み取りバッファを使用して、トランザクションをコミットするかまたは打ち切るかを判別するモードを示す。流れ図2900はブロック2902で開始される。ブロック2902は、完了されたトランザクションがデータベースをコミットしようとする場合を決定し、流れ図2900はトランザクションがデータベースにコミットしようとするまでブロック2902へとループする。ブロック2902が、完了されたトランザクションがコミットしようとするのを検出すると、ブロック2904は、トランザクションが開始されて以来、現行状態が変更されたかどうかを判別する。
現行状態が変更されていない場合、ブロック2912は現行状態ポインタを、単一書き込みバッファ、または、トランザクションポインタも指示しているバッファである、トランザクションについて作成された複数の書き込みバッファのうちの最新のバッファにポイントさせる。ブロック2914は、トランザクションポインタを削除し、データベースの更新を完了する。データベースの現行状態が変更されていない場合、デルタページャは、読み取りバッファの検査またはデータベースへの適用の検索なしに、トランザクションをコミットすることができる。現行状態が変更されていない場合、いかなる介入トランザクションも現行トランザクションが依拠するデータを変更することはない。流れ図2900は、データベースにコミットしようとしている次の完了されたトランザクションを検出するために、ブロック2902へとループする。
他方で、ブロック2904が、トランザクションが開始されて以来、現行状態が変更されていると決定した場合、ブロック2906は、読み取りバッファ内に列挙されたデータが現行状態で変更されているかどうかを判別する。ここでも、デルタページャのこのモードは、デルタページャが介入トランザクションをコミットする結果として、現行状態が変更されているかどうか、読み取りバッファを検査するのみである。読み取りバッファ内に列挙されたデータが現行状態で変更されていない場合、デルタページャはトランザクションをコミットすることになり、流れ図2900はブロック2912へと進む。
他方で、ブロック2906が現行状態で、読み取りバッファ内のアドレスにデータが書き込まれたことを見つけた場合、または、そのアドレスでのデータの値が読み取りバッファ内に格納されたものと異なる場合、デルタページャはトランザクションを打ち切る。ブロック2908は、トランザクションについての読み取りおよび書き込みバッファを解放する。次に、ブロック2910は、現行トランザクションについてのトランザクションポインタを解放または削除し、トランザクションの打ち切りを完了する。次に、流れ図2900は、ブロック2902へとループして、コミットしようとする次のトランザクションを待つ。
トランザクションの合体および状態の保持
デルタページャの書き込みバッファは、多くの利点を提供する。一例を挙げると、トランザクションがコミットできず、打ち切らなければならない場合、デルタページャは、そのトランザクションについて作成した書き込みバッファを無視または削除し、デルタページャは、そうでなければデータベースに適用された可能性のある誤った変更または競合する変更を再書き込みするかまたは取り消す必要はない。しかしながら、デルタページャが多くの書き込みバッファを現行状態に追加した後では、現行状態におけるすべてのデータへのアクセスは非効率的になる可能性がある。たとえ比較的単純な図20の例であっても、トランザクションは、トランザクションが読み取ろうとしてデータの値を決定するために、書き込みバッファ1930、1910、510、410、310、およびオリジナル状態110を通って再度読み取らなければならない可能性がある。デルタページャの1つのモードでは、データベースの現行状態への効率的なアクセスを保証するために、書き込みバッファを合体する。
図30は、デルタページャが図20の書き込みバッファを合体することができる1つのモードを示す。図30で、デルタページャは、書き込みバッファに格納された変更をデータベースのオリジナル状態110に適用することによって、書き込みバッファを合体する。第1の段階3000で、デルタページャは、書き込みバッファが合体されることになるポイントを示す合体ポインタ3010を認識する。合体ポインタ3010の利点について、以下で詳細に説明する。デルタページャは、次に、オリジナル状態110をポイントする第1の書き込みバッファ内に格納された変更を適用する。図30に示されるように、第1の書き込みバッファは空の書き込みバッファ310であった。デルタページャは、この空の書き込みバッファを現行状態から除外することによって、書き込みバッファ310などの空のバッファを合体する。
空の書き込みバッファ310は、トランザクションがデータベースに適用しようとする変更を表す部分マッピングを変更しないことに留意されたい。したがって、デルタページャが、トランザクションが適用しようとする変更を格納する書き込みバッファを作成するとすぐに、空の書き込みバッファが破棄される可能性があるか、またはデルタページャが空の書き込みバッファ310を作成さえしない可能性もある。たとえば、アドレス4の値を変更するために書き込みバッファ510が追加されると、デルタページャの実施形態は、書き込みバッファ510を、トランザクションが開始された時点で存在する状態にポイントさせ、空の書き込みバッファ310を破棄する可能性がある。
第2の段階3020で、デルタページャは、次の書き込みバッファ410に格納された変更をオリジナル状態110に適用し、オリジナル状態を更新済み状態3030に置き換える。書き込みバッファ410に格納された、アドレス2の値を1に設定する変更は、更新済みバッキングストア3030を作成するために、アドレス2 3040に適用される。
最終結果3050は、データベースの新しい状態3060を示す。新しい状態3060では、書き込みバッファ510に格納された変更が、アドレス4 3070で格納された値を文字列「DOG」に変更するために適用され、書き込みバッファ1930に格納された変更が、アドレス3 3080で格納された値を文字列「CAT」に変更するために適用された。デルタページャは、ここで、新しい状態3060をポイントするように現行状態ポインタ120を切り替える。その後デルタページャは、合体ポインタ3010を除外する。
デルタページャのバッファの合体に関して注目する4つのポイントがある。第1に、たとえ合体プロセス中であっても、各ポインタはデータベースの同じ状態を不変的にポイントし続ける。たとえば第2の段階3020で、デルタページャが、更新済み状態3030を作成するために、書き込みバッファ410内の変更をオリジナル状態110に適用した場合、他のポインタによって示される状態も同様に維持された。現行状態ポインタ120、書き込みバッファ510、1910および1930、ならびに合体ポインタ3010は、すべて、すべて同じ値を提示するデータベースの状態を依然としてポイントしていた。
第2に、現行のデータベースを変更するために1つまたは複数の新しいトランザクションが開始されコミットされた場合、新しいトランザクションはデータベースの不変状態をポイントし続けることになった。新しいトランザクションを開始すると、デルタページャは、現行状態ポインタ120によって示された現行状態をポイントする書き込みバッファを作成する。デルタページャがトランザクションをコミットする場合、デルタページャは、それぞれの後続トランザクションについて作成された最新の書き込みバッファをポイントするように、現行状態ポインタ120を切り替える。したがってデルタページャは、たとえ書き込みバッファの合体中であっても、新しいトランザクションに関する状態の不変性を保持する。
第3に、合体ポインタ3010は合体プロセスが停止するポイントを示す。デルタページャが追加の書き込みバッファを現行状態にコミットする場合、デルタページャは、デルタページャが他の合体に従事するまで追加のバッファを合体しない。合体は無限に続けることができるが、数個の可能性がある新しい書き込みバッファを継続的に合体するために計算リソースを充当することは、計算リソースの効率的な使用ではない可能性がある。
第4に、図31に示されるように、デルタページャは、データベースのオリジナル状態110を上書きすることなしにバッファを合体することができる。たとえばオリジナル状態110は、アクセスが非効率的な可能性があるディスクストレージに格納することができるか、または後続のトランザクションによって変更が適用されることなく、オリジナル状態110を維持することが望ましい可能性がある。したがって、デルタページャは、1つまたは複数の中間オブジェクトに書き込みバッファを合体することができる。
図31で、書き込みバッファを中間オブジェクトに合体する第1の段階3100では、デルタページャは、合体される第1の書き込みバッファである書き込みバッファ310と、オリジナル状態110との間に、中間の合体済みオブジェクト3110を作成する。合体済みオブジェクト3110の挿入は、データベース内のいかなる現行状態の不変性も変更せず、現行状態ポインタ120および書き込みバッファ310、410、510、1910、および1930は、依然として同じデータベースの状態をポイントする。合体済みオブジェクト3110ならびにオリジナル110は、キャッシュメモリ、メモリ、ディスク、または他の形のストレージを含む、任意の所望のストレージ内に維持することができる。
最終結果3120は、デルタページャが、書き込みバッファ410、510、および1930に格納されたすべての変更を、合体済みオブジェクト3110に合体したことを示す。したがって、書き込みバッファ410に格納された、アドレス2の値を1に変更するという変更は、オリジナル状態110に適用される代わりに、アドレス2 3130で合体済みオブジェクト3110に格納される。同様に、デルタページャは、書き込みバッファ510および1930からの変更を、それぞれアドレス3 3140およびアドレス4 3150で、合体済みオブジェクト3110に格納する。デルタページャは、合体済みオブジェクト3110を指示するように現行状態ポインタ120を変更し、この合体済みオブジェクト3110はオリジナル状態110をポイントする。したがって、データベースの状態は決して変更されず、現行状態ポインタ120は、デルタページャが書き込みバッファを合体済みオブジェクト3110に合体する前に存在したデータベースと同じ状態を引き続きポイントする。
有利なことに、データを読み取ろうとしている新しいトランザクションは、ここで、合体済みオブジェクト3110およびオリジナル状態110という2つのデータストアをチェックするだけでよい。後者が望ましい場合、デルタページャは、合体済みオブジェクト3110のコンテンツをオリジナル状態に合体し、更新済みバッキングストアを作成することができる。別の方法として、デルタページャは、合体済みオブジェクトを維持し、同じ合体済みオブジェクト3110への書き込みバッファの後続の合体を実行することができる。さらに別の方法として、スナップショットに関して以下で詳細に説明するように、デルタページャは追加の合体済みオブジェクトを作成することができる。
前述のように、デルタページャはポインタの不変性を維持する。データベース内の合体済みオブジェクトでは、各オブジェクトが追加された時点で存在した中間状態を表すバッファ間のポインタは、現行状態が保持される限り消去される。しかしながら、後続バッファからのポインタ以外のポインタがバッファをポイントする場合、デルタページャによって認識される不変性は、ポインタによって示される状態がバッファの合体後も存続しなければならないことを保証する。デルタページャのポインタの不変性を利用して、デルタページャは、選択された状態をポイントするスナップショットポインタを遵守し、たとえスナップショットポインタの先行または後続のバッファをデルタページャが合体する場合であっても、その状態を保持することを遵守する。
図32は、デルタページャがスナップショットポインタ3210と共に保持することになるデータベースの現行状態を示す。現行状態ポインタ120は、書き込みバッファ3220、3230、および3240によってオリジナル状態110が修正された、現行状態をポイントする。第1の書き込みバッファ3220は、文字列「PEAR」をアドレス0に書き込む。第2の書き込みバッファ3230は、値1をアドレス2に書き込む。第3の書き込みバッファ3240は、文字列「DOG」をアドレス4に書き込む。
デルタページャが、現行状態を保持するように命じられた場合、デルタページャは、現行状態をポイントするスナップショットポインタ3210を作成する。デルタページャは、たとえば定期的なバックアップまたはユーザ要求を自動的に保持するプログラムが、現行状態などの状態のスナップショットを要求した場合、状態を保持するためにスナップショットポインタ3210を挿入する。スナップショットポインタ3210は選択された状態をポイントすることから、デルタページャによって遵守されるポインタの不変性の結果として、デルタページャはポインタおよび対応する状態を維持することになる。
図33は、追加のトランザクションが現行状態を変更した後の、データベースのその後の状態を示す。第4の書き込みバッファ3310は、文字列「PEACH」をアドレス0に書き込む。第5の書き込みバッファ3320は、文字列「CAT」をアドレス4に書き込む。デルタページャは、第5の書き込みバッファ3320をポイントするように現行状態ポインタ120を切り替える。図33で、第5の書き込みバッファ3320は、アドレス4に格納された書き込みバッファ3240の文字列「DOG」を、文字列「CAT」で上書きする。しかしながら、スナップショットポインタ3310は、図32の状態を表す書き込みバッファ3240を依然としてポイントする。
図34は、デルタページャによって許可された合体を示す。デルタページャがオリジナル状態110を上書きしないケースを想定すると、デルタページャは、書き込みバッファ3220、3230、および3240によって適用された変更を集めることによって、
スナップショットポインタ3210と、第1の合体済みオブジェクト3410内のオリジナル状態のバッキングストアとの間で、データベースの現行状態におけるオブジェクトを合体する。次にデルタページャは、書き込みバッファ3310および3320によって適用された変更を第2の合体済みオブジェクト3320内に集める。現行状態ポインタ120は、この第2の合体済みオブジェクト3420をポイントする。第2の合体済みオブジェクト3420は、第1の合体済みオブジェクト3410をポイントし、これはオリジナル状態110をポイントする。
デルタページャは、スナップショットオブジェクト3210のポインタの不変性を保持するために、別々の合体済みオブジェクト3410および3420を使用する。スナップショットオブジェクト3210が存在する限り、デルタページャは図32の選択された状態を維持することになる。したがって、たとえば図33および図34の現行状態では、デルタページャは、書き込みバッファ3240によってアドレス4に格納された文字列「DOG」を、書き込みバッファ3320によってアドレス4に格納された文字列「CAT」で置き換える。しかしながら、スナップショットポインタ3210によって保持された選択された状態では、文字列「DOG」は依然として第1の合体済みオブジェクト3410内のアドレス4に格納されたままである。
スナップショットポインタ3210に関して注目する5つのポイントがある。第1にデルタページャは、スナップショットポインタを追加することによって、任意の選択された時点でデータベースの状態を保持することができる。第2にデルタページャは、複数の状態を保持するために複数のスナップショットポインタを含むことができる。第3に、合体に関して前述したように、デルタページャは、ポインタの不変性により、1つまたは複数の以前の状態を保持しながら、トランザクションの受け取りおよびデータベースへの変更のコミットを続行することができる。第4に、スナップショットポインタ3210によって保持された状態がもはや必要でない場合、スナップショットポインタ3210は除去され、後続の合体によって保持された状態が解放される。
第5に、スナップショットポインタは、デルタページャが複数の異なる状態を単一のデータストア内で維持できるようにする。現行状態を維持するために従来のデータベースのバックアップイメージが保存される場合、後続のイメージが以前のイメージを上書きするため、各イメージは別々に格納される。複数の状態は、大量のストレージを消費する可能性があり、バックアップイメージは、高速デバイス内のストレージスペースを保持するために、しばしば低速ストレージデバイスへ追いやられる。しかしながら、デルタページャは以前の状態の上に後続の状態を構築することから、スナップショットポインタは単一のデータストア内に以前の状態を保持する。
図35は、デルタページャが、バッファまたは、以前に作成されてここでさらに合体されることになる合体済みオブジェクトなどの、他のオブジェクトを合体する際に使用する1つのモードを示す。流れ図3500はブロック3502で開始される。ブロック3502は、データベースの現行状態でオブジェクトの合体を開始する。プログラムが周期的に合体を開始するか、またはユーザが合体を開始することができる。ブロック3504は、図34の例にあるようなオリジナル状態、最新の合体済みオブジェクト、またはデルタページャがデータベースに追加されたバッファを合体することになる他のポイントを含むことができる、合体開始ポイントを識別する。ブロック3506は、次の合体されていないオブジェクトに進む。図33の例で、ブロック3504は、オリジナル状態110から始まり、次の合体されていないオブジェクトである書き込みバッファ3220として、合体のための開始ポイントを識別する。
ブロック3508は、次に作成されるバッファから以外のバッファへのいずれかのポインタが存在するかどうかを判別する。デルタページャは、データベースの状態が変更されない場合、一連のバッファまたは他のオブジェクトを合体する際にポインタを消去することができるが、デルタページャは、スナップショットポインタ3210からのポインタなどの他のポインタは消去しない。ブロック3508が、次のバッファから以外のポインタが存在しないと判別した場合、ブロック3510は、このバッファと次に作成されるバッファとを合体済みオブジェクト内に組み入れる。ブロック3512は、合体する可能性のある追加のオブジェクトが存在するかどうかを判別する。追加のオブジェクトは次に作成されるバッファを含む可能性があるか、または、データベース内のオブジェクトが事前に合体されている場合は、さらに合体されることになる合体済みオブジェクトが存在する可能性がある。合体する可能性のある追加のオブジェクトが存在する場合、流れ図3500はブロック3506へとループして、次の合体されていないオブジェクトに進む。しかしながらブロック3512は、合体する他のオブジェクトがないと決定する場合がある。たとえば、デルタページャがデータベースを完全に合体した場合、デルタページャは、合体されていない現行状態ポインタ120に到達することになる。ブロック3512が、合体する追加のオブジェクトが存在しないと決定した場合、ブロック3514は合体を完了する。合体の完了により、たとえば動作の完了を確認するメッセージを送信またはログ記録する場合がある。
他方で、ブロック3508は、状態内の次のオブジェクト以外からのポインタが存在すると決定する場合がある。たとえば図32〜図34に示されるように、スナップショットポインタ3210は、オブジェクトが表す状態を保持するためのオブジェクトをポイントすることができる。ブロック3508が、他のポインタが存在すると決定した場合、流れ図3500はブロック3512へと進み、合体する可能性のある追加のオブジェクトが存在するかどうかを判別する。
状態の永続化
デルタページャは、データベースの選択された部分を永続的にすることができる。デルタページャは、データベースの選択された部分を保持するために、不揮発性ストレージにコミットすることになる。
図36は、永続媒体であるディスク3610上に部分的に、および揮発性媒体であるメモリ3620内に部分的に格納された、オブジェクトを含む、データベースの現行状態を示す。現行状態ポインタ120は、ディスク3610上に格納されたオリジナル状態110を含み、デルタページャが書き込みバッファ3630および3640内の変更をコミットした、現行状態をポイントする。
1つのモードで、デルタページャは、永続ポインタ3650を挿入することによって、プログラムまたはユーザがデータベースの選択した部分を永続的にできるようにする。永続ポインタ3650は、永続的にされるオブジェクトを含むデータベースの状態をポイントする。図36で、永続ポインタ3650は、第1の書き込みバッファ3630を含む状態をポイントする。
図37が示すように、デルタページャは、永続ポインタ3250によって示される状態に含まれたオブジェクトがあれば、ディスクストレージ3710などの永続格納可能ストレージに移動する。この例では、第1の書き込みバッファ3630はディスクストレージ3710に移動される。デルタページャは、データベースの状態を、任意数のストレージ媒体にわたって常駐させることができる。したがって、デルタページャが第1の書き込みバッファ3730を書き込むディスクストレージ3710は、オリジナル状態110が常駐するディスクストレージ3610と同じストレージデバイスとするか、または別のストレージデバイスとすることができる。永続ポインタ3650がポイントする状態に含まれていない第2の書き込みバッファ3640は、メモリ3620内に残される。
デルタページャが、永続ポインタ3650によって示されるデータベースの現行状態の一部を永続ストレージに格納すると、デルタページャは永続ポインタを解放することができる。デルタページャは、データベースの選択された部分が永続的にされていることを確認するメッセージを生成することができる。
図38は、デルタページャがバッファを永続的にする際の1つのモードを示す。流れ図3500はブロック3802で開始される。ブロック3802は永続要求を受け取る。ブロック3804は、永続的にするデータベースの部分を決定するために永続ポインタを配置する。ブロック3806は、永続ポインタと、永続的にされるデータベース内の最新の永続ストレージ部分との間の、すべてのオブジェクトを識別する。ブロック3808は、永続ポインタと最新の永続ストアとの間のすべてのオブジェクトを、永続ストレージオブジェクトにコピーする。ブロック3810は、永続的にされる現行状態の部分をポイントするいかなるポインタも、永続ストレージオブジェクトに変更する。図37の例では、デルタページャは、書き込みバッファ3640のポインタを永続オブジェクトに変更する。別の方法として、たとえば、現行状態ポインタ120またはスナップショットポインタ3210などの、永続ポインタ3650がポイントする状態への他のポインタが存在する場合、また、これらのポインタは、ブロック3808によって作成された永続オブジェクトへポイントされる。
永続ポインタ3650がポイントする状態内のオブジェクトが永続オブジェクトにコピーされ、この状態へのポインタが変更されると、ブロック3812は、メモリを他の用途に解放するために、永続ポインタがポイントするメモリ内のオブジェクトを解放する。ブロック3814は、永続ポインタを削除する。ブロック316は、たとえば、永続要求を実行するメッセージをユーザに送信すること、または、メッセージをシステムログに追加することによって、永続要求の完了を確認する。
データのキャッシュ
デルタページャは、性能を向上させるためにデータのキャッシュも提供する。デルタページャは、図7〜図9を参照しながら説明した一連の累積バッファを使用するなどにより、データの重複ストレージを可能にする。状態内でのデータの重複ストアが状態を変更することはない。したがってデルタページャは、状態を変更することなく、ディスクストレージまたは他の大容量記憶装置などの低速ストア上に格納されたデータを、メモリなどの高速ストア内にキャッシュすることができる。
図39は、キャッシュオブジェクト3910を含むデータベースの現行状態を示す。キャッシュオブジェクトポイント3910は、ディスクストレージ3950に格納された永続オブジェクト3930などの、キャッシュされるオブジェクトをポイントする。デルタページャは、このケースでは読み取りバッファ3962である、永続オブジェクト3930に格納されていない第1のオブジェクトを、キャッシュオブジェクト3910にポイントさせる。
現行状態では、トランザクションがアドレス0の値を検索すると、トランザクションは、文字列「CAT」を現行状態に書き込む書き込みバッファ3968内のアドレス0の現行値を見つけることになる。トランザクションは、書き込みバッファ3968以外は探す必要がなく、トランザクションはメモリ取り出し速度でアドレス0の値を受け取ることになる。他方で、トランザクションがアドレス2に格納された値を求める場合、デルタページャはこれを見つけるまで現行状態全体にわたってこの値を求めることになる。キャッシュオブジェクト3910がない場合、デルタページャはディスクストレージ3950内の永続オブジェクト3930まで探しに行くことになる。ディスクストレージ3950からのデータへのアクセスは、メモリ3960へのアクセスに比べて遅い。キャッシュオブジェクト3910をメモリ3930内に作成することで、アクセス効率を向上させることができる。
図39の例では、永続オブジェクト3930は、値1を格納するアドレス2 3932、文字列「CAT」を格納するアドレス3 3934、および文字列「DOG」を格納するアドレス4 3936などの、アドレスの範囲で値を格納する。永続オブジェクト3930は、文字列「ROCK」を格納するアドレス99 3938までの、データが格納されないヌル値の範囲3940も格納する。
デルタページャは、メモリ3960内にキャッシュオブジェクト3910を作成する。デルタページャは、キャッシュオブジェクト3910を、このケースでは永続オブジェクト3930である、キャッシュされているオブジェクトにポイントさせる。次にデルタページャは、第1の非永続オブジェクトである読み取りバッファ3962を、キャッシュオブジェクト3910にポイントさせる。
デルタページャがキャッシュオブジェクトを作成し、現行状態にキャッシュオブジェクトを挿入するようにポインタを変更すると、デルタページャはキャッシュを読み込む(populate)。1つのモードでは、デルタページャが永続オブジェクト3930からデータを取り出す場合、デルタページャは同じデータをキャッシュオブジェクト3910に格納する。また、永続オブジェクトへのアクセスに時間を費やした後、デルタページャは永続オブジェクト3930からデータのブロックを取り出し、これをキャッシュオブジェクト3910に格納することもできる。たとえば、キャッシュオブジェクト3910が読み込まれる前に、デルタページャが読み取りバッファ3962を作成したトランザクションはアドレス4からのデータを求め、これが永続オブジェクト3930内のアドレス4 3936に格納される。永続オブジェクト3930にアクセスしている間、デルタページャは、アドレス2 3932、アドレス3 3934、およびアドレス99 3938までの他のアドレスからのデータを含むブロックに関するデータを取り出し、そのデータをキャッシュオブジェクト3910内のそれらのアドレスに格納することもできる。
デルタページャが永続オブジェクト3930から取り出したデータをキャッシュオブジェクト3910に格納した後、キャッシュオブジェクト3910にコピーされたデータに関する後続の要求は、かなり速いメモリ速度で実行されることになる。したがって、その後、読み取りバッファ3962が作成されたトランザクションがアドレス99にデータを要求した場合、デルタページャはキャッシュオブジェクト3910内のアドレス99 3918からデータを取り出すことができる。同様に、読み取りバッファ3964が作成されたトランザクションがアドレス3にデータを要求した場合、デルタページャは、ディスクストレージ3950からデルタページャがデータを取り出すのを待つことなく、キャッシュオブジェクト内のアドレス3 3914からデータを取り出すことができる。
デルタページャのキャッシュオブジェクト3910に関して注目する3つの特徴がある。第1に、キャッシュオブジェクト3910の挿入によって、デルタページャがデータ状態を作成および使用する方法が変更されないことである。たとえば、たとえキャッシュオブジェクト3910内のアドレス4 3916が文字列「DOG」を格納している場合でも、書き込みバッファ3966は、書き込みバッファ3966内のアドレス4に文字列「BIRD」を書き込むことによって、データベースの状態を変更することができる。後続のトランザクションでは、現行状態ポインタ120がポイントする現行状態は、キャッシュオブジェクト3910がアドレス4 3916に何を格納しているかにかかわらず、文字列「BIRD」がアドレス4に格納されていることを見つけることになる。
第2に、キャッシュオブジェクト3910を使用する状態が永続的になっている場合、デルタページャは、キャッシュオブジェクト3910を再開および再読み込みする必要がない。その代わりに、データが永続ストレージにコピーされるため、ディスクにコピーされている状態内のデータとキャッシュオブジェクト3910内に格納されたデータとが異なる場合、デルタページャはキャッシュオブジェクト3910内のデータを更新することができる。別の方法としてデルタページャは、永続ストレージにコピーされている状態と比べた場合、もはや現行ではない、キャッシュオブジェクト3910内のエントリを無効にすることができる。どちらの技法も、古い状態のキャッシュを修正して、更新済み状態の有効キャッシュとする。このように実行することによって、デルタページャはキャッシュオブジェクトを無期限に再使用する。キャッシュが更新全体にわたって保持できない場合、更新が永続的にされた場合に必ずキャッシュを再構築することで効率性が失われる。
第3に、デルタページャは、範囲の照会を容易にするためにキャッシュオブジェクト3910を使用することができる。キャッシュオブジェクトは、範囲の照会をバッキングストアに発行することによって、ヌルのラン(runs of null)を効率的に発見し、デルタページャによって維持されるキャッシュオブジェクトまたは他のオブジェクトの一部でこうしたランをコンパクトに表すことができる。たとえば、ヌルのランの表現をキャッシュオブジェクトのフィールドに含めることができる。メモリに格納されたオブジェクト内でこの表現を維持することによって、範囲の照会を容易にするためのヌルのランの表現へのアクセス速度が改善される。たとえば、トランザクションが「BIRD」、「CAT」、または「DOG」の後に次のペットの文字列を見つけようとすると、「DOG」の後の永続オブジェクト3930内にヌルデータの長い文字列3940が存在した場合、キャッシュオブジェクト3910は、範囲の照会をサポートするために、アドレス5 3920のように、ヌル値を格納しているラン内のアドレスの最後、または、非ヌル値を格納しているアドレスの最初を示す、第1のヌルアドレスフィールド内のエントリを含むことができる。
図40は、デルタページャがキャッシュオブジェクトを維持する際の1つのモードを示す。流れ図4000はブロック4002で開始される。ブロック4002は、メモリまたは他の高速アクセスストレージ内にキャッシュオブジェクトを作成する。ブロック4004はこのキャッシュオブジェクトを、キャッシュされているオブジェクトにポイントさせる。ブロック4006は、キャッシュされているオブジェクトをポイントするオブジェクトを識別し、このオブジェクトをキャッシュオブジェクトにポイントさせる。ブロック4008は、キャッシュオブジェクト内にキャッシュされているオブジェクトからトランザクションによって読み取られたアドレスおよびデータを格納する。前述のように、デルタページャが、キャッシュされているオブジェクトからデータを取り出す場合、好ましくは、デルタページャは、後続のディスクアクセス動作の必要性を潜在的に回避するために、読み取られたアドレスに隣接するアドレスのブロックからデータを取り出すことになる。
ブロック4010は、キャッシュオブジェクトをポイントする状態が永続的とされるかどうかを判別する。永続的とされない場合、流れ図4000は、トランザクションによって読み取られたアドレスおよびデータを引き続きキャッシュオブジェクトに格納するために、ブロック4008へとループする。しかしながら、ブロック4010が、キャッシュをポイントする状態が永続的とされるものと決定した場合、ブロック4012は、永続的とされるオブジェクト内の変更を使用してキャッシュエントリを更新する。別の方法として、デルタページャは、古くなったキャッシュエントリを更新する代わりに無効化することができる。ブロック4012がキャッシュエントリを更新すると、ブロック4014は、永続的とされない第1のオブジェクトをキャッシュオブジェクトにポイントさせる。
デルタページャによって使用されるオブジェクト
要約すると、図41は、前述の例示的動作を容易にするためにデルタページャが使用するオブジェクトを示す。この要約に表された汎用オブジェクトを参照するために、新しい参照番号が使用されている。図41は、永続ディスクストレージ4120およびメモリ4130に格納されたようなオブジェクトの範囲を含む、例示的状況4100を示す。
デルタページャは、ディスクストレージ4120内の1つまたは複数の永続オブジェクト4122および4124を使用することができる。これらのオブジェクトは、オリジナル状態および前述のように永続的とされた任意の他の状態を格納することができる。たとえば永続ポインタ4126は永続的とされており、それがポイントする状態が永続オブジェクト4124内に顕在化(manifest)された後に除去されることになるため、破線で示されている。永続オブジェクトは、1つまたは複数のデバイスに格納することができる。
デルタページャは、メモリ4130に格納された複数のオブジェクトを含むことができる。デルタページャ4140は、キャッシュ可能な永続オブジェクト4122および4124と後続のオブジェクトとの間に挿入された、キャッシュオブジェクト4140を含むことができる。スナップショットポインタ4152によって保持された状態を含むスナップショットオブジェクト4150は、キャッシュオブジェクト4140をポイントする。スナップショットオブジェクト4150は、合体済みオブジェクトまたは一連の合体されていないオブジェクトを含む、選択された状態を含む。前述のように、スナップショットポインタ4152は、たとえ保持された状態に含まれるかまたは保持された状態に後で追加されるオブジェクトが合体される場合であっても、ある状態を保持することができる。
最新の合体動作で合体済みオブジェクト4160が生成されて以来、読み取りバッファ4170および書き込みバッファ4180などの複数のバッファが現在の状態に追加されている。現行状態ポインタ4190はこの現行状態を示す。
例示的諸実施形態を実施するための動作環境
図42は、デルタページャを実施するための例示的動作環境4200を示す。動作環境4200は好適な動作環境の一例に過ぎず、前述のようなデルタページャの諸実施形態例または他の諸実施形態の使用または機能の範囲に関して、いかなる制限をも示唆することを意図するものではない。さらに動作環境4200は、例示的動作環境4200に示された構成要素のうちのいずれか1つまたはいずれかの組み合わせに関する、いかなる依存性または要件を有するものとも解釈されるべきではない。
デルタページャの実施プロセスは、動作環境4200内で実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで説明することができる。通常、プログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。さらに、当業者であれば、デルタページャを実施するプロセスが、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースかまたはプログラム可能な大衆消費電化製品、ミニコンピュータ、メインフレームコンピュータ、などを含む、様々なコンピュータシステム構成を使用して実施可能であることを理解されよう。デルタページャを実施するプロセスは、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、メモリストレージデバイスを含むローカルとリモートの両方のコンピュータストレージ媒体内に、プログラムモジュールを配置することができる。
図42を参照すると、デルタページャのプロセスを実施するための例示的動作環境4200は、処理ユニット4220と、システムメモリ4230と、システムメモリ4230を含む様々なシステム構成要素を処理ユニット4220に結合するシステムバス4221とを含む、コンピュータ4210を含む。
コンピュータ4210は、通常、様々なコンピュータ読み取り可能媒体を含む。例を挙げると、コンピュータ読み取り可能媒体は、コンピュータストレージ媒体および通信媒体を備えることができるが、これらに限定されることはない。コンピュータストレージ媒体の例には、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、フラッシュメモリまたは他のメモリ技術、CD ROM、デジタル汎用ディスク(DVD)あるいは他の光またはホログラフィディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ストレージデバイス、あるいは、所望の情報を格納するために使用することおよびコンピュータ4210によってアクセスすることが可能な任意の他の媒体、が含まれるが、これらに限定されることはない。システムメモリ4230は、ROM 4231およびRAM 4232などの揮発性および/または不揮発性メモリの形のコンピュータストレージ媒体を含む。コンピュータ4210内の諸要素間で(起動時などの)情報の転送を助ける基本ルーチンを含む、基本入出力システム4233(BIOS)は、通常、ROM 4231に格納される。RAM 4232は、通常、処理ユニット4220によって即時アクセス可能および/または現在その上で動作中の、データおよび/またはプログラムモジュールを含む。例を挙げると、図42は、オペレーティングシステム4234、アプリケーションプログラム4235、他のプログラムモジュール4236、およびプログラムデータ4237を示すが、これらに限定されることはない。
コンピュータ4210は、他の取り外し可能/取り外し不能で揮発性/不揮発性のコンピュータストレージ媒体も含むことができる。単なる例として挙げると、図42は、取り外し不能で不揮発性の磁気媒体から読み取るかまたはこれに書き込むハードディスクドライブ4241と、取り外し可能で不揮発性の磁気ディスク4252から読み取るかまたはこれに書き込む磁気ディスクドライブ4251と、CD−ROMまたは他の光媒体などの取り外し可能で不揮発性の光ディスク4256から読み取るかまたはこれに書き込む光ディスクドライブ4255と、を示す。例示的動作環境で使用可能な他の取り外し可能/取り外し不能で揮発性/不揮発性のコンピュータストレージには、磁気テープカセット、フラッシュメモリユニット、デジタル汎用ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROM、などが含まれるが、これらに限定されることはない。ハードディスクドライブ4241は、通常、インターフェース4240などの取り外し不能メモリインターフェースを介して、システムバス4221に接続される。磁気ディスクドライブ4251および光ディスクドライブ4255は、通常、インターフェース4250などの取り外し可能メモリインターフェースによってシステムバス4221に接続される。
前述し、図42に示された、ドライブおよびそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、およびコンピュータ4210向けの他のデータの、ストレージを提供する。たとえばハードディスクドライブ4241は、オペレーティングシステム4244、アプリケーションプログラム4245、他のプログラムモジュール4246、およびプログラムデータ4247を格納するように示される。これらの構成要素は、オペレーティングシステム4234、アプリケーションプログラム4235、他のプログラムモジュール4236、およびプログラムデータ4237と同じであるか、または異なるものとすることができることに留意されたい。通常、RAMに格納されたオペレーティングシステム、アプリケーションプログラムなどは、対応するシステム、プログラム、またはハードディスクドライブ4241から読み取られたデータの一部であり、この部分は、所望の機能に応じてサイズおよび範囲が異なる。オペレーティングシステム4244、アプリケーションプログラム4245、他のプログラムモジュール4246、およびプログラムデータ4247には、それらが少なくとも異なるコピーであることが可能なことを示すために、ここでは異なる番号が与えられている。ユーザは、キーボード4262、一般にはマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス4261、無線入力受信構成要素4263、あるいは、リモートコントロールなどの無線ソースなどの、入力デバイスを介して、コマンドおよび情報をコンピュータ4210に入力することができる。他の入力デバイス(図示せず)は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナなどを含むことができる。これらおよび他の入力デバイスは、しばしば、システムバス4221に結合されるユーザ入力インターフェース4260を介して、処理ユニット4220に接続されるが、パラレルポート、ゲームポート、IEEE 4294ポート、またはユニバーサルシリアルバス(USB)4298、または赤外線(IR)バス4299などの、他のインターフェースおよびバス構造による接続が可能である。前述のように、入力/出力機能は、通信ネットワークを介した分散様式で容易にすることができる。
ディスプレイデバイス4291も、ビデオインターフェース4290などのインターフェースを介してシステムバス4221に接続される。ディスプレイデバイス4291は、モニタ、LCDスクリーン、TFTスクリーン、フラットパネルディスプレイ、従来型テレビジョン、またはスクリーンプロジェクタに限定されることのない、コンピュータ4210の出力を表示するための任意のデバイスとすることができる。コンピュータは、ディスプレイデバイス4291に加えて、出力周辺インターフェース4295を介して接続可能な、スピーカ4297およびプリンタ4296などの他の周辺出力デバイスを含むこともできる。
コンピュータ4210は、リモートコンピュータ4280などの1つまたは複数のリモートコンピュータへの論理接続を使用する、ネットワーク化環境で動作することになる。リモートコンピュータ4280は、パーソナルコンピュータとすることが可能であり、通常、コンピュータ4210に関して上記で説明した要素のうちの多くまたはすべてを含むが、図42ではメモリストレージデバイス4281のみが示されている。図42に示された論理接続は、ローカルエリアネットワーク(LAN)4271およびワイドエリアネットワーク(WAN)4273を含むが、メトロポリタンエリアネットワーク(MAN)、イントラネット、またはインターネットへの接続などの、他のネットワークも含むことができる。
LANネットワーキング環境で使用される場合、コンピュータ4210は、ネットワークインターフェースまたはアダプタ4270を介してLAN 4271に接続される。WANネットワーキング環境で使用される場合、コンピュータ4210は、通常、モデム4272、またはインターネットなどのWAN 4273を介した通信を確立するための他の手段を含む。モデム4272は内蔵型または外付け型とすることが可能であり、ネットワークインターフェース4270または他の適切なメカニズムを介してシステムバス4221に接続される。モデム4272は、ケーブルモデム、DSLモデム、または他のブロードバンドデバイスとすることができる。ネットワーク化環境では、コンピュータ4210に関して示されたプログラムモジュール、またはその一部を、リモートメモリストレージデバイスに格納することができる。たとえば、図42はリモートアプリケーションプログラム4285をメモリデバイス4281上に常駐するものとして示しているが、これに限定されることはない。図示されたネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段も使用可能である。
コンピュータ4210の多くの他の内部構成要素は示されていないが、当業者であれば、こうした構成要素および相互接続は周知であることを理解されよう。たとえば、テレビジョンチューナカードおよびネットワークインターフェースカードなどの様々な拡張カードをコンピュータ4210内に含めることが一般的である。したがって、デルタページャの実施プロセスの例示的諸実施形態を説明する上で、コンピュータ4210の内部構造に関する追加の細部を開示する必要はない。
コンピュータ4210が電源投入またはリセットされた場合、ROM 4231に格納されたBIOS 4233は、オペレーティングシステムまたはその必要部分を、ハードディスクドライブ4241からRAM 4232へとロードするように、処理ユニット4220に命じる。オペレーティングシステム4244として指定されたオペレーティングシステムのコピーされた部分がRAM 4232にロードされると、処理ユニット4220はオペレーティングシステムコードを実行し、オペレーティングシステム4234のユーザインターフェースに関連付けられた視覚要素をディスプレイデバイス4291上に表示させる。通常、アプリケーションプログラム4245がユーザによって開かれた場合、プログラムコードおよび関連データがハードディスクドライブ4241から読み取られ、必要な部分がRAM 4232にコピーされるが、このコピーされた部分は、本明細書では参照番号4235によって表される。
結論
以上、構造的特徴および/または方法論的動作に特有の言葉で例示的諸実施形態について説明してきたが、添付の特許請求の範囲は、必ずしも前述の特定の特徴または動作に限定されるものでないことを理解されよう。むしろ、この特定の機能および動作は、例示的諸実施形態として開示されている。
データベースの初期の、現行状態を示す図である。 データベースを対象とする第1のトランザクションを示す図である。 バッファを使用してデータベースに対して実行およびコミットされているトランザクションを示す図である。 バッファを使用してデータベースに対して実行およびコミットされているトランザクションを示す図である。 バッファを使用してデータベースに対して実行およびコミットされているトランザクションを示す図である。 バッファを使用してデータベースに対して実行およびコミットされているトランザクションを示す図である。 累積書き込みバッファを使用して実行されているトランザクションを示す図である。 累積書き込みバッファを使用して実行されているトランザクションを示す図である。 累積書き込みバッファを使用して実行されているトランザクションを示す図である。 累積書き込みバッファを使用して実行されているトランザクションを示す図である。 累積書き込みバッファを使用して実行されているトランザクションを示す図である。 書き込みバッファを使用するトランザクションの実行モードを示す図である。 単一書き込みバッファを使用して実行されているトランザクションを示す図である。 単一書き込みバッファを使用するトランザクションの実行モードを示す図である。 第1のトランザクションが介入トランザクションとして実行される間に、データベースに対して実行されている第2のトランザクションを示す図である。 介在トランザクションを受けての、現行トランザクションのコミットメントおよび打ち切りを示す図である。 介在トランザクションを受けての、現行トランザクションのコミットメントおよび打ち切りを示す図である。 介在トランザクションを受けての、現行トランザクションのコミットメントおよび打ち切りを示す図である。 介在トランザクションを受けての、現行トランザクションのコミットメントおよび打ち切りを示す図である。 介在トランザクションを受けての、現行トランザクションのコミットメントおよび打ち切りを示す図である。 介在トランザクションを受けて、トランザクションをコミットするかまたは打ち切るタイミングを決定するモードを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用してデータベースに対して実行およびコミットされている、競合する可能性のあるトランザクションを示す図である。 読み取りおよび書き込みのバッファを使用するトランザクションの実行モードを示す図である。 読み取りおよび書き込みのバッファを使用する介在トランザクションを受けて、トランザクションをコミットするかまたは打ち切るタイミングを決定するモードを示す図である。 バッファの合体を示す図である。 バッファの合体を示す図である。 データベースの選択された状態が後続の状態に合体されないように保持するための、スナップショットオブジェクトの使用を示す図である。 データベースの選択された状態が後続の状態に合体されないように保持するための、スナップショットオブジェクトの使用を示す図である。 データベースの選択された状態が後続の状態に合体されないように保持するための、スナップショットオブジェクトの使用を示す図である。 1つまたは複数の選択された状態を保持しながらバッファを合体するモードを示す図である。 永続的にされているバッファを示す図である。 永続的にされているバッファを示す図である。 オブジェクトを永続的にするモードを示す図である。 キャッシュオブジェクトの使用を示す図である。 キャッシュオブジェクトを作成および維持するモードを示す図である。 前述のオブジェクトの集まりを示す図である。 前述のデータベースのトランザクションおよび動作を実行するために好適な、例示的動作環境を示す図である。

Claims (20)

  1. 一連の部分マッピング(100、310)としてデータベースを維持するステップであって、前記部分マッピングはそれぞれ、ある値へのアドレスの割り当てを少なくとも1つ含む、そのようなデータベースを維持するステップと、
    前記一連に以前に追加された先行部分マッピング(110)に対し付加された場合、選択された部分マッピングの状態を、前記部分マッピング(310)のコンパイルとして認識するステップと、
    前記選択された部分マッピング(310)へのポインタ(120)を確立するステップと、
    前記選択された部分マッピング(110、310)への変更を、前記ポインタ(120)が確立されている前記選択された部分マッピングの前記状態への変更がないように制限するステップと、
    を含むことを特徴とするデータベースを管理するためのコンピュータ実施方法。
  2. 前記ポインタ(120)によって示される前記状態から開始し、前記ポインタ(120)によって示される前記状態から前記一連の反対の端部へ向かって進行するステップと、
    前記値への前記アドレスの第1の割り当てが見つかること、および
    前記一連の端部に達すること、
    のうちの1つがなされるまで、前記選択された部分マッピングにアクセスするステップと、
    を含む、前記選択されたマッピング内で前記値への前記アドレスの前記割り当てを決定するステップをさらに含むことを特徴とする請求項1に記載の方法。
  3. 前記選択された部分マッピングは、前記一連の部分マッピングに最も新しく付加された前記部分マッピング(310)を含み、前記選択された部分マッピングへの前記ポインタは、現行状態ポインタ(120)を含むことを特徴とする請求項1に記載の方法。
  4. トランザクションが前記データベース内で変更をしようとする少なくとも1つの割り当てについて、新しい部分マッピング(310)を作成するステップと、
    前記トランザクションが開始された場合に前記現行状態ポインタ(120)によって示される前記状態へ前記新しい部分マッピング(310)をポイントさせるステップと、
    をさらに含むことを特徴とする請求項3に記載の方法。
  5. 前記トランザクションが開始された場合に、前記現行状態ポインタ(120)が、前記現行状態ポインタ(120)によって示される前記状態を引き続きポイントすること、および
    いかなる介入トランザクションも、前記トランザクションが開始された場合に前記現行ポインタ(120)によって示される前記状態と、前記現行状態ポインタ(120)によって示される新しい状態との間で、前記トランザクションによってアクセスされた以前の割り当てを依然として変更していないこと、
    のうちの1つの場合に、前記新しい部分マッピングに前記現行状態ポインタ(120)をポイントさせることによって前記トランザクションの実行が完了すると、前記トランザクションをコミットするステップをさらに含むことを特徴とする請求項4に記載の方法。
  6. 前記トランザクションがコミットされない場合、前記新しい部分マッピングを破棄することによって、前記トランザクションを打ち切るステップをさらに含むことを特徴とする請求項5に記載の方法。
  7. 前記ポインタは、前記選択された部分マッピングのスナップショット(3210)を保持するために、前記選択された部分マッピングに対して確立されることを特徴とする請求項1に記載の方法。
  8. いかなるポインタも確立されない前記一連の中の第1の部分マッピング(3110)を識別するステップと、
    前記第1の部分マッピング(3110)が前記一連に付加された後に、前記一連に付加された第2の部分マッピングを識別するステップと、
    前記第1の部分マッピングに以前に含まれていない前記第2の部分マッピングに含まれる任意の割り当てを、前記第1の割り当て(3110)に追加すること、および
    前記第1の部分マッピング(3110)および前記第2の部分マッピングの両方に含まれる任意の割り当てを、前記第2の部分マッピングに含まれる前記割り当てを使用して上書きすること、
    のうちの1つによって、前記第2の部分マッピング(3110)に含まれる各割り当てを、前記第1の割り当てに挿入するステップと、
    前記第2の部分マッピングを前記一連から除去するステップと、
    をさらに含むことを特徴とする請求項1に記載の方法。
  9. 第1の部分マッピング(3910)を高速ストア(3960)に格納するステップと、
    第2の部分マッピング(3930)を低速ストア(3950)に格納するステップと、
    前記第1の部分マッピング(3910)の第1の状態が前記第2の部分マッピング(3930)を参照することによって定義されるように、前記部分マッピングを前記一連内で順序付けるステップと、
    を含む、低速ストアからのデータを高速ストアにキャッシュするステップをさらに含むことを特徴とする請求項1に記載の方法。
  10. 前記高速ストア(3960)はメモリを含み、前記低速ストア(3950)はディスクストレージを含むことを特徴とする請求項9に記載の方法。
  11. 前記第2の部分マッピングからの少なくとも1つの割り当てを前記第1の部分マッピング(4008)にコピーするステップと、
    前記第1の部分マッピングからの少なくとも1つの割り当てを前記第2の部分マッピング(4012)にコピーするステップと、
    のうちの少なくとも1つをさらに含むことを特徴とする請求項9に記載の方法。
  12. 新しい割り当てを前記第1の部分マッピングに書き込むと同時に、前記新しい割り当てを前記第2の部分マッピング(3808)に書き込むステップをさらに含むことを特徴とする請求項9に記載の方法。
  13. トランザクションが開始された時点でのデータベースの状態を識別する(1204)ステップと、
    前記トランザクションが前記データベースに書き込もうとするデータをバッファに格納する(1214)ステップと、
    前記データベースの現行状態をポイントする現行状態ポインタ(120)を、前記現行状態ポインタが前記現行状態における最も新しく挿入されたオブジェクトをポイントするように維持するステップと、
    前記トランザクションのコミットを試行する(2102)と同時に、前記トランザクションが書き込もうとするデータが現行状態と一致しない旨のインディケーションを求める(2104)ステップと、
    前記トランザクションが書き込もうとする前記データが前記現行状態と一致しない旨のインディケーションが見つからないと同時に、前記バッファを前記現行状態にポイントさせること、および、前記現行状態ポインタを前記最も新しく挿入されたオブジェクトとして前記バッファにポイントさせることによって、前記トランザクションをコミットする(2106)ステップと、
    を含むことを特徴とするデータベースを対象とするトランザクションを管理するためのコンピュータ実施方法。
  14. 前記現行状態ポインタ(120)によって示された前記現行状態を識別するステップと、
    前記所望のデータを格納するオブジェクトの第1の発見、または前記所望のデータを格納しない前記現行状態の発見まで、前記現行状態における各オブジェクトに連続してアクセスするステップと、
    を含む、前記データベースから所望のデータを求めるステップをさらに含むことを特徴とする請求項13に記載の方法。
  15. 前記トランザクションが書き込もうとする前記データが前記現行状態と一致しない旨の前記インディケーションは、
    前記現行状態は、前記トランザクションが開始された時点での前記データベースの前記状態と異なることを決定する(2904)ステップ、および、
    前記現行状態は、前記トランザクションが開始された時点での前記データベースの前記状態と異なること、および、前記現行状態は、介入トランザクションが、
    前記トランザクションによって読み取られたアドレスにデータを書き込んだこと、および
    前記トランザクションによって読み取られた前記アドレスのデータを変更した(2906)こと、のうちの少なくとも1つを示すこと
    を決定するステップ
    のうちの少なくとも1つを含むことを特徴とする請求項13に記載の方法。
  16. 前記現行状態内の複数のオブジェクトに格納されたデータを、合体済みオブジェクトに合体する(3510)ステップをさらに含むことを特徴とする請求項13に記載の方法。
  17. 選択された状態が、前記選択された状態の後に前記現行状態に追加された1つまたは複数のオブジェクトと合体されるのを防ぐことによって、前記データベースの前記選択された状態を保持する(3508)ステップをさらに含むことを特徴とする請求項16に記載の方法。
  18. データベースの現行状態への現行状態ポインタ(120)を維持するステップと、
    トランザクションが開始された時点で存在する前記データベースの前記現行状態を識別する(1206)ステップと、
    前記トランザクションについて書き込みバッファを作成する(1206)ステップと、
    前記トランザクションが前記データベースに書き込もうとするデータを、前記書き込みバッファに格納する(1214)ステップと、
    前記書き込みバッファを、前記現行状態にポイントさせる(1206)ステップと、
    前記トランザクションが前記データベースにコミットされた場合、トランザクションポインタを、前記データベースに適用されることになる変更の部分マッピングを表す前記書き込みバッファにポイントさせる(1208)ステップと、
    を含むことを特徴とするデータベースを対象とするトランザクションを管理するためのコンピュータ実施方法。
  19. 前記トランザクションが前記データベースに追加データを書き込もうとする場合、
    追加の書き込みバッファを作成する(1212)ステップと、
    前記追加データを前記追加の書き込みバッファに格納する(1212)ステップと、
    前記追加の書き込みバッファを前記書き込みバッファにポイントさせる(1214)ステップと、
    前記トランザクションポインタを前記追加の書き込みバッファにポイントさせる(1216)ステップと、
    をさらに含むことを特徴とする請求項18に記載の方法。
  20. 前記現行状態が、前記トランザクションが開始された時点で存在する状態と同じ状態を維持する場合(2904)、および、
    介入トランザクションが
    書き込んだ値、および
    変更した値、
    のうちの少なくとも1つの値を前記トランザクションが読み取っていない限り、前記介入トランザクションを含むように前記現行状態が変更された場合(2906)
    のうちの1つの場合に、前記トランザクションを前記データベースにコミットするステップをさらに含むことを特徴とする請求項18に記載の方法。
JP2008548512A 2005-12-30 2006-11-17 デルタページャを使用した状態の管理 Expired - Fee Related JP5021677B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/275,434 2005-12-30
US11/275,434 US7430553B2 (en) 2005-12-30 2005-12-30 Managing states with delta pager
PCT/US2006/044735 WO2007078444A1 (en) 2005-12-30 2006-11-17 Managing states with delta pager

Publications (3)

Publication Number Publication Date
JP2009522638A true JP2009522638A (ja) 2009-06-11
JP2009522638A5 JP2009522638A5 (ja) 2010-01-07
JP5021677B2 JP5021677B2 (ja) 2012-09-12

Family

ID=38228536

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008548512A Expired - Fee Related JP5021677B2 (ja) 2005-12-30 2006-11-17 デルタページャを使用した状態の管理

Country Status (6)

Country Link
US (1) US7430553B2 (ja)
EP (1) EP1969495B1 (ja)
JP (1) JP5021677B2 (ja)
KR (1) KR20080086875A (ja)
CN (1) CN101351799B (ja)
WO (1) WO2007078444A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017060941A1 (ja) * 2015-10-05 2017-04-13 株式会社日立製作所 複数のデータの整合性を維持するデータ管理システム及びデータ管理方法

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716249B2 (en) * 2005-09-16 2010-05-11 Microsoft Corporation Transaction and task scheduler
US8099520B2 (en) * 2006-06-23 2012-01-17 Pro Softnet Corporation System and method for storing and accessing data
US8286069B2 (en) * 2007-01-26 2012-10-09 Myspace Llc System and method for editing web-based video
US8065490B2 (en) * 2007-09-28 2011-11-22 Intel Corporation Hardware acceleration of strongly atomic software transactional memory
CN102760155B (zh) * 2012-05-30 2018-02-13 中兴通讯股份有限公司 一种基于数据库的事务控制方法及装置
US20140136668A1 (en) * 2012-11-15 2014-05-15 Frank Brunswig Real-time self-optimizing system for multitenant based cloud infrastructure
US8595427B1 (en) * 2013-03-08 2013-11-26 Avalanche Technology, Inc. Non-volatile block storage module using magnetic random access memory (MRAM)
US10152500B2 (en) 2013-03-14 2018-12-11 Oracle International Corporation Read mostly instances
US10642837B2 (en) 2013-03-15 2020-05-05 Oracle International Corporation Relocating derived cache during data rebalance to maintain application performance
US10303682B2 (en) 2013-09-21 2019-05-28 Oracle International Corporation Automatic verification and triage of query results
US9128972B2 (en) * 2013-09-21 2015-09-08 Oracle International Corporation Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
US9323799B2 (en) 2013-09-21 2016-04-26 Oracle International Corporation Mechanism to run OLTP workload on in-memory database under memory pressure
US9292564B2 (en) 2013-09-21 2016-03-22 Oracle International Corporation Mirroring, in memory, data from disk to improve query performance
US9378232B2 (en) 2013-09-21 2016-06-28 Oracle International Corporation Framework for numa affinitized parallel query on in-memory objects within the RDBMS
US9767178B2 (en) 2013-10-30 2017-09-19 Oracle International Corporation Multi-instance redo apply
US9697221B2 (en) 2014-03-19 2017-07-04 Oracle International Corporation OZIP compression and decompression
US10275184B2 (en) 2014-07-22 2019-04-30 Oracle International Corporation Framework for volatile memory query execution in a multi node cluster
US10002148B2 (en) 2014-07-22 2018-06-19 Oracle International Corporation Memory-aware joins based in a database cluster
US11829349B2 (en) 2015-05-11 2023-11-28 Oracle International Corporation Direct-connect functionality in a distributed database grid
US10067974B2 (en) 2015-05-29 2018-09-04 Oracle International Corporation Loading and reloading an in-memory copy of a database object without blocking concurrent updates to the database object
US10216781B2 (en) 2015-05-29 2019-02-26 Oracle International Corporation Maintaining cross-node coherence of an in-memory database object in a multi-node database cluster
US10025822B2 (en) 2015-05-29 2018-07-17 Oracle International Corporation Optimizing execution plans for in-memory-aware joins
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US10984043B2 (en) 2015-10-02 2021-04-20 Oracle International Corporation Method for faceted visualization of a SPARQL query result set
US10678788B2 (en) 2015-10-22 2020-06-09 Oracle International Corporation Columnar caching in tiered storage
US11657037B2 (en) 2015-10-23 2023-05-23 Oracle International Corporation Query execution against an in-memory standby database
US10747752B2 (en) 2015-10-23 2020-08-18 Oracle International Corporation Space management for transactional consistency of in-memory objects on a standby database
US10102046B2 (en) 2016-03-24 2018-10-16 Oracle International Corporation In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
US10572469B2 (en) 2016-05-31 2020-02-25 Oracle International Corporation Versioning and non-disruptive servicing of in-memory units in a database
US10698771B2 (en) 2016-09-15 2020-06-30 Oracle International Corporation Zero-data-loss with asynchronous redo shipping to a standby database
US10437688B2 (en) 2016-09-22 2019-10-08 Oracle International Corporation Enhancing consistent read performance for in-memory databases
US10891291B2 (en) 2016-10-31 2021-01-12 Oracle International Corporation Facilitating operations on pluggable databases using separate logical timestamp services
US11475006B2 (en) 2016-12-02 2022-10-18 Oracle International Corporation Query and change propagation scheduling for heterogeneous database systems
US10691722B2 (en) 2017-05-31 2020-06-23 Oracle International Corporation Consistent query execution for big data analytics in a hybrid database
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
CN108595487B (zh) * 2018-03-14 2022-04-29 武汉村助手科技有限公司 一种大数据高并发下访问数据的方法及系统
US11514055B2 (en) 2019-09-13 2022-11-29 Oracle International Corporation Querying on hybrid formats and storages
CN115309788B (zh) * 2022-10-10 2023-04-07 北京沃德博创信息科技有限公司 利用缓存技术处理家禽数据的方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1993003436A1 (en) * 1991-08-06 1993-02-18 Fujitsu Limited Method and apparatus for reducing lock period of shared buffer
WO1996009730A1 (en) * 1994-09-19 1996-03-28 Telefonaktiebolaget Lm Ericsson A flexible call record mechanism
JPH0962554A (ja) * 1995-08-29 1997-03-07 Nec Corp 静止点セーブ作成方式
US5983225A (en) * 1998-01-26 1999-11-09 Telenor As Parameterized lock management system and method for conditional conflict serializability of transactions
US6199141B1 (en) * 1991-03-22 2001-03-06 Object Design, Inc. Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system
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

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317731A (en) * 1991-02-25 1994-05-31 International Business Machines Corporation Intelligent page store for concurrent and consistent access to a database by a transaction processor and a query processor
US5701480A (en) * 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
CA2285096C (en) * 1991-11-12 2000-05-09 Ibm Canada Limited-Ibm Canada Limitee Logical mapping of data objects using data spaces
US5499367A (en) * 1991-11-15 1996-03-12 Oracle Corporation System for database integrity with multiple logs assigned to client subsets
US5241675A (en) * 1992-04-09 1993-08-31 Bell Communications Research, Inc. Method for enforcing the serialization of global multidatabase transactions through committing only on consistent subtransaction serialization by the local database managers
US5729743A (en) * 1995-11-17 1998-03-17 Deltatech Research, Inc. Computer apparatus and method for merging system deltas
US5870758A (en) * 1996-03-11 1999-02-09 Oracle Corporation Method and apparatus for providing isolation levels in a database system
US5903898A (en) * 1996-06-04 1999-05-11 Oracle Corporation Method and apparatus for user selectable logging
US6351754B1 (en) * 1998-06-23 2002-02-26 Oracle Corporation Method and system for controlling recovery downtime
GB2343768A (en) * 1998-08-17 2000-05-17 Connected Place Limited Merging a sequence of delta files
US6295610B1 (en) * 1998-09-17 2001-09-25 Oracle Corporation Recovering resources in parallel
US7103588B2 (en) * 2003-05-05 2006-09-05 International Business Machines Corporation Range-clustered tables in a database management system
WO2005050625A2 (en) * 2003-11-14 2005-06-02 Senvid, Inc. Managed peer-to-peer applications in a secure network

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199141B1 (en) * 1991-03-22 2001-03-06 Object Design, Inc. Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system
WO1993003436A1 (en) * 1991-08-06 1993-02-18 Fujitsu Limited Method and apparatus for reducing lock period of shared buffer
WO1996009730A1 (en) * 1994-09-19 1996-03-28 Telefonaktiebolaget Lm Ericsson A flexible call record mechanism
JPH0962554A (ja) * 1995-08-29 1997-03-07 Nec Corp 静止点セーブ作成方式
US5983225A (en) * 1998-01-26 1999-11-09 Telenor As Parameterized lock management system and method for conditional conflict serializability of transactions
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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017060941A1 (ja) * 2015-10-05 2017-04-13 株式会社日立製作所 複数のデータの整合性を維持するデータ管理システム及びデータ管理方法

Also Published As

Publication number Publication date
US7430553B2 (en) 2008-09-30
JP5021677B2 (ja) 2012-09-12
EP1969495B1 (en) 2014-04-23
CN101351799B (zh) 2012-04-11
EP1969495A4 (en) 2009-06-17
US20070168393A1 (en) 2007-07-19
WO2007078444A1 (en) 2007-07-12
CN101351799A (zh) 2009-01-21
KR20080086875A (ko) 2008-09-26
EP1969495A1 (en) 2008-09-17

Similar Documents

Publication Publication Date Title
JP5021677B2 (ja) デルタページャを使用した状態の管理
JP2531783B2 (ja) 共用ファイル環境をサポ―トする方法
US7035881B2 (en) Organization of read-write snapshot copies in a data storage system
US10216629B2 (en) Log-structured storage for data access
US10599485B2 (en) Index structure using atomic multiword update operations
US9183236B2 (en) Low level object version tracking using non-volatile memory write generations
US7809903B2 (en) Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions
US7376674B2 (en) Storage of multiple pre-modification short duration copies of database information in short term memory
US7856522B2 (en) Flash-aware storage optimized for mobile and embedded DBMS on NAND flash memory
US6493837B1 (en) Using log buffers to trace an event in a computer system
US6792518B2 (en) Data storage system having mata bit maps for indicating whether data blocks are invalid in snapshot copies
CN107851037B (zh) 在使用日志和未锁定的非易失存储器的共享存储器中的硬件事务存储的一致性协议
JPH0799509B2 (ja) メモリへのデータブロックのエントリを制御する方法
US6658541B2 (en) Computer system and a database access method thereof
CN106991059B (zh) 对数据源的访问控制方法
US7836248B2 (en) Methods and systems for managing persistent storage of small data objects
US7107404B2 (en) Method and system for data processing for controlling a cache memory
JP2001101053A (ja) トランザクション管理方法及びトランザクション管理装置
CN115437550A (zh) 存储系统的写入方法、分布式存储系统的写入方法
US10185653B2 (en) Integrated systems and methods for the transactional management of main memory and data storage
US8688662B2 (en) Copy on access to locked objects
Arulraj et al. Indexing
JP2021096506A (ja) データ処理装置及びデータ処理方法
JP2007179178A (ja) キャッシュ制御方法、装置及びプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091110

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120509

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120601

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120614

R150 Certificate of patent or registration of utility model

Ref document number: 5021677

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150622

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

LAPS Cancellation because of no payment of annual fees