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

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

▶ エスアーペー エスエーの特許一覧

特開2024-66421ストリームベースのトランザクション処理
<>
  • 特開-ストリームベースのトランザクション処理 図1
  • 特開-ストリームベースのトランザクション処理 図2
  • 特開-ストリームベースのトランザクション処理 図3
  • 特開-ストリームベースのトランザクション処理 図4
  • 特開-ストリームベースのトランザクション処理 図5
  • 特開-ストリームベースのトランザクション処理 図6
  • 特開-ストリームベースのトランザクション処理 図7
  • 特開-ストリームベースのトランザクション処理 図8
  • 特開-ストリームベースのトランザクション処理 図9
  • 特開-ストリームベースのトランザクション処理 図10
  • 特開-ストリームベースのトランザクション処理 図11
  • 特開-ストリームベースのトランザクション処理 図12
  • 特開-ストリームベースのトランザクション処理 図13
  • 特開-ストリームベースのトランザクション処理 図14
  • 特開-ストリームベースのトランザクション処理 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024066421
(43)【公開日】2024-05-15
(54)【発明の名称】ストリームベースのトランザクション処理
(51)【国際特許分類】
   G06F 16/2452 20190101AFI20240508BHJP
   G06F 9/46 20060101ALI20240508BHJP
【FI】
G06F16/2452
G06F9/46 420A
G06F9/46 430
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023102651
(22)【出願日】2023-06-22
(31)【優先権主張番号】18/051,404
(32)【優先日】2022-10-31
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】300015447
【氏名又は名称】エスアーペー エスエー
【住所又は居所原語表記】Dietmar-Hopp-Allee 16, 69190 Walldorf, Germany
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ノルマン・マイ
(72)【発明者】
【氏名】ティエモ・バン
(72)【発明者】
【氏名】カルステン・ビニング
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175HA04
5B175KA12
(57)【要約】
【課題】サーバレスデータベース管理システムのためのトランザクション処理プロトコルを提供すること。
【解決手段】サーバレスデータベース管理システムのためのトランザクション処理プロトコルは、実行時にトランザクションタイプのアクセスパターンおよびトランザクションのイベントの適切な順序の分析を通して整合した直列化可能実行を保証するためにトランザクションスケジューラを使用できる。各々のトランザクションのタイプに対してトランザクショントポロジが決定され、そしてこれらは合成されて直列化グラフを生成するために使用される。直列化グラフ内のサイクルが特定され、そしてサイクルを区切ってよい区切りトランザクションタイプが決定される。トランザクション要求が受信されると、区切るトランザクションのタイプが現在のエポックに最後のトランザクションとしてスケジュールされ、そして区切りトランザクションタイプを有しない後のトランザクションが次のエポックにおいて実行するようにスケジュールされる。
【選択図】図2
【特許請求の範囲】
【請求項1】
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合され、かつ前記1つまたは複数のプロセッサによって実行可能な命令のセットを含むコンピュータプログラムコードを記憶した1つまたは複数の機械可読媒体と
を備え、前記命令が、
データベース上で実行可能な複数のトランザクションのタイプを決定し、各々のトランザクションのタイプが、前記データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含み、
前記複数のトランザクションのタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定し、特定のトランザクションのタイプに対する前記トランザクショントポロジが、前記特定のトランザクションのタイプによってアクセスされる前記データベースの特定のテーブルを表す1つまたは複数のノードおよび前記特定のトランザクションのタイプに対するデータ依存性を示す前記1つまたは複数のノード間の有向エッジを含み、
各々のトランザクションのタイプに対する前記トランザクショントポロジを合成トポロジへ合成し、
前記合成トポロジを表す直列化グラフを生成し、前記直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよび前記トランザクションによって前記データベースの特定のテーブルにアクセスする前後順序を示す前記ノード間の有向エッジを含み、
特定のノードから始まる有向エッジの集合が前記特定のノードに向けて戻ってサイクルを形成するという判定に基づいて前記直列化グラフ内の1つまたは複数のサイクルを特定し、
前記1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定し、特定のサイクルに対する対応する区切りトランザクションタイプが、前記対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき前記特定のサイクルを区切り、
データベース上でトランザクションのストリームを実行する要求を受信し、前記トランザクションのストリーム内の各々のトランザクションが、前記複数のトランザクションのタイプの1つである対応するタイプを有し、
前記現在のエポックに前記区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、前記現在のエポックに最後のトランザクションとして前記区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに前記区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、前記トランザクションのストリームを実行し、前記区切りトランザクションタイプを有する前記トランザクションが、前記現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ前記次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、ように実行可能である、
コンピュータシステム。
【請求項2】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記複数のトランザクションのタイプの各々に対するツームストントランザクションをスケジュールすることを含み、前記ツームストントランザクションの後にスケジュールされるトランザクションが、前記次のエポックに対してスケジュールされ、そして前記複数のトランザクションのタイプの各々に対する前記ツームストントランザクションが実行されるまで実行されない、請求項1に記載のコンピュータシステム。
【請求項3】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記区切りトランザクションタイプを有しないトランザクションに対するトランザクションスケジューラに前記次のエポックを示すマルチキャストメッセージを送ることを含む、請求項1に記載のコンピュータシステム。
【請求項4】
前記区切りトランザクションタイプを有しない前記トランザクションの前記実行のスケジューリングが、前記トランザクションを実行するためのトランザクション実行エポックを示すタグで前記トランザクションにタグ付けすることを含む、請求項1に記載のコンピュータシステム。
【請求項5】
前記1つまたは複数のサイクルの各々が、前のトランザクションが後のトランザクションの後に特定のテーブルにアクセスする直列化違反を示す、請求項1に記載のコンピュータシステム。
【請求項6】
前記トランザクショントポロジによって示される前記データ依存性が、データベースステートメントの順序および前記データベースステートメント間の中間結果に基づいて決定される、請求項1に記載のコンピュータシステム。
【請求項7】
各々のトランザクションのタイプのスケジューリングが別々の実行コンポーネントによって行われ、かつ前記データベースの特定のテーブルが、異なる実行コンポーネントの集合を使用してアクセスされる、請求項1に記載のコンピュータシステム。
【請求項8】
命令のセットを含むコンピュータプログラムコードを記憶した1つまたは複数の非一時的コンピュータ可読媒体であって、前記命令が、
データベース上で実行可能な複数のトランザクションのタイプを決定し、各々のトランザクションのタイプが、前記データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含み、
前記複数のトランザクションのタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定し、特定のトランザクションのタイプに対する前記トランザクショントポロジが、前記特定のトランザクションのタイプによってアクセスされる前記データベースの特定のテーブルを表す1つまたは複数のノードおよび前記特定のトランザクションのタイプに対するデータ依存性を示す前記1つまたは複数のノード間の有向エッジを含み、
各々のトランザクションのタイプに対する前記トランザクショントポロジを合成トポロジへ合成し、
前記合成トポロジを表す直列化グラフを生成し、前記直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよび前記トランザクションによって前記データベースの特定のテーブルにアクセスする前後順序を示す前記ノード間の有向エッジを含み、
特定のノードから始まる有向エッジの集合が前記特定のノードに向けて戻ってサイクルを形成するという判定に基づいて前記直列化グラフ内の1つまたは複数のサイクルを特定し、
前記1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定し、特定のサイクルに対する対応する区切りトランザクションタイプが、前記対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき前記特定のサイクルを区切り、
データベース上でトランザクションのストリームを実行する要求を受信し、前記トランザクションのストリーム内の各々のトランザクションが、前記複数のトランザクションのタイプの1つである対応するタイプを有し、
現在のエポックに前記区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、前記現在のエポックに最後のトランザクションとして前記区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに前記区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、前記トランザクションのストリームを実行し、前記区切りトランザクションタイプを有する前記トランザクションが、前記現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ前記次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、1つまたは複数の非一時的コンピュータ可読媒体。
【請求項9】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記複数のトランザクションのタイプの各々に対するツームストントランザクションをスケジュールすることを含み、前記ツームストントランザクションの後にスケジュールされるトランザクションが、前記次のエポックに対してスケジュールされ、そして前記複数のトランザクションのタイプの各々に対する前記ツームストントランザクションが実行されるまで実行されない、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項10】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記区切りトランザクションタイプを有しないトランザクションに対するトランザクションスケジューラに前記次のエポックを示すマルチキャストメッセージを送ることを含む、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項11】
前記区切りトランザクションタイプを有しない前記トランザクションの前記実行のスケジューリングが、前記トランザクションを実行するためのトランザクション実行エポックを示すタグで前記トランザクションにタグ付けすることを含む、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項12】
前記1つまたは複数のサイクルの各々が、前のトランザクションが後のトランザクションの後に特定のテーブルにアクセスする直列化違反を示す、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項13】
前記トランザクショントポロジによって示される前記データ依存性が、データベースステートメントの順序および前記データベースステートメント間の中間結果に基づいて決定される、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項14】
各々のトランザクションのタイプのスケジューリングが別々の実行コンポーネントによって行われ、かつ前記データベースの特定のテーブルが、異なる実行コンポーネントの集合を使用してアクセスされる、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項15】
データベース上で実行可能な複数のトランザクションのタイプを決定するステップであって、各々のトランザクションのタイプが、前記データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含む、ステップと、
前記複数のトランザクションのタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定するステップであって、特定のトランザクションのタイプに対する前記トランザクショントポロジが、前記特定のトランザクションのタイプによってアクセスされる前記データベースの特定のテーブルを表す1つまたは複数のノードおよび前記特定のトランザクションのタイプに対するデータ依存性を示す前記1つまたは複数のノード間の有向エッジを含む、ステップと、
各々のトランザクションのタイプに対する前記トランザクショントポロジを合成トポロジへ合成するステップと、
前記合成トポロジを表す直列化グラフを生成するステップであって、前記直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよび前記トランザクションによって前記データベースの特定のテーブルにアクセスする前後順序を示す前記ノード間の有向エッジを含む、ステップと、
特定のノードから始まる有向エッジの集合が前記特定のノードに向けて戻ってサイクルを形成するという判定に基づいて前記直列化グラフ内の1つまたは複数のサイクルを特定するステップと、
前記1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定するステップであって、特定のサイクルに対する対応する区切りトランザクションタイプが、前記対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき前記特定のサイクルを区切る、ステップと、
データベース上でトランザクションのストリームを実行する要求を受信するステップであって、前記トランザクションのストリーム内の各々のトランザクションが、前記複数のトランザクションのタイプの1つである対応するタイプを有する、ステップと、
現在のエポックに前記区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、前記現在のエポックに最後のトランザクションとして前記区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに前記区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、前記トランザクションのストリームを実行するステップであって、前記区切りトランザクションタイプを有する前記トランザクションが、前記現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ前記次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、ステップと
を含む、コンピュータ実装方法。
【請求項16】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記複数のトランザクションのタイプの各々に対するツームストントランザクションをスケジュールするステップを含み、前記ツームストントランザクションの後にスケジュールされるトランザクションが、前記次のエポックに対してスケジュールされ、そして前記複数のトランザクションのタイプの各々に対する前記ツームストントランザクションが実行されるまで実行されない、請求項15に記載のコンピュータ実装方法。
【請求項17】
前記区切りトランザクションタイプを有する前記トランザクションのスケジューリングが、前記区切りトランザクションタイプを有しないトランザクションに対するトランザクションスケジューラに前記次のエポックを示すマルチキャストメッセージを送るステップを含む、請求項15に記載のコンピュータ実装方法。
【請求項18】
前記区切りトランザクションタイプを有しない前記トランザクションの前記実行のスケジューリングが、前記トランザクションを実行するためのトランザクション実行エポックを示すタグで前記トランザクションにタグ付けするステップを含む、請求項15に記載のコンピュータ実装方法。
【請求項19】
前記1つまたは複数のサイクルの各々が、前のトランザクションが後のトランザクションの後に特定のテーブルにアクセスする直列化違反を示す、請求項15に記載のコンピュータ実装方法。
【請求項20】
前記トランザクショントポロジによって示される前記データ依存性が、データベースステートメントの順序および前記データベースステートメント間の中間結果に基づいて決定される、請求項15に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データベースシステムに関し、特にトランザクション処理に関する。
【背景技術】
【0002】
クラウドデータベースシステムは、サービスとしてのソフトウェア(特定のサービスを提供)とされていたが、サービスとしてのプラットフォーム(あるインフラストラクチャを提供)を提供している。それの前に、サービスとしてのインフラストラクチャが利用可能であり、インフラストラクチャを借りることができ、それを使用してデータベースを動作させることができた。これを超えて、「サーバレス」クラウドアーキテクチャは、クラウドアプリケーションがユーザによる管理労力なしでまたは少しで動くのを可能にしており、これは、負荷および性能要件に従ってスケールする「弾性」インフラストラクチャを使用して達成される。例えば、サーバレスデータベースシステムは、クエリおよびトランザクション(すなわち、1つまたは複数のクエリの集合)からの負荷が高いときに追加リソース(例えば、コンピュータ処理およびメモリリソース)を割り当ててよく、そしてこれらのリソースは、負荷が減少するにつれて割当てを解除されてよい。
【0003】
サーバレスアーキテクチャは、それがリソースの動的スケーリングを通して性能要件を満たすことができるという点で有利であるが、サーバレスアーキテクチャにも幾つかの潜在的な欠点がある。サーバレス環境では、スケーラブルなリソース間の通信が、非サーバレス設計と比較して遅くなり得る。そのような通信は、サーバレスデータベースシステムによってトランザクションが正しく実行されることを保証するために同時実行制御プロトコルを実装したときに発生し得る。したがって、サーバレス環境においてトランザクションを処理するとき改善された効率の必要性がある。
【0004】
本開示は、更に下記されるように、これらおよび他の問題点に対処する。
【発明の概要】
【課題を解決するための手段】
【0005】
一部の実施形態は、コンピュータシステムを提供する。本コンピュータシステムは、1つまたは複数のプロセッサを備えてよい。本コンピュータシステムは、1つまたは複数のプロセッサに結合され、かつ1つまたは複数のプロセッサによって実行可能な命令のセットを含むコンピュータプログラムコードを記憶した1つまたは複数の機械可読媒体を備えてよい。命令は、
データベース上で実行可能な複数のトランザクションのタイプを決定し、各々のトランザクションのタイプが、データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含み、
複数のトランザクションのタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定し、特定のトランザクションのタイプに対するトランザクショントポロジが、その特定のトランザクションのタイプによってアクセスされるデータベースの特定のテーブルを表す1つまたは複数のノードおよびその特定のトランザクションのタイプに対するデータ依存性を示す1つまたは複数のノード間の有向エッジを含み、
各々のトランザクションのタイプに対するトランザクショントポロジを合成トポロジへ合成し、
合成トポロジを表す直列化グラフを生成し、直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよびトランザクションによってデータベースの特定のテーブルにアクセスする前後順序を示すノード間の有向エッジを含み、
特定のノードから始まる有向エッジの集合がその特定のノードに向けて戻ってサイクルを形成するという判定に基づいて直列化グラフ内の1つまたは複数のサイクルを特定し、
1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定し、特定のサイクルに対する対応する区切りトランザクションタイプが、対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき特定のサイクルを区切り、
データベース上でトランザクションのストリームを実行する要求を受信し、トランザクションのストリーム内の各々のトランザクションが、複数のトランザクションのタイプの1つである対応するタイプを有し、
現在のエポックに区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、現在のエポックに最後のトランザクションとして区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、トランザクションのストリームを実行し、区切りトランザクションタイプを有するトランザクションが、現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、
ように1つまたは複数のプロセッサによって実行可能でよい。
【0006】
一部の実施形態は、命令のセットを含むコンピュータプログラムコードを記憶した1つまたは複数の非一時的コンピュータ可読媒体を提供する。コンピュータプログラムコードは、
データベース上で実行可能な複数のトランザクションのタイプを決定し、各々のトランザクションのタイプが、データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含み、
複数のトランザクションのタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定し、特定のトランザクションのタイプに対するトランザクショントポロジが、その特定のトランザクションのタイプによってアクセスされるデータベースの特定のテーブルを表す1つまたは複数のノードおよびその特定のトランザクションのタイプに対するデータ依存性を示す1つまたは複数のノード間の有向エッジを含み、
各々のトランザクションのタイプに対するトランザクショントポロジを合成トポロジへ合成し、
合成トポロジを表す直列化グラフを生成し、直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよびトランザクションによってデータベースの特定のテーブルにアクセスする前後順序を示すノード間の有向エッジを含み、
特定のノードから始まる有向エッジの集合がその特定のノードに向けて戻ってサイクルを形成するという判定に基づいて直列化グラフ内の1つまたは複数のサイクルを特定し、
1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定し、特定のサイクルに対する対応する区切りトランザクションタイプが、対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき特定のサイクルを区切り、
データベース上でトランザクションのストリームを実行する要求を受信し、トランザクションのストリーム内の各々のトランザクションが、複数のトランザクションのタイプの1つである対応するタイプを有し、
現在のエポックに区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、現在のエポックに最後のトランザクションとして区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、トランザクションのストリームを実行し、区切りトランザクションタイプを有するトランザクションが、現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、
命令のセットを含んでよい。
【0007】
一部の実施形態は、コンピュータ実装方法を提供する。本方法は、
データベース上で実行可能な複数のトランザクションのタイプを決定するステップであって、各々のトランザクションのタイプが、データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含む、ステップと、
複数のタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定するステップであって、特定のトランザクションのタイプに対するトランザクショントポロジが、その特定のトランザクションのタイプによってアクセスされるデータベースの特定のテーブルを表す1つまたは複数のノードおよびその特定のトランザクションのタイプに対するデータ依存性を示す1つまたは複数のノード間の有向エッジを含む、ステップと、
各々のトランザクションのタイプに対するトランザクショントポロジを合成トポロジへ合成するステップと、
合成トポロジを表す直列化グラフを生成するステップであって、直列化グラフが、トランザクションのタイプを表す1つまたは複数のノードおよびトランザクションによってデータベースの特定のテーブルにアクセスする前後順序を示すノード間の有向エッジを含む、ステップと、
特定のノードから始まる有向エッジの集合がその特定のノードに向けて戻ってサイクルを形成するという判定に基づいて直列化グラフ内の1つまたは複数のサイクルを特定するステップと、
1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定するステップであって、特定のサイクルに対する対応する区切りトランザクションタイプが、対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき特定のサイクルを区切る、ステップと、
データベース上でトランザクションのストリームを実行する要求を受信するステップであって、トランザクションのストリーム内の各々のトランザクションが、複数のトランザクションのタイプの1つである対応するタイプを有する、ステップと、
現在のエポックに区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、現在のエポックに最後のトランザクションとして区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、トランザクションのストリームを実行するステップであって、区切りトランザクションタイプを有するトランザクションが、現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されかつ次のエポックにスケジュールされるあらゆるトランザクションの前に実行される、ステップと
を含んでよい。
【0008】
以下の詳細な説明および添付の図面は、本開示の本質および利点のより良好な理解を提供する。
【図面の簡単な説明】
【0009】
図1】一実施形態に係る、同時実行制御プロトコルを実装するデータベースシステムのダイアグラムを示す。
図2】一実施形態に係る、同時実行制御のための方法のダイアグラムを示す。
図3】一実施形態に係る、アーキテクチャレスデータベース管理システムのダイアグラムを示す。
図4】一実施形態に係る、アーキテクチャレスデータベース管理システムに基づくアーキテクチャ例のダイアグラムを示す。
図5】一実施形態に係る、トランザクションおよびそれらの対応するデータ依存性トポロジのダイアグラムを示す。
図6】一実施形態に係る、非直列化可能トポロジおよび直列化可能性を実施するための解決策のダイアグラムを示す。
図7】一実施形態に係る、トポロジおよびそれらの対応する直列化グラフのダイアグラムを示す。
図8】一実施形態に係る、サイクルを引き起こす競合を調整するためにシリアライザが加えられたトポロジと比較した、サイクルを伴う非直列可能トポロジのダイアグラムを示す。
図9】一実施形態に係る、潜在的なサイクルを伴う直列化グラフおよび対応する実行タイムラインのダイアグラムを示す。
図10】一実施形態に係る、サイクルを防止する直列化グラフおよび対応する実行タイムラインのダイアグラムを示す。
図11】一実施形態に係る、4つのサイクルを防止する直列化グラフおよび対応する実行タイムラインのダイアグラムを示す。
図12】一実施形態に係る、nサイクルを防止する直列化グラフおよび対応する実行タイムラインのダイアグラムを示す。
図13】一実施形態に係る、トランザクションの履歴の分析のダイアグラムを示す。
図14】一実施形態に係る、状態機械として実装される同時実行制御プロトコルのダイアグラムを示す。
図15】本明細書に記載されるシステムおよび方法を実装するための専用計算機械のハードウェアのダイアグラムを示す。
【発明を実施するための形態】
【0010】
以下の記載では、説明の目的で、本開示の完全な理解を提供するために多数の例および具体的な詳細が述べられる。そのような例および詳細は、請求項の要素または特許請求される対象全体を過度に限定するとして解釈されるものではない。種々の請求項の言葉に基づいて、特許請求される対象が、これらの例における特徴の一部または全部を、単独でまたは組み合わせて含み得る、かつ本明細書に記載される特徴および技術の変更および均等物を更に含み得ることが明らかであろう。
【0011】
図およびそれらの対応する説明では、ある要素が別々の部品として描かれてよいのに対して、一部の例では部品の1つまたは複数が単一のデバイスまたはシステムへ組み合わされてよい。同じように、ある機能性がシステム内の単一の要素または部品によって行われるとして記載されてよいが、その機能性は、一部の例では機能的に協調された方式で協働する複数部品または要素によって行われてよい。加えて、本開示に記載される技術を実装するために配線回路網が独立してまたはソフトウェア命令と組み合わせて使用されてよい。記載される機能性は、動作を行うための配線論理を含むカスタムハードウェア部品によって、またはコンピュータハードウェアおよびプログラムされたコンピュータ部品のいかなる組合せによっても行われてよい。本開示に記載される実施形態は、ハードウェア回路網またはソフトウェアのいかなる具体的な組合せにも限定されない。実施形態は、1つまたは複数の有線または無線ネットワークを通じて連結される遠隔データ処理デバイスまたはシステムによって動作が行われる分散コンピューティング環境でも実施できる。本明細書で使用される場合、用語「第1」、「第2」、「第3」、「第4」、「第5」、「第6」、「第7」、「第8」、「第9」、「第10」等は、指示がない限り必ずしも順番または配列を示すわけではない。これらの用語は、本明細書で使用される場合、単に異なる物体または要素間の区別のために使用されてよい。
【0012】
上述したように、「サーバレス」クラウドアーキテクチャは、負荷および性能要件に従ってスケールする「弾性」インフラストラクチャを使用してクラウドアプリケーションが動くのを可能にする。例えば、サーバレスデータベースシステムは、クエリおよびトランザクション(すなわち、1つまたは複数のクエリの集合)からの負荷が高いときに追加リソース(例えば、コンピュータ処理およびメモリリソース)を割り当ててよく、そしてこれらのリソースは、負荷が減少するにつれて割当てを解除されてよい。この割当てリソースの増加は「スケールアウト」と称されてよく、そして割当て解除は「スケールイン」と称されてよい。サーバレスアーキテクチャでは、自分のアプリケーションがクラウドにデプロイされる際に用いるべきである特定のコンピュートおよびストレージリソース量をアプリケーション開発者が特定する必要なく、リソースがスケールアウトおよびスケールインされてよい。サーバレスアーキテクチャは、リソースが必要とされるにつれてそれらのスケーリングを処理する。
【0013】
2つのスケールアウトデータベース管理システムアーキテクチャ例には、「アグリゲーテッドシェアードナッシング」アーキテクチャおよび「ディスアグリゲーテッドシェアードディスク」アーキテクチャを含む。他の異なるアーキテクチャも可能である。「アグリゲーテッドシェアードナッシング」アーキテクチャでは、ネットワークを通じて結合されてよいデータベースパーティションを持つパーティション化されたデータベース管理システムインスタンスがある。「アグリゲーテッドシェアードナッシング」アーキテクチャの1つのあり得る利点は、それが分割可能なワークロードに対してより高性能を提供するということであるが、あり得る不利点には、再パーティション化による冗長なスケーリングおよびスキュー下での劣化を含む。
【0014】
「ディスアグリゲーテッドシェアードディスク」アーキテクチャでは、コンピュートリソースおよびストレージリソースの分離があり、そしてコンピュートリソースは、ネットワークを通じて共有ディスクにアクセスしてよい。「ディスアグリゲーテッドシェアードディスクアーキテクチャ」の1つのあり得る利点は、それが良好なスキュー処理ならびにコンピュートおよびストレージの独立した弾性を提供するということである一方で、あり得る不利点は、データが常にコンピュート層へ引き入れられ得るということである。
【0015】
従来は、データベース管理システムアーキテクチャは静的である。しかしながら、ワークロードが変わりやすく、変動しており、かつ予測不可能であるので、静的アーキテクチャは持続しないことがある。そのため、クラウドのための単一の最良のデータベース管理システムアーキテクチャもない。更には、プラットフォームの他にハードウェアが進化および多様化する(例えば、クラウドまたは新しいアクセラレータが再設計を必要とする)。静的アーキテクチャには、性能妥協があり、かつ未来保証がない。
【0016】
本開示は、より細粒度の「サーバレス」スケールアウトおよびスケールイン技術を適用する非静的「アーキテクチャレス」データベース管理システムを記載する。例えば、データベースインスタンス全体を追加する(「アグリゲーテッドシェアードナッシング」および「ディスアグリゲーテッドシェアードディスク」アーキテクチャの場合のように)よりはむしろ、データベースアーキテクチャ自体が動的に変化してよい。すなわち、データベース管理システムデプロイメントのための固定アーキテクチャがない。代わりに、データベースデプロイメントは、特定のトランザクション(例えば、1つまたは複数のデータベースクエリの集合)に最も適合するように自動的に形成される。この「アーキテクチャレス」技術は、動的に変化するアーキテクチャが各々のトランザクションに対して最適化され、かつデータベース管理システムが新しいプラットフォームおよびハードウェアに適合し得るという点で有利である。更に下記されるように、複数トランザクションの同時処理は、正しい実行(例えば、トランザクション処理の適切な配列または順序)を保証するために同時実行制御プロトコルに従って行われてよい。
【0017】
本開示は、サーバレスアーキテクチャレスデータベースにおいてトランザクションの適切な配列を保証する同時実行制御プロトコルを提供する。トランザクション処理の概観および同時実行制御プロトコルが図1および図2に関して下記される。アーキテクチャレス構成および同時実行プロトコルの更なる詳細が図3図12に関して下記される。
【0018】
図1は、一実施形態に係る、同時実行制御プロトコルを実装するデータベースシステム100のダイアグラムを示す。データベースシステム100は、トランザクション登録コンポーネント101、トランザクションタイプ決定コンポーネント102、トランザクションタイプトポロジ作成コンポーネント103、合成トポロジ作成コンポーネント104、直列化グラフ生成コンポーネント105、サイクル特定コンポーネント106、区切りトランザクションタイプ決定コンポーネント107、トランザクションストリーム受信コンポーネント108、トランザクション実行コンポーネント109の他に、データベース機能性を行うための他のコンポーネント(図示せず)を含むソフトウェアコンポーネントを含む。
【0019】
トランザクション登録コンポーネント101は、トランザクションタイプを登録および記憶するように構成されてよい。トランザクションタイプに関する情報がユーザによって入力されてよく、そしてこの情報は、データベースシステムに記憶されてよい。トランザクションタイプに関する情報は、そのタイプのトランザクションによってどの特定のテーブルがアクセスされるか、およびそのタイプのトランザクションを実行するときにテーブルから取り出されるデータ間の任意の依存性を含んでよい。
【0020】
トランザクションタイプ決定コンポーネント102は、データベース上で実行可能な複数のトランザクションのタイプを決定するように構成されてよい。各々のトランザクションのタイプは、データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含んでよい。トランザクションのタイプは、データベースシステムのユーザによって入力されてよい。そのような登録されたトランザクションタイプは、データベースシステム上に記憶され、そして本明細書に述べられるようにトポロジを生成して分析を行うために使用されてよい。トランザクションのタイプがタイプであり、トランザクション自体でないことに留意されたい。実行時中に、特定のタイプの着信トランザクションが、その同じタイプの他のトランザクションと比較して異なるパラメータを使用してよい。
【0021】
トランザクションタイプトポロジ作成コンポーネント103は、複数のタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定するように構成されてよい。特定のトランザクションのタイプに対するトランザクショントポロジは、その特定のトランザクションのタイプによってアクセスされるデータベースの特定のテーブルを表す1つまたは複数のノードおよびその特定のトランザクションのタイプに対するデータ依存性を示す1つまたは複数のノード間の有向エッジを含んでよい。トランザクションタイプに対するトポロジの例が図5のダイアグラム503および504に示され、更に後述される。
【0022】
一部の実施形態において、トランザクショントポロジによって示されるデータ依存性は、データベースステートメントの順序およびデータベースステートメント間の中間結果に基づいて決定される。
【0023】
合成トポロジ作成コンポーネント104は、各々のトランザクションのタイプに対するトランザクショントポロジを合成トポロジへ合成するように構成されてよい。合成トポロジは、異なるトランザクションタイプに対するエッジが同じノードを指してよいように個々のトランザクショントポロジのノードを合成する。そのような合成トポロジが下記され、図5のダイアグラム505、図6のダイアグラム601~604、図7のダイアグラム701~703、ならびに図8のダイアグラム801および802に示される。
【0024】
直列化グラフ生成コンポーネント105は、合成トポロジを表す直列化グラフを生成するように構成されてよい。直列化グラフは、トランザクションのタイプを表す1つまたは複数のノードおよびトランザクションによってデータベースの特定のテーブルにアクセスする前後順序を示すノード間の有向エッジを含んでよい。直列化グラフは以下に更に詳細に記載され、図7におけるダイアグラム704~706、図8におけるダイアグラム803および804、図9におけるダイアグラム901、図10におけるダイアグラム1001、図11におけるダイアグラム1101、ならびに図12におけるダイアグラム1201に示される。
【0025】
サイクル特定コンポーネント106は、直列化グラフ内の1つまたは複数のサイクルを特定するように構成されてよい。サイクルは、特定のノードから始まる有向エッジの集合がその特定のノードに向けて戻ってサイクルを形成するという判定に基づいて特定されてよい。図7におけるダイアグラム704は、トランザクションタイプAとトランザクションタイプBとの間のサイクル例(AからBに、そしてAに戻る)を示す。図7におけるダイアグラム705は、トランザクションタイプAからトランザクションタイプBに、トランザクションタイプCに、そしてトランザクションタイプAに戻るサイクル例(内側サイクル)およびトランザクションタイプCからトランザクションタイプBに、トランザクションタイプAに、そしてトランザクションタイプCに戻る別のサイクル(外側サイクル)を示す。サイクルの例は、図7のダイアグラム706および図8のダイアグラム803にも示される。
【0026】
一部の実施形態において、1つまたは複数のサイクルの各々は、前のトランザクションが後のトランザクションの後に特定のテーブルにアクセスする直列化違反を示してよい。
【0027】
区切りトランザクションタイプ決定コンポーネント107は、1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定するように構成されてよい。特定のサイクルに対する対応する区切りトランザクションタイプは、対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき特定のサイクルを区切ってよい。サイクルが重複する場合1つの区切りトランザクションタイプが2つ以上のサイクルを区切ってよい。区切りトランザクションタイプは下記され、区切りトランザクションタイプ例が図8のダイアグラム804に示される。ダイアグラム804において、トランザクションタイプAが区切るトランザクションのタイプであり、そしてトランザクションタイプB、CおよびDは安全なトランザクションのタイプ(区切らないトランザクションのタイプ)である。
【0028】
トランザクションストリーム受信コンポーネント108は、データベース上でトランザクションのストリームを順に実行する要求を受信するように構成されてよい。トランザクションのストリーム内の各々のトランザクションは、複数のトランザクションのタイプの1つである対応するタイプを有してよい。これらのトランザクションの適切な直列化は、トランザクションを並列に実行した結果がトランザクションを直列順に(並列でない)実行した結果と同じであることを必要とする。本明細書に記載されるトランザクション処理プロトコルは、本明細書に記載されるように、サイクルを区切ることができる区切りトランザクションタイプを特定し、そしてトランザクションが区切るタイプであるか否かに基づいてトランザクションを実行のためにスケジュールすることによって適切な直列化を達成する。
【0029】
トランザクション実行コンポーネント109は、第1のタイプを有するトランザクションをスケジュールするように構成される第1のトランザクションタイプスケジューラ111を含む。複数のトランザクションのタイプが登録されてよく、そして各々のタイプに対してトランザクションスケジューラがあってよい。これは、第1のトランザクションタイプスケジューラ111と最後のトランザクションタイプスケジューラ119との間の省略記号(「…」)として図1に表される。各々のトランザクションスケジューラは、別々の「実行コンポーネント」によって実装されてよい。実行コンポーネント(「任意のコンポーネント」とも呼ばれる)は以下に更に詳細に記載される。
【0030】
トランザクション実行コンポーネント109は、データベース内の複数のテーブル(図1に図示せず)の第1のテーブルにアクセスするように構成される第1のテーブル実行コンポーネント121も含む。各々データベースの異なるテーブルにアクセスするように構成される、複数のテーブル実行コンポーネントがあってよい。これは、第1のテーブル実行コンポーネント121と最後のテーブル実行コンポーネント129との間の省略記号(「…」)として図1に表される。実行コンポーネント(「任意のコンポーネント」とも呼ばれる)は以下に更に詳細に記載される。
【0031】
トランザクション実行コンポーネント109は、現在のエポックに区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、現在のエポックに最後のトランザクションとして区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、トランザクションのストリームを実行するように構成されてよい。区切りトランザクションタイプを有するトランザクションは、現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されてよく、かつ次のエポックにスケジュールされるあらゆるトランザクションの前に実行されてよい。区切りトランザクションタイプのこのスケジューリングおよび実行は、サイクルを防止し、かつトランザクションのストリームを並列に実行した結果が、それらが受信された順にそれらが直列的に実行された場合と同じであることを保証する。
【0032】
一部の実施形態において、区切りトランザクションタイプを有するトランザクションのスケジューリングは、複数のトランザクションのタイプの各々に対するツームストントランザクションをスケジュールすることを含む。そのような実施形態において、ツームストントランザクションの後にスケジュールされるトランザクションは、次のエポックに対してスケジュールされ、そして複数のトランザクションのタイプの各々に対するツームストントランザクションが実行されるまで実行されない。
【0033】
一部の実施形態において、区切りトランザクションタイプを有するトランザクションのスケジューリングは、区切りトランザクションタイプを有しないトランザクションに対するトランザクションスケジューラに次のエポックを示すマルチキャストメッセージを送ることを含む。
【0034】
一部の実施形態において、区切りトランザクションタイプを有しないトランザクションの実行のスケジューリングは、そのトランザクションを実行するためのトランザクション実行エポックを示すタグでトランザクションにタグ付けすることを含む。
【0035】
一部の実施形態において、各々のトランザクションのタイプのスケジューリングは、別々の実行コンポーネントによって行われる。そのような実施形態において、データベースの特定のテーブルは、異なる実行コンポーネントの集合を使用してアクセスされてよい。実行コンポーネントは下記され、図3のダイアグラム301および302ならびに図4のダイアグラム401~406に示される。更には、実行コンポーネントは、図5図8に示されるトポロジダイアグラム内のノードによって表されてよい。
【0036】
図2は、一実施形態に係る、同時実行制御のための方法のダイアグラム200を示す。本方法は、図1に関して上記したものなどの、データベースシステムによって実装されてよい。本方法は、非一時的コンピュータ可読記憶媒体上に記憶されるコンピュータプログラムコードによって実装されてよい。図2に関して下記される本方法は、図1に関して上記したデータベースシステム100の機能と同様の機能性を実装してよい。
【0037】
201において、本方法は、データベース上で実行可能な複数のトランザクションのタイプを決定してよい。各々のトランザクションのタイプは、データベースの特定のテーブルにアクセスする対応する1つまたは複数のクエリの集合を含んでよい。トランザクションのタイプは、データベースシステムのユーザによって入力されてよい。そのような登録されたトランザクションタイプは、データベースシステム上に記憶され、そして本明細書に述べられるようにトポロジを生成して分析を行うために使用されてよい。トランザクションのタイプがタイプであり、トランザクション自体でないことに留意されたい。実行時中に、特定のタイプの着信トランザクションが、その同じタイプの他のトランザクションと比較して異なるパラメータを使用してよい。
【0038】
202において、本方法は、複数のタイプにおける各々のトランザクションのタイプに対するトランザクショントポロジを決定してよい。特定のトランザクションのタイプに対するトランザクショントポロジは、その特定のトランザクションのタイプによってアクセスされるデータベースの特定のテーブルを表す1つまたは複数のノードおよびその特定のトランザクションのタイプに対するデータ依存性を示す1つまたは複数のノード間の有向エッジを含んでよい。トランザクションタイプに対するトポロジの例が図5のダイアグラム503および504に示され、更に後述される。
【0039】
一部の実施形態において、トランザクショントポロジによって示されるデータ依存性は、データベースステートメントの順序およびデータベースステートメント間の中間結果に基づいて決定される。
【0040】
203において、本方法は、各々のトランザクションのタイプに対するトランザクショントポロジを合成トポロジへ合成してよい。合成トポロジは、異なるトランザクションタイプに対するエッジが同じノードを指してよいように個々のトランザクショントポロジのノードを合成する。そのような合成トポロジが下記され、図5のダイアグラム505、図6のダイアグラム601~604、図7のダイアグラム701~703、ならびに図8のダイアグラム801および802に示される。
【0041】
204において、本方法は、合成トポロジを表す直列化グラフを生成してよい。直列化グラフは、トランザクションのタイプを表す1つまたは複数のノードおよびトランザクションによってデータベースの特定のテーブルにアクセスする前後順序を示すノード間の有向エッジを含んでよい。直列化グラフは以下に更に詳細に記載され、図7におけるダイアグラム704~706、図8におけるダイアグラム803および804、図9におけるダイアグラム901、図10におけるダイアグラム1001、図11におけるダイアグラム1101、ならびに図12におけるダイアグラム1201に示される。
【0042】
205において、本方法は、直列化グラフ内の1つまたは複数のサイクルを特定してよい。サイクルは、特定のノードから始まる有向エッジの集合がその特定のノードに向けて戻ってサイクルを形成するという判定に基づいて特定されてよい。図7におけるダイアグラム704は、トランザクションタイプAとトランザクションタイプBとの間のサイクル例(AからBに、そしてAに戻る)を示す。図7におけるダイアグラム705は、トランザクションタイプAからトランザクションタイプBに、トランザクションタイプCに、そしてトランザクションタイプAに戻るサイクル例(内側サイクル)およびトランザクションタイプCからトランザクションタイプBに、トランザクションタイプAに、そしてトランザクションタイプCに戻る別のサイクル(外側サイクル)を示す。サイクルの例は、図7のダイアグラム706および図8のダイアグラム803にも示される。
【0043】
一部の実施形態において、1つまたは複数のサイクルの各々は、前のトランザクションが後のトランザクションの後に特定のテーブルにアクセスする直列化違反を示してよい。
【0044】
206において、本方法は、1つまたは複数のサイクルの各々に対する区切りトランザクションタイプを決定してよい。特定のサイクルに対する対応する区切りトランザクションタイプは、対応する区切りトランザクションタイプが現在のエポックにおいて最後に実行されるトランザクションであるとき特定のサイクルを区切ってよい。サイクルが重複する場合1つの区切りトランザクションタイプが2つ以上のサイクルを区切ってよい。区切りトランザクションタイプは下記され、区切りトランザクションタイプ例が図8のダイアグラム804に示される。ダイアグラム804において、トランザクションタイプAが区切るトランザクションのタイプであり、そしてトランザクションタイプB、CおよびDは安全なトランザクションのタイプ(区切らないトランザクションのタイプ)である。
【0045】
207において、本方法は、データベース上でトランザクションのストリームを順に実行する要求を受信してよい。トランザクションのストリーム内の各々のトランザクションは、複数のトランザクションのタイプの1つである対応するタイプを有してよい。これらのトランザクションの適切な直列化は、トランザクションを並列に実行した結果がトランザクションを直列順に(並列でない)実行した結果と同じであることを必要とする。本明細書に記載されるトランザクション処理プロトコルは、本明細書に記載されるように、サイクルを区切ることができる区切りトランザクションタイプを特定し、そしてトランザクションが区切るタイプであるか否かに基づいてトランザクションを実行のためにスケジュールすることによって適切な直列化を達成する。
【0046】
208において、本方法は、現在のエポックに区切りトランザクションタイプを有しないトランザクションの実行をスケジュールし、現在のエポックに最後のトランザクションとして区切りトランザクションタイプを有するトランザクションをスケジュールし、そして次のエポックに区切りトランザクションタイプを有しない後のトランザクションをスケジュールすることによって、トランザクションのストリームを実行してよい。区切りトランザクションタイプを有するトランザクションは、現在のエポックにスケジュールされるあらゆるトランザクションの後に実行されてよく、かつ次のエポックにスケジュールされるあらゆるトランザクションの前に実行されてよい。区切りトランザクションタイプのこのスケジューリングおよび実行は、サイクルを防止し、かつトランザクションのストリームを並列に実行した結果が、それらが受信された順にそれらが直列的に実行された場合と同じであることを保証する。
【0047】
一部の実施形態において、区切りトランザクションタイプを有するトランザクションのスケジューリングは、複数のトランザクションのタイプの各々に対するツームストントランザクションをスケジュールすることを含む。そのような実施形態において、ツームストントランザクションの後にスケジュールされるトランザクションは、次のエポックに対してスケジュールされ、そして複数のトランザクションのタイプの各々に対するツームストントランザクションが実行されるまで実行されない。
【0048】
一部の実施形態において、区切りトランザクションタイプを有するトランザクションのスケジューリングは、区切りトランザクションタイプを有しないトランザクションに対するトランザクションスケジューラに次のエポックを示すマルチキャストメッセージを送ることを含む。
【0049】
一部の実施形態において、区切りトランザクションタイプを有しないトランザクションの実行のスケジューリングは、そのトランザクションを実行するためのトランザクション実行エポックを示すタグでトランザクションにタグ付けすることを含む。
【0050】
一部の実施形態において、各々のトランザクションのタイプのスケジューリングは、別々の実行コンポーネントによって行われる。そのような実施形態において、データベースの特定のテーブルは、異なる実行コンポーネントの集合を使用してアクセスされてよい。実行コンポーネントは下記され、図3のダイアグラム301および302ならびに図4のダイアグラム401~406に示される。更には、実行コンポーネントは、図5図8に示されるトポロジダイアグラム内のノードによって表されてよい。
【0051】
上述したように、データベースアーキテクチャは、トランザクションを処理する間に動的に変化してよい。すなわち、データベース管理システムデプロイメントのための固定アーキテクチャがない。データベースデプロイメントは、特定のトランザクション(例えば、1つまたは複数のデータベースクエリの集合)に最も適合するように自動的に形成される。この「アーキテクチャレス」技術は、動的に変化するアーキテクチャが各々のトランザクションに対して最適化され、かつデータベース管理システムが新しいプラットフォームおよびハードウェアに適合し得るという点で有利である。
【0052】
図3は、一実施形態に係る、アーキテクチャレスデータベース管理システムのダイアグラム301、302を示す。ダイアグラム301は、クエリオプティマイザ(QO)コンポーネント、ワーカコンポーネントまたは別のデータベースコンポーネントとして構成されてよい複数の「任意のコンポーネント」を含むアーキテクチャレスデータベース管理システム(DBMS)を示す。データベースは、複数の小さな実行コンポーネント/エンティティ(例えば、ジョブエグゼキュータ)を含み、それらは、必要に応じて任意のデータベースコンポーネントとして機能するように構成できるので「任意のコンポーネント」と称されてよい。これらの実行コンポーネントは、各々のクエリ(例えば、選択、更新、削除もしくは挿入クエリ)またはトランザクション(1つもしくは複数のクエリの集合)に対して異なるデータベースアーキテクチャを作成するように構成および再編成できる。
【0053】
この例では、データベースシステムは、2つのサーバ、4つのコアを有する(例えば、4つの構成可能な実行コンポーネントを持つ)「サーバ1」および同じく4つのコアを有する「サーバ2」を含む。サーバ1は第1のデータベース「DB1」を含み、そしてサーバ2は第2のデータベース「DB2」を含む。この例では、サーバ1がクエリオプティマイザ(QO)として構成される1つの実行コンポーネント(AC)およびワーカ(W)として構成される1つの実行コンポーネントを有する一方で、サーバ2は、ワーカとして構成される1つの実行コンポーネント(AC)を有する。ダイアグラム301に示されるように、クエリオプティマイザとして作用する実行コンポーネントは、サーバ1のワーカにおよびサーバ2のワーカにイベントを出力する。第2のデータベースDB2からのテーブルデータがサーバ2のワーカへの入力として提供され、そこからサーバ1のワーカに結果データを出力する。
【0054】
ダイアグラム301は、データベース上でトランザクションを処理するための実行コンポーネントの単に1つの可能な構成を示す。
【0055】
ダイアグラム302は、入力イベントおよび入力データを受信し、そしてイベントおよびデータを出力するように構成可能である実行コンポーネント(すなわち、「任意のコンポーネント」、AC)を示す。実行コンポーネント(「任意のコンポーネント」)は、「ジョブエグゼキュータ」として動作してよいソフトウェアコンポーネント、またはそれと同様である。実行コンポーネントは、入力チャネルおよび出力チャネルを有する。入力チャネルは、イベントであることができる。これらのイベントは、実行コンポーネントを構成してまたそれに命令してよい。イベントは、このエグゼキュータコンポーネントが当面はどんなデータベースコンポーネントを実行するべきかを記述してよい。データは、処理されるべきデータのストリームである。このデータベースシステムでは、受信トランザクションに基づいてイベントのストリームが生成されてよく、そしてこれらのイベントストリームの他にデータが実行コンポーネントを通って流れてデータベースアーキテクチャを形成してよい。
【0056】
ダイアグラム302は、クエリオプティマイザ(QO)としておよびワーカ(例えば、クエリエグゼキュータコンポーネント)として作用する実行コンポーネント(AC)も示す。クエリオプティマイザとして作用するとき、実行コンポーネントは、入力としてクエリイベントを受信するように、かつ入力としてカタログデータおよびスタッツデータを受信するように構成される。クエリオプティマイザとして構成される実行コンポーネントは、入力クエリイベントに基づいてイベントのストリームを出力するように構成される。それは、出力データを提供しない。
【0057】
ワーカとして作用するとき、実行コンポーネント(AC)は、入力としてスキャン動作イベントおよび入力としてテーブルデータを受信する。ワーカとして、実行コンポーネントは、スキャン動作イベントおよび入力テーブルデータに基づいて決定される結果データを出力する。それは、イベントを出力しない。
【0058】
そのため、トランザクションが処理のためにデータベースシステムによって受信されるにつれて、実行コンポーネントは、コンポーネントを通るイベントおよびデータストリーミングに種々の役割で動作してデータベース機能性を形成してよい。図4は、一実施形態に係る、アーキテクチャレスデータベース管理システムに基づくアーキテクチャ例のダイアグラム401~406を示す。1つの例として、データベース負荷が低いとき、システムは、ダイアグラム401に示されるように「シェアードナッシング」アーキテクチャとして編成されてよい。ある実行コンポーネントをクエリオプティマイザ、結合演算子またはスキャン演算子として構成するようにイベントがディスパッチされる。別の例として、負荷が増大されると、システムは、ダイアグラム402に示されるように「シェアードディスク」アーキテクチャへ再編成されてよい。ダイアグラム401および402において、グレーの囲みはリソースの集合を示す。ダイアグラム403、404、405および406は、実行コンポーネントがデータベースアーキテクチャを形成するために編成されてよい他の可能な構成を示す。
【0059】
そのようなアーキテクチャレスデータベースシステムは、システムがトランザクションおよび他の要求を連続的かつ弾性的に実行するストリーミング実行を使用してよい。イベントおよびデータは、データ移動が最小でありかつ計算制約が満たされる(スループットを最大化する)ようにルーティングされる。本開示は、イベントストリームのトポロジによって実施されるトランザクション処理に整合性を達成する直列化可能イベントルーティングを提供するトランザクション処理プロトコルを記載する。トポロジは、データおよび/またはイベントの入力ならびにデータおよび/またはイベントの出力を伴う「ノード」(「AC」実行コンポーネントによって実装される)として表される。本明細書に開示される同時実行制御プロトコルを使用して適切な並列トランザクション処理(例えば、処理の順序)が達成されてよい。同時実行制御プロトコルは、更に下記されるように、記憶または登録されたトランザクションのタイプに基づいて、トランザクションタイプのトポロジを構築し、そして直列化可能な整合性を保証する全体のトポロジを決定することによって達成される。
【0060】
トランザクション処理同時実行制御では、「競合」は、2つ以上のトランザクションが、トランザクションの処理が開始されたときと比較して異なる順にテーブルにアクセスする状況を指す。例えば、2つのトランザクションがデータベーステーブル内の同じ行で更新されてよい。本明細書に記載される同時実行制御プロトコルは、実行コンポーネントのトポロジを構築し、その間にデータおよびイベントストリームを有することによって、競合を緩和しかつ協調オーバヘット(例えば、実行コンポーネント間の通信)を削減しており、特定された競合に基づいて半順序で直列化可能性を実施する。
【0061】
ある他の同時実行制御プロトコル(例えば、2相ロッキング)とは異なり、本プロトコルは、特定のテーブルまたは行の「所有権」(例えば、ロックオン)を獲得せず、この所有権を確立および解除するには通信を必要とする。そのような通信は、多数のより小さな実行コンポーネントを有するアーキテクチャレス環境では性能を劣化させるであろう。行またはテーブルの所有権を取るために協調を必要とするよりはむしろ、本同時実行制御プロトコルは、テーブルにアクセスするトランザクションを、テーブルアクセスを実行するであろう実行コンポーネントにルーティングする。すなわち、システム内の実行コンポーネントが特定のテーブルまたはテーブルの行へのアクセスを処理し、そして整合した実行を提供するためにデータが設けられる実行コンポーネントにトランザクションがルーティングされる。繰り返すと、同時実行制御は、テーブルの所有権を取り、所有権に関して通信することによって提供されるのではない。代わりに、同時実行制御は、トランザクション処理が所有権(例えば、ロック)の概念なしで正しく順序付けされるのを可能にするデータストリームのパス(ルート)を有する実行コンポーネントのトポロジを確立することによって提供される。
【0062】
図5は、一実施形態に係る、トランザクション501、502およびそれらの対応するデータ依存性トポロジ503~505のダイアグラム501~505を示す。これらのトポロジダイアグラムにおいて、円は、上述したような実行コンポーネント(AC)を表す。ダイアグラム501は、「トランザクションA」、第1のトランザクションのタイプ、に対する擬似コードを示し、そしてダイアグラム502は、「トランザクションB」、第2のトランザクションのタイプ、に対する擬似コードを示す。ダイアグラム503は、トランザクションAに対するデータ依存性(中間結果)を示すトポロジを示す。ダイアグラム504は、トランザクションBに対するデータ依存性を示すトポロジを示す。これらのトランザクションタイプおよびトポロジは、例示の目的のための例である。他の実施形態において、異なるトランザクションタイプが登録または記憶されてよく、そしてそれらの対応するトポロジが構築されてよい。
【0063】
ダイアグラム501において、擬似コードは、トランザクションAが第1のテーブル「x」、第2のテーブル「y」および第3のテーブル「u」にアクセスすることを示す一方で、ダイアグラム502に示される、トランザクションBに対する擬似コードは、第2のテーブル「y」、第1のテーブル「x」および第4のテーブル「z」にアクセスする。タイプ「A」のトランザクションは、テーブルx、yおよびuに(トランザクション固有のパラメータで)アクセスすることになり、そしてタイプ「B」のトランザクションは、テーブルy、xおよびzに(トランザクション固有のパラメータで)アクセスすることになる。トランザクションに対するコードは、ダイアグラム503および504に示されるように、そのトランザクションタイプに対する対応するトポロジを生成するために、どのテーブルがアクセスされるかを決定し、かつどんなタイプの動作(例えば、読取り、書込み等)がテーブルに行われるかを決定するように分析されてよい。
【0064】
トランザクションのタイプのトポロジを構築するために、データ依存性(中間結果)が決定され、そしてコミット依存性が決定される。データ依存性のために、ステートメント間で渡されるデータに従ってそれらのステートメントの順序が決定され、そしてトポロジを構築するために(記憶または登録された)トランザクションタイプのプログラム分析が使用される。コミット依存性に関して、全ての書込みイベントがトランザクションにおける最後の潜在的なアボートポイントの前に発生し、アボート可能なイベントだけが回復を必要として、カスケードアボートを生じさせ、トランザクションは決定論的理由(例えば、制約)によってのみアボートするべきであり、そしてアボート可能なイベントを伴うノードから非アボート可能な書込みイベントを伴うノードへのエッジを追加できる。
【0065】
ダイアグラム503および504に示されるように、タイプAのトランザクションおよびタイプBのトランザクションに対するトポロジは、両方ともテーブルxおよびテーブルyにアクセスする。そのため、タイプAのトランザクションがタイプBのトランザクションと並列に走らされるとテーブルxおよびテーブルy上で競合があり得る。すなわち、幾つかのトランザクションのタイプに関するトポロジは、直列化可能性を保証しないことがある。直列化可能性を保証するために、トランザクション処理プロトコルは、タイプAのトランザクションがタイプBのトランザクションの前に開始されれば、タイプBのトランザクションがテーブルxかテーブルyかにアクセスする前にテーブルxおよびテーブルyのアクセスが発生するようなトランザクション順にテーブルxおよびテーブルyがアクセスされることを保証するべきである。
【0066】
ダイアグラム505は、トランザクションタイプAおよびトランザクションタイプBに対するトポロジを合成する合成トポロジを示す。このトポロジは、テーブルxにアクセスするときおよびテーブルyにアクセスするときにトランザクションタイプAとトランザクションタイプBとの間に発生し得る競合を示す。
【0067】
そのような競合を防止するために、トランザクションは半順序でよい。すなわち、この例では、テーブルxおよびテーブルyへのアクセスに対して順序が実施されるが、テーブルzへのアクセスは無順序のままでよい(テーブルzにアクセスすることには競合がないため)。図6は、一実施形態に係る、非直列化可能トポロジ601および直列化可能性を実施するための解決策602、603、604のダイアグラム601~604を示す。ダイアグラム601は、図5におけるダイアグラム505の複製である。それは、上述したようにテーブルxおよびテーブルy上でトランザクションタイプAとトランザクションタイプBとの間の競合を有する非直列化可能トポロジを示す。ダイアグラム601に示される非直列化可能トポロジと比較して、ダイアグラム602、603および604は、直列化可能性を実施する異なるトポロジのためである。
【0068】
ダイアグラム602に示される解決策1は、トランザクションタイプAおよびトランザクションタイプBから入力を受信し、そしてテーブルx(例えば、テーブルxへのアクセスを処理する実行コンポーネント)におよびテーブルy(例えば、テーブルyへのアクセスを処理する実行コンポーネント)に出力する部分シリアライザノード(例えば、シリアライザ実行コンポーネント)を追加する。この解決策では、シリアライザ実行コンポーネントは、xおよびyにアクセスする全てのトランザクションを受信し、そしてそれは、どのトランザクションが最初に来たかを追跡する。それは、カウンタを使用してトランザクションに順序を与えてよい。例えば、シリアライザ実行コンポーネントは、通過するイベントに「前に発生」関係をタグ付けしてよい。特定のシリアライザは、通信オーバヘッド対非競合ノードへの影響を交換する配置の自由を提供する:外向エッジの数が最小(シリアライザにとって低通信)であるように配置、または競合(直列化オーバヘッドによって影響される競合のみ)の直前に配置。
【0069】
ダイアグラム603に示される解決策2は、直列実行を実施するためにノードを合成する。示されるように、テーブルxに対するノードおよびテーブルyに対するノードが単一のノード「x, y」へ合成される。すなわち、単一の実行コンポーネントがテーブルxおよびテーブルyの両方のアクセスを処理することになる。この解決策では、xおよびyに対する2つのクエリは、カウンタを伴うシリアライザを使用するよりはむしろ一緒に実行される。この直列実行解決策は、競合(関係/パーティション/...)をトポロジ内の単一のノードに合成してよい。それは、この合成データ粒度で特定のトランザクションの全てのイベントを原子的に実行してもよい。
【0070】
ダイアグラム604に示される解決策3は、直列化可能性を実施するためにトポロジを直列依存性に再構成する。示されるように、テーブルyのアクセスがテーブルxにアクセスした結果に依存するようにテーブルyに対するノードがテーブルxに対するノードの後に来る。そのため、テーブルxは、テーブルyと並列にアクセスされない。この解決策では、トランザクションタイプBはxにアクセスしていないが、システムは、それでもxに対するノード(実行コンポーネント)を通してトランザクションBをルーティングし、このルーティングが直列順を実施する。テーブルxに対する実行コンポーネントは、一度に1つのイベントを実行するだけでよく、これが順序を決定する。この解決策では、トランザクションタイプBは、ノードxを通してルーティングされてノードyに転送される。この直列依存性解決策では、ノードは、トポロジが競合の明示的な「前に発生」関係を実施するように再順序付けされるまたは依存性を追加した。
【0071】
これらの3つの解決策は、この例(図5に戻って参照)で直列化可能性を実施するための潜在的なトポロジオプションである。1つの解決策が、特定の状況においてその他の解決策と比較してより良いまたは悪い性能であってよい。クエリオプティマイザは、ある状況においてどの解決策を使用するべきかを決定するように構成されてよい。
【0072】
トランザクションタイプ例AおよびBならびに他のトランザクションタイプに対して、直列化可能性を実施する他のトポロジが達成されてよく、そしてトポロジの組合せが他の解決策を有してよい。
【0073】
コミット依存性に関して、アボートは、カスケーディングおよび回復によりストリーミング実行を損ない得る。「区分的可視性」がカスケーディングを防止しかつ回復を制限して、トランザクションをアボート可能および非アボート可能なイベントへ分けてよい。アボート可能なイベントは、トランザクションにおける最後の潜在的なアボートポイントの前の全ての書込みイベントを含む。一部の状況では、アボート可能なイベントが回復を必要としてよくかつカスケードアボートを生じさせ得る。コミット依存性は、非アボート可能なイベントおよび以降のトランザクションの前にアボート可能なイベントを実行するときにカスケードを防止しかつ回復を最小化してよい。コミット依存性は、アボート可能なイベントを伴うノードから非アボート可能な書込みイベントを伴うノードへのエッジを追加してよい。
【0074】
トランザクション処理プロトコルは、1つまたは複数のトランザクションタイプのトポロジを合成する合成トポロジに基づいて直列化グラフを生成してよい。図7は、一実施形態に係る、トポロジ701~703およびそれらの対応する直列化グラフ704~706のダイアグラム701~706を示す。ダイアグラム701は、同じ2つのノードにアクセスするトランザクションAおよびトランザクションBのトポロジを示す。ダイアグラム704は、競合を示す、サイクルを含む直列化グラフを示す。
【0075】
直列化グラフにおいて、表記「X<Y」は、トランザクションXがトランザクションYの前に発生したことを示す。ダイアグラム704において、直列化グラフは、トランザクションAがトランザクションBの前に発生したこと(「A<B」)およびトランザクションBがトランザクションAの前に発生したこと(「B<A」)を示す。これらの可能な順序の両方とも起こってよく、順序が不明瞭である。これは「サイクル」と称され、直列化可能性に違反する。
【0076】
トポロジ702は、3つのトランザクションA、BおよびCを示し、Aは第1および第2のテーブルにアクセスし、Bは第2のテーブルおよび第3のテーブルにアクセスし、そしてCは第1および第3のテーブルにアクセスする。このトポロジは、直列化グラフ705によって表されてよい。同様に、ダイアグラム703におけるトランザクションは、直列化グラフ706に表される。任意の2つの含まれる競合を制御すると、いかなるサイズのサイクルも区切れる。推論は、これらの競合を生じさせないトランザクションはいかなる順でも安全に実行できるということである。更には、一部の競合は、他のサイクルにも参加してよい。そのため、交差する競合は、同時に幾つかのサイクルを区切ることができる。
【0077】
上記した直列化解決策は、サイクルを防止するために使用されてよい。形式的に、トポロジの直列化グラフ内の所与のサイクルに対して、以下が成り立たなければならない:
【0078】
サイクル内にC1, C2が存在: C1=(t1, t2)およびC2=(t2, t3):
t1<t2⇔t1<t3またはt1>t2⇔t1>t3(サイズ2のサイクルに対して:t2=t3)
【0079】
2つの隣接する競合に参加する3つのトランザクションの実行順序は逆でなければならず、そうすると二重サイクルもいかなる実行履歴にも現れない。
【0080】
図8は、一実施形態に係る、サイクルを生じさせる競合を調整するためにシリアライザが加えられたトポロジ802と比較した、サイクルを伴う非直列化可能トポロジ801のダイアグラム801~804を示す。ダイアグラム801は、ダイアグラム803に示されるその対応する直列化グラフ内のサイクルを伴う初期の非直列化可能トポロジを示す。例えば、トランザクションAおよびトランザクションDがテーブルvにアクセスするとき、トランザクションAおよびトランザクションBがテーブルxにアクセスするとき、トランザクションBおよびトランザクションCがテーブルyにアクセスするとき、ならびにトランザクションCおよびトランザクションDがテーブルzにアクセスするときにサイクルがある。
【0081】
ダイアグラム802に示されるように、トランザクションA、BおよびDとテーブルvおよびxとの間にシリアライザ実行コンポーネント(802における「S」)が追加されてよい。このシリアライザを追加することは、図6におけるダイアグラム602に関して上記したようなサイクルを解決する。ダイアグラム802のトポロジに対応する直列化ダイアグラム804において、シリアライザは、トランザクションAおよびB間ならびにトランザクションAおよびC間の要素805および806として示される。1つの例として、トランザクションAがトランザクションBの前に来てかつトランザクションAがトランザクションDの前に来ると、外側サイクルは防止される。これは「区切りトランザクションタイプ」と称される。
【0082】
タイプBのトランザクション、タイプCのトランザクションおよびタイプDのトランザクションは、タイプAのトランザクションが実行されない限りどんな順でも実行できる。図9は、一実施形態に係る、トランザクションタイプB、CおよびDの幾つかのインスタンスに対する直列化グラフ901、ならびに対応するタイムライン902のダイアグラム901、902を示す。ダイアグラム901に示されるように、タイプBのトランザクション(トランザクションB1、Bi)、タイプCのトランザクション(C1、Ck)およびタイプDのトランザクション(D1、Dj)の直列化は、いかなる順でも行われてよい。ダイアグラム902は、実行コンポーネント(AC)のキューに対する実行タイムライン例を示し、x軸は時間を表し、そしてy軸は実行コンポーネントホスティング属性(例えば、テーブルv、テーブルx、テーブルy、テーブルz)を表す。タイムラインに示されるように、タイプB、CおよびDのトランザクションは、サイクルなしにいかなる順でも実行してよい。しかしながら、タイプAのトランザクションが実行されることになると、適切な直列化により、トランザクションBおよびトランザクションDに対するトランザクションAの正しい順序を保証しなければならない。この例では、トランザクションAが実行されることになれば、直列化(例えば、ダイアグラム802に示されるシリアライザ実行コンポーネント)により、トランザクションAが前のトランザクションDjおよびBiの後にかつトランザクションDj'およびBi'の前に実行されることを保証しなければならない。
【0083】
図10は、一実施形態に係る、潜在的なサイクルを伴う直列化グラフ1001および対応する実行タイムライン1002、1003のダイアグラム1001、1002、1003を示す。ダイアグラム1001は、Ckを介するBi'およびDj'に対する潜在的なサイクルを伴う直列化グラフを示す。サイクルは:(Bi', A, Dj, Ck, Bi')および(Dj', A, Bi, Ck, Dj')である。ダイアグラム1002は、Bi'に対してCkを介してサイクルを生じさせる実行タイムラインを示し、そしてダイアグラム1003は、Dj'に対してCkを介してサイクルを生じさせる実行タイムラインを示す。適切な直列化により、トランザクションAがトランザクションBiの後におよびトランザクションDjの後に実行されることを保証する。すなわち、トランザクションDjがトランザクションAの前に実行され、そしてトランザクションDj'がトランザクションAの後に実行される。タイプAのトランザクションが実行されるとき、トランザクション処理システムは、トランザクションのストリームを「前および後」へ分離し、それによってサイクルを防止する。
【0084】
直列化は、任意の入力履歴もサポートできる。図11は、一実施形態に係る、4つのサイクルを防止する直列化グラフ1101および対応する実行タイムライン1102、1103のダイアグラム1101、1102、1103を示す。ダイアグラム1101は、Bi'およびDj'が直列化グラフにサイクルを生じさせるのを防止する直列化グラフを示す。ダイアグラム1102は、Bi'[y]の実行を再順序付けするとサイクルがない実行タイムラインを示す。Ck[y]がBi'[y]の前に実行されれば、かつCk[z]、Dj[z]およびDj'[z]が各々Bi'[y]の前に実行されれば、サイクルはない。ダイアグラム1103は、Dj'[z]の実行を再順序付けするとサイクルがなく、Ck[z]がDj'[z]の前に実行されれば、かつCk[y]、Bi[y]およびBi'[y]が各々Dj'[z]の前に実行されれば、サイクルがない実行タイムラインを示す。
【0085】
nサイクルに対する任意の入力履歴をサポートする別の手法がここで記載される。図12は、一実施形態に係る、サイクルを防止する直列化グラフ1201および対応する実行タイムライン1202、1203のダイアグラム1201、1202、1203を示す。ダイアグラム1201は、Bi'およびDj'がサイクルを生じさせるのを防止する直列化グラフを示す。このグラフは、Bi'[y]の前にCk[y]の実行を実施し、かつDj'[b]の前にNI[b]の実行を実施する。ダイアグラム1202は、Bi'[y]の実行を再順序付けするとサイクルがない実行タイムラインを示す。すなわち、Ck[y]がBi'[y]の前に実行されれば、かつCk[z]がBi'[y]の前に実行されれば、サイクルはない。ダイアグラム1203は、Dj'[z]の実行を再順序付けするとサイクルがない実行タイムラインを示す。すなわち、NI[b]がDj'[b]の前に実行されれば、かつNI[a]がDj'[b]の前に実行されれば、サイクルはない。
【0086】
上述したように、サイクルを防止するためにトランザクションの実行が順序付けされてよい。トランザクション実行の順序付けは、「エポック」を使用して達成されてよい。エポックは、「区切りトランザクションタイプ」間の期間を言う。このエポックベースのストリーミング同時実行制御は、直列化グラフ内のサイクルがいつ起こりそうかを判定し、そしてサイクルを防止するためにトランザクションを順序付けする。
【0087】
図13は、一実施形態に係る、トランザクションの履歴の分析のダイアグラム1301、1302を示す。ダイアグラム1301は、直列化グラフ(例えば、履歴)が非巡回であるように1つのトランザクションタイプ(例えば、タイプA)のトランザクションがスケジュールされない限り静的サイクルのトランザクションの履歴の分析を示す。トランザクション「A」をその競合するトランザクションタイプ(すなわち、タイプBおよびタイプD)のあらゆるスケジュールされたトランザクションの後に順序付けすることで、直列化グラフ(例えば、Aの履歴)を非巡回に保つ。ダイアグラム1301は、トランザクション実行タイムラインをトランザクションAの実行の前後へ分けるエポック「1」およびエポック「2」を示す:トランザクションAはBiの後におよびDjの後に実行されて(矢印がAから離れて向く)サイクルがない(BiまたはDjからAに向く矢印がない)ことを保障する。すなわち、トランザクションBi、Ck、Dj、NI等を全てエポック1において実行できるが、トランザクションAが実行されることになると、エポック1におけるトランザクションがトランザクションAの前に実行されなければならず、次いでトランザクションAが実行された後に、タイプAの別のトランザクションが実行されることになるまで、その他のトランザクションのタイプがエポック2において実行されてよい。タイプAの別のトランザクションが実行されると、同じ前後要件が課される:現在のエポックにおけるトランザクションがトランザクションAの前に実行され、そして後に受信される任意の他のトランザクションのタイプが次のエポックにおいて実行される。そのため、トランザクションAは、エポックに基づくこの前後実行要件がサイクルを区切り、それによって適切な直列実行を保証できるので「区切りトランザクションタイプ」と称される。
【0088】
ダイアグラム1302は、静的サイクルのトランザクション(例えば、トランザクションの履歴)の直列化グラフの更なる分析を示す。この分析例では、(1)1つのタイプ(例えば、タイプA)のトランザクションがスケジュールされない限り、直列化グラフは非巡回であり、(2)トランザクションAをその競合するトランザクションタイプ(例えば、BおよびS)のあらゆるスケジュールされたトランザクションの後に順序付けすることで、直列化グラフ(Aの履歴)を非巡回に保ち、(3)以降のトランザクション(例えば、Bi'およびCk')を競合するトランザクションタイプの既にスケジュールされたトランザクションの後に順序付けすることで、前のトランザクションを追い越すことがサイクルを生じさせることになるので、トランザクションAが出現した(例えば、要求または開始された)後に直列化グラフを非巡回に保つ。この分析は、再帰的で再び(1)から始まってよい。
【0089】
タイプAのトランザクションに対するトランザクションスケジューラがその他のトランザクションのタイプに対するトランザクションスケジューラに、エポック変化が発生するであろうことを通知できる。特定のトランザクションのタイプに対するトランザクションスケジューラは、実行コンポーネントによって実装されてよく、かつトランザクションの要求を受信し、そしてトランザクションを実行するために他の実行コンポーネントに対応するイベントを発行してよい。
【0090】
上述したエポック通知通信は単方向でよい(例えば、往復通信は必要とされない)。この単方向通信を想定すると、本明細書に記載されるようにエポック上で使用する同時実行制御プロトコルは、それが、2相ロッキングまたは他の「所有権」プロトコルなど、所有権を移転するために追加の通信を必要とする先行の同時実行制御プロトコルより効率的に適切な直列化を保障するという点で有利である。
【0091】
任意の入力の直列化は、以下のプロトコルを使用して行われてよい。このプロトコルは、現在のエポックに安全なトランザクションをスケジュールする。しかしながら、区切りトランザクションタイプをスケジュールすることで、直列化グラフにおいて全ての競合エッジが次のエポックのトランザクションから先行のエポックのトランザクションに向くようにトランザクションを先行および次のエポックに分離して、直列化グラフを非巡回に保つ。
【0092】
任意の入力履歴の直列化のためのプロトコルは次の通りである:
【0093】
(1)区切りトランザクションタイプがスケジュールされるまで安全なトランザクションタイプが現在のエポックにスケジュールされる。
【0094】
(2)区切りトランザクションタイプが現在のエポックの最後のトランザクションとしてスケジュールされ、そしてそれは、次のエポックへの遷移をトリガする。
【0095】
(3)エポック間の遷移は、次のエポックに新たなトランザクションをスケジュールすること、現在のエポックの全ての属性アクセスを実行すること、および区切りトランザクションタイプのアクセスが現在のエポックにおいて最後に実行される(例えば、区切りトランザクションタイプは安全なトランザクションタイプの後に実行される)ことを伴う。
【0096】
任意の入力履歴の直列化のためのプロトコルは、トランザクションを開始する区切りトランザクションタイプおよび安全なトランザクションタイプのトランザクションスケジューラによって実装されてよい。これらのスケジューラは、上述したように実行コンポーネントによって実装されてよい。プロセッサ(実行コンポーネント)は、トランザクションのタイプ(区切るタイプまたは安全なタイプ)に関係なく特定の属性にアクセスする全ての動作を実行してよい。
【0097】
トランザクションをスケジュールすることは以下を伴う:登録されたトランザクションタイプ(例えば、データベースシステムのユーザによって登録される)が有向非巡回グラフ(DAG)としての属性へのアクセスの順序を定める。所与のタイプのトランザクションは、最初に所与のトランザクションタイプのDAGのルートの属性をホストするプロセッサに要求を送ることによってスケジュールされ、次いでこれらのプロセッサが更なる要求を送る。区切るトランザクションのタイプがスケジュールされると、全てのトランザクションスケジューラにおいてエポックが進められ、所与のタイプの最後のトランザクションを記すツームストントランザクションをスケジュールする。ツームストントランザクションは所与のトランザクションタイプのDAGに従って(例えば、通常のトランザクションであるように)スケジュールされるが、属性の全てのパーティションにアクセスし、そうするとエポックの終了は全ての関連したプロセッサに伝搬する。
【0098】
プロセッサがツームストントランザクションの要求を受信すると、それは、全てのトランザクションタイプに対して現在のエポックが空にされるまで一致したトランザクションタイプの全ての更なる要求をバッファし(すなわち、全てのトランザクションタイプからのツームストントランザクションの要求を受信し)、次いでそれは、次の属性のパーティションを動作させる全てのプロセッサに、プロトコル(3)に従って、このツームストントランザクションの次の要求を送る。
【0099】
更なる実装の詳細がここで提供される。任意の入力履歴の直列化の実装(例えば、直列化グラフ)は、そのピアの「安全なトランザクションタイプ」トランザクションスケジューラに次のエポックを示すマルチキャストメッセージを送ることによって次のエポックをトリガするように構成される「区切りトランザクションタイプ」(例えば、上の例ではトランザクションA)を含んでよい。区切りトランザクションタイプは、エポック間にスケジュールされてよいトランザクションのタイプである。エポックは、安全なトランザクションタイプが実行されてよい期間である。安全なトランザクションタイプが、サイクルなしに並列に実行され得るトランザクションのタイプであるのに対して、区切りトランザクションタイプは、他のトランザクションと並列に実行されればサイクルを作成するであろうトランザクションのタイプである。安全なトランザクションタイプは、エポックの間にいかなる順でも実行されてよく、次いで区切るトランザクションのタイプが実行されることになると、それは、現在のエポックにおいて全てのトランザクションが実行された後にスケジュールされ、そして後のトランザクションは、次のエポックに区切りトランザクションタイプの後にスケジュールされる。
【0100】
直列化の実装は、トランザクションタイプの各々に対する「ツームストン」トランザクションを使用してよい。区切りトランザクションスケジューラ(実行コンポーネントによって実装される)が他のトランザクションスケジューラ(他の実行コンポーネントによって実装される)に新しいエポックについて通知すると、他の安全なトランザクションタイプスケジューラは、それらの対応するトランザクションタイプの「ツームストン」トランザクションを発行してよい。ツームストントランザクションは、現在のエポックにおいて実行されることになるその特定のタイプの最後のトランザクションを記す。ツームストントランザクションがスケジュールされた後、安全なトランザクションタイプスケジューラは、次のエポックに対してトランザクションをスケジュールするだけである。スケジューラは、ツームストントランザクションに対して特定のエポックにおいて実行するようにトランザクションを連続的にスケジュールすることができてよい。
【0101】
実行コンポーネントにディスパッチされるトランザクションが一部のテーブル上で何らかの順に動作を実行することになり、そして実行コンポーネントは、トランザクションを連続的に実行しつつ、次のエポックがいつ発生するかを知らなければならないので、ツームストントランザクションは直列化を可能にする。正しい順序に実行を提供するために、トランザクションは、それらが実行されることになるエポックがタグ付けされる。ツームストントランザクションは、実行コンポーネントがツームストントランザクションを処理すると、それが次のエポックのイベントを実行し始めることができることを知り、かつそれが前のエポックのイベントが到着しないことを知るように、現在のエポックの全てのイベントの後に順序付けられる。ツームストントランザクションが実行コンポーネントによって処理されると、それは全ての他の安全なトランザクションタイプのツームストンを収集する。全ての安全なトランザクションタイプに対するツームストンが受信されると、実行コンポーネントは、他のいかなるトランザクションも現在のエポックにおいて未処理でないことを知る。特定のテーブルに対してイベントを実行する実行コンポーネントは、登録または記憶されたトランザクションタイプの全体の数を知っており、そのためそれは、収集される必要があるツームストンの数を決定できる。ツームストン収集プロセスは分散され、あらゆる実行コンポーネントがそれ自体でツームストン収集を行う。特定のタイプのツームストントランザクションは、それがそのタイプに対するスケジューラによってスケジュールおよび開始され、そしてそのタイプの任意の他のトランザクションのように実行コンポーネントを通って流れるという点で、そのタイプの「ダミー」トランザクションと考えられてよい。しかしながら、テーブルは、ツームストントランザクションに基づいてアクセスされない。
【0102】
上記した同時実行制御プロトコルは、区切らない(安全な)トランザクションのタイプをサイクルが防止されるように実行し、それによってトランザクションの適切な直列化を達成する、エポック間にスケジュールできる区切るタイプであるトランザクションのタイプを特定するために使用される直列化グラフを生成するためにトランザクションのトポロジを使用するという点で有利である。プロトコルの別の利点は、「所有権」または「ロッキング」に依存する先行の同時実行制御プロトコルと比較してエポックおよびツームストントランザクションの使用が必要とする通信が少ないということである。
【0103】
図14は、一実施形態に係る、状態機械として実装される同時実行制御プロトコルのダイアグラム1400を示す。この状態機械は、上記した同時実行制御プロトコルに従ってトランザクション処理を記載する。プロトコルは、要求により以下の区切りトランザクションタイプイニシエータ論理を含む:(1)現在のエポックでトランザクションおよびツームストンをディスパッチする、(2)エポックをインクリメントする、(3)安全なトランザクションタイプイニシエータに次のエポックをマルチキャストする。プロトコルは、要求により以下の安全なトランザクションタイプイニシエータ論理を含む:現在のエポックでトランザクションをディスパッチする。プロトコルは、次のエポック上に以下の安全なトランザクションタイプイニシエータ論理を含む:(1)現在のエポックでツームストンをディスパッチする、(2)次のエポックを取る。
【0104】
プロセッサ論理は、同じトランザクションタイプのイベントが順に到着すると仮定する。
【0105】
要求に関する論理は:
現在のエポックにあれば:実行する(一部のトランザクションタイプの要求は、他のトランザクションタイプのツームストンが受信されたとき、まだ到着してよい);
さもなければ(次のエポック):消費(バッファ)しない。
【0106】
ツームストンに関する論理は:
次のエポックのツームストンであれば:消費(バッファ)しない
現在のエポックにあれば:未処理のツームストンをデクリメントする
BTTツームストンであれば:トランザクションの終わりまで動作を延期する。
未処理のツームストンがなければ:トランザクションを終了する。
【0107】
終了移行に関する論理は:
延期されたBTT動作を実行する
消費されなかったメッセージを続ける
【0108】
バッファリングに関する論理は:
(1)トランザクションタイプによってイベントストリームを物理的にパーティションし、次いで単に消費しない(より単純かつステートレス設計およびFPGAに合う)
(2)または2次バッファを使用し、次いでコピーおよびリプレイ(パーティションごとにバッファまたは単一のバッファも)
【0109】
オプション1は、実行のためにより単純でありかつストリーミングアイデアに従いかつFPGAに合う。オプション2は、通信のためにより単純である。
【0110】
ハードウェア例
図15は、本明細書に記載されるシステムおよび方法を実装するための専用計算機械のハードウェアのダイアグラム1500を示す。以下のハードウェア記載は単に1つの例である。上記の技術を実装するために各種のコンピュータトポロジが使用され得ることが理解されるはずである。図15に示されるハードウェアは、本明細書に記載されるコンピュータシステムおよびコンピュータソフトウェア(コンピュータリプログラムコード)を実装するために使用されてよい。
【0111】
コンピュータシステム1510は、情報を通信するためのバス1505または他の通信機構、および情報を処理するための、バス1505と結合される1つまたは複数のプロセッサ1501を含む。コンピュータシステム1510は、例えば上記した技術の一部を行うための情報および命令を含む、プロセッサ1501によって実行されるべき情報および命令を記憶するための、バス1505に結合されるメモリ1502も含む。このメモリは、プロセッサ1501によって実行されるプログラムを記憶するためにも使用されてよい。このメモリの可能な実装は、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)または両方でよいが、これに限定されない。情報および命令を記憶するために記憶装置1503も提供される。記憶装置の一般形態は、例えば、ハードドライブ、磁気ディスク、光ディスク、CD-ROM、DVD、フラッシュもしくは他の不揮発性メモリ、USBメモリカード、またはコンピュータが読み取ることができる任意の他の媒体を含む。記憶装置1503は、例えば、上記の技術を行うためのソースコード、バイナリコードまたはソフトウェアファイルを含んでよい。記憶装置およびメモリは、両方とも非一時的コンピュータ可読記憶媒体の例である。
【0112】
コンピュータシステム1510は、コンピュータユーザに情報を表示するためのディスプレイ1512にバス1505を介して結合されてよい。ユーザからプロセッサ1501に情報およびコマンド選択を通信するために、キーボード、タッチスクリーンおよび/またはマウスなどの入力装置1511がバス1505に結合される。これらの部品の組合せは、ユーザがシステムと通信するのを可能にする。一部のシステムにおいて、バス1505は、例えば、複数の専用バスを表す。
【0113】
コンピュータシステムは、バス1505と結合されるネットワークインタフェース1504も含む。ネットワークインタフェース1504は、コンピュータシステム1510とネットワーク1520との間の双方向データ通信を提供してよい。ネットワークインタフェース1504は、例えば、無線または有線接続でよい。ネットワーク1520は、例えば、ローカルエリアネットワークまたはイントラネットでよい。コンピュータシステム1510は、インターネット1530に接続されるコンピュータシステムに、ネットワーク1520を渡って、ネットワークインタフェース1504を通じて情報を送受信できる。インターネット1530を使用して、コンピュータシステム1510は、複数の異なるハードウェアサーバ1531~1534に存在するデータおよび特徴にアクセスしてよい。サーバ1531~1534は、一部の実施形態においてクラウド計算環境の一部でよい。
【0114】
実施形態例
上記の技術を実装する様々な実施形態例が下記される。
【0115】
上記説明は、特定の実施形態の態様がどのように実装されてよいかの例とともに本開示の様々な実施形態を例示する。上記例は、唯一の実施形態であるとみなされるべきでなく、以下の特許請求の範囲によって定められる特定の実施形態の柔軟性および利点を例示するために提示される。上記の開示および以下の特許請求の範囲に基づいて、特許請求の範囲によって定められる本開示の範囲から逸脱することなく他の配置、実施形態、実装例および均等物が利用されてよい。
【符号の説明】
【0116】
100 データベースシステム
101 トランザクション登録コンポーネント
102 トランザクションタイプ決定コンポーネント
103 トランザクションタイプトポロジ作成コンポーネント
104 合成トポロジ作成コンポーネント
105 直列化グラフ生成コンポーネント
106 サイクル特定コンポーネント
107 区切りトランザクションタイプ決定コンポーネント
108 トランザクションストリーム受信コンポーネント
109 トランザクション実行コンポーネント
111 第1のトランザクションタイプスケジューラ
119 最後のトランザクションタイプスケジューラ
121 第1のテーブル実行コンポーネント
129 最後のテーブル実行コンポーネント
1501 プロセッサ
1502 メモリ
1503 記憶装置
1504 ネットワークインタフェース
1505 バス
1510 コンピュータシステム
1511 入力装置
1512 ディスプレイ
1520 ネットワーク
1530 インターネット
1531~1534 ハードウェアサーバ
AC 任意のコンポーネント
DB1 第1のデータベース
DB2 第2のデータベース
QO クエリオプティマイザ
W ワーカ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
【外国語明細書】