(57)【要約】どのデータ項目バージョンを照会に供給すべきかを判定するための技術が提供される。この技術によると、判定は、データ項目バージョンが現行であった時間を示す新しいフィールドを各データ項目バージョンと関連付けるステップと、照会が属するトランザクションによって行なわれた照会によって見られなければならない最後の変更を示す新しいフィールドを、各照会と関連付けるステップと、少なくとも部分的に２つの新しいフィールドの値の比較に基づいて、照会に答えるためにどのデータ項目バージョンを使用すべきかを判定するステップとによって行なわれる。
2005503606.tif 000002
【特許請求の範囲】
【請求項１】
データ項目のどのバージョンをセッションに供給すべきかを判定するための方法であって、前記方法はコンピュータで実現される以下のステップを含み、前記以下のステップは、
前記セッションに関連付けられ、前記セッションによって見られなくてはならない前記セッション内で行なわれた最後の変更の時間を示す、見るべき最後のタイムスタンプを維持するステップと、
データ項目バージョンが現行であった時間を示すクローン時間を前記データ項目バージョンとともに維持するステップと、
少なくとも部分的に前記クローン時間と前記見るべき最後のタイムスタンプとの比較に基づいて、前記データ項目バージョンを前記セッションに供給すべきだと判定するステップとを含む、方法。
【請求項２】
前記判定するステップは、前記クローン時間と前記見るべき最後のタイムスタンプとの前記比較に基づいて、前記セッションに与えるのに適格である複数のデータ項目バージョンから前記データ項目バージョンを選択するステップを含む、請求項１に記載の方法。
【請求項３】
照会を含むトランザクションは前記セッションで実行しており、
前記見るべき最後のタイムスタンプは、前記照会に関連付けられ、前記照会によって見られなくてはならない前記トランザクションによって行なわれた最後の変更の時間を示し、
前記データ項目バージョンを前記セッションに供給すべきだと判定する前記ステップは、前記データ項目バージョンを使用して前記照会に答えるべきだと判定することによって行なわれる、請求項１に記載の方法。
【請求項４】
前記データ項目バージョンが現行バージョンからクローンされるときに、グローバルクロックに基づいて前記クローン時間をセットするステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記データ項目バージョンが非現行データ項目バージョンからクローンされるときに、前記非現行データ項目バージョンのクローン時間に基づいて、前記クローン時間をセットするステップをさらに含む、請求項１に記載の方法。
【請求項６】
クラスタ内の複数のノードは前記データ項目に対してデータ項目バージョンを有し、前記方法は、
前記複数のノードの各のノードに対して、前記データ項目についてのクローン時間情報を維持するステップと、
前記クローン時間情報に基づいて、前記データ項目に対する要求を送るべきノードを選択するステップとを含む、請求項１に記載の方法。
【請求項７】
クローン時間情報を維持する前記ステップは、前記データ項目に対して、ノードをクローン時間に関連付けるベクトルを維持するステップを含み、前記ベクトル内のある所与のノードに関連付けられるクローン時間は、前記所与のノードにあるデータ項目バージョンに関連付けられるクローン時間である、請求項６に記載の方法。
【請求項８】
前記判定するステップは、
除去されたデータの情報に基づいて、見られなければならない変更が前記データ項目バージョンから除去されたかを判定するステップと、
前記クローン時間に基づいて、データ項目バージョンの作成後に、見られなければならない情報が前記データ項目の現行バージョンに合わせて作成された可能性があるかを判定するステップとを含む、請求項１に記載の方法。
【請求項９】
データベースのある特定のスナップショットを見なければならない照会にデータ項目を供給する方法であって、
複数のノード内にある複数のデータ項目バージョンに対して、前記データ項目バージョンが現行であった時間を示すクローン時間情報を維持するステップと、
少なくとも部分的に前記クローン時間情報に基づいて、前記複数のデータ項目バージョンのうちのどのデータ項目バージョンが、前記照会によって見られなくてはならない変更をすべて含むかを判定するステップと、
前記照会によって見られなければならない変更をすべて含むデータ項目バージョンから前記照会に供給するデータ項目バージョンを選択するステップとを含む、方法。
【請求項１０】
前記判定するステップは、
データ項目バージョンに関連付けられるクローン時間に基づいて、前記照会によって見られなければならない変更が前記データ項目バージョンの作成後に前記データ項目に行なわれた可能性があるかを判定するステップと、
前記データ項目バージョンに関連付けられる最も最近の取込時間に基づいて、前記照会によって見られなければならない変更が前記データ項目バージョンから除去された可能性があるかを判定するステップとを含む、請求項９に記載の方法。
【請求項１１】
前記選択するステップは、前記クローン時間情報を使用して、他の候補よりも除去の必要な変更が少ない候補を選択するステップを含む、請求項１０に記載の方法。
【請求項１２】
データ項目のどのバージョンをセッションに供給すべきかを判定するための命令を保持するコンピュータ読取可能な媒体であって、前記命令は以下のステップを行なうための命令を含み、前記以下のステップは、
前記セッションに関連付けられ、前記セッションによって見られなければならないセッション内に行なわれた最後の変更の時間を示す、見るべき最後のタイムスタンプを維持するステップと、
データ項目バージョンが現行であった時間を示すクローン時間を、前記データ項目バージョンとともに維持するステップと、
少なくとも部分的に前記クローン時間と前記見るべき最後のタイムスタンプとの比較に基づいて、前記セッションに供給すべきデータ項目バージョンを判定するステップとを含む、コンピュータ読取可能な媒体。
【請求項１３】
前記判定するステップは、前記クローン時間と前記見るべき最後のタイムスタンプとの前記比較に基づいて、前記セッションに供給されるのに適格な複数のデータ項目バージョンから前記データ項目バージョンを選択するステップを含む、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項１４】
照会を含むトランザクションは前記セッションで実行しており、
前記見るべき最後のタイムスタンプは照会に関連付けられ、前記照会によって見られなければならない前記トランザクションによって行なわれた最後の変更の時間を示し、
前記データ項目バージョンを前記セッションに供給すべきだと判定する前記ステップは、前記データ項目バージョンを使用して前記照会に答えるべきだと判定することによって行なわれる、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項１５】
前記データ項目バージョンが現行バージョンからクローンされるときに、グローバルクロックに基づいて、前記クローン時間をセットするステップを行なうための命令をさらに
含む、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項１６】
前記データ項目バージョンが非現行データ項目バージョンからクローンされるときに、前記非現行データ項目バージョンのクローン時間に基づいて、前記クローン時間をセットするステップを行なうための命令をさらに含む、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項１７】
クラスタ内の複数のノードは前記データ項目に対してデータ項目バージョンを有し、
前記コンピュータ読取可能な媒体は、以下のステップを行なうための命令をさらに含み、前記以下のステップは、
前記複数のノードの各ノードに対して、前記データ項目についてのクローン時間情報を維持するステップと、
前記クローン時間情報に基づいて、前記データ項目に対する要求を送るべきノードを選択するステップとを含む、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項１８】
クローン時間情報を維持する前記ステップは、前記データ項目に対して、ノードをクローン時間に関連付けるベクトルを維持するステップを含み、前記ベクトル内のある所与のノードに関連付けられる前記クローン時間は、前記所与のノードにあるデータ項目バージョンに関連付けられるクローン時間である、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項１９】
前記判定するステップは、
除去されたデータの情報に基づいて、見られなくてはならない変更が前記データ項目バージョンから除去されたかを判定するステップと、
前記クローン時間に基づいて、見られなくてはならない情報が前記データ項目バージョンの作成後にデータ項目の現行バージョンに合わせて作成された可能性があるかを判定するステップとを含む、請求項１２に記載のコンピュータ読取可能な媒体。
【請求項２０】
データベースのある特定のスナップショットを見なくてはならない照会にデータ項目を供給するための命令を保持するコンピュータ読取可能な媒体であって、前記命令は以下のステップを行なうための命令を含み、前記以下のステップは、
複数のノードにある複数のデータ項目バージョンに対して、データ項目バージョンが現行であった時間を示すクローン時間情報を維持するステップと、
少なくとも部分的に前記クローン時間情報に基づいて、前記複数のデータ項目バージョンのうちのどのデータ項目バージョンが、前記照会によって見られなくてはならない変更のすべてを含むかを判定するステップと、
前記照会によって見られなければならない変更をすべて含むデータ項目バージョンから前記照会に供給するデータ項目バージョンを選択するステップとを含む、コンピュータ読取可能な媒体。
【請求項２１】
前記判定するステップは、
データ項目バージョンに関連付けられたクローン時間に基づいて、前記照会によって見られなければならない変更が、前記データ項目バージョンの作成後に前記データ項目に行なわれた可能性があるかを判定するステップと、
前記データ項目バージョンに関連付けられた最も最近の取込時間に基づいて、前記照会によって見られなければならない変更が、前記データ項目バージョンから除去された可能性があるかを判定するステップとを含む、請求項２０に記載のコンピュータ読取可能な媒体。
【請求項２２】
前記選択するステップは、前記クローン時間情報に基づいて、他の候補よりも除去の必
要な変更が少ない候補を選択するステップを含む、請求項２１に記載のコンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張および関連出願への相互参照
この出願は、アミット・ガネッシュ（Amit Ganesh）およびロジャー・Ｊ・バムフォード（Roger J. Bamford）によって２００１年６月１日に出願された「分散データベース環境での一貫した読取（Consistent Read in a Distributed Database Environment）」と題される米国仮特許出願連続番号第６０／２９５，１０４号（代理人処理番号５０２７７−１６２１）に関連し、かつこの仮出願から国内優先権を主張し、その内容全体を、ここに十分に記載されるかのように引用により援用する。
【０００２】
発明の分野
この発明は、分散データベース環境で、記憶されたデータにアクセスすることに関し、特に、データ項目を要求するトランザクションにデータ項目のどのバージョンを供給すべきかを判定するための方法および装置に関する。
【背景技術】
【０００３】
発明の背景
典型的なデータベースシステムでは、ユーザは、コマンドまたはステートメントをデータベースアプリケーションにサブミットすることによって、情報を更新、検索および選択する。正しく処理されるためには、ステートメントはデータベースアプリケーションによってサポートされるデータベース言語に準拠していなければならない。広く使用されている１つのデータベース言語はStructured Query Language（ＳＱＬ）として知られている。
【０００４】
１つまたは複数のデータベース言語ステートメントを含む論理的な作業単位は、トランザクションと称される。データベース言語ステートメントの例は、データをデータベースに挿入するための挿入、およびデータベースのデータを選択するための照会である。
【０００５】
複数のユーザがデータベースシステムを共有しているとき、一度に１つのトランザクションのみが実行されるようにすることは非現実的である。しかしながら、多くのトランザクションが同時に実行するのを許すと一貫性の問題が生じる。トランザクションデータベース管理システムは、ユーザまたはプログラムがトランザクションを構成するステートメントを詳細に記述するためにサブミットする特別のステートメント、「コミット（commit）」を設けている。トランザクションがコミットする前は、そのトランザクションによって行われたすべての変更は一時的なものと見なされ、そのトランザクションがコミットしないと除去される。トランザクションがコミットするとき、そのトランザクションによって行われたすべての変更は永久的なものとなり、それ以降は他のトランザクションによって見ることができる。
【０００６】
予測可能かつ再生可能な結果を保証するため、同時に実行するトランザクションが制御されない形で相互作用し合うのを防止するための技術が開発されてきた。トランザクションは、データベースが全体として１つの一貫した状態から別の状態へと移行するように、データベースへの変更を行なうよう設計されている。
【０００７】
トランザクションは完了時にデータベースを一貫した状態にしておかなければならないだけでなく、一貫した状態でデータベースを見なければならない。この条件を満たすのは難しい。なぜなら、同時に実行しているトランザクションがあり、その各々がその１つのトランザクションでのみ見える一時的な矛盾を引起こしているかもしれないためである。結果として、トランザクションは、同時に実行しているトランザクションがコミットするまで、それらトランザクションによって行われた変更を見ることができてはならない。
【０００８】
ある照会の属するトランザクションが、同時に実行しているトランザクションによって行われた変更を見ないようにするための１つの方法は、データ項目のバージョンを更新したトランザクションがコミットするまで、更新されたデータ項目バージョンをトランザクションが読取るのを防止する方法である。しかしながら、この方法は、データ項目バージョンを読取りたいトランザクション（読取側）に、データ項目バージョンに書込んだトランザクション（書込側）がコミットするのを待たせることによって、システムの同時実行性を低減させる。
【０００９】
同時に実行するトランザクションによって行われた変更を照会が見るのを防止するための別の方法は、照会に「スナップショット時間」を割当て、次に、（１）スナップショット時間前にコミットしたトランザクションによって行われた変更のすべてを照会に見せ、（２）スナップショット時間後にコミットしたトランザクションによって行われた変更を照会が見るのを防止する方法である。さらに具体的には、照会がトランザクションの一部であるとき、照会は、（１）照会のスナップショット時間またはその前にデータベースにコミットされたすべての変更、および（２）（そのトランザクションがまだコミットしていない場合でも）照会の属するトランザクションが行なったすべての変更を見なくてはならない。
【００１０】
同じデータ項目の複数のバージョンがデータベースシステム内のキャッシュにあり得る。これらバージョンは、（１）現在の時点までにデータ項目に行われたすべての変更を含む、データ項目の現行バージョン（以降は現行バージョンと称する）、および（２）さまざまな時点で作られた現行バージョンのコピーか、または他のクローンのコピーである、現行バージョンのクローン（以降はクローンと称する）を含む。現行バージョンおよび現行バージョンのクローンからなるセットは、データ項目の「データ項目バージョン」と称する。
【００１１】
照会がデータ項目の検索を指定するとき、データベースシステムはデータ項目のさまざまなバージョンのうちのどれを照会に提供できるかを判定しなければならない。所与の照会に関して、データ項目の各バージョンは次の２つの部類、つまり、（１）照会が見なければならないすべてのものを含むバージョン（照会が必要とするものについての将来の変更を有する。これら将来の変更はロールバックされることもあるが、データ項目の古いバージョンを時間的に前進させるのは難しい）、および（２）照会が見なければならない変更が欠落しているバージョンのうちの１つに分類される。
【００１２】
一般に、ある特定の照会に関して第１の部類に分類されるデータ項目のバージョンは、照会が見ることのできない何らかの変更がデータ項目のそのバージョンから除去された後に、その特定の照会に答えるために使用することができる。データ項目のバージョンから変更を除去するプロセスは「ロールバック」と称される。ある特定の照会に関して第２の部類に分類されるデータ項目のバージョンは、その特定の照会に答えるために使用することはできない。
【００１３】
照会にデータを供給するための１つの方法は、常にデータ項目の現行バージョンから始める方法である。定義では、データ項目の現行バージョンは、そのデータ項目に行われたすべての変更を有する。したがって、それは、すべての照会に対して部類１に属する。データ項目の現行バージョンを使用することは、（１）クローンを作り、（２）照会が見るべきでない変更をすべてクローンからロールアウトすることを必要とすることが多い。しかしながら、照会のスナップショット時間が古い場合、クローンから除去しなければならない変更が多数あり得るため、ロールバック動作が大量の時間および資源を消費することにつながる。さらに、常に現行バージョンから変更をロールバックすることは、単一ノードシステムでしかうまく作用しない。なぜなら、多重ノードシステムでは、現行バージョンがノードからノードへとクラスタ内で移動しているときにデータ項目の現行バージョンを追跡する状況で、データ項目に対する要求がとらえられ得るためである。
【００１４】
システムが常に現行バージョンを使用してロールバック動作を開始するとは限らない場合、システムは、そのシステムが処理している照会に関してクローンがどの部類に分類されるかを判定できなければならない。ある所与の照会に関して、クローンが部類１に分類される場合、それらクローンはその照会にデータを供給するために使用することができる。クローンの分類を容易にするため、「除去されたデータの情報」を各データ項目バージョンとともに記憶してもよい。除去されたデータの情報は一般に、あるデータ項目バージョンに行われた変更のうちのどれがそのデータ項目のバージョンから後に除去されたかを示す。
【００１５】
たとえば、データ項目の現行バージョンがクローンされてクローンＸが作られたと仮定する。当初、クローンＸの除去されたデータの情報は、どのデータも除去されていないと示す。クローンＸにロールバック動作が行われて、トランザクションＴ１によって行われた変更が除去されると、クローンＸの除去されたデータの情報は改訂され、Ｔ１によって行われた変更がクローンＸから除去されたと示す。照会がＴ１によって行われた変更を見る必要がない場合は、クローンＸはその照会にデータを供給するのに使用することができる（別のロールバック作業が必要な場合もあり得る）。照会がＴ１によって行われた変更を見る必要がある場合、クローンＸはその照会にデータを供給するのに使用することはできない。
【００１６】
残念なことに、除去されたデータの情報は、（１）そのデータ項目に行われた変更であって、（２）クローンにない変更のすべてを常に正確に示しているとは限らない。具体的には、除去されたデータの情報がクローンからデータは除去されていないと示す場合でも、照会が見なくてはならない変更がそのクローンから欠落している可能性がある。具体的には、照会は、クローンの作成後に現行バージョンに行われた変更を見る必要があり得る。したがって、この除去されたデータの情報は、データ項目バージョンから欠落している可能性のあるすべてのデータを判定するのには十分ではない。言換えれば、クローンは、そのクローンから除去されていない変更が欠落している可能性がある。
【００１７】
以下は、クローンの除去されたデータの情報に反映されないデータがどのようにクローンから欠落し得るかの例である。あるトランザクションＴＸＢが現行バージョンに更新を行なっている。現行バージョンがクローンされ、クローンＹが生じる。ＴＸＢは現行バージョンへの更新を行ない続ける。この場合、クローンＹからは、それがクローンされた後に現行バージョンに行われた変更が欠落しているが、クローンＹの除去されたデータの情報は何らかの変更が欠落していることを示さない。
【００１８】
除去されたデータの情報に反映されない変更がクローンから欠落しているかどうかを示す１つの方法は、データ項目の現行バージョンに更新が行われたときにすべての既存のクローンに「古い」と印を付けることである。クローンに「古い」と印を付ける動作は、これ以降、無効化と称する。しかしながら、クローンが多くのノードにわたって散在し得る多重ノードシステム（以降はクラスタと称する）では、これは非現実的である。なぜなら、データ項目の更新のすべてに対して、データ項目のクローンを含む可能性のあるクラスタ内のすべてのノードに無効化メッセージを一斉に送信しなければならないためである。
【発明の開示】
【発明が解決しようとする課題】
【００１９】
上述のことに基づいて、データ項目のクローンがクラスタの複数のノードにあり得る場合に、どのデータ項目バージョンを照会に提供すればよいかを判定するためのメカニズムが必要とされている。
【課題を解決するための手段】
【００２０】
発明の概要
この発明の一局面によると、照会を満足させるのにどのデータ項目のバージョンを使用可能であるかを判定するための技術が提供される。ここに説明される技術は、代替の技術の性能を大きく犠牲にすることなく、クラスタ環境内で使用することができる。さらに、照会の要求を満足させるために必要とする作業量が最も少ないバージョンを判定するための技術が提供される。一実施例によると、この技術は、
１）  第１の新しいフィールドを各クローンに関連付けるステップを伴い、第１の新しいフィールドはデータ項目バージョンが現行であった時間を示し、この技術はさらに、
２）  第２の新しいフィールドを各照会に関連付けるステップを伴い、第２の新しいフィールドは照会が見なければならないトランザクションによって行われた最後の変更を示し、この技術はさらに、
３）  クローンの第１の新しいフィールドの値、および照会の第２の新しいフィールドの値を使用して、クローンを照会に供給してもよいかを判定するステップを伴う。
【発明を実施するための最良の形態】
【００２１】
添付の図面の中で、この発明の実施例を限定ではなく、例によって説明する。図中、同様の参照番号は同様の要素を示す。
【００２２】
好ましい実施例の詳細な説明
データベースからデータ項目バージョンを供給して照会に答えるための方法およびシステムを説明する。以下の説明では、説明のため、多数の具体的な詳細を示してこの発明を完全に理解できるようにしている。しかしながら、当業者には、これら具体的な詳細なしにこの発明を実現できることが明らかであろう。場合によっては、周知の構造および装置をブロック図の形で示して、不必要にこの発明をわかりにくくするのを避けた。
【００２３】
機能の概要
データベースの一貫したスナップショットを見なければならない照会のために、クラスタ内の複数のノードのうちの１つにあるデータ項目のバージョンを探すための技術が提供される。上述のように、そのような照会は、（１）コミットされたトランザクションの特定のセットによってデータベースにコミットされた変更、および（２）照会が属するトランザクションの以前のステートメントによって行われた変更のみを見なければならない。
【００２４】
一実施例によると、この技術は、各クローンとともにクローン時間を記憶し、各照会とともに見るべき最後のタイムスタンプを記憶することを伴う。以下のセクションでは、どのようにこれら付加的な情報項目を確立し、維持しかつ使用して、特定のクローンを特定の照会に供給してもよいかを判定するかを説明する。
【００２５】
グローバルシステム時間
グローバルシステム時間は、データベースシステムによって維持されるカウンタである。通常、このカウンタは時とともに増加する。データベースイベントのシーケンスを追跡するため、イベントは、グローバルシステム時間によって示される時間にデータベースシステムで起こったとして印を付けられる。たとえば、グローバルシステム時間１０で起こるイベントは、グローバルシステム時間１１で起こる何らかの他のイベントより前に起こったと見なされる。詳しく後述するように、グローバルシステム時間は、クローンのクローン時間、および照会の見るべき最後のタイプスタンプの両方に使用されるタイムスタンプを作成するために使用される。
【００２６】
クローン時間
上述のように、除去されたデータの情報は各クローンとともに記憶されて、そのクローンから除去された変更がある場合は、その変更を示す。しかしながら、除去されたデータの情報は、クローンの作成後に現行バージョンに行われた変更がそのクローンから欠落しているかどうかは示さない。この後者の種類の変更の欠落の追跡を容易にするため、「クローン時間」が各クローンとともに記憶される。
【００２７】
一般に、クローンのクローン時間は、そのクローンが属する「クローン分岐」がデータ項目の現行バージョンからクローンされた時間を示す。ある特定のクローンが属するクローン分岐は、（１）その特定のクローンを生成したクローン動作にかかわるすべてのクローン、および（２）その特定のクローンが使用されて生成されるすべてのクローンを含む。
【００２８】
以下の例では、クローン、クローン分岐およびクローン時間をさらに詳細に説明する。データ項目の非現行バージョンは、すべて、現行バージョンからクローンされたか、またはデータ項目の別の非現行バージョンからクローンされている。したがって、データ項目の非現行バージョンはすべて、１つまたは複数のクローン動作のシーケンスの産物である。たとえば、図２は現行バージョン２００を示す。時間Ｔ＝１０では、現行バージョン２００の第１のクローン２０１が現行バージョンから作成される。クローン２０１が現行バージョン２００からクローンされるとき、グローバルシステム時間からクローン時間が割当てられる。
【００２９】
クローン２０２はクローン２０１のクローンである。クローン２０２は、Ｔ＝１２でクローン２０１からクローンされる。クローン２０１はＴ＝１２で作成されているが、現行バージョン２００からＴ＝１０でクローンされたクローン分岐に属する。結果として、クローン２０２は、クローン時間Ｔ＝１０を割当てられる。
【００３０】
クローン２０３は、Ｔ＝１５で作られたクローン２０２のクローンであり、これもクローン時間Ｔ＝１０を割当てられる。クローン２０４は、Ｔ＝１７で作られたクローン２０３のクローンであり、これもクローン時間Ｔ＝１０を割当てられる。したがって、すべてのクローン（２０１、２０２、２０３および２０４）は同じクローン分岐に属し、クローン２０１に当初割当てられた同じクローン時間Ｔ＝１０を有する。
【００３１】
したがって、現行バージョンから直接作られたクローンに割当てられたクローン時間は、そのクローンが作成されたグローバルシステム時間である。別のクローンから作られたクローンに割当てられるクローン時間は、そのクローンがそこから作られた別のクローンのクローン時間である。
【００３２】
クローン時間とともに、除去されたデータの情報を使用することによって、クローン時間の前にデータ項目に行われたすべての変更が（１）データ項目バージョンに反映されているか、または（２）除去されたデータの情報によって除去されたと識別されていると知ることができる。
【００３３】
見るべき最後のタイムスタンプ
一実施例によると、各クローンにクローン時間を割当てるのに加え、データベースの一貫した表示を見なければならない各照会に、見るべき最後のタイムスタンプが割当てられる。一実施例によると、トランザクションの一部である照会に割当てられる、見るべき最後のタイムスタンプは、トランザクションが、照会が見なくてはならない最も最近の変更を行なったグローバルシステム時間の値である。
【００３４】
たとえば、照会Ｑ１が、トランザクションＴＸ１の一部であり、ＴＸ１が時間Ｔ＝１、Ｔ＝２、Ｔ＝３、Ｔ＝４およびＴ＝５のそれぞれでデータベースに変更を行なったと仮定する。Ｑ１はＴＸ１の最初の３つの変更を見なくてはならないと仮定する。この条件では、Ｑ１に割当てられる、見るべき最後のタイムスタンプはＴ＝３であり、これはＴＸ１が第３の変更を行なったグローバルシステム時間である。
【００３５】
クローン時間と見るべき最後のタイムスタンプとの比較
通常、クローンの除去されたデータの情報は、変更がそのクローンに反映されている最も最近のトランザクションのコミット時間を示す。説明のため、以降は、この値を最も最近の取込時間と称する。
【００３６】
クローンが、時間１０、１２および１５でコミットしたトランザクションからのデータを含む場合、そのクローンの最も最近の取込時間はコミット時間１４を示し、これはトランザクションのコミット時間（たとえば１５）から１を引いたものである。時間１５でコミットしたトランザクションによって行われた変更がクローンから除去された場合、最も最近の取込時間は１２に変更される。
【００３７】
以前は、クローンの除去されたデータの情報が、そのクローンから変更が除去されていないことを示す場合でも、クローンの最も最近の取込時間が照会のスナップショット時間より前であれば、そのクローンは照会を満足させるのに使用することはできなかった。たとえば、クローンの除去されたデータの情報が、そのクローンから変更が除去されていないことを示す場合でも、最も最近の取込時間が１４であるクローンを用いて、スナップショット時間２０を備えた照会を満足させることはできなかった。このクローンを使用することができなかったのは、（１）そのクローンの作成後であって、かつ（２）その照会のスナップショット時間の前に、現行バージョンに変更が行われた可能性があったためである。さらに、グローバルな無効化が不経済であるため、以前は、データ項目の無効化では、バージョンはローカルで無効化され、遠隔のデータ項目のバージョンは使用することができなかった。
【００３８】
照会とともに最後の見るべきタイムスタンプを維持し、かつクローンとともにクローン時間を維持することによって、無効化を行なうことなく、クラスタにわたってデータ項目バージョンを使用することができる。具体的には、クローンのクローン時間が照会の見るべき最後のタイムスタンプより大きいかまたは等しく、かつスナップショット時間が最も最近の取込時間よりも小さい場合、そのデータ項目バージョンを使用することができる。
【００３９】
一実施例によると、見るべき最後のタイムスタンプは、グローバルシステム時間の値に設定されて、「最後の変更のシーケンス番号」の値に関連付けられる変更をトランザクションが行なった時間を示す。最後の変更のシーケンス番号は、照会が属するトランザクションによって行われた、照会が見なければならない最上位の変更のシーケンス番号である。
【００４０】
データ項目バージョンに対して維持されるデータ
上述のように、照会が見る必要がある変更、つまり、１）データ項目バージョンからロールアウトされた変更、および２）データ項目の現行バージョンからそのデータ項目バージョンがクローンされた後にデータ項目の現行バージョンに行われた変更が、データ項目バージョンから欠落するのには２つの過程がある。データ項目バージョンからロールアウトされた変更を「除去されたデータ」と称し、このデータを追跡するのに必要な情報を「除去されたデータの情報」と称する。
【００４１】
除去されたデータの情報はデータ項目バージョンのすべてに関連付けられる。この除去されたデータの情報は以下のものを含む。
【００４２】
１）  最も最近の取込時間
これは、データ項目バージョンから変更が除去されていない最も最近のトランザクションのコミット時間である。データ項目の現行バージョンでは、最も最近の取込時間は常に無限大である。あるデータ項目バージョンから変更がロールアウトされるとき、そのデータ項目バージョンの最も最近の取込時間は、最も最近のトランザクションのコミット時間を反映するために更新され、そのデータ項目バージョンから変更が除去されなかったデータ項目バージョンを変更する。たとえば、トランザクションＴＸＡ、ＴＸＢおよびＴＸＣが、ある特定のデータ項目バージョンに対し、時間５、１０、１５でそれぞれ変更をコミットし、次に、ＴＸＣからの変更がロールアウトされると、最も最近の取込時間は１０にセットされる。ＴＸＢからの変更がロールアウトされると、最も最近の取込時間は５にセットされる。
【００４３】
２）  最新の欠落しているトランザクション
これは、データ項目バージョンから変更が欠落している最後のトランザクションの識別子である。言換えれば、最新の欠落しているトランザクションは、データ項目バージョンから最後に変更がロールアウトされたトランザクションのトランザクション識別である。
【００４４】
３）  最も最近の欠落している変更のシーケンス番号
これは、最新の欠落しているトランザクションによって行われた最も最近の欠落している変更のシーケンス番号である。たとえば、最新の欠落しているトランザクションが、ある特定のデータ項目に４つの変更を行ない、その４つの変更がシーケンス番号１１、２５、３２および５０に関連付けられるとする。そのデータ項目バージョンから変更がロールアウトされない場合、最も最近の欠落している変更のシーケンス番号はゼロにセットされる。変更のすべてが除去された場合、最も最近の欠落している変更のシーケンス番号は１１にセットされる。
【００４５】
４）  ロールアウトされた他のトランザクションの識別子
これは、最新の欠落しているトランザクション以外のトランザクションによって行われた変更がこのデータ項目バージョンからロールアウトされた場合にセットされるビットである。
【００４６】
図１は、この発明の一実施例によるデータ項目バージョン１００を示すブロック図であり、トランザクションはデータ項目バージョン１００を更新しており、除去されたデータの情報がデータ項目バージョン１００について維持されている。データ項目バージョン１００はデータ１０６を含み、それに関連付けられる除去されたデータの情報を有する。除去されたデータの情報は、最も最近の取込時間１０２、最新の欠落しているトランザクション１０３、最も最近の欠落している変更のシーケンス番号１０４、およびロールアウトされた他のトランザクションの識別子１０５を含む。
【００４７】
除去されたデータの情報のさまざまな構成要素をどのように維持するかを示すため、３つのトランザクションがデータ項目バージョン１００に更新を行なったと仮定する。これらトランザクションはＴＸＡ１１０、ＴＸＢ１１１およびＴＸＣ１１２である。ＴＸＡ１１０はグローバルシステム時間１０でコミットした。ＴＸＢ１１１はグローバルシステム時間１２でコミットした。ＴＸＣ１１２はグローバルシステム時間１４でコミットした。
【００４８】
データ項目バージョン１００が現行データバージョンであり、最も最近の取込時間が無限大であると仮定すると、最新の欠落しているトランザクションはゼロにセットされ、ロールアウトされた他のトランザクションの識別子はセットされない。最も最近の欠落している変更のシーケンス番号はゼロにセットされる。
【００４９】
データ項目バージョン１００にロールアウトが行われてＴＸＣの変更のすべてがロールアウトされたと仮定する。さらに、ＴＸＣがシーケンス番号１１、２５、３２および５０の変更を行なったと仮定する。すると、データ項目バージョン１００の最も最近の取込時間は１３、つまりＴＸＣのコミット時間から１を引いたものであり、最新の欠落しているトランザクションはＴＸＢ、最も最近の欠落している変更のシーケンス番号は１１となり、ロールアウトされた他のトランザクションの識別子がセットされる。なぜなら、ＴＸＣによって行われた変更がデータ項目バージョンからロールアウトされたためである。
【００５０】
次に、ＴＸＢ１１１によって行われた変更のすべてではなく、一部がデータ項目バージョンからロールアウトされる場合、１つの技術は、最新の欠落しているトランザクションを、現在データバージョン１００を読取っているトランザクションにセットし、かつロールアウトされた他のトランザクションの識別子をＹＥＳにセットすることである。最も最近の欠落している変更のシーケンス番号は、読取側の最後の変更のシーケンス番号に１を加えたものにセットされる。読取側の照会のコンテクストのトランザクション識別が活性化していない場合（すなわち、スナップショットがとられたときにトランザクションが変更を行なっていなかった場合）、最も最近の欠落している変更のシーケンス番号は、読取側の最後の変更のシーケンス番号に１を加えたものにセットされない。なぜなら、これを行なう必要はないためである。
【００５１】
既に述べたように、上述のフィールドは、除去されたデータについて情報を維持するために使用されるため、まとめて除去されたデータの情報と称される。しかしながら、除去されたデータの情報は、あるデータ項目バージョンがクローンされた後にデータ項目の現行バージョンに変更が行われたかどうかを判定するには不十分である。
【００５２】
照会について維持されるデータ
照会はすべてコンテクストを有し、これは実行環境を記述する。一実施例によると、照会に関連付けられるコンテクスト情報は、次のものを含む。
【００５３】
１）  照会が見なければならない時間を示すスナップショット
これは、照会が見なければならないデータベースのスナップショットに関連付けられる時間を示す。たとえば、照会が見なければならない時間を示すスナップショットが１０である場合、その照会はＴ＝１０の時点かまたはそれ以前にデータベースにコミットされたすべての変更を見なければならず、Ｔ＝１０の後にデータベースにコミットされた変更は見ることはできない。照会が見なければならない時間を示すスナップショットは、通常、照会が開始されたときにセットされ、システムグローバル時間の現在の値にセットされる。
【００５４】
２）  照会が属するトランザクション
照会がトランザクションの一部である場合、照会が属するトランザクションは、そのトランザクションを識別する。照会がトランザクションの一部でない場合、照会が属するトランザクションは使用されない。
【００５５】
３）  最後の変更のシーケンス番号
これは、照会が属するトランザクションによって行われ、照会が見なければならない最上位の変更のシーケンス番号である。
【００５６】
計算
クローン時間および見るべき最後のタイムスタンプは、照会に供給するデータ項目バージョンを効率よく識別するため、上述の除去されたデータの情報および照会のコンテクスト情報を維持するシステムで使用することができる。
【００５７】
詳しく後述するように、この情報は、どのデータ項目バージョンを使用できるかを識別するために使用できるだけでなく、必要とされるロールアウトが最も少ないデータ項目バージョンを識別するためにも使用することができる。これら計算には、データ項目バージョンに関連付けられた除去されたデータの情報、および照会に関連付けられたコンテクスト情報がかかわる。これら計算は以下のとおりである。
【００５８】
１．スナップショット時間＜＝最も最近の取込時間＆＆
２．見るべき最後のタイムスタンプ＜＝クローン時間＆＆
３．（照会が属するトランザクションは照会に対してトランザクションを示さない｜｜
クローンに対する最新の欠落しているトランザクションはない｜｜
照会が属するトランザクション＜＞最新の欠落しているトランザクション）よって、
データ項目バージョンを使用することができる。
【００５９】
上述の論理は、以下に示す記号を使用した。
【００６０】
１）  「＝」は等しいことを示す。
【００６１】
２）  「＜」は小なりを示す。
【００６２】
３）  「＞」は大なりを示す。
【００６３】
４）  「＜＞」は等しくないことを示す。
【００６４】
５）  「＞＝」は大なりか、または等しいことを示す。
【００６５】
６）  「＜＝」は小なりか、または等しいことを示す。
【００６６】
７）  ＆＆はＡＮＤ論理を示す。
【００６７】
８）  ｜｜はＯＲ論理を示す。
【００６８】
ベクトル
一実施例によると、分散ロックマネージャ（以降はＤＬＭと称する）が、どのノードが最小の作業量で照会の要求を満足させるデータ項目バージョンを有する最良の候補であるかを判定できるように情報のベクトルが設けられる。ベクトルは特定のデータ項目に関連付けられ、その特定のデータ項目のデータ項目バージョンについての情報を含む。具体的には、ベクトルはクラスタ内のすべてのノードに対してノード識別子のリストを含み、各ノードで、その特定のデータ項目に対するすべてのデータ項目バージョンについて、クローン時間をこれらノード識別子に関連付ける。
【００６９】
たとえば、図３を参照すると、ある特定のデータ項目についてのベクトル３００は、３つのノード、ノード１  ３１０、ノード２  ３２０、ノード３  ３３０を有する。ノード１  ３１０は、キャッシュ内にその特定のデータ項目の３つのバージョンを含む。これらデータ項目バージョンは、各々それらに関連付けられたクローン時間を有する。クローン時間はベクトル３００に反映され、ノード１  ３１０に関連付けられる。具体的には、クローン時間−ノード−ベクトルの関連付け３１１は、クローン時間１を含み、クローン時間−ノード−ベクトルの関連付け３１２はクローン時間３を含み、クローン時間−ノード−ベクトルの関連付け３１３は、クローン時間１１を含む。
【００７０】
ノード２  ３２０はキャッシュ内に１つのデータ項目バージョンを含む。このデータ項目バージョンのクローン時間は１５であり、これはベクトル３００に反映され、ノード２
３２０に関連付けられる。クローン時間−ノード−ベクトルの関連付け３１４はクローン時間１５を含む。
【００７１】
ノード３  ３３０はキャッシュ内に２つのデータ項目バージョンを含む。これらデータ項目バージョンは、各々それらに関連付けられたクローン時間を有し、これらはベクトル３００に反映され、ノード２  ３３０に関連付けられる。クローン時間−ノード−ベクトルの関連付け３１５は、クローン時間１６を含み、クローン時間−ノード−ベクトルの関連付け３１６はクローン時間２０を含む。
【００７２】
最良の候補を探すためのベクトルの使用
照会が見なければならないものをすべて含むデータ項目バージョンは、その照会に供給するための候補である。どの候補でも機能するものの、一般に、最良の候補を選ぶことが好ましい。一般に、第１の候補を照会に供給するのに必要とされるオーバーヘッドが、第２の候補を供給するのに必要とされるものより小さい場合、第１の候補は第２の候補よりも優れている。オーバーヘッドの１つの構成要素は、照会が見ることのできない変更をロールアウトすることを伴う。一般に、ロールアウトする必要のある変更が少ないほど、その候補は優れている。図４は、データベースシステム４００を示し、これは３つのノード（ノード１  ３１０、ノード２  ３２０、ノード３  ３３０）および分散ロックマネージャ（たとえばＤＬＭ）４４０を有する。各ノードは、ＤＬＭに関連付けられたローカルロックマネージャ（以降はＬＬＭと称する）およびキャッシュを有する。
【００７３】
ノード１  ３１０は、キャッシュ４１１およびＬＬＭ４４１を有する。ノード２  ３２０は、キャッシュ４２１およびＬＬＭ４４２を有する。ノード３  ３３０は、キャッシュ４３１およびＬＬＭ４４３を有する。ＬＬＭ４４１、４４２および４４３は、３つのノード（３１０、３２０、３３０）に関連付けられるだけでなく、ＤＬＭ４４０にも関連付けられる。
【００７４】
この例のため、図３のベクトル３００がＤＭＬ４４０によって使用されていると仮定する。次に、照会４５０がノード２  ３２０で実行していると仮定する。ノード２  ３２０上の照会４５０は、次のコンテクストの値を有する。
【００７５】
【表１】
2005503606.tif 000003
【００７６】
ノード１  ３１０では、照会４５０がデータ項目バージョン４６０を作成し始めた後に、データ項目バージョン４６０はキャッシュ４１１内でクローンされる。次の値がデータ項目バージョン４６０に関連付けられると仮定する。
【００７７】
【表２】
2005503606.tif 000004
【００７８】
さらに、ロールアウトは行なわれていないため、データ項目バージョンは図３に示されるクローン時間−ノード−ベクトル内のクローン時間に等しい最も新しい取込時間を有すると仮定する。
【００７９】
上述の仮定の下では、照会４５０はＤＬＭ４４０からデータ項目を要求する。ＤＬＭ３３０はベクトルをチェックし、ノード１  ３１０が、ノード１に関連付けられたデータ項目バージョンに対して最も新しい取込時間１１を有することを発見する（図３を参照、クローン時間−ノード−ベクトル３１３は１１である）。この最も最近の取込時間は、すべての最も最近の取込時間の中で照会の見るべき最後のタイムスタンプに最も近いため、ＤＬＭ４４０は照会の要求をノード１  ３１０に送る。ノード１  ３１０での処理は、キャッシュ４１１を走査して、照会の要求に最も好適なデータ項目バージョンを探す。このプロセスは、最も最近の取込時間１１を備えたデータ項目バージョン（図３を参照、クローン時間−ノード−ベクトル３１３）が最良の選択だと仮定しない。なぜなら、照会４５０の要求がノード１  ３１０に到着するまでに、よりよいデータ項目バージョンが利用可能となり得るからである。図示の例では、正にこれが当てはまる。具体的には、ノード１  ３１０はクローン時間１０を備えたデータ項目バージョンを含み、これは照会の見るべき最後のタイムスタンプ９に最も近い。計算のセクションで概要を述べたように計算が行なわれ、照会の値がデータ項目バージョンの値と比較される。これら計算に基づいて、一旦ロールアウトが行なわれると、データ項目バージョン４６０は照会４５０の要求を満足させると判定される。最後の変更のシーケンス番号が７１よりも大きい変更はロールアウトされ、ロールアウトの数は変更のシーケンス番号に依存する。データ項目バージョン４６０は、照会４５０の要求を満たすのに使用できるため、データ項目バージョン４６０はノード２  ３２０に送られる。
【００８０】
他の用途
この発明は、上述の例以外にも多くの用途がある。たとえば、ここで説明した技術は、システムのセッションについてデータを維持する状況で用いることができる。また、この技術は、分散したキャッシュを保持し、分散したキャッシュを含むさまざまなキャッシュ内のデータを同期させる必要のある多重ノードシステムでも使用可能である。
【００８１】
ハードウェアの概要
図５は、この発明の実施例を実現可能なコンピュータシステム５００を示すブロック図である。コンピュータシステム５００は、情報を通信するためのバス５０２またはその他の通信機構、および情報を処理するためのバス５０２に結合されたプロセッサ５０３を含む。コンピュータシステム５００は、バス５００に結合された、ランダムアクセスメモリ（ＲＡＭ）またはその他の動的記憶装置などのメインメモリ５０６を含み、プロセッサ５０３によって実行される情報および命令を記憶する。メインメモリ５０６も、プロセッサ５０３によって実行される命令の実行中に一時的な変数またはその他の中間情報を記憶するために使用してもよい。コンピュータシステム５００は、バス５００に結合された、リードオンリメモリ（ＲＯＭ）５０８またはその他の静的記憶装置をさらに含み、プロセッサ５０３のために静的情報および命令を記憶する。磁気ディスクまたは光ディスクなどの記憶装置５１０も設けられ、バス５０２に結合されて情報および命令を記憶する。
【００８２】
バス５０２を介して、コンピュータシステム５００をブラウン管（ＣＲＴ）などの表示装置５０２に結合し、情報をコンピュータのユーザに表示してもよい。英数字キーおよびその他のキーを含む入力装置５１３はバス５０２に結合されて、情報およびコマンドの選択をプロセッサ５０３に通信する。別の種類のユーザ入力装置は、マウス、トラックボールまたはカーソル方向キーなどのカーソル制御５１６であり、方向情報およびコマンドの選択をプロセッサ５０３に通信し、表示装置５１２上でのカーソルの動きを制御する。入力装置は通常、第１の軸（たとえばＸ軸）および第２の軸（たとえばＹ軸）での２つの自由度を有し、これによって装置は平面での位置を特定することができる。
【００８３】
この発明は、トランザクションに与えるべきデータ項目の特定のバージョンを選択するためにコンピュータシステム５００を使用することに関する。この発明の一実施例によると、トランザクションに与えるべきデータ項目の特定のバージョンの選択は、プロセッサが、メインメモリ５０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行することに応答して、コンピュータシステム５００によって行なわれる。そのような命令は、記憶装置５１０などの別のコンピュータ読取可能な媒体から読込まれてもよい。メインメモリ５０６に含まれる命令のシーケンスの実行は、ここに説明されるプロセスのステップをプロセッサ５０３に行なわせる。メインメモリ５０６に含まれる命令のシーケンスを実行するため、１つまたは複数のプロセッサを多重処理配置で用いてもよい。代替の実施例では、配線で接続された（hard-wired）回路をソフトウェアの命令の代わりに、またはそれと組合せて使用して、この発明を実現してもよい。したがって、この発明の実施例は、ハードウェア回路およびソフトウェアの特定の組合せに限定されない。
【００８４】
ここで使用される「コンピュータ読取可能な媒体」という言葉は、命令をプロセッサ５０３に与えて実行させるのに参加する媒体を指す。そのような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むさまざまな形を取り得るが、これらに限定されない。不揮発性媒体は、たとえば、記憶装置５１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ５０６などの動的メモリを含む。伝送媒体は、バス５０２を含むワイヤを含め、同軸ケーブル、銅線および光ファイバを含む。伝送媒体は、無線通信中または赤外線データ通信中に生成されるような音波または光波の形も取り得る。
【００８５】
コンピュータ読取可能な媒体に一般的な形は、たとえば、フロッピー（R)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または他の磁気媒体、ＣＤ−ＲＯＭ、他の光学媒体、パンチカード、紙テープ、孔のパターンを備えた他の物理的な媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、他のメモリチップまたはカートリッジ、後述する搬送波、またはコンピュータがそこから読取ることのできる他のあらゆる媒体を含む。
【００８６】
さまざまな形のコンピュータ読取可能な媒体が、１つまたは複数の命令の１つまたは複数のシーケンスをプロセッサ５０３に運んで実行させるのにかかわり得る。たとえば、最初、命令は遠隔コンピュータの磁気ディスク上で保持されてもよい。遠隔コンピュータは命令を動的メモリにロードし、その命令をモデムを使用して電話線上で送ることができる。コンピュータシステム５００のローカルモデムはデータを電話線上で受取り、赤外線トランスミッタを使用してデータを赤外線信号に変換することができる。バス５０２に結合された赤外線検出器は、赤外線信号で運ばれるデータを受取り、そのデータをバス５０２上に位置付けることができる。バス５０２はメインメモリ５０６にデータを運び、そこからプロセッサ５０３が命令を検索および実行する。メインメモリ５０６によって受取られる命令は任意で、プロセッサ５０３による実行の前後に記憶装置５１０で記憶してもよい。
【００８７】
コンピュータシステム５００は、バス５０２に結合された通信インターフェイス５１８も含む。通信インターフェイス５１８は、ローカルネットワーク５２２に接続されるネットワークリンク５２０に結合する２方向のデータ通信を提供する。たとえば、通信インターフェイス５１８は、対応する種類の電話線にデータ通信接続を提供する総合的デジタル通信網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例では、通信インターフェイス５１８は、互換性ＬＡＮへのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現可能である。そのような実現例では、通信インターフェイス５１８は、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を授受する。
【００８８】
ネットワークリンク５２０は、通常１つまたは複数のネットワークを介して、他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク５２０は、ローカルネットワーク５２２を介して、ホストコンピュータ５２３またはインターネットサービスプロバイダ（ＩＳＰ）５２６によって運用されるデータ装置への接続を提供し得る。ＩＳＰ５２６は、現在では一般に「インターネット」５２８と称される世界規模のパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク５２２およびインターネット５２８はともにデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を使用する。さまざまなネットワークを通る信号およびネットワークリンク５２０上の信号ならびに通信インターフェイス５１８を通る信号は、コンピュータシステム５００とデジタルデータを授受するが、これらは情報を搬送する搬送波の例示的な形である。
【００８９】
コンピュータシステム５００は、ネットワーク、ネットワークリンク５２０および通信インターフェイス５１８を通じて、プログラムコードを含むメッセージを送りデータを受取ることができる。インターネットの例では、サーバ５３０は、アプリケーションプログラムに対して要求されたコードをインターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２および通信インターフェイス５１８を通じて送信することができる。この発明によると、そのような１つのダウンロードされたアプリケーションによって、トランザクションに与えるべきデータ項目の特定のバージョンを選択することが可能になる。
【００９０】
受取られたコードは、受取られるときにプロセッサ５０３によって実行してもよいし、および／または記憶装置５１０または他の不揮発性記憶装置に記憶して後に実行してもよい。このような態様で、コンピュータシステム５００は搬送波の形でアプリケーションコードを入手することができる。
【００９１】
結論
ここに説明される技術は、以下のステップによって、照会に供給することのできるデータ項目バージョンを判定し、照会を満足させるのに必要とする作業量が最少であるデータ項目を判定することができる。
【００９２】
１）  第１の新しいフィールドを各クローンに関連付けるステップ。第１の新しいフィールドは、データ項目バージョンが現行であった時間を示す。
【００９３】
２）  第２の新しいフィールドを各照会に関連付けるステップ。第２の新しいフィールドは、照会が見なくてはならないトランザクションによって行なわれた最後の変更を示す。
【００９４】
３）  クローンの新しい第１のフィールドの値、および照会の第２の新しいフィールドの値を使用して、クローンを照会に供給してもよいかを判定するステップ。
【００９５】
このメカニズムは、以下のことを必要とすることなく、目的を達成した。
【００９６】
１）  クラスタ内のすべてのノードにわたってメッセージを一斉送信して、データ項目の非現行バージョンのすべての更新または無効化を行なうこと。
【００９７】
２）  ロックを入手すること、または
３）  過度なロールアウトを行なうこと。
【００９８】
したがって、このメカニズムは、最少の作業量で照会を満足させる適切なデータ項目バージョンを提供することができる。
【図面の簡単な説明】
【００９９】
【図１】あるデータ項目バージョンおよびそれを更新したトランザクションのブロック図である。
【図２】クローン分岐のブロック図である。
【図３】ベクトルのブロック図である。
【図４】この発明の一実施例によるデータベースシステムのブロック図である。
【図５】この発明の実施例を実現できるコンピュータシステムのブロック図である。
【図１】
2005503606.tif 000005
【図２】
2005503606.tif 000006
【図３】
2005503606.tif 000007
【図４】
2005503606.tif 000008
【図５】
2005503606.tif 000009
【国際公開パンフレット】
2005503606.tif 000010
2005503606.tif 000011
2005503606.tif 000012
2005503606.tif 000013
2005503606.tif 000014
2005503606.tif 000015
2005503606.tif 000016
2005503606.tif 000017
2005503606.tif 000018
2005503606.tif 000019
2005503606.tif 000020
2005503606.tif 000021
2005503606.tif 000022
2005503606.tif 000023
2005503606.tif 000024
2005503606.tif 000025
2005503606.tif 000026
2005503606.tif 000027
2005503606.tif 000028
2005503606.tif 000029
2005503606.tif 000030
2005503606.tif 000031
2005503606.tif 000032
2005503606.tif 000033
2005503606.tif 000034
2005503606.tif 000035
2005503606.tif 000036
2005503606.tif 000037
2005503606.tif 000038
2005503606.tif 000039
【国際公開パンフレット（コレクトバージョン）】
2005503606.tif 000040
2005503606.tif 000041
【国際公開パンフレット（コレクトバージョン）】
2005503606.tif 000042
2005503606.tif 000043
2005503606.tif 000044
2005503606.tif 000045
2005503606.tif 000046
2005503606.tif 000047
2005503606.tif 000048
2005503606.tif 000049
2005503606.tif 000050
2005503606.tif 000051
2005503606.tif 000052
2005503606.tif 000053
2005503606.tif 000054
2005503606.tif 000055
2005503606.tif 000056
2005503606.tif 000057
2005503606.tif 000058
2005503606.tif 000059
2005503606.tif 000060
2005503606.tif 000061
2005503606.tif 000062
2005503606.tif 000063
2005503606.tif 000064
2005503606.tif 000065
2005503606.tif 000066
2005503606.tif 000067
2005503606.tif 000068
2005503606.tif 000069
2005503606.tif 000070
2005503606.tif 000071
【手続補正書】
【提出日】平成15年10月13日(2003.10.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ項目に行なわれたすべての変更を反映するデータ項目の現行バージョンを含む、前記データ項目の複数のバージョンを含むデータベース環境で使用するための方法であって、前記方法は、前記トランザクションで実行している照会に答えるために前記データ項目のどのバージョンを使用すべきかを判定するのを支援し、前記方法はコンピュータで実現される以下のステップを含み、前記以下のステップは、
前記照会に関連付けられ、前記照会によって見られなければならない前記トランザクション内で行なわれた最後の変更の時間を示す、見るべき最後のタイムスタンプを維持するステップと、
前記データ項目バージョンが現行であった時間を示すクローン時間をデータ項目バージョンとともに維持するステップとを含み、
前記データ項目バージョンが別のクローンからクローンされた場合、前記データ項目バージョンの前記クローン時間は、前記別のクローンに関連付けられるクローン時間であり、
前記データ項目バージョンが前記データ項目の前記現行バージョンからクローンされた場合、前記データ項目バージョンの前記クローン時間は、前記データ項目バージョンが前記データ項目の前記現行バージョンからクローンされたときの時間を反映し、前記以下のステップはさらに、
前記照会が見ることのできない何らかの変更が前記データ項目バージョンから除去された後、前記データ項目バージョンを前記照会に供給すべきだと判定するステップを含み、
前記データ項目バージョンを前記照会に供給すべきだと判定する前記ステップは、選択されたデータ項目バージョンが、前記照会が見なくてはならないものをすべて含むバージョンの部類に分類されるように、少なくとも部分的に前記クローン時間と前記見るべき最後のタイムスタンプとの比較に基づく、方法。
【請求項２】
前記判定するステップは、前記クローン時間と前記見るべき最後のタイムスタンプとの前記比較に基づいて、前記トランザクションに供給されるのに適格な複数のデータ項目バージョンから前記データ項目バージョンを選択するステップを含む、請求項１に記載の方法。
【請求項３】
前記見るべき最後のタイムスタンプは、前記照会に関連付けられ、前記照会によって見られなければならない前記トランザクションによって行なわれた最後の変更の時間を示し、
前記データ項目バージョンを前記トランザクションに供給すべきだと判定する前記ステップは、前記データ項目バージョンを使用して前記照会に答えるべきだと判定することによって行なわれる、請求項１に記載の方法。
【請求項４】
前記データ項目バージョンが現行バージョンからクローンされるときに、グローバルクロックに基づいて前記クローン時間をセットするステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記データ項目バージョンが非現行データ項目バージョンからクローンされるときに、前記非現行データ項目バージョンのクローン時間に基づいて前記クローン時間をセットするステップをさらに含む、請求項１に記載の方法。
【請求項６】
クラスタ内の複数のノードは前記データ項目に対してデータ項目バージョンを有し、前記方法は、
前記複数のノードの各ノードに対して、前記データ項目についてのクローン時間情報を維持するステップと、
前記クローン時間情報に基づいて、前記データ項目に対する要求をどのノードに送るべきかを選択するステップとをさらに含む、請求項１に記載の方法。
【請求項７】
クローン時間情報を維持する前記ステップは、前記データ項目に対して、ノードをクローン時間に関連付けるベクトルを維持するステップを含み、前記ベクトル内のある所与のノードに関連付けられる前記クローン時間は、前記所与のノードにあるデータ項目バージョンに関連付けられるクローン時間である、請求項６に記載の方法。
【請求項８】
前記判定するステップは、
除去されたデータの情報に基づいて、見られなければならない情報が前記データ項目バージョンから除去されたかを判定するステップと、
前記クローン時間に基づいて、データ項目バージョンの作成後に、見られなくてはならない情報がデータ項目の現行バージョンに合わせて作成された可能性があるかを判定するステップとを含む、請求項１に記載の方法。
【請求項９】
データベースのある特定のスナップショットを見なくてはならない照会にデータ項目を供給する方法であって、
複数のノードにある複数のデータ項目バージョンに対して、いつ前記データ項目バージョンが属するクローン分岐がデータ項目の現行バージョンからクローンされるかを前記複数のデータ項目バージョンの各データ項目バージョンに対して示すクローン時間情報を維持するステップと、
少なくとも部分的に前記クローン時間情報に基づいて、前記複数のデータ項目バージョンのうちのどのデータ項目バージョンが、前記照会によって見られなくてはならない変更をすべて含むかを判定するステップと、
前記照会によって見られなければならない変更をすべて含むデータ項目バージョンから前記照会に供給するデータ項目バージョンを選択するステップとを含む、方法。
【請求項１０】
前記判定するステップは、
データ項目バージョンに関連付けられるクローン時間に基づいて、前記照会によって見られなくてはならない変更が、前記データ項目バージョンの作成後に前記データ項目に行なわれた可能性があるかを判定するステップと、
前記データ項目バージョンに関連付けられる最も最近の取込時間に基づいて、前記照会によって見られなくてはならない変更が、前記データ項目バージョンから除去された可能性があるかを判定するステップとを含む、請求項９に記載の方法。
【請求項１１】
前記選択するステップは、前記クローン時間情報を使用して、他の候補よりも除去の必要な変更が少ない候補を選択するステップを含む、請求項１０に記載の方法。
【請求項１２】
コンピュータ読取可能な媒体であって、１つまたは複数のプロセッサによって実行されると、前記１つまたは複数のプロセッサに請求項１から１１のいずれかに記載のステップを行なわせる命令を保持する、コンピュータ読取可能な媒体。
【国際調査報告】
2005503606.tif 000072
2005503606.tif 000073
2005503606.tif 000074