IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セールスフォース ドット コム インコーポレイティッドの特許一覧

<>
  • 特表-バージョンベースのテーブルロック 図1
  • 特表-バージョンベースのテーブルロック 図2
  • 特表-バージョンベースのテーブルロック 図3
  • 特表-バージョンベースのテーブルロック 図4
  • 特表-バージョンベースのテーブルロック 図5
  • 特表-バージョンベースのテーブルロック 図6
  • 特表-バージョンベースのテーブルロック 図7
  • 特表-バージョンベースのテーブルロック 図8
  • 特表-バージョンベースのテーブルロック 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-01-12
(54)【発明の名称】バージョンベースのテーブルロック
(51)【国際特許分類】
   G06F 16/28 20190101AFI20220104BHJP
【FI】
G06F16/28
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021505239
(86)(22)【出願日】2020-09-15
(85)【翻訳文提出日】2021-01-29
(86)【国際出願番号】 US2020050796
(87)【国際公開番号】W WO2021061438
(87)【国際公開日】2021-04-01
(31)【優先権主張番号】16/585,191
(32)【優先日】2019-09-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース ドット コム インコーポレイティッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】コーエン,ジェフリー イラ
(72)【発明者】
【氏名】シャー,プニット ビー.
(72)【発明者】
【氏名】リエラウ,サージ フィリップ
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA09
5B175CA10
(57)【要約】
トランザクションを同時に処理することに関する技術が開示される。コンピュータシステムは、複数のバージョンを有するデータベーステーブルを維持管理し得る。バージョンの各々が、データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分を特定し得る。コンピュータシステムは、データベーステーブルの定義を変更する第1のトランザクションを実行するための第1の要求を受信し得る。コンピュータシステムは、データベーステーブルに格納されたデータを変更する第2のトランザクションを実行するための第2の要求を受信し得る。第1及び第2のトランザクションが複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、コンピュータシステムは、第1及び第2のトランザクションを同時に処理し得る。
【特許請求の範囲】
【請求項1】
データベースシステムにより、複数のバージョンを有するデータベーステーブルを維持管理し、前記バージョンの各々が、前記データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分、を特定し、
前記データベースシステムにより、前記データベーステーブルの定義を変更する第1のトランザクションを実行するための第1の要求を受信し、
前記データベースシステムにより、前記データベーステーブルに格納されたデータを変更する第2のトランザクションを実行するための第2の要求を受信し、
前記第1及び第2のトランザクションが前記複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、前記データベースシステムが、前記第1及び第2のトランザクションを同時に処理する、
ことを有する方法。
【請求項2】
前記データベースシステムにより、前記データベーステーブルの前記複数のバージョンの各々について、プロキシテーブルを維持管理し、該プロキシテーブルは、所与のトランザクションに対して該プロキシテーブル上でプロキシロックを獲得することを可能にし、前記所与のトランザクションに対して前記プロキシロックが保持されている間、前記データベースシステムは、該プロキシテーブルに対応するバージョンに関連付けられた前記データベーステーブルに対する別のトランザクションを処理することができない、
ことを更に有する請求項1に記載の方法。
【請求項3】
前記データベーステーブルが新たなバージョンに関連付けられていると判定したことに応答して、前記データベースシステムが、前記データベーステーブルの前記新たなバージョン用の新たなプロキシテーブルを作成する、
ことを更に有する請求項2に記載の方法。
【請求項4】
前記データベーステーブルが削除されることに応答して、前記データベースシステムが、前記データベーステーブルの前記複数のバージョンについて維持管理される各プロキシテーブルを削除する、
ことを更に有する請求項2又は3に記載の方法。
【請求項5】
前記データベースシステムにより、前記第1のトランザクションに対して、
前記データベーステーブル上での第1のロックであり、前記第1のトランザクションに対して保持される当該第1のロックは、前記データベースシステムが前記第2のトランザクションを処理して前記データベーステーブルに格納されたデータを変更することを許す、第1のロックと、
前記第1のトランザクションに関連付けられているバージョンに対応する特定のプロキシテーブル上での第2のロックであり、前記第1のトランザクションに対して保持される当該第2のロックは、前記第1のトランザクションのバージョンに関連付けられた前記データベーステーブルに対する別のトランザクションを前記データベースシステムが処理することを阻む、第2のロックと、
を獲得する、
ことを更に有する請求項2乃至4のいずれかに記載の方法。
【請求項6】
前記第1のロックが前記第2のロックの前に獲得される、請求項5に記載の方法。
【請求項7】
前記第2のロックが前記第1のロックの前に獲得される、請求項5に記載の方法。
【請求項8】
前記第1のトランザクションは、前記データベーステーブルの前記定義を変更するデータ定義言語(DDL)操作を規定しており、当該方法は更に、
前記データベースシステムにより、前記データベーステーブルの前記定義を変更する第2のDDL操作を規定する第3のトランザクションを実行するための第3の要求を受信し、
前記第1及び第3のトランザクションが各々それぞれのDDL操作を規定していることに基づいて、前記データベースシステムにより、前記第1及び第3のトランザクションを順次に処理し、前記第1及び第3のトランザクションは、前記複数のバージョンのうちの相異なるバージョンに関連付けられている、
ことを有する、請求項1乃至7のいずれかに記載の方法。
【請求項9】
前記第2のトランザクションは、前記データベーステーブルに格納されたデータを変更するデータ操作言語(DML)操作を規定しており、当該方法は更に、
前記データベースシステムにより、前記データベーステーブルに格納されたデータを変更する第2のDML操作を規定する第3のトランザクションを実行するための第3の要求を受信し、
前記第1及び第3のトランザクションが各々それぞれのDML操作を規定していることに基づいて、前記データベースシステムにより、前記第1及び第3のトランザクションを順次に処理し、前記第1及び第3のトランザクションは、前記複数のバージョンのうちの相異なるバージョンに関連付けられている、
ことを有する、請求項1乃至7のいずれかに記載の方法。
【請求項10】
前記データベーステーブルの前記定義を変更することは、特定の条件が満たされると実行されるデータベーストリガーを追加することを含む、請求項1乃至9のいずれかに記載の方法。
【請求項11】
プログラム命令を格納したコンピュータ読み取り可能媒体であって、前記プログラム命令は、コンピュータシステムに、
複数のバージョンを有するデータベーステーブルを維持管理し、前記バージョンの各々が、前記データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分、を特定し、
前記データベーステーブルの定義を変更するデータ定義言語(DDL)操作を特定する第1のトランザクションを実行するための第1の要求を受信し、
前記データベーステーブルに格納されたデータを変更するデータ操作言語(DML)操作を特定する第2のトランザクションを実行するための第2の要求を受信し、
前記第1及び第2のトランザクションが前記複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、前記第1及び第2のトランザクションを同時に処理する、
ことを有する動作を実行させることができる、媒体。
【請求項12】
前記動作は更に、
前記複数のバージョンにそれぞれ対応する複数のロック可能オブジェクトを維持管理し、所与のロック可能オブジェクトが、所与のトランザクションに対して該ロック可能オブジェクト上でロックを獲得することを可能にし、前記所与のトランザクションに対して前記ロックが保持されている間、前記コンピュータシステムは、前記所与のロック可能オブジェクトに対応するバージョンに関連付けられた前記データベーステーブルに関与する別のトランザクションを処理することができない、
ことを有する、請求項11に記載の媒体。
【請求項13】
前記第1のトランザクションは、前記複数のバージョンのうちの第1のバージョンに関連付けられ、前記第2のトランザクションは、前記複数のバージョンのうちの第2の、異なる、バージョンに関連付けられており、前記動作は更に、
前記第1のトランザクションに対して、前記第1のバージョンに対応する前記複数のロック可能オブジェクトのうちの第1の特定の1つ上で第1のロックを獲得し、
前記第2のトランザクションに対して、前記第2のバージョンに対応する前記複数のロック可能オブジェクトのうちの第2の特定の1つ上で第2のロックを獲得する、
ことを有する、請求項12に記載の媒体。
【請求項14】
前記動作は更に、
前記第1及び第2のトランザクションの処理を完了する前に、前記第1のバージョンに関連付けられている第3のトランザクションを実行するための第3の要求を受信し、
前記第1のバージョンに対応する前記第1のロックが解除された後に、前記第3のトランザクションを処理する、
ことを有する、請求項13に記載の媒体。
【請求項15】
少なくとも1つのプロセッサと、
プログラム命令を格納したメモリであり、前記プログラム命令は、請求項1乃至10のいずれかに記載の方法を実行するよう、前記少なくとも1つのプロセッサによって実行可能である、メモリと、
を有するシステム。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は、概して、バージョンベースのテーブルロックに関する。
【背景技術】
【0002】
今のデータベースシステムは、典型的に、効率的にアクセスされて操作されることができる整理されたやり方でユーザが情報の集合を保存することを可能にする管理システムを実装している。そのようなデータベースシステムは、その情報を、各列が情報のグループ分けを定義する複数の列と行で構成されるデータベーステーブルに格納することが多い。例えば、企業が、例えば顧客の名前、電子メールアドレス、及び電話番号などの顧客の情報を保存することを望むことがある。従って、情報の各ピースのための列(すなわち、名前の列、電子メールアドレスの列、及び電話番号の列)を含むデータベーステーブルを作成することができる。情報がデータベーステーブルに挿入されるとき、新しいレコード(データベーステーブルの行に対応する)がデータベーステーブルに追加され、そのレコードは、そのデータベーステーブルの各属性/列の情報を提供し得る。
【図面の簡単な説明】
【0003】
図1】一部の実施形態に従った、バージョンベースのテーブルロックが可能なシステムの要素の例を示すブロック図である。
図2】一部の実施形態に従った、プロキシテーブルを含むデータベースの要素の例を示すブロック図である。
図3】一部の実施形態に従った、データベースシステムの要素の例を示すブロック図である。
図4】一部の実施形態に従った、ロックマネジャの要素の例を示すブロック図である。
図5】一部の実施形態に従った、ロックコンフリクトテーブルの要素の例を示すブロック図である。
図6図6-8は、一部の実施形態に従った、トランザクションを処理することに関する方法の例を示すフロー図である。
図7図6-8は、一部の実施形態に従った、トランザクションを処理することに関する方法の例を示すフロー図である。
図8図6-8は、一部の実施形態に従った、トランザクションを処理することに関する方法の例を示すフロー図である。
図9】一部の実施形態に従った、コンピュータシステムの一例を示すブロック図である。
【0004】
この開示は、“一実施形態”又は“ある実施形態”への言及を含む。“一実施形態において”又は“ある実施形態において”という言い回しが何度も現れることは、必ずしも同じ実施形態に言及しているわけではない。特定の機構、構造、又は特性が、この開示と一致する好適なやり方で組み合わされ得る。
【0005】
この開示の中では、複数の異なるエンティティ(“ユニット”、“回路”、他のコンポーネントなどとして様々に参照され得る)が、1つ以上のタスク又は動作を実行するように“構成”されるとして記述又は主張されることがある。[1つ以上のタスクを実行する]ように構成された[エンティティ]という、この定式的記述は、ここでは、構造(すなわち、例えば電子回路などの物理的なもの)を指すように使用される。より具体的には、この定式的記述は、その構造が動作中に1つ以上のタスクを実行するように整えられていることを示すために使用される。構造は、当該構造が現時には動作していない場合であっても、何らかのタスクを実行するように“構成”されていると言われることができる。“ネットワーク上で通信するように構成されたネットワークインタフェース”は、例えば、動作中にこの機能を実行する回路を有する集積回路に及ぶ(問題としている集積回路が現時には使用されていない(例えば、それに電源が接続されていない)場合であっても)ように意図される。従って、何らかのタスクを実行する“ように構成されている”として記述又は記載されるエンティティは、例えばデバイス、回路、タスクを実装するように実行可能なプログラム命令を格納したメモリなどの、物理的なものを指す。この言い回しは、ここでは、無形のものを指すようには使用されない。従って、構築する“ように構成される”は、ここでは、例えばアプリケーションプログラミングインタフェース(API)などのソフトウェアエンティティを指すようには使用されない。
【0006】
用語“ように構成されている”という用語は、“ように可能である”を意味するものではない。例えば、プログラムされていないFPGAは、何らかの特定の機能を実行する“ように構成されている”と見なされるものではないが、それは、その機能を実行する“ように構成可能である”とすることができ、プログラミング後には機能を実行する“ように構成されている”とすることができる。
【0007】
ここで使用されるとき、用語“第1”、“第2”などは、それらが前置する名詞のラベルとして使用され、特段に断らない限り、いかなるタイプの順序付け(例えば、空間的、時間的、論理的など)も意味しない。例えば、8つのプロセッシングコアを持つプロセッサにおいて、用語“第1”及び“第2”のプロセッシングコアは、8つのプロセッシングコアのうちの任意の2つを指すように使用されることができる。換言すれば、第1及び第2のプロセッシングコアは、例えば、プロセッシングコア0及び1に限定されない。
【0008】
ここで使用されるとき、用語“に基づく”は、決定に影響を及ぼす1つ以上の要因を記述するために使用される。この用語は、更なる要因が決定に影響を及ぼし得る可能性を排除するものではない。すなわち、決定は、明記される要因のみに基づくこともあるし、明記される要因と他の明記されない要因とに基づくこともある。“Bに基づいてAを決定する”という言い回しを考える。この言い回しは、Bが、Aを決定するために使用される要因又はAの決定に影響を及ぼす要因であることを述べるものである。この言い回しは、Aの決定が、例えばCなどの何らかの他の要因にも基づき得ることを排除しない。この言い回しはまた、AがBのみに基づいて決定される実施形態に及ぶことも意図している。ここで使用されるとき、“に基づく”という言い回しは、このように、“少なくとも部分的に基づく”という言い回しと同義である。
【発明を実施するための形態】
【0009】
一部のケースで、データベースシステムは、複数の異なるアプリケーションによって開始される複数のトランザクションをデータベーステーブル上で処理することがある。特定のトランザクションを処理するとき、データベースシステムは、しばしば、データベーステーブル上でのロックを取得し、それが、データベーステーブルと関連付けられたデータをデータベースシステムが操作することを可能にする。しかしながら、そのようなロックは、最初のトランザクションがそのロックを保持している間、データベースシステムが別のトランザクションを処理することを妨げ得る。結果として、アプリケーションは、データベーステーブル上でのロックを保持している別のトランザクションによって遅滞されているトランザクションが処理されるのを待ったままにされ得る。
【0010】
データベーステーブルは、一部のケースで、各バージョンが当該データベーステーブルの特定のビューを提示する複数のバージョンと関連付けられ得る。トランザクションが処理されているとき、データベースシステムは、そのトランザクションと関連付けられたバージョンに対応するデータベーステーブルの列からのみデータを眺め得る。しかしながら、データベースシステムは、データベーステーブル全体上でロックを取得することができ、それが、該ロックが保持されている間、データベーステーブルに関連する他のトランザクションが処理されることを妨げる。本発明者は、この状況は望ましくないものであり得ることを認識しており、それは何故なら、他のトランザクションが異なるバージョンと関連付けられていることがあり、結果として、それらを処理することが、ロックを保持しているトランザクションとは衝突しないことがあるからである。一例として、ユーザには利用可能でないデータベーステーブルの将来のバージョンにデータベーストリガーを追加する第1のトランザクションを考えるに、そのようなトランザクションは、データベーステーブルの以前のバージョン上で操作を行うユーザには影響を及ぼさないとし得る。従前のアプローチでは、第1のトランザクションは、データベーステーブル上でグローバルロックをかけてしまうことができ、それが、以前のバージョン上でユーザが操作を行うことを妨げる。従って、本発明者が認識したことには、異なるバージョンに関連付けられた複数の特定のトランザクションが同一データベーステーブル上で同時に処理されることを可能にすることが望ましいといえる。
【0011】
本開示は、同じデータベーステーブルの異なるバージョンと関連付けられた複数のトランザクションを同時並列的に処理するための様々な技術を記載する。ここで使用されるとき、“同時並列的に”(又は“同時に”)という言い回しは、トランザクション(又は他の作業アイテム)を処理する文脈で使用される場合に、2つ以上のトランザクションを重なり合ったやり方で処理することを指し、すなわち、2つ以上のトランザクションが同時に処理されている時点又は期間が存在することを意味する。一例として、データベースシステムが、第1のトランザクションを処理することを開始し、その後、第1のトランザクションがなおも処理されている間に、第2のトランザクションを処理することを開始する場合、第1及び第2のトランザクションは同時に処理されると言える。しかし、データベースシステムが、第1のトランザクションが処理されるまで待った後で、第2のトランザクションを処理する場合、本開示の文脈の範囲内では、第1及び第2のトランザクションは同時に処理されない。その代わりに、これらのトランザクションは順に処理される。
【0012】
以下に記載される様々な実施形態において、データベースシステムは、複数のバージョンを有するデータベーステーブルを維持管理し、各バージョンが、データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスする及び適用可能な場合に変更することを許される対応部分(例えば、一組のフィールド)を特定し得る。データベースシステムは更に、様々な実施形態において、データベーステーブルの各バージョンについてプロキシテーブルを維持管理し得る。所与のトランザクションに対して、データベースシステムは、特定のプロキシテーブル上でのロックを取得して、そのプロキシテーブルがロックされている間に同じバージョンを持つ他のトランジションが処理されることを防止し得る。
【0013】
一例として、データベースシステムは、データベーステーブルの定義を変更する第1のトランザクションを実行するための要求を受信し得る。様々なケースにおいて、データベースシステムは、第1のトランザクションに対して2つのロックを取得し得る。データベースシステムは、データベーステーブル上での第1のロックを取得することができ、このロックは、他のトランザクションがデータベーステーブルとインタラクトすることを可能にし得るが、基礎となるデータベーステーブルが削除されないようにすることができる。データベースシステムはまた、第1のトランザクションのバージョンを持つプロキシテーブル上での第2のロックを獲得することができ、この第2のロックは、第2のロックが保持されている間、同じバージョンを持つ他のトランザクションがデータベーステーブル上で処理されることを防止し得る。その後、データベースシステムは、データベーステーブルに格納されているデータを変更する第2のトランザクションを実行するための要求を受信し得る。同様にして、データベースシステムは、データベーステーブル上での1つと、第2のトランザクションのバージョンと一致するプロキシテーブル上での1つとの、2つのロックを取得しようと試み得る。
【0014】
従って、データベースシステムは、第1及び第2のトランザクションを、これらトランザクションが同一データベーステーブルの相異なるバージョンに関連付けられていることに基づいて、同時に処理し得る。しかし、一部のケースで、第2のトランザクションのために第2のロックを得ようとするときに、データベースシステムは、第2のトランザクションが第1のトランザクションと同じバージョンに関連付けられている場合には、対応するプロキシテーブルが第1のトランザクションによってロックされているので、第2のロックを得ることができないことがある。結果として、データベースシステムは、トランザクションが同じバージョンに関連付けられているときに、第1及び第2のトランザクションを同時には処理できないことがある。様々な実施形態において、データベースシステムは更に、第1及び第2のトランザクションが同じ“タイプ”のデータベース操作を伴うために衝突(すなわち、同一データを操作)し得るかを検討することができる。すなわち、一部のケースでは、相異なるバージョンに関連する場合であっても、データベース操作が衝突し、それ故に、データ破壊を引き起こし得る。例えば、2つの異なるバージョンのデータベース操作が、同じデータ行に対して操作を行う場合、それらによるそのデータ行の操作がそのデータ行のデータを破壊してしまい得る。従って、データベースシステムは、データベース操作の“タイプ”調べることができ、タイプには、データ操作言語(DML)操作、データ定義言語(DDL)操作、データ制御言語(DCL)操作、及びトランザクション制御言語(TCL)操作が含まれる。本開示の文脈の範囲内において、2つのデータベース操作が“直交し合うタイプ”のものであるというのは、以下のような場合であり、すなわち、操作の性質のために、それら2つの操作を実行することが、両方とも正しく動作するならばデータベース内のデータを破壊しないことが保証されるような場合である。例えば、DDL操作は、DML操作に対して直交するタイプである。2つのデータベース操作が同じタイプのデータベース操作に関連付けられている場合、データベースシステムはそれらを同時に処理しないことを選択し得る。
【0015】
これらの技術は、データベーステーブルの異なるバージョンに関連する複数のトランザクションがそのデータベーステーブルに対して同時に処理されることを可能にするので、従来アプローチよりも有利であり得る。例えば、従来アプローチでは、第1のトランザクションが(例えば、データベーストリガーを追加することによって)データベーステーブルの特定のバージョンの定義を変更する場合、データベーステーブルの異なる部分を変更する(例えば、あるデータ行を変更する)他のトランザクションは、たとえそれらのトランザクションが異なるバージョンに関連する場合であっても、第1のトランザクションが完了するまで阻止されることになる。しかしながら、本開示の技術は、第1のトランザクションと他のトランザクションとが同時に処理されることを可能にする。以下、図1から始めて、これらの技術を実装するシステムを説明する。
【0016】
次に、図1を参照するに、システム100のブロック図が示されている。システム100は、ハードウェア、又はハードウェアとソフトウェアルーチンとの組み合わせを介して実装される一組のコンポーネントである。図示した実施形態において、システム100は、データベースシステム110(トランザクション120を含む)及びデータベース130を含んでいる。更に示しように、トランザクション120Aは、データ操作言語(DML)操作122及びバージョン125Aを含んでいる。トランザクション120Bは、データ定義言語(DDL)操作124及びバージョン125Bを含んでいる。また、図示のように、データベース130は、テーブル定義142及び行データ144を持つデータベーステーブル140を含んでいる。一部の実施形態において、システム100は、図示とは異なるように実装されてもよい。例えば、データベースシステム110がデータベース130を含んでもよく、システム100は複数のデータベース130及び/又はデータベースシステム110を含んでもよく、等々とし得る。
【0017】
システム100は、様々な実施形態において、サービスのユーザがアプリケーションを開発し、走らせ、管理することを可能にするプラットフォームサービスを実装する。一例として、システム110は、当該マルチテナントシステムによってホストされる複数のユーザ/テナントに様々な機能を提供するマルチテナントシステムとし得る。従って、システム100は、様々な異なるユーザ(例えば、システム100のプロバイダ及びテナント)からのソフトウェアルーチンを実行し得るとともに、コード、フォーム、ウェブページ、及び他のデータを、システム100のユーザ、システム100のデータベース(例えば、データベース130)、及びシステム100に関連する他の外部エンティティに提供し得る。ソフトウェアアプリケーションとデータベース130との間のインタラクションを取り扱うために、システム100はデータベースシステム110を含む。
【0018】
データベースシステム110は、様々な実施形態において、データ記憶、データ検索、及びデータ操作を含め、データベース130を管理するための様々な操作を実行する。従って、データベースシステム110は、データベース130とインタラクトすることを望む他のシステムにデータベースサービスを提供し得る。そのようなデータベースサービスは、データベース130のデータベーステーブル140のために維持管理されるデータにアクセスすること及びそれを記憶することを含み得る。一例として、アプリケーションサーバは、特定のデータベーステーブル140について特定のデータベースレコードがデータベース130に書き込まれることを指定するトランザクション120を含むデータベースシステム110にトランザクション要求115を発行し得る。
【0019】
トランザクション120は、様々な実施形態において、データベース130に格納されたコンテンツにアクセスする及び場合によりそれを変更するために実行されるべき1つ以上の操作/タスクを規定する作業単位である。トランザクション120は、データ操作言語(DML)操作122、データ定義言語(DDL)操作124、データ制御言語操作、及びトランザクション制御言語操作を含むものである複数の異なるタイプのデータベース操作を規定し得る。例えば、図示のように、トランザクション120AはDML操作122を規定する。DML操作122は、様々な実施形態において、データベーステーブル140に格納された行データ144にアクセスし、挿入し、変更し、及び/又は削除し得る操作である。DML操作122は、例えばSELECT、INSERT、UPDATE、DELETE、MERGEなどのSQLコマンドを含み得る。DDL操作124は、様々な実施形態において、データベーステーブル140のテーブル定義142を変更し得る操作である。DDL操作124は、例えばCREATE、ALTER、DROPなどのSQLコマンドを含み得る。トランザクション120は、様々な実施形態において、データベース操作(例えば、DML操作122)が実行されるべきデータベーステーブル140のバージョン125を指定する。以下にて更に説明するように、バージョン125は、データベーステーブル140のうちの、そのバージョンに関連付けられたトランザクション120がアクセスすることを許される対応部分を特定し得る。
【0020】
データベース130は、様々な実施形態において、その情報のアクセス、記憶、及び操作を可能にするように編成された情報の集合である。従って、データベース130は、データベースシステム110がデータベース130内の情報に対して操作(例えば、アクセスする、記憶するなど)を行うことを可能にする支援ソフトウェアを含み得る。データベース130は、単一のストレージ装置によって実装されてもよいし、あるいは、ネットワーク(例えば、ストレージ接続ネットワーク)上で共に接続され且つデータ喪失を防止するために冗長的に情報を記憶するように構成された複数のストレージ装置によって実装されてもよい。一部の実施形態において、データベース130は、複数のレベル(階層)を持つログ構造のマージツリー(log-structured merge-tree;LSMツリー)を用いて実装される。それらのレベルのうちの1つ以上が、オンディスク(on-disk)の記憶媒体で維持管理されるレベルに書き込まれるのに先立ってインメモリ(in-memory)バッファにキャッシュされるデータベースレコードを含み得る。これらのデータベースレコードは、データベーステーブル140内の行に対応することができ、行データ144に含められ得る。
【0021】
データベーステーブル140は、様々な実施形態において、複数の行及び列を持つ構造化されたフォーマットに編成されたデータ要素を含む情報の集合である。様々な実装において、列は、行が値を提供するデータベーステーブル140内のデータのサブセット又はフィールドを定義し得る。一部のケースで、データベーステーブル140は、複数のユーザ/テナントに関するデータを格納し得る。従って、そのデータベーステーブル140は、データのサブセットとしてテナントを定義する列を含むことができ、その下で、データベーステーブル140の各行がそのデータ行に対応するテナントを規定する。様々な実施形態において、データベーステーブル140に含まれる列は、テーブル定義142にて規定される。
【0022】
テーブル定義142は、様々な実施形態において、例えばデータベーステーブルの構造(例えば、列)及びデータベーストリガーなどの、データベーステーブル140に関連するメタデータを定義する情報の集合である。対応するデータベーステーブル140の列を規定するとき、テーブル定義142は、その列に関連付けられるバージョン125の範囲を規定し得る。従って、その範囲に入るバージョン125を持つトランザクション120は、その列及びそのデータへのアクセスを有することができるが、その範囲外のバージョン125を持つトランザクション120は、その列が存在することを知ることができないとし得る。従って、列は、データベーステーブル140の1つ以上のバージョン125では利用可能であるが、一部の後続バージョン125ではもう使われないようにされ得る。
【0023】
データベーストリガーは、様々な実施形態において、特定のデータベーステーブル140上で特定のイベントが行われることに応答して特定のアクションを実行するよう実行可能な一組のソフトウェアルーチンである。一例として、データベーストリガーは、DML操作122(例えば、INSERT)の実行に応答して実行し得る。そのデータベーストリガーは、DML操作122に基づいて別のデータベーステーブル140に属するデータを変更するかもしれない。一部のケースで、データベーストリガーは、テーブル定義142にて規定されるバージョン125に関連付けられ得る。従って、データベーストリガーは、トランザクション120のために操作を行われているデータベーステーブル140の特定のバージョン125に基づいて実行し得る。第1のバージョン125を持つトランザクション120は、同じデータベーステーブル140の第2のバージョン125を持つデータベーストリガーはトリガーしない。一部のケースでは、データベーステーブル140の形状がバージョン125に応じて異なり得るので(例えば、列が見えるかに起因して)、そのデータベーステーブルの各バージョン125が、適切なテーブル定義142にて規定された、それ自身の対応するデータベーストリガーのセットを有し得る。
【0024】
様々なケースにおいて、バージョン125をデータベーステーブル140に追加するとき、新たなバージョン125に関する1つ以上のデータベーストリガーを定義することが望ましいことがある。従って、データベースシステム110は、データベーストリガーを追加するトランザクション120が、他のトランザクションが同じデータベーステーブル140の異なるバージョンに影響を与える場合に、それら他のトランザクション120と同時に実行されることを可能にし得る。様々な実施形態において、2つのトランザクション120が異なるタイプのデータベース操作(例えば、DML対DDL)及び異なるバージョン125に関与する場合に、データベースシステム110は、それらトランザクションを同時に処理することができ、そうでない場合には、それら2つのトランザクション120は順に処理され得る。以下にて更に説明するように、様々なケースにおいて、データベースシステム110は、一組のトランザクション120を同時に処理することができるかを決定するためにロック機構を使用し得る。
【0025】
次に図2を参照するに、データベースシステム110及びデータベース130のブロック図が示されている。図示した実施形態は、アプリケーションサーバ200、データベースシステム110、及びデータベース130を含んでいる。更に図示するように、データベースシステム110は、バージョン125を有つとともにベースロック220及びプロキシロック230に関連付けられたトランザクション120を含む。また、図示のように、データベース130は、ベースデータベーステーブル140及びプロキシテーブル210を含む。一部の実施形態において、図示した実施形態は、図示とは異なるように実装されてもよい。一例として、アプリケーションサーバ200ではなく、例えばウェブサーバなどの異なるタイプのサーバがデータベースシステム110とインタラクトしてもよい。
【0026】
アプリケーションサーバ200は、様々な実施形態において、アプリケーションプログラムが走ることができるサーバ環境を提供するよう実行可能な一組のソフトウェアルーチンである。図示のように、アプリケーションサーバ200は、トランザクション要求115をデータベースシステム110に送信することによって、データベースシステム110とインタラクトし得る。例えば、ユーザ装置を介してアプリケーションサーバ200とインタフェースをとるユーザが、データベース130からのデータを要求し得る。従って、そのアプリケーションサーバ200は、要求されたデータをデータベース130から取り出すためのトランザクション120を規定するトランザクション要求115を発行し得る。トランザクション120を処理するため、データベースシステム110は、ベースデータベーステーブル140及びプロキシテーブル210とインタラクトし得る。
【0027】
プロキシテーブル210は、様々な実施形態において、ベースデータベーステーブル140の1つ以上のバージョン125に対応するロック可能なデータベースオブジェクトである。一部のケースで、プロキシテーブル210は、行データ144を持たずに、列及び/又はデータベーストリガーを規定しないテーブル定義142を持った、データベーステーブル140とすることができ、すなわち、プロキシテーブル210は、データベースシステム110によって使用されるロック機構の基準点として存在するデータベーステーブル140とすることができる。以下にて更に説明するように、トランザクション120を処理してデータベーステーブル140を操作するとき、データベースシステム110は、1)トランザクション120と同じバージョン125を持ち、且つ2)特定のデータベーステーブル140に対応した、プロキシテーブル210上でのプロキシロック230を取得し得る。データベースシステム110が同一バージョン125を持つ他のトランザクション120を処理しようとするとき、データベースシステム110は、その第1のトランザクション120がロックを保持している間、プロキシテーブル210上でのプロキシロック230を得ることができないことになる。従って、他のトランザクション120は、第1のトランザクション120がそのプロキシロック230を解除するまで、そのデータベーステーブル140上で操作を行うことができないことがある。
【0028】
データベースシステム110は、対応するデータベーステーブル140(及び/又はデータベース130のスキーマ)に変更が為されるときに、プロキシテーブル210を作成又は削除し得る。データベーステーブル140が最初に作成されるとき、様々な実施形態において、データベースシステム110は、データベーステーブル140用のプロキシテーブル210を作成する。データベーステーブル140が更なるバージョン125と関連付けられたものとなるとき、データベースシステム110は更なるプロキシテーブル210を作成することができ、例えば、データベースシステム110は、そのデータベーステーブルの新たなバージョンごとに新たなプロキシテーブル210を作成し得る。データベーステーブル140が削除されるとき、データベースシステム110は、そのデータベーステーブルに対応する全てのプロキシテーブル210を削除し得る。
【0029】
前に説明したように、様々な実施形態において、データベースシステム110は、トランザクション120を処理するときに、ベースロック220及びプロキシロック230という少なくとも2つのロックを獲得し得る。これらの2つのロックは、同じバージョン125に関連するトランザクション120が同時に処理されることを防止しながら、異なるバージョン125に関連するトランザクションが同時に処理されることを可能にし得る。
【0030】
ベースロック220は、様々な実施形態において、トランザクション120のためにデータベーステーブル140上で獲得されることができるロックである。様々なケースにおいて、ベースロック220は、“より強い”ロックと考え得るものであるプロキシロック230に対して“弱い”ロックであるとし得る。ロックの強さには様々な程度が存在することができ、より弱いロックは、よりいっそう同時のアクティビティを可能にし、より強いロックは、あまり同時でないアクティビティを可能にする。結果として、一部のケースで、最も弱いロックが完全に同時のアクセスを可能にし得る一方で、最も強いロックは排他的なアクセスを得ることができる(すなわち、最も強いロックがそのオブジェクト上で保持されている間は、そのロックの保持者のみが特定のオブジェクト(例えば、テーブル)に対してアクセス/変更を行うことができる)。ベースロック220は、対応するトランザクション120がそのデータベーステーブル上で動作している間にベースデータベーステーブル140が削除されないようにするために使用される弱め(プロキシロック230に対して)のロックとすることができ、そのような弱いロックは、ベースデータベーステーブル140上で動作するトランザクションの120の意図の表れでもあり得る。ベースロック220が弱めのロックとしてデータベーステーブル140上で獲得される場合、他のトランザクション120も、同じデータベーステーブル140上でベースロック220を獲得し得る。一部のケースで、ベースロック220は、他のトランザクションがデータベーステーブル140上で動作することを阻むいっそう強いロックであってもよい。強いベースロック220は、例えば、トランザクション120がバージョンになっていないケースで獲得され得る。様々な実施形態において、ベースロック220は、トランザクション120が完了した後又はデータベースシステム110によって押し返された後に、トランザクション120に関して解除され得る。ベースロック220をテーブルレベルでのロックとして説明しているが、ここで説明される技術は、他のレベル(例えば、データベースレベル、ファイルレベル、ページレベル、行レベルなど)に拡張されることができる。
【0031】
プロキシロック230は、様々な実施形態において、トランザクション120のためにプロキシテーブル210上で獲得されることができるロックである。様々なケースにおいて、プロキシロック230は、同じプロキシテーブル210上で他のトランザクション120がそれら自身のプロキシロック230を獲得することを阻む強いロックとして獲得され得る。プロキシロック230があるトランザクション120のために保持される間、データベースシステム110は、対応するデータベーステーブル140のうち同じバージョン125に関連付けられた部分に対してデータベース操作を実行することができる。データベーステーブル140の同じバージョン125上で動作することを望む他のトランザクション120は、別のトランザクション120によって保持されているプロキシロック230が解除されるまで延期され得る。様々な実施形態において、プロキシロック230は、トランザクションが完了した後又はデータベースシステム110によって押し返された後に、トランザクション120に関して解除され得る。
【0032】
次に図3を参照するに、データベースシステム110のブロック図が示されている。図示の実施形態において、データベースシステム110は、データベースサーバ300及びロックマネジャ310を含んでいる。また、図示のように、データベースサーバ300はトランザクション120を含み、ロックマネジャ310は、ベースロック220及びプロキシロック230を有するロック315を含む。一部の実施形態において、データベースシステム110は、図示とは異なるように実装されてもよい。一例として、データベースシステム110はロックマネジャ310を含まず、代わりに、ロックマネジャ310は外部コンポーネントであってもよい。
【0033】
データベースサーバ300は、様々な実施形態において、データ分析、データ記憶、データ検索、及びデータ操作を含め、データベース130を管理するために様々な処理を行うよう実行可能な一組のソフトウェアルーチンである。データベースサーバ300は、アプリケーションサーバ200及びシステム100の他のエンティティ(例えば、他のサーバ)からトランザクション要求115を受信し得る。これらのトランザクション要求内で特定されるトランザクション120を処理するために、データベースサーバ300は、ロックマネジャ310と通信して1つ以上のロック315を獲得し得る。一例として、データベースサーバ300は、バージョン125を規定するトランザクション120に対してベースロック220及びプロキシロック230を取得し得る。
【0034】
ロックマネジャ310は、様々な実施形態において、1つ以上のデータベースサーバ300のためにロック315を管理するよう実行可能な一組のソフトウェアルーチンである。データベースサーバ300がトランザクション120にて規定される1つ以上のデータベース操作を実行することを望むとき、データベースサーバはロックマネジャ310と通信してロック315(例えば、ベースロック220及びプロキシロック230)を取得し得る。ロックマネジャ310は、特定のトランザクション120にロック315を割り当てることができるかを判定し得る。例えば、ロックマネジャ310は、プロキシロック230が別のトランザクション120に対して既に割り当てられているかを割り出し得る。プロキシロック230が割り当てられている場合、特定のトランザクション120に対して1つ割り当てることができないが、プロキシロック230が割り当てられていない場合には、1つ割り当てることができる。
【0035】
次に図4を参照するに、ロックマネジャ310のブロック図が示されている。図示の実施形態において、ロックマネジャ310は、ロック315、カタログテーブル410、及びコンフリクトエンジン420を含んでいる。更に図示するように、カタログテーブル410は、プロキシテーブル情報412及びベーステーブル情報414を含む。一部の実施形態において、ロックマネジャ310は、図示とは異なるように実装されてもよい。一例として、ロックマネジャ310は、複数のカタログテーブル410を含んでいてもよい。
【0036】
カタログテーブル410は、様々な実施形態において、ベースデータベーステーブル140、プロキシテーブル210、及びこれらのテーブル間の関係を特定する情報の集合である。プロキシテーブル情報412は、様々な実施形態において、割り当てられているプロキシテーブル210を規定するとともに、それらのプロキシテーブルの各々について、対応するデータベーステーブル140を、対応するバージョン125とともに規定する。ベーステーブル情報414は、様々な実施形態において、割り当てられているデータベーステーブル140を規定する。カタログテーブル410にて維持管理される情報は、ロックコンフリクトが存在するかを判定する際にコンフリクトエンジン420を支援するために、コンフリクトエンジン420に渡され得る。
【0037】
コンフリクトエンジン420は、様々な実施形態において、ロック315を割り当てるよう、及びロック315を割り当てようとするときにロックコンフリクトが存在するかを判定するよう実行可能な一組のソフトウェアルーチンである。トランザクション120のために特定のベースデータベーステーブル140上でのベースロック220を割り当てる要求を受信したことに応答して、コンフリクトエンジン420は、その特定のベースデータベーステーブル140上でベースロック220が既に割り当てられているかを判定し得る。様々なケースにおいて、コンフリクトエンジン420は、ベースロック220が既に割り当てられているかを判定するためにロック315を検索し得る。特定のデータベーステーブル140に対してベースロック220が割り当てられていない場合又は弱いベースロック220のみが割り当てられている場合、コンフリクトエンジン420は、トランザクション120のためにベースロック220を割り当てることができ、それ以外の場合には、コンフリクトエンジン420は、特定の現在のベースロック220が解除されるまでベースロック220を割り当てることができないことを指し示し得る。
【0038】
トランザクション120のために特定のプロキシテーブル210上でのプロキシロック230を割り当てる要求を受信したことに応答して、コンフリクトエンジン420は、その特定のプロキシテーブル210上でプロキシロック230が既に割り当てられているかを判定し得る。様々なケースにおいて、コンフリクトエンジン420は、プロキシロック230が既に割り当てられているかを判定するためにロック315を検索し得る。特定のプロキシテーブル210上でプロキシロック230が割り当てられていない場合、コンフリクトエンジン420は、トランザクション120のためにプロキシロック230を割り当てることができ、それ以外の場合には、コンフリクトエンジン420は、特定の現在のプロキシロック230が解除されるまでプロキシロック230を割り当てることができないことを指し示し得る。
【0039】
次に図5を参照するに、ロックコンフリクトテーブル500のブロック図が示されている。図示の実施形態において、ロックコンフリクトテーブル500は、4つのボックス、すなわち、2つのDML操作122に対応するボックス501、DML操作122とDDL操作124に対応するボックス502、DML操作122とDDL操作124に対応するボックス503、及び2つのDDL操作124に対応するボックス504を含んでいる。ボックス501及び504は、バージョン125とは無関係に発生するロックコンフリクトを指し示すために縞模様で示されている。
【0040】
図示のように、2つのDML操作122は互いに衝突し、2つのDDL操作124も互いに衝突する。様々なケースにおいて、これらのコンフリクトは、これらの操作に関連付けられる特定のバージョン125とは無関係に発生し得る。従って、一部のケースで、各々が同一タイプのデータベース操作(例えば、DML操作122又はDDL操作124)を規定する2つのトランザクション120をデータベースシステム110が受信する場合、データベースシステム110は、これらのトランザクションが相異なるバージョン125に関連付けられている場合であっても、これらのトランザクションを同時に処理することができない。ボックス502及び503によって示すように、DML操作122及びDDL操作124は衝突せず、それらは、バージョン125が考慮される場合に衝突することがある。各々が異なるタイプのデータベース操作を規定し且つ異なるバージョン125に関連付けられた2つのトランザクション120をデータベースシステム110が受信する場合、データベースシステム110は、それらのトランザクションを同時に処理し得る。
【0041】
次に図6を参照するに、方法600のフロー図が示されている。方法600は、トランザクション(例えば、トランザクション120)を処理するためにコンピュータシステム(例えば、データベースシステム110)によって実行される方法の一実施形態である。一部の実施形態において、方法600は、図示よりも多数又は少数のステップを含んでいてもよい。例えば、コンピュータシステムは、特定の条件が満たされると実行されるデータベーストリガーを追加するように、データベーステーブル(例えば、データベーステーブル140)の定義(例えば、テーブル定義142)を変更し得る。
【0042】
方法600は、複数のバージョン(例えば、バージョン125)を有するデータベーステーブルをコンピュータシステムが維持管理しているステップ610にて開始する。様々な実施形態において、バージョンの各々が、データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分(例えば、フィールド)を特定する。コンピュータシステムは、データベーステーブルの複数のバージョンの各々についてプロキシテーブル(例えば、プロキシテーブル210)を維持管理し得る。プロキシテーブルは、所与のトランザクション(例えば、トランザクション120)に対してプロキシテーブル上でプロキシロック(例えば、プロキシロック230)が獲得されることを可能にし得る。所与のトランザクションに対してプロキシロックが保持されている間、コンピュータシステムは、プロキシテーブルに対応するバージョンに関連付けられた別のトランザクションをデータベーステーブル上で処理することを阻まれ得る。
【0043】
データベーステーブルが新たなバージョンに関連付けられていると判定した場合、コンピュータシステムは、データベーステーブルの新たなバージョンに対する新たなプロキシテーブルを作成し得る。データベーステーブルが削除されることに応答して、コンピュータシステムは、データベーステーブルの複数のバージョンに対して維持管理されている各プロキシテーブルを削除し得る。
【0044】
ステップ620にて、コンピュータシステムは、データベーステーブルの定義を変更する第1のトランザクション(例えば、トランザクション120)を実行するための第1の要求(例えば、トランザクション要求115)を受信する。一部の例において、第1のトランザクションは、データベーステーブルの定義を変更するためのデータ定義言語(DDL)操作(例えば、DDL操作124)を規定し得る。
【0045】
ステップ630にて、コンピュータシステムは、データベーステーブルに格納されているデータを変更する第2のトランザクション(例えば、トランザクション120)を実行するための第2の要求(例えば、トランザクション要求115)を受信する。一部の例において、第2のトランザクションは、データベーステーブルに格納されたデータを変更するためのデータ操作言語(DML)操作(例えば、DML操作122)を規定し得る。
【0046】
ステップ640にて、第1及び第2のトランザクションが複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、コンピュータシステムは、第1及び第2のトランザクションを同時に処理する。一部のケースで、コンピュータシステムは、データベーステーブルの定義を変更する第2のDDL操作を規定する第3のトランザクションを実行するための第3の要求を受信し得る。コンピュータシステムは、第1及び第3のトランザクションが各々DDL操作を規定していることに基づいて、第1及び第3のトランザクションを順次に処理し得る。第1及び第3のトランザクションは、複数のバージョンのうちの相異なるバージョンに関連付けられているとし得る。一部のケースで、コンピュータシステムは、データベーステーブルに格納されたデータを変更する第2のDML操作を規定する第3のトランザクションを実行するための第3の要求を受信し得る。コンピュータシステムは、第1及び第3のトランザクションが各々DML操作を規定していることに基づいて、第1及び第3のトランザクションを順次に処理し得る。第1及び第3のトランザクションは、複数のバージョンのうちの相異なるバージョンに関連付けられているとし得る。
【0047】
一部の実施形態において、コンピュータシステムは、第1のトランザクションに対して、データベーステーブル上での第1のロック(例えば、ベースロック220)と、第1のトランザクションに関連付けられているバージョンに対応する特定のプロキシテーブル上での第2のロック(例えば、プロキシロック230)とを獲得する。第1のロックは、当該第1のロックが第1のトランザクションに対して保持されている間にコンピュータシステムが第2のトランザクションを処理して、データベーステーブルに格納されたデータを変更することを許し得る。第2のロックは、当該第2のロックが第1のトランザクションに対して保持されている間、第1のトランザクションのバージョンに関連付けられたデータベーステーブルに対する別のトランザクションをコンピュータシステムが処理することを阻み得る。一部のケースでは、第1のロックが第2のロックの前に獲得され、他のケースでは、第2のロックが第1のロックの前に獲得される。
【0048】
次に図7を参照するに、方法700のフロー図が示されている。方法700は、トランザクション(例えば、トランザクション120)を処理するためにコンピュータシステム(例えば、データベースシステム110)によって実行される方法の一実施形態である。方法700は、非一時的なコンピュータ読み取り可能媒体に格納された一組のプログラム命令を実行することによって行われ得る。一部の実施形態において、方法700は、図示よりも多数又は少数のステップを含んでいてもよい。例えば、コンピュータシステムは、特定の条件が満たされると(例えば、データベーステーブルにデータが挿入されることに応答して)実行されるデータベーストリガーを追加するように、データベーステーブル(例えば、データベーステーブル140)の定義(例えば、テーブル定義142)を変更し得る。
【0049】
方法700は、複数のバージョン(例えば、バージョン125)を有するデータベーステーブル(例えば、データベーステーブル140)をコンピュータシステムが維持管理しているステップ710にて開始する。様々なケースにおいて、バージョンの各々が、データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分を特定し得る。例えば、特定のバージョンに関連付けられたデータベーステーブルの一組のフィールドが、同じ特定のバージョンを持つトランザクションにアクセス可能にされ得る。
【0050】
ステップ720にて、コンピュータシステムは、データベーステーブルの定義(例えば、テーブル定義142)を変更するデータ定義言語(DDL)操作(例えば、DDL操作124)を特定する第1のトランザクションを実行するための第1の要求(例えば、トランザクション要求115)を受信する。第1のトランザクションは、複数のバージョンのうちの第1のバージョンと関連付けられているとし得る。
【0051】
ステップ730にて、コンピュータシステムは、データベーステーブルに格納されているデータ(例えば、行データ144)を変更するデータ操作言語(DML)操作(例えば、DML操作122)を特定する第2のトランザクションを実行するための第2の要求(例えば、トランザクション要求115)を受信する。第2のトランザクションは、複数のバージョンのうちの第2の異なるバージョン(第1のバージョンと異なる)と関連付けられているとし得る。
【0052】
様々な実施形態において、コンピュータシステムは、複数のバージョンにそれぞれ対応する複数のロック可能オブジェクト(例えば、プロキシテーブル210)を維持管理する。所与のロック可能オブジェクトが、所与のトランザクションに対して該ロック可能オブジェクト上でロック(例えば、プロキシロック230)を獲得することを可能にし得る。様々なケースにおいて、所与のトランザクションに対してロックが保持されている間、コンピュータシステムは、所与のロック可能オブジェクトに対応するバージョンに関連付けられたデータベーステーブルに関与する別のトランザクションを処理することを阻まれ得る。第1のトランザクションを処理する際に、コンピュータシステムは、第1のトランザクションに対して、第1のバージョンに対応する複数のロック可能オブジェクトのうちの第1の特定の1つ上で第1のロック(例えば、プロキシロック230)を獲得し得る。第2のトランザクションを処理する際に、コンピュータシステムは、第2のトランザクションに対して、第2のバージョンに対応する複数のロック可能オブジェクトのうちの第2の特定の1つ上で第2のロック(例えば、プロキシロック230)を獲得し得る。
【0053】
ステップ740にて、第1及び第2のトランザクションが複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、コンピュータシステムは、第1及び第2のトランザクションを同時に処理する。第1及び第2のトランザクションの同時処理は、第1及び第2のトランザクションが相異なるタイプのデータベース操作と関連付けられている(例えば、一方がDML操作122と関連付けられ、他方がDDL操作124と関連付けられている)と更に判定したことに応答して実行され得る。
【0054】
第1及び第2のトランザクションの処理を完了する前に、コンピュータシステムが、第1のバージョンに関連付けられている第3のトランザクションを実行するための第3の要求を受信することがある。コンピュータシステムは、第1のロックが解除された後に、第3のトランザクションを処理し得る。
【0055】
次に図8を参照するに、方法800のフロー図が示されている。方法800は、トランザクション(例えば、トランザクション120)を処理するためにコンピュータシステム(例えば、データベースシステム110)によって実行される方法の一実施形態である。一部の実施形態において、方法800は、図示よりも多数又は少数のステップを含んでいてもよい。例えば、コンピュータシステムは、特定の条件が満たされると(例えば、データベーステーブルにデータが挿入されることに応答して)実行されるデータベーストリガーを追加するように、データベーステーブル(例えば、データベーステーブル140)の定義(例えば、テーブル定義142)を変更し得る。
【0056】
方法800は、複数のバージョン(例えば、バージョン125)を有するベーステーブル(例えば、データベーステーブル140)をコンピュータシステムが維持管理しているステップ810にて開始する。バージョンの各々が、ベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分(例えば、フィールド)を特定し得る。
【0057】
ステップ820にて、コンピュータシステムは、複数のバージョンの各々についてプロキシテーブル(例えば、プロキシテーブル210)を維持管理する。
【0058】
ステップ830にて、コンピュータシステムは、ベーステーブルの第1のバージョンに関与する第1のトランザクション(例えば、トランザクション120)を実行するための要求(例えば、トランザクション要求115)を受信する。第1のバージョンは、複数のバージョンのうちの第2のバージョンによって識別されないベーステーブルの1つ以上のフィールドを識別し得る。
【0059】
ステップ840にて、コンピュータシステムは、第1のトランザクションを処理する。処理の一部として、ステップ842にて、コンピュータシステムは、第1のトランザクションに対して、ベーステーブル上での第1のロック(例えば、ベースロック220)を獲得する。第1のロックは、第1のトランザクションに対して当該第1のロックが保持されている間に、第1のバージョンとは異なるバージョンと関連付けられたベーステーブルの部分を操作するための別のトランザクションをコンピュータシステムが処理することを許し得る。処理の一部として、ステップ844にて、コンピュータシステムは、第1のトランザクションに対して、第1のバージョンに対応する特定のプロキシテーブル上での第2のロック(例えば、プロキシロック230)を獲得する。第2のロックは、第1のトランザクションに対して当該第2のロックが保持されている間に、第1のバージョンと関連付けられたベーステーブルの部分を操作するための別のトランザクションをコンピュータシステムが処理することを阻み得る。
【0060】
一部のケースで、コンピュータシステムは、ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求(例えば、トランザクション要求115)を受信する。第1及び第2のバージョンは相異なるバージョンとし得る。第1及び第2のトランザクションが各々異なるタイプのデータベース操作に対応している(例えば、一方がDML操作122に対応し得るとともに、他方がDDL操作124に対応し得る)と判定したことに応答して、コンピュータシステムは、第1及び第2のトランザクションを同時に処理し得る。同時処理の一部として、コンピュータシステムは、第2のトランザクションに対して、ベーステーブル上での第3のロック(例えば、ベースロック220)と、第2のバージョンに対応する別の特定のプロキシテーブル上での第4のロック(例えば、プロキシロック230)とを獲得し得る。第4のロックは、第2のトランザクションに対して当該第4のロックが保持されている間に、第2のバージョンと関連付けられたベーステーブルの部分を操作するための別のトランザクションをコンピュータシステムが処理することを阻み得る。
【0061】
一部のケースで、コンピュータシステムは、ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求を受信する。第1及び第2のバージョンは相異なるバージョンとし得る。第1及び第2のトランザクションが同一タイプのデータベース操作に関与していると判定したことに応答して、コンピュータシステムは、第1のトランザクションの処理を完了した後に第2のトランザクションを処理し得る。
【0062】
一部のケースで、コンピュータシステムは、ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求を受信する。第1及び第2のバージョンは同一バージョンとし得る。第1及び第2のバージョンが同一とあると判定したことに応答して、コンピュータシステムは、第1のトランザクションの処理を完了した後に第2のトランザクションを処理し得る。
【0063】
例示的なコンピュータシステム
次に図9を参照するに、データベースシステム110及び/又はデータベース130を実装し得るものである例示的なコンピュータシステム900のブロック図が示されている。コンピュータシステム900は、インターコネクト960(例えば、システムバス)を介してシステムメモリ920及び(1つ以上の)I/Oインタフェース940に結合されたプロセッササブシステム980を含んでいる。(1つ以上の)I/Oインタフェース940は、1つ以上のI/O装置950に結合される。コンピュータシステム900は、以下に限られないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、例えば携帯電話、音楽プレーヤ、若しくは携帯情報端末(PDA)などの消費者装置を含め、種々のタイプの装置のうちのいずれかとし得る。図9には便宜上、単一のコンピュータシステム900が示されているが、システム900はまた、ともに動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0064】
プロセッササブシステム980は、1つ以上のプロセッサ又は処理ユニットを含み得る。コンピュータシステム900の様々な実施形態において、プロセッササブシステム980の複数のインスタンスがインターコネクト960に結合されてもよい。様々な実施形態において、プロセッササブシステム980(又は980内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含み得る。
【0065】
システムメモリ920は、ここに記載された様々な動作をシステム980に実行させるようにプロセッササブシステム980によって実行可能なプログラム命令を格納するのに使用可能である。システムメモリ920は、例えばハードディスクストレージ、フロッピーディスク(登録商標)ストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAMなど)、読み出し専用メモリ(PROM、EEPROMなど)などの、様々な物理的な記憶媒体を用いて実装され得る。コンピュータシステム900内のメモリは、例えばメモリ920などの一次ストレージに限られない。むしろ、コンピュータシステム900は、例えばプロセッササブシステム980内のキャッシュメモリ及びI/O装置950上の二次ストレージ(例えば、ハードドライブ、ストレージアレイなど)などの、他の形態のストレージも含み得る。一部の実施形態において、それらの他の形態のストレージも、プロセッササブシステム980によって実行可能なプログラム命令を格納し得る。一部の実施形態において、実行されるときにアプリケーションサーバ200、データベースサーバ300、及びロックマネジャ310を実装するプログラム命令は、システムメモリ920内に含められ/格納され得る。
【0066】
I/Oインタフェース940は、様々な実施形態によれば、他の装置に結合されてそれと通信するように構成される種々のタイプのインタフェースのうちのいずれかとし得る。一実施形態において、I/Oインタフェース940は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップ(例えば、サウスブリッジ)である。I/Oインタフェース940は、1つ以上の対応するバス又は他のインタフェースを介して1つ以上のI/O装置950に結合され得る。I/O装置950の例は、ストレージ装置(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、又はそれらに関連するコントローラ)、ネットワークインタフェース装置(例えば、ローカルエリアネットワーク又はワイドエリアネットワークへの)、又は他の装置(例えば、グラフィックス、ユーザインタフェース装置など)を含む。一実施形態において、コンピュータシステム900は、ネットワークインタフェース装置950(例えば、Wi-Fi、Bluetooth(登録商標)、Ethernet(登録商標)などを介して通信するように構成される)を介してネットワークに結合される。
【0067】
本出願に係る事項の実現は、以下に限られないが、次の例1-20を含む。
1. データベースシステムにより、複数のバージョンを有するデータベーステーブルを維持管理し、前記バージョンの各々が、前記データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分、を特定し、
前記データベースシステムにより、前記データベーステーブルの定義を変更する第1のトランザクションを実行するための第1の要求を受信し、
前記データベースシステムにより、前記データベーステーブルに格納されたデータを変更する第2のトランザクションを実行するための第2の要求を受信し、
前記第1及び第2のトランザクションが前記複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、前記データベースシステムが、前記第1及び第2のトランザクションを同時に処理する、
ことを有する方法。
2. 前記データベースシステムにより、前記データベーステーブルの前記複数のバージョンの各々について、プロキシテーブルを維持管理し、該プロキシテーブルは、所与のトランザクションに対して該プロキシテーブル上でプロキシロックを獲得することを可能にし、前記所与のトランザクションに対して前記プロキシロックが保持されている間、前記データベースシステムは、該プロキシテーブルに対応するバージョンに関連付けられた前記データベーステーブルに対する別のトランザクションを処理することができない、
ことを更に有する例1の方法。
3. 前記データベーステーブルが新たなバージョンに関連付けられていると判定したことに応答して、前記データベースシステムが、前記データベーステーブルの前記新たなバージョン用の新たなプロキシテーブルを作成する、
ことを更に有する例2の方法。
4. 前記データベーステーブルが削除されることに応答して、前記データベースシステムが、前記データベーステーブルの前記複数のバージョンについて維持管理される各プロキシテーブルを削除する、
ことを更に有する例2の方法。
5. 前記データベースシステムにより、前記第1のトランザクションに対して、
前記データベーステーブル上での第1のロックであり、前記第1のトランザクションに対して保持される当該第1のロックは、前記データベースシステムが前記第2のトランザクションを処理して前記データベーステーブルに格納されたデータを変更することを許す、第1のロックと、
前記第1のトランザクションに関連付けられているバージョンに対応する特定のプロキシテーブル上での第2のロックであり、前記第1のトランザクションに対して保持される当該第2のロックは、前記第1のトランザクションのバージョンに関連付けられた前記データベーステーブルに対する別のトランザクションを前記データベースシステムが処理することを阻む、第2のロックと、
を獲得する、
ことを更に有する例2の方法。
6. 前記第1のロックが前記第2のロックの前に獲得される、例5の方法。
7. 前記第2のロックが前記第1のロックの前に獲得される、例5の方法。
8. 前記第1のトランザクションは、前記データベーステーブルの前記定義を変更するデータ定義言語(DDL)処理を規定しており、当該方法は更に、
前記データベースシステムにより、前記データベーステーブルの前記定義を変更する第2のDDL操作を規定する第3のトランザクションを実行するための第3の要求を受信し、
前記第1及び第3のトランザクションが各々それぞれのDDL操作を規定していることに基づいて、前記データベースシステムにより、前記第1及び第3のトランザクションを順次に処理し、前記第1及び第3のトランザクションは、前記複数のバージョンのうちの相異なるバージョンに関連付けられている、
ことを有する、例1の方法。
9. 前記第2のトランザクションは、前記データベーステーブルに格納されたデータを変更するデータ操作言語(DML)操作を規定しており、当該方法は更に、
前記データベースシステムにより、前記データベーステーブルに格納されたデータを変更する第2のDML操作を規定する第3のトランザクションを実行するための第3の要求を受信し、
前記第1及び第3のトランザクションが各々それぞれのDML操作を規定していることに基づいて、前記データベースシステムにより、前記第1及び第3のトランザクションを順次に処理し、前記第1及び第3のトランザクションは、前記複数のバージョンのうちの相異なるバージョンに関連付けられている、
ことを有する、例1の方法。
10. 前記データベーステーブルの前記定義を変更することは、特定の条件が満たされると実行されるデータベーストリガーを追加することを含む、例1の方法。
11. プログラム命令を格納したコンピュータ読み取り可能媒体であって、前記プログラム命令は、コンピュータシステムに、
複数のバージョンを有するデータベーステーブルを維持管理し、前記バージョンの各々が、前記データベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分、を特定し、
前記データベーステーブルの定義を変更するデータ定義言語(DDL)操作を特定する第1のトランザクションを実行するための第1の要求を受信し、
前記データベーステーブルに格納されたデータを変更するデータ操作言語(DML)操作を特定する第2のトランザクションを実行するための第2の要求を受信し、
前記第1及び第2のトランザクションが前記複数のバージョンのうちの相異なるバージョンに関連付けられていると判定したことに応答して、前記第1及び第2のトランザクションを同時に処理する、
ことを有する動作を実行させることができる、媒体。
12. 前記動作は更に、
前記複数のバージョンにそれぞれ対応する複数のロック可能オブジェクトを維持管理し、所与のロック可能オブジェクトが、所与のトランザクションに対して該ロック可能オブジェクト上でロックを獲得することを可能にし、前記所与のトランザクションに対して前記ロックが保持されている間、前記コンピュータシステムは、前記所与のロック可能オブジェクトに対応するバージョンに関連付けられた前記データベーステーブルに関与する別のトランザクションを処理することができない、
ことを有する、例11の媒体。
13. 前記第1のトランザクションは、前記複数のバージョンのうちの第1のバージョンに関連付けられ、前記第2のトランザクションは、前記複数のバージョンのうちの第2の、異なる、バージョンに関連付けられており、前記動作は更に、
前記第1のトランザクションに対して、前記第1のバージョンに対応する前記複数のロック可能オブジェクトのうちの第1の特定の1つ上で第1のロックを獲得し、
前記第2のトランザクションに対して、前記第2のバージョンに対応する前記複数のロック可能オブジェクトのうちの第2の特定の1つ上で第2のロックを獲得する、
ことを有する、例12の媒体。
14. 前記動作は更に、
前記第1及び第2のトランザクションの処理を完了する前に、前記第1のバージョンに関連付けられている第3のトランザクションを実行するための第3の要求を受信し、
前記第1のバージョンに対応する前記第1のロックが解除された後に、前記第3のトランザクションを処理する、
ことを有する、例13の媒体。
15. 前記第1及び第2のトランザクションの同時処理は、前記第1及び第2のトランザクションが相異なるタイプのデータベース操作と関連付けられていると判定したことに応答して実行される、例11の媒体。
16. データベースシステムにより、複数のバージョンを有するベーステーブルを維持管理し、前記バージョンの各々が、前記ベーステーブルのうちの、該バージョンに関連付けられたトランザクションがアクセスすることを許される対応部分、を特定し、
前記データベースシステムにより、前記データベーステーブルの前記複数のバージョンの各々について、プロキシテーブルを維持管理し、
前記データベースシステムにより、前記ベーステーブルの第1のバージョンに関与する第1のトランザクションを実行するための要求を受信し、
前記データベースシステムにより、前記第1のトランザクションを処理し、当該処理は、前記第1のトランザクションに対して、
前記ベーステーブル上での第1のロックであり、当該第1のロックは、前記第1のトランザクションに対して当該第1のロックが保持されている間に、前記第1のバージョンとは異なるバージョンと関連付けられた前記ベーステーブルの部分を操作するための別のトランザクションを前記データベースシステムが処理することを可能にする、第1のロックと、
前記第1のバージョンに対応する特定のプロキシテーブル上での第2のロックであり、当該第2のロックは、前記第1のトランザクションに対して当該第2のロックが保持されている間に、前記第1のバージョンと関連付けられた前記ベーステーブルの部分を操作するための別のトランザクションを前記データベースシステムが処理することを阻む、第2のロックと、
を獲得する、
ことを有する方法。
17. 前記データベースシステムにより、前記ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求を受信し、前記第1及び第2のバージョンは相異なるバージョンであり、
前記第1及び第2のトランザクションが各々、2つのタイプのデータベース操作のうち異なるタイプに対応していると判定したことに応答して、前記データベースシステムが、前記第1及び第2のトランザクションを同時に処理し、前記2つのタイプのデータベース操作は、データ操作言語(DML)操作タイプ及びデータ定義言語(DDL)操作タイプを含み、前記同時に処理することは、前記第2のトランザクションに対して、
前記ベーステーブル上での第3のロックと、
前記第2のバージョンに対応する別の特定のプロキシテーブル上での第4のロックであり、当該第4のロックは、前記第2のトランザクションに対して当該第4のロックが保持されている間に、前記第2のバージョンと関連付けられた前記ベーステーブルの部分を操作するための別のトランザクションを前記データベースシステムが処理することを阻む、第4のロックと、
を獲得することを含む、
ことを更に有する例16の方法。
18. 前記データベースシステムにより、前記ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求を受信し、前記第1及び第2のバージョンは相異なるバージョンであり、
前記第1及び第2のトランザクションが同一タイプのデータベース操作に関与していると判定したことに応答して、前記データベースシステムが、前記第1のトランザクションの処理を完了した後に、前記第2のトランザクションを処理する、
ことを更に有する例16の方法。
19. 前記データベースシステムにより、前記ベーステーブルの第2のバージョンに関与する第2のトランザクションを実行するための第2の要求を受信し、前記第1及び第2のバージョンは同一バージョンであり、
前記第1及び第2のバージョンが同一とあると判定したことに応答して、前記データベースシステムが、前記第1のトランザクションの処理を完了した後に、前記第2のトランザクションを処理する、
ことを更に有する例16の方法。
20. 前記第1のバージョンは、前記複数のバージョンのうちの第2のバージョンによって識別されない前記ベーステーブルの1つ以上のフィールドを識別する、例16の方法。
【0068】
特定の実施形態を上述したが、これらの実施形態は、特定の特徴に関して単一の実施形態のみが記載されている場合であっても、本開示の範囲を限定することを意図したものではない。本開示にて提供される特徴の例は、別段の断りがない限り、限定的ではなく例示的であることを意図している。上での説明は、この開示の恩恵を受けた当業者に明らかになるような代替、変更、及び均等なものに及ぶことを意図している。
【0069】
本開示の範囲は、ここで扱われた問題のいずれか又は全てを軽減するか否かにかかわらず、(明示的に又は暗示的に)ここに開示されたいずれかの特徴若しくは複数の特徴の組み合わせ、又はそれらを一般化したものを含む。従って、そのような特徴の組み合わせに対して、この出願(又はその優先権を主張する出願)の手続中に新たなクレームが策定され得る。特に、添付の特許請求の範囲を参照して、添付の請求項に列記された特定の組み合わせだけでなく、任意の適切なやり方で、従属請求項からの特徴が独立請求項の特徴と組み合わされてもよく、また、それぞれの独立請求項からの特徴が組み合わされてもよい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
【国際調査報告】