(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-17
(54)【発明の名称】トランザクション整合性のためのディレクタベースのデータベースシステム
(51)【国際特許分類】
G06F 11/18 20060101AFI20240709BHJP
G06F 16/28 20190101ALI20240709BHJP
G06F 9/46 20060101ALI20240709BHJP
【FI】
G06F11/18
G06F16/28
G06F9/46 430
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023575635
(86)(22)【出願日】2022-05-09
(85)【翻訳文提出日】2024-02-02
(86)【国際出願番号】 US2022072197
(87)【国際公開番号】W WO2022261588
(87)【国際公開日】2022-12-15
(32)【優先日】2021-06-08
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ヘランド,パトリック ジェイムズ
【テーマコード(参考)】
5B034
5B175
【Fターム(参考)】
5B034AA04
5B034CC01
5B175CA09
(57)【要約】
トランザクションを実行するように動作可能なワーカノードと、トランザクションのトランザクション整合性を確保するように動作可能なディレクタノードとを含むデータベースシステムに関連する技法が開示される。ワーカノードは、レコードを書き込むことを含むトランザクションを実行する要求を受信し得る。次いで、ワーカノードは、データベースシステムのディレクタノードに対して、トランザクションのための動作の実行を容易にする情報の要求を発行し得る。ディレクタノードは、動作がデータベースシステムにおいてトランザクションの不整合を引き起こす可能性があるかどうかに基づいて、要求を承認するかどうかを決定し得る。ワーカノードは、受信された応答のいずれもトランザクションの不承認を示すことなく、ディレクタノードの過半数から承認応答を受信したことに応答して、トランザクションのための動作の実行に進み得る。
【特許請求の範囲】
【請求項1】
データベースシステムのワーカノードが、レコードを書き込むことを含むトランザクションを実行する要求を受信するステップであって、前記データベースシステムは、前記データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードと、前記トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを含む、ステップと、
前記ワーカノードが、前記複数のディレクタノードのうちのいくつかのディレクタノードに対して、前記トランザクションのための動作の実行を容易にする情報の要求を発行するステップと、
前記複数のディレクタノードの過半数から承認応答を受信したことに応答して、前記ワーカノードが、前記トランザクションのための前記動作の実行に進むステップであって、前記受信された応答のいずれも前記トランザクションの不承認を示さない、ステップと
を含む方法。
【請求項2】
前記情報の要求は前記レコードを指定し、前記動作は前記トランザクションをコミットすることに対応し、前記ディレクタノードのうちの所与のディレクタノードは、前記レコードが、前記所与のディレクタノードに知られている承認済みレコードの履歴と競合するかどうかに基づいて、前記トランザクションの前記コミットを承認するかどうかを決定するように動作可能である、請求項1に記載の方法。
【請求項3】
前記ディレクタノードへの前記要求は、前記トランザクションのスナップショット時間を指定し、前記所与のディレクタノードは、前記レコードと、前記スナップショット時間の後に承認された前記承認済みレコードの履歴のレコードのみとの間の競合をチェックするように動作可能である、請求項2に記載の方法。
【請求項4】
前記承認済みレコードの履歴は、前記複数のワーカノードから前記複数のワーカノード間で共有される永続ストレージにフラッシュされていない1つ又は複数のレコードを含む、請求項2又は3に記載の方法。
【請求項5】
前記所与のディレクタノードは、前記ワーカノードへの承認応答の送信に応答して、前記承認済みレコードの履歴に前記レコードを含めるように動作可能である、請求項2から4のいずれか一項に記載の方法。
【請求項6】
前記所与のディレクタノードは、前記複数のディレクタノードのうちの他のディレクタノードと通信することなく、前記トランザクションの前記コミットを承認するかどうかを決定するように動作可能である、請求項2から5のいずれか一項に記載の方法。
【請求項7】
前記ディレクタノードへの前記要求はコミット時間を示し、前記所与のディレクタノードは、前記コミット時間に前記ワーカノードからの前記要求を処理するように動作可能である、請求項2から6のいずれか一項に記載の方法。
【請求項8】
前記トランザクションをコミットする許可が付与されたと決定した後、前記ワーカノードが、前記トランザクションをコミットし、前記複数のワーカノード間で共有される永続ストレージに前記レコードをフラッシュするステップ
を更に含む、請求項2から7のいずれか一項に記載の方法。
【請求項9】
データベースシステムのワーカノードに動作を実行させることができるプログラム命令を記憶したコンピュータ可読媒体であって、前記動作は、
レコードを書き込むことを含むトランザクションを実行する要求を受信するステップであって、前記データベースシステムは、前記データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードと、前記トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを含む、ステップと、
前記ワーカノードのインメモリキャッシュに前記レコードを書き込むステップと、
前記レコードをコミットする許可を要求するコミット要求を、前記複数のディレクタノードのうちのいくつかのディレクタノードに対して発行するステップと、
前記トランザクションの不承認を示す応答を受信することなく、前記複数のディレクタノードの過半数から承認応答を受信したことに基づいて、前記レコードをコミットする許可が付与されたと決定するステップと
を含む、コンピュータ可読媒体。
【請求項10】
前記動作は、
承認応答が前記複数のディレクタノードの過半数から受信されていないという決定に基づいて、前記トランザクションを中止するステップ
を更に含む、請求項9に記載のコンピュータ可読媒体。
【請求項11】
前記動作は、
前記ディレクタノードのうちの少なくとも1つから、前記レコードと前記少なくとも1つのディレクタノードに知られている別のレコードとの間の競合に基づいて前記トランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、前記トランザクションを中止するステップ
を更に含む、請求項9に記載のコンピュータ可読媒体。
【請求項12】
前記コミット要求は、前記トランザクションをコミットするための提案された期間を指定し、前記動作は、
前記ディレクタノードのうちの少なくとも1つから、前記提案された期間の後の前記コミット要求の到着に基づいて前記トランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、前記トランザクションを中止するステップ
を更に含む、請求項9に記載のコンピュータ可読媒体。
【請求項13】
前記動作は、
別のワーカノードから、前記レコードの要求を受信するステップと、
前記トランザクションをコミットした後に、前記レコードを前記別のワーカノードに提供するステップと
を更に含む、請求項9に記載のコンピュータ可読媒体。
【請求項14】
コンピュータであって、
少なくとも1つのプロセッサと、
請求項1から8のいずれか一項に記載の方法を実行するために前記少なくとも1つのプロセッサによって実行可能なプログラム命令が記憶されたメモリと
を備えるコンピュータ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、データベースシステムに関し、より詳細には、データベースシステムの構成要素のスローダウンに対処することに関する。
【背景技術】
【0002】
企業は、現代のデータベース管理システムを日常的に採用しており、ユーザは、効率的にアクセス及び操作することができるように、情報の集合体を整理して記憶し得る。歴史的に、これらのシステムは、これらの企業が所有するデータセンタに維持されるハイエンドで高価なハードウェア上に展開されてきた。ほとんどの場合、ハイエンドハードウェアは予測可能に動作し、システムが高速で応答性の高いレイテンシを達成することを可能にする。しかしながら、時間の経過とともに、ますます多くの企業が、自社のシステムをクラウドに移行させており、従って、クラウドプロバイダによって供給されるハードウェアに依存している。しかしながら、クラウドプロバイダは、自社のクラウドインフラストラクチャ内で、ハイエンドハードウェアより挙動が予想しにくいより安価なハードウェアを使用する方向にシフトし始めている。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、ワーカノード及びディレクタノードを含むシステムの例示的な要素を示すブロック図である。
【
図2】いくつかの実施形態による、ワーカノードの例示的な要素を示すブロック図である。
【
図3】いくつかの実施形態による、ディレクタノードの例示的な要素を示すブロック図である。
【
図4】いくつかの実施形態による、履歴レコードデータ構造の例示的な要素を示すブロック図である。
【
図5】いくつかの実施形態による、1つのワーカノードと複数のディレクタノードとを含むスナップショット関連の対話の例示的な要素を示すブロック図である。
【
図6】いくつかの実施形態による、異なるディレクタノード上の履歴情報の例示的なレイアウトを示すブロック図である。
【
図7】いくつかの実施形態による、1つのワーカノードと複数のディレクタノードとを含むコミット関連の対話の例示的な要素を示すブロック図である。
【
図8】いくつかの実施形態による、異なるディレクタノード上の履歴情報の別の例示的なレイアウトを示すブロック図である。
【
図9】いくつかの実施形態による、システムの構成要素間の時間を揃えることに関する例示的な要素を示すブロック図である。
【
図10】いくつかの実施形態による、アシスタントノードの例示的な要素を示すブロック図である。
【
図11】いくつかの実施形態による、ワーカノード及びアシスタントノードが同じレコードをデータベースにフラッシュするフラッシュ動作の例示的な要素を示すブロック図である。
【
図12】いくつかの実施形態による、トランザクションのための動作の実行を容易にするためにディレクタノードと対話するワーカノードに関する例示的な方法を示すフロー図である。
【
図13】いくつかの実施形態による、システム内のトランザクション整合性を確保するディレクタノードに関する例示的な方法を示すフロー図である。
【
図14】いくつかの実施形態による、承認済みレコードの履歴を記述する履歴情報を取得するためにディレクタノードと対話するワーカノードに関する例示的な方法を示すフロー図である。
【
図15】いくつかの実施形態による、トランザクションのための動作を実行することに関連付けられた提案された時間を選択するワーカノードに関する例示的な方法を示すフロー図である。
【
図16】いくつかの実施形態による、トランザクションのための提案されたスナップショット時間を選択するワーカノードに関する例示的な方法を示すフロー図である。
【
図17】いくつかの実施形態による、ディレクタノードによって観察された時間を他のディレクタノードによって観察された時間と揃えることを試みるディレクタノードに関する例示的な方法を示すフロー図である。
【
図18】いくつかの実施形態による、ディレクタノードによって観察された時間を揃えることを試みるディレクタノードに関する例示的な方法を示すフロー図である。
【
図19】いくつかの実施形態による、ワーカノードによって実行される作業を観察するアシスタントノードに関する例示的な方法を示すフロー図である。
【
図20】いくつかの実施形態による、ワーカノードによって実行される作業を観察するアシスタントノードに関する別の例示的な方法を示すフロー図である。
【
図21】いくつかの実施形態による、マルチテナントシステムの要素を示すブロック図である。
【
図22】いくつかの実施形態による、本開示で説明される様々なシステムを実装するためのコンピュータシステムの要素を示すブロック図である。
【発明を実施するための形態】
【0004】
説明したように、クラウドプロバイダは、自社のクラウドインフラストラクチャにおいて、より安価で、従って信頼性の低いハードウェアを使用する方向にシフトしつつある。安価なハードウェアを使用した結果、サーバがランダムに遅くなるという報告の数が増加している。サーバ(又は他の構成要素)のこのランダムなスローダウンは、(サーバがその性能の著しい低下(例えば、99%以上)を突然経験する)グレー障害と、(サーバが、性能の25%の低下などのそれほど顕著でないスローダウンを経験する)ストラグラーとの両方を引き起こす。スローダウンが発生すると、サーバは「正しい」ことを行うが、それは、サーバを停止させることとなる故障検出器を回避してしまうほどゆっくりであると同時に、システム全体に問題も引き起こす。例えば、サーバは、その通常の速度の半分で動作し得るが、依然として、作業を出力したり要求に応答したりすることがゆっくりではあるが可能なので、サーバのより遅い性能にもかかわらず、システムの残りから疑われない恐れがある。
【0005】
スローダウンは、トランザクションシステム及び非トランザクションシステムに影響を及ぼし得るが、非トランザクションシステムにおいてスローダウンに対処するために使用される手法は、トランザクションシステムに適用可能ではない。トランザクションは、単一の作業単位として論理的にグループ化されたコマンドのセットである。トランザクションシステムは、トランザクション整合性を確保する指針のセットに従ってトランザクションを処理する種類のシステムである。ACID(Atomicity, Consistency, Isolation, and Durability)は、指針の一例であり、トランザクションの全てが成功するかいずれも成功しないことを保証し、データが一貫していることを確実にし、トランザクションが分離して発生することを保証し、トランザクションがコミットされると、それがシステム内に留まることを確実にしようとする。非トランザクションシステムは、トランザクション整合性を確保する一連の指針に縛られない。非トランザクションシステムにおけるスローダウンに対処する1つの手法は、制限時間に達したときに計算作業の一部を再試行すること、すなわち、低速サーバが結果を生み出せないまま一定期間経過した後に、別のサーバ上で作業が再試行することである。場合によっては、計算作業は、複数のサーバにプッシュされ、それにより、それらのサーバのうちの1つがスローダウンを被る場合でも、他のサーバは、依然として、その作業の結果を返すことができる。非トランザクションシステムの作業は冪等であり、つまり、同じ作業を複数回実行しても、システム内に意図しない状態を引き起こすことがないので、これは、非トランザクションシステムにとって許容可能な手法である。一例として、静的なウェブページをフェッチして返すことは、冪等な作業である。これは、カウンタの増分など、複数回再試行するとカウンタが意図したよりも多く増分される可能性がある非冪等作業とは対照的である。トランザクションデータベースシステムは、トランザクション整合性を確保する原理を遵守するので、トランザクションデータベースシステムの作業は一般に非冪等であり、通常は、トランザクションが一度に1つだけ発生しているように見えることが保証されている。従って、複数のサーバ上で同じ作業を試みる手法は、トランザクションデータベースシステムに対して実行可能ではない。本開示は、とりわけ、トランザクションデータベースシステムを、システムの個々の構成要素を遅くさせ得るスローダウンからどのように守るかという問題に対処する。
【0006】
スローダウンはまた、トランザクションを実行するより多くのデータベースノード(代替的に、「ワーカ」ノード)を有するようにトランザクションデータベースシステムをスケーリングしようとするときに問題を引き起こす。システム内のデータベースノードの数が増加するにつれて、トランザクションの不整合の可能性も増加する。一実施形態では、ワーカノードによって実行されるトランザクション間の競合をチェックすることによって、トランザクションデータベースシステムにおけるトランザクション整合性を確保するディレクタノードが実装される。しかしながら、1つのディレクタノードを使用するシステムは、そのディレクタノードの同意なしにトランザクションを完了することができないので、そのディレクタノードがスローダウンを被る場合、かなり大きな性能低下の影響を受けやすい。本開示は、とりわけ、トランザクションデータベースシステムで発生するスローダウンを考慮して、どのようにワーカノード間のトランザクション整合性を確保するかという問題に更に対処する。
【0007】
本開示は、システムに対するスローダウンの影響の一部又は全部を緩和する機構を実装するための技法について説明する。以下で説明する様々な実施形態では、システムは、データベースと、データベースにレコードを書き込むことを含むシステムのためのトランザクションを実行する「ワーカ」ノードのセットとを含む。システムは更に、ワーカノードによって実行されるトランザクション間のトランザクション整合性を確保するのに役立つ「ディレクタ」ノードのグループを含む。トランザクションの実行全体を通して、ワーカノードは、ディレクタノードと対話して、そのワーカノードのアクションがシステム内の他のワーカノードのアクションに干渉しないことを確実にし得る。ディレクタノードのグループと対話するとき、ワーカノードは、ディレクタノードのセット(例えば、それらの一部又は全て)に要求を送信し、続行する前にディレクタノードのグループの少なくとも過半数からの承認応答を待つ。場合によっては、ディレクタノードは、ワーカノードによって提出されたレコードと、個々のディレクタノードに知られている承認済みレコード(すなわち、コミットされることが承認されたレコード)の履歴との間の競合をチェックする。競合が識別されると、ディレクタノードがワーカノードに不承認応答を送信することになり得る。他の場合、ディレクタノードは、トランザクションを開始する際に問題をチェックし、特定の時間までの以前の承認済みレコードに関する情報を含む承認応答を返し得る。ワーカノードがディレクタノードのグループの過半数から承認応答を受信しない場合、又は不承認応答を受信する場合、ワーカノードはトランザクションを中止し得る。
【0008】
これらの技法は、システムにおけるトランザクション整合性を確保すると同時に、そのシステムに対するスローダウンの影響を移動させることができるので、有利であり得る。特に、以下でより詳細に説明するように、トランザクション整合性を確保するのには、全てのディレクタノードが応答する必要はなく、過半数だけが応答すればよいようにシステムを構造化し得る。従って、1つ又は複数のディレクタノードは、システムのトランザクションの進行を減速させることなく、スローダウンの結果として予想外に遅くなり得る。システムが3つのディレクタノードのグループを含み、少なくとも2つのディレクタノード(過半数)からの承認応答が一緒にトランザクション整合性の保証を提供する例を考える。ワーカノードは、トランザクションをコミットする許可のために、3つのディレクタノード全てにコミット要求を送信し得る。この例では、ワーカノードが3つのディレクタノードに要求を送信し、2つ承認応答がトランザクション整合性を確保するために必要なだけなので、ディレクタノードのうちの1つは、他の2つのディレクタノードが応答している間、スローダウンを被り、遅くなってもよい。その結果、そのスローダウンによってシステム全体が遅くなることはない。
【0009】
本開示は、ワーカノードに対するスローダウンの影響の一部又は全部を緩和するためのアシスタントノードの使用について更に説明する。様々な実施形態では、ワーカノードは、ワーカノードが実行する作業を観察する1つ又は複数のアシスタントノードに関連付けられる。アシスタントノードは、ワーカノードのトランザクションログに従い、ワーカノードにおいて書き込まれたレコードに一致するレコードを記憶し得る。動作中、第1のワーカノード(「読み取り」ノード)は、第2のワーカノード(その作業がアシスタントノードによって観察されている「書き込み」ノード)と通信して、第2のワーカノードからレコードを取得することを試み得る。いくつかの事例では、書き込みワーカノードは、スローダウンを被り、タイムリーに応答を提供することができない場合がある。次いで、読み取りワーカノードは、レコードを取得しようとして書き込みワーカノードのアシスタントノードと通信し得る。アシスタントノードは書き込みワーカノードの作業を観察するので、アシスタントノードは、書き込みワーカノードに代わって応答を提供し得る。応答には、レコードが含まれ得る。これらの技法は、読み込みワーカノードが、スローダウンを被っている他のワーカノード(例えば、書き込みワーカノード)によって遅くなる(例えば、応答を待つ)ことを防ぐことができるので、有利であり得る。本開示はまた、システムのワーカノードとディレクタノードとの間で時間を揃えることに関する概念についても説明する。次に、
図1を参照しながら、本開示の技法の例示的な適用例について説明する。
【0010】
ここで
図1を参照すると、システム100のブロック図が示されている。システム100は、ハードウェア又はハードウェアとソフトウェアとの組合せを介して実装され得る構成要素のセットを含む。図示の実施形態では、システム100は、データベース110と、ワーカノード120を有するワーカクラスタ119と、ディレクタノード135を有するディレクタクラスタ130とを含む。また、図示のように、データベース110及びワーカノード120は、レコード115を含む。いくつかの実施形態では、システム100は、図示されるものとは異なるように実装される。例えば、システム100は、ワーカノードの作業を観察するアシスタントノードを含み得るが、場合によっては、ワーカノードは、別のワーカノードに対するアシスタントノードとして機能し得る。
【0011】
システム100は、様々な実施形態では、当該サービスのユーザがアプリケーションを開発し、実行し、管理することを可能にするプラットフォームサービス(例えば、顧客関係管理(CRM)プラットフォームサービス)を実装する。システム100は、マルチテナントシステムによってホストされるユーザ/テナントに様々な機能を提供するマルチテナントシステムであってもよい。従って、システム100は、様々な異なるユーザ(例えば、システム100のプロバイダ及びテナント)からのソフトウェアルーチンを実行するとともに、コード、ウェブページ、及び他のデータを、ユーザ、データベース(例えば、データベース110)、及びシステム100の他のエンティティに提供し得る。様々な実施形態では、システム100は、クラウドプロバイダによって提供されるクラウドインフラストラクチャを使用して実装される。従って、データベース110、ワーカノード120、及びディレクタノード135は、それらの動作を容易にするために、クラウドインフラストラクチャの利用可能なクラウドリソース(例えば、コンピューティングリソース、ストレージリソース、ネットワークリソースなど)上で実行し、それを利用し得る。一例として、ワーカノード120は、クラウドプロバイダのデータセンタ内に含まれるサーバベースのハードウェア上でホストされるそれぞれの仮想環境内で実行し得る。しかしながら、いくつかの実施形態では、システム100は、パブリッククラウドとは対照的に、ローカル又はプライベートインフラストラクチャを使用して実装される。
【0012】
データベース110は、様々な実施形態では、その情報のアクセス、記憶、及び操作を可能にするように整理された情報の集合体である。従って、データベース110は、ワーカノード120がデータベース110に記憶された情報に対して動作(例えば、アクセス、記憶など)を実行することを可能にするサポートソフトウェア(例えば、ストレージノード)を含み得る。様々な実施形態では、データベース110は、ネットワーク(例えば、ストレージ接続ネットワーク(SAN))上で互いに接続され、データ損失を防ぐために冗長的に情報を記憶するように構成された単一又は複数のストレージデバイスを使用して実装される。ストレージデバイスは、データを永続的に記憶し得るので、データベース110は、システム100の永続ストレージとして機能し得る。ワーカノード120によってデータベース110に書き込まれる情報(例えば、レコード115)は、他のワーカノード120にアクセス可能であり得る。
図11に関してより詳細に説明するように、レコード115は、ログ構造マージツリー(LSMツリー)ファイルに、データベース110において実装されるLSMツリーの一部として記憶され得る。
【0013】
図示のように、データベース110はレコード115を記憶する。レコード115は、様々な実施形態では、データと、そのレコード115をルックアップするために使用可能な対応するキーとを含むキー値ペアである。一例として、レコード115は、データベーステーブル内のデータ行に対応し、そのデータベーステーブルの1つ又は複数の属性/フィールドの値を指定し得る。様々な実施形態では、レコード115は不変であるので、基礎となるデータベース構成物(database construct)(例えば、テーブル内の行)を更新するためには、新しいレコード115が書き込まれる。従って、データベース構成物は、それぞれがそのデータベース構成物の異なるバージョンである複数のレコード115に関連付けられ得る。これらのレコード115は、データベース構成物の「レコードバージョン」と呼ぶことができる。一例として、データベース行の特定の値を記憶する第1のレコード115(第1のレコードバージョン)が最初に書き込まれ得、その後、データベース行の値のうちの1つ又は複数を更新する第2のレコード115(第2の後続のレコードバージョン)が書き込まれ得る。それらの2つのレコード115は、同じキーを使用してアクセス可能であり得る。
【0014】
ワーカノード120は、様々な実施形態では、データ記憶、データ取り出し、及び/又はデータ操作などの様々なデータベースサービスを提供する。様々な実施形態では、ワーカノード120は、ハードウェア上で実行可能なソフトウェアルーチンのセットであるが、いくつかの実施形態では、ワーカノード120は、ハードウェアとソフトウェアルーチンの両方を包含する。データベースサービスは、システム100内の他の構成要素又はシステム100の外部の構成要素に提供され得る。例えば、ワーカノード120は、アプリケーションノード(図示せず)からトランザクション要求125を受信して、データベーストランザクションを実行し得る。データベーストランザクションは、様々な実施形態では、データベース110に関連して実行されるべき作業の論理的な単位(例えば、データベース操作の指定されたセット)である。例えば、データベーストランザクションを処理することは、SQL SELECTコマンドを実行して、1つ又は複数のデータベーステーブルから1つ又は複数の行を選択することを含み得る。行のコンテンツは、レコード115において指定され得、従って、ワーカノード120は、1つ又は複数のテーブル行に対応する1つ又は複数のレコード115を返し得る。データベーストランザクションを実行することは、ワーカノード120が1つ又は複数のレコード115をデータベース110に書き込むことを含むことができる。様々な実施形態では、ワーカノード120は、最初に、レコード115をローカルのインメモリキャッシュに書き込み、その後、それらをデータベース110にフラッシュする。それらのレコード115をコミットし、フラッシュする前に、ワーカノード120は、ディレクタノード135と通信して、レコード115が他のワーカノード120によって実行されるレコード書き込みと競合しないことを確実にし得る。本明細書で使用される場合、「トランザクションをコミットする(committing a transaction)」(レコードをコミットすることを含む)という表現は、そのよく理解されている意味に従って使用され、トランザクション中に行われた変更を保存させ、トランザクションを実行するエンティティの外部で見えるようにするプロセスを指す。ワーカノード120はまた、システム100内に記憶されたレコードの状態に関する情報(例えば、他のワーカノード120によって潜在的にコミットされているが、データベース110において利用可能であるようにフラッシュされていないレコード115の履歴)を取得するために、トランザクションを開始するときにディレクタノード135と通信し得る。ワーカノード120の様々な構成要素は、
図2に関して詳細に説明される。
【0015】
ディレクタノード135は、様々な実施形態では、トランザクションの実行を容易にし、それらのトランザクションのトランザクション整合性を確保するのを助ける。様々な実施形態では、ディレクタノード135は、ハードウェア上で実行可能なソフトウェアルーチンのセットであるが、いくつかの実施形態では、ディレクタノード135は、ハードウェア及びソフトウェアルーチンを包含する。図示のように、ディレクタノード135はディレクタクラスタ130を形成する。ディレクタクラスタ130内のディレクタノード135の数は、実施形態によって異なり得る。例えば、ディレクタクラスタ130は、3つのディレクタノード135、5つのディレクタノード135、8つのディレクタノード135などを含み得る。ディレクタノード135はディレクタクラスタ130の一部であるが、様々な実施形態では、ディレクタノード135は互いに通信しない。具体的には、ワーカノード120が2つ以上のディレクタノード135に要求を送信するとき、それらのディレクタノード135は、要求に関する情報を互いの間で通信しなくてもよい。従って、ディレクタノード135は、他のディレクタノード135の知識及び観点とは無関係に、それ自体の知識及び観点から要求を処理し得る。しかしながら、いくつかの実施形態では、ディレクタノード135は、互いに通信して、要求を完了するために使用可能な特定の情報(例えば、承認済みレコードのそれぞれの履歴)を共有する。ディレクタノード135の様々な構成要素は、
図3及び
図4に関して詳細に説明される。
【0016】
様々な実施形態では、ワーカノード120からの要求を処理するために、ディレクタノード135は、ワーカノード120内に記憶されたレコード115の状態に関する情報を維持する。トランザクションを開始するとき、ワーカノード120は、スナップショット要求をディレクタノード120のセットに送信して、スナップショット時間を取得し得る。様々な実施形態では、スナップショット時間は、特定の時点におけるシステム100の状態を識別し、その時点において利用可能なレコードにアクセスするために、スナップショット時間の所有者(例えば、トランザクション)によって使用し得る。スナップショット時間の概念は、
図2に関してより詳細に説明される。従って、ディレクタノード135は、スナップショット時間を承認し、次いで、応答をワーカノード120に返し得る。多くの場合、応答は、ワーカノード120が、トランザクションの処理に関連し得るレコード115を位置特定し、それにアクセスすることができるように、レコード115の状態に関する情報を含む。しかしながら、ディレクタノード135からの履歴情報は、承認済みレコードの不完全な履歴であり得る。その結果、場合によっては、ワーカノード120は、完全な履歴を取得するために、ディレクタクラスタ130の過半数から応答を取得しなければならない。ディレクタノード135上の履歴情報の例示的なレイアウト及びスナップショット要求プロセスの説明は、
図5及び
図6に関してより詳細に提供される。
【0017】
トランザクションをコミットすることを望むとき、ワーカノード120は、コミット要求をディレクタノード135のセットに送信して、コミットの承認を得ることができる。要求を承認するかどうかを決定するとき、ディレクタノード135は、その履歴情報を利用して、要求されたアクション(複数可)(例えば、コミットする許可)がシステム100において不整合状態又は望ましくない状態をもたらすかどうかを決定し得る。競合がある場合、ディレクタノード135は要求を拒否し、ワーカノード120にデータベーストランザクションの一部又は全てを中止させる。ディレクタノードの観点から競合がない場合、ディレクタノード135は要求を承認し、その承認を反映するようにレコード115の状態に関するその履歴情報を更新し得る。履歴情報の例示的な更新及びコミット要求プロセスの説明は、
図7及び
図8に関してより詳細に提供される。
【0018】
ここで
図2を参照すると、ワーカノード120の例示的な要素のブロック図が示されている。図示の実施形態では、ワーカノード120は、データベースアプリケーション200と、インメモリキャッシュ210と、履歴情報220とを含む。更に図示するように、データベースアプリケーション200は、ローカルクロック205を維持し、インメモリキャッシュ210は、キー215に関連付けられたレコード115を記憶し、履歴情報220は、履歴レコード225のセットを含む。いくつかの実施形態では、ワーカノード120は、図示されるものとは異なるように実装される。例えば、ワーカノード120は、ログレコードを有するトランザクションログを記憶し得る。しかしながら、いくつかの実施形態では、トランザクションログは、
図10に関して説明されるように、ワーカノード120の間で共有されるストレージに記憶される。
【0019】
データベースアプリケーション200は、様々な実施形態では、データベース110を管理するために実行可能なプログラム命令のセットであり、これには、データベース110の周りに構築されたLSMツリーを管理することが含まれ得る。従って、データベースアプリケーション200は、システム100のためのレコード115の読み取り及び/又は書き込みを含むデータベーストランザクションを実行するための要求を受信し得る。トランザクション要求を受信すると、データベースアプリケーション200は、その要求に基づいて、そのデータベーストランザクションのスナップショット時間を取得することを含む、データベーストランザクションを開始し得る。スナップショット時間は、様々な実施形態では、どのレコード115をワーカノード120が読み取ることができるかを示す値である。値は、時間(例えば、1ミリ秒をカバーする時間ウィンドウ)又は期間を示す数値であり得る。すなわち、システム100は、時間の経過とともに整数コミット値をインクリメントし得、スナップショット時間は、そのコミット値のうちの1つに対応し得る。コミット値がスナップショット時間よりも小さい(又は様々な場合において、等しい)レコード115は、ワーカノード120によって読み取られ得る。例えば、トランザクションには、スナップショット時間「445」(又は時間「10:11:20」)が割り当てられ得る。その結果、データベースアプリケーション220は、そのトランザクションについて、コミット値が445(又は10:11:20)以下のレコード115を読み取り得る。以下で更に説明するように、ワーカノード120は、ディレクタノード135と通信して、トランザクションのスナップショット時間の承認を得ることができる。
【0020】
ローカルクロック205は、様々な実施形態では、ワーカノード120によって観察されたローカル時間を識別する。場合によっては、ローカルクロック205は、ワーカノード120上で実行中のオペレーティングシステムによって提供され、場合によっては、データベースアプリケーション200は、ワーカノード120上で実行中の他のアプリケーションがどのように時間を観察するかとは無関係に、それ自体のローカルクロック205を維持する。様々な実施形態では、データベースアプリケーション200は、ローカルクロック205の時間に基づいて、特定のデータベース操作を行う。例えば、以下で更に説明されるように、データベースアプリケーション200は、クロック205を使用して、スナップショット時間(又はコミット時間、これらは両方とも以下でより詳細に説明される)を選択し、承認のためにディレクタノード135に提案し得る。様々な実施形態では、ワーカノード120及びディレクタノード135はそれぞれ、それらのローカルクロック205に基づくシステム100内の現在時刻についてのそれら自身の意見を有する。しかしながら、ワーカノード120及びディレクタノード135のローカルクロック205は、時間の経過とともに互いに同期しなくなる可能性がある。すなわち、それらのローカルクロック205は、異なる時間を識別する可能性がある。その結果、ノードは、システム100の他のノードとはかなり異なる時間を観察し得る。これは、ノード(例えば、ディレクタノード135)が他のノード(例えば、他のディレクタノード135)よりもかなり後に要求を処理するという望ましくない影響を引き起こす可能性がある。
図9に関してより詳細に説明されるように、システム100のノードは、それらのノードが同期から大きく外れないように、それらの時間を徐々に揃えることを試み得る。
【0021】
インメモリキャッシュ210は、様々な実施形態では、ワーカノード120のメモリ(例えば、ランダムアクセスメモリ)にデータを記憶するバッファである。HBase(商標)memstoreは、インメモリキャッシュ210の一例である。トランザクションのスナップショット時間に対する十分な承認を得た後、ワーカノード120は、トランザクションを処理するためにレコード115の読み取り及び書き込みを開始し得る。様々な実施形態では、ワーカノード120は、最初に、レコード115をそのインメモリキャッシュ210に書き込み、その後、ワーカノード120によってコミットされた後に、そのレコード115をデータベース110にフラッシュする。様々な場合において、データベーステーブル内の行の最新の/最も新しいレコードバージョンは、インメモリキャッシュ210に記憶されたレコード115内に見出される。しかしながら、いくつかの実施形態では、ワーカノード120のインメモリキャッシュ210に書き込まれるレコード115は、他のワーカノード120には見えない。すなわち、他のワーカノード120は、尋ねることも告げられることもなければ、どのような情報がインメモリキャッシュ210内に記憶されているかを知らない。従って、様々な実施形態では、ワーカノード120は、特定のレコード115(例えば、データベース行の最新のレコードバージョン)が潜在的に見出され得る場所を識別する履歴情報220をディレクタノード135から取得する。従って、ワーカノード120は、履歴情報220を使用して、どのレコード115が他のワーカノード120のインメモリキャッシュ130内に記憶されているかを識別し得る。
【0022】
履歴情報220は、様々な実施形態では、履歴レコード225の集合体を含む。履歴レコード225は、様々な実施形態では、その履歴レコード115に対応するレコード115をルックアップするために使用可能なキー215について、システム100内のそのレコード225の位置を識別する情報を含む。様々な実施形態では、履歴情報220は、(異なるキーを有する)異なるレコードと、同じキーで識別された同じデータベース構成物(例えば、データ行)の異なるバージョンとをキャプチャする。従って、履歴情報220は、同じキー215を用いて異なる時間に異なるトランザクションによってコミットされた、同じデータベース構成物の複数のバージョンについての複数の履歴レコード225を含み得る。データベース構成物の特定のレコードバージョン(例えば、データベース行の最新のレコード115)を探すとき、ワーカノード120は、データベース構造に対応するキー215に基づいて履歴レコード225のセットを識別し得る。その後、ワーカノード120は、タイムスタンプから、どの履歴レコード225がレコードバージョンに対応するかを識別し得、次いで、その履歴レコード225を使用してレコード115にアクセスすることを試み得る。いくつかの実施形態では、単一の履歴レコード225は、同じキー215の複数のレコード115の位置を記憶し得る。
【0023】
ワーカノード120の外部の位置からレコード115にアクセスすることを試みるとき、様々な実施形態では、ワーカノード120は、その位置にレコード要求204を送信する。例えば、図示のように、ワーカノード120は、レコード要求204をデータベース110に送信する。レコード要求204は、レコード115に対応するキー215を指定し得、このキーは、そのレコード115の位置を位置特定することを試みるために受信側が使用することができるものである。その後、ワーカノード120は、レコード応答206を受信し得る。場合によっては、レコード応答206は、要求されたレコード115を含む。しかしながら、場合によっては、レコード応答206は、レコード115がそのロケーションにあったことを履歴レコード225が示したとしても、要求されたレコード115を含まない。例えば、ディレクタノード135は、レコード115がワーカノード120においてコミットされた可能性があることを示す履歴レコード225を作成し得る。しかしながら、そのレコード115に関連付けられたトランザクションをコミットする許可を付与された後、そのワーカノード120は、トランザクションを中止し、レコード115を削除し得る。その結果、レコード115に対するレコード要求204を受信すると、そのワーカノード120は、受信されたレコード要求204において指定された時間にそのワーカノード120がレコード115を書き込まなかったことを示すレコード応答206を返す。
【0024】
トランザクションを処理した後(例えば、そのトランザクションについての全ての要求されたレコード115を書き込んだ後)、様々な実施形態では、ワーカノード120は、ディレクタクラスタ130のディレクタノード135の過半数にコミット要求を送信する。コミット要求は、ディレクタノード135がレコード競合をチェックすることができるように、トランザクションのために書き込まれたレコード115を含み得る。不承認なしにディレクタノード135の過半数から承認を受信したことに応答して、ワーカノード120は、レコード115をコミットし得る。いくつかの実施形態では、ディレクタクラスタ130の過半数がコミット要求を承認する限り、不承認が許容される。コミットの一部として、様々な実施形態では、ワーカノード120は、レコード115がコミットされたときを示す値(例えば、時間、期間を示す数値など)を各レコード115にスタンプする。コミットされたレコード115は、トリガイベント(例えば、インメモリキャッシュ210が満杯に近い、又は満杯である)がそれらのレコード115をデータベース110にフラッシュさせるまで、インメモリキャッシュ210内に留まり得る。インメモリキャッシュ210に記憶されたレコード115は、スナップショット時間/値が、アクセスされているレコード115のコミット時間/値よりも大きい他のトランザクションにアクセス可能であり、他のトランザクションにおいて使用され得る。
【0025】
ここで
図3を参照すると、ディレクタノード135の例示的な要素のブロック図が示されている。図示の実施形態では、ディレクタノード135は、オーケストレーションアプリケーション300及び履歴情報220を含む。更に図示するように、オーケストレーションアプリケーション300は、ローカルクロック205を維持し、履歴情報220は、履歴レコード225を含む。いくつかの実施形態では、ディレクタノード135は、図示されるものとは異なるように実装される。例えば、ディレクタノード135は、ディレクタクラスタ130の他のディレクタノード135とインターフェースし得る。
【0026】
様々な実施形態では、オーケストレーションアプリケーション300は、トランザクションの実行を容易にし、それらのトランザクションのトランザクション整合性を確保するために実行可能なプログラム命令のセットである。トランザクションの実行を容易にするために、様々な実施形態では、オーケストレーションアプリケーション300は、その履歴情報220の一部又は全部をワーカノード120に提供して、そのワーカノード120が他のワーカノード120によって実行された作業について知ることを可能にする。説明したように、様々な実施形態では、レコード115をコミットすることは、ディレクタノード135と通信して、レコード115をコミットするための承認を得ることを含む。コミットを承認するディレクタノード135は、そのレコード115が潜在的にコミットされることを認識しているので、そのオーケストレーションアプリケーション300は、その承認を示すインジケーションを履歴情報220の一部として記憶することができる。場合によっては、オーケストレーションアプリケーション300は、コミット要求を見逃す(又はそうでなければ、要求を処理しそこなう)場合があり、従って、ディレクタクラスタ130によってコミットメントが承認された全ての最近のレコード115の完全な履歴を記憶しない可能性がある。その結果、様々な実施形態では、履歴情報220は、そのオーケストレーションアプリケーション300によってコミットメントが承認されたレコード115のみを識別する。
【0027】
オーケストレーションアプリケーション300は、コミットメントが承認されたレコード115を追跡するので、オーケストレーションアプリケーション300は、ワーカノード120が、インメモリキャッシュ210内に記憶されるレコード115を含む、そのトランザクションを実行することに関連するレコード115を潜在的に位置特定することを可能にすることによって、トランザクションの実行を容易にし得る。また、オーケストレーションアプリケーション300は、そのディレクタノード135において承認されたレコード115を追跡するので、様々な実施形態では、承認要求レコード115が、そのディレクタノードの履歴情報220において識別される承認済みレコード115と競合しないことを確実にすることによって、トランザクション間のトランザクション整合性の確保を助けることができる。従って、レコード115に対するコミット要求を受信すると、オーケストレーションアプリケーション300は、同じキー215を有する(すなわち、同じデータベース再構成物に関連付けられた)別のレコード115が、特定の時間枠内で既に承認されたかどうかを決定し得る。様々な場合において、時間枠は、トランザクションに対するワーカノードのスナップショット時間と、ディレクタノード135によって観察された現在時刻との間の時間に対応する。競合する承認済みレコード115が存在する場合、オーケストレーションアプリケーション300は、要求ワーカノード120に不承認応答を返すことができ、要求されたレコード115がコミットされず、トランザクション整合性が確保されるようにする。競合するレコード115が存在しない場合、オーケストレーションアプリケーション300は、承認応答を返し、新しい承認済みレコード115に対応する履歴レコード225を履歴情報220に追加し得る。場合によっては、ディレクタノード135は、実際には、以前のトランザクションがディレクタノード135の過半数によって承認されなかったときに、その以前のトランザクションとの競合を検出することが可能であることに留意されたい。この場合、十分な他のディレクタノード135がこのトランザクションを承認する場合、トランザクションはコミットすることができ、そのディレクタノード135において認識された競合は真の競合ではなかった。
【0028】
図示するように、オーケストレーションアプリケーション300は、ディレクタノード135において観察された(又は、ディレクタノード135上で実行する他のアプリケーションによって観察された時間とは無関係であり得る、オーケストレーションアプリケーション300によって少なくとも観察された)現在時刻を識別するローカルクロック205を維持する。ワーカノード120と同様に、ディレクタノード135は、それぞれのローカルクロック205に従って指定された時間に特定の動作を実行し得る。一例として、コミット要求は、コミット要求において提案されたコミット時間に処理され得る。上述したように、ディレクタノード135及びワーカノード120のクロック205は、同期しなくなる可能性があり、従って、ディレクタノード135は、別のディレクタノード135よりも実質的に遅い論理時間に要求を処理し得る。従ってシステム100のノードは、
図9に関してより詳細に説明されるように、同期が外れすぎないように、それらの時間を徐々に揃えることを試み得る。
【0029】
ここで
図4を参照すると、例示的な履歴レコード225のブロック図が示されている。図示の実施形態では、履歴レコード225は、レコード識別子410、位置420、及びコミット時間/エポック430を指定する。いくつかの実施形態では、履歴レコード225は、図示されるものとは異なるように実装される。一例として、履歴レコード225は、その履歴レコード225を書き込んだディレクタノード135のディレクタ識別子を指定し得る。
【0030】
レコード識別子410は、様々な実施形態では、履歴レコード225に対応するレコード(複数可)115を識別する情報である。様々な場合において、レコード識別子410は、対応するレコード(複数可)115をルックアップするために使用可能なキー215である。レコード識別子410は、対応するレコード115のセットをコミットするための承認を得るために、ワーカノード120からディレクタノード135に送信されるコミット要求において指定され得る。コミット要求を承認することを決定したことに応答して、ディレクタノード135は、そのセット内の各レコード115について、レコード識別子410がそのレコードに対応し、コミット要求から取得される履歴レコード225を生成し得る。
【0031】
位置420は、様々な実施形態では、履歴レコード225に対応するレコード115のシステム100内の位置を識別する。例えば、位置420は、ワーカノード120又はデータベース110を指定し得る。様々な場合において、位置420は、最初に、対応するレコード115をコミットする許可を取得したワーカノード120を識別する。そのレコード115がコミットされ、データベース110にフラッシュされる場合、そのレコード115が記憶されたデータベース110内の位置を識別するために、(対応する履歴レコード225を作成した)ディレクタノード135によって位置420が更新され得る。従って、時間の経過とともに、対応するレコード115がシステム100内で移動するにつれて、位置420が調整され得る。
【0032】
コミット時間430は、様々な実施形態では、関連付けられたレコード115がコミットされていると識別される論理時間(又は時間ウィンドウ)を識別する。様々な実施形態では、ワーカノード120は、コミット時間430でトランザクションのレコード115をコミットしてもよいし、コミットしないことを選択してもよい。しかしながら、ワーカノード120は、新たなコミット時間430での承認を再要求することなく、任意の他のコミット時間430でトランザクションをコミットすることはできない。場合によっては、レコード115は、コミット時間430の論理時間よりも後の物理時間に実際にコミットされる。特に、コミット要求は、提案されたコミット時間を指定し得る。ディレクタノード135は、提案されたコミット時間に要求を処理し得、要求が承認された場合、コミット時間430が提案されたコミット時間である履歴レコード225を生成し得る。要求ワーカノード120は、承認応答を受信し得、提案されたコミット時間430でそのコミット要求のレコード115をコミットし得る(コミットすることを選択した場合)。
【0033】
ここで
図5を参照すると、1つのワーカノード120及び3つのディレクタノード135A~Cを含む例示的なスナップショット関連の対話のブロック図が示されている。いくつかの実施形態では、図示されるよりも多くのディレクタノード135(例えば、5つのディレクタノード135)が存在してもよく、ワーカノード120は、ディレクタクラスタ130内の全てよりも少ないディレクタノード135(例えば、5つのうちの4つ)に対してスナップショット要求510を発行してもよい。
【0034】
上述したように、ワーカノード120は、レコード115の読み取り及び書き込みを含むことができるトランザクションを実行する要求を受信し得る。要求は、図示されていないアプリケーションノードから受信され得る。トランザクションを処理することの一部として、様々な実施形態では、ワーカノード120は、そのトランザクションについて、特定の時点におけるシステム100の状態に対応するスナップショット時間を取得する。スナップショット時間の前にコミットされたレコード115は、トランザクションのためにそのワーカノード120によってアクセスされ得、トランザクションをコミットするとき、スナップショット時間は、レコード競合をチェックするための基準点として機能し得る。
【0035】
トランザクションが単一のスナップショット時間を割り当てられることを確実にするために、様々な実施形態では、ワーカノード120は、ディレクタノード135の代わりに、提案されたスナップショット時間505を選択する。様々な実施形態では、ディレクタノード135は、互いに通信しない可能性があるか、又は少なくともスナップショット情報を通信しない可能性があるので、ワーカノード120は、ディレクタノード135の代わりにスナップショット時間を選択し得る。様々な実施形態では、ディレクタノード135は互いに通信しない可能性があるので、ディレクタノード135が別のディレクタノード135とは異なるスナップショット時間を選択する状況が発生する可能性がある。従って、トランザクションは複数のスナップショット時間に関連付けられる可能性があり、これは、トランザクション保証を破る可能性がある。しかしながら、いくつかの実施形態では、ディレクタノード135は、ワーカノード120からのスナップショット要求510がディレクタクラスタ130によって見られた時間に対応するスナップショット時間505をトランザクションに割り当て得る。
【0036】
上述したように、ディレクタノード135は、指定された時間に受信した要求を処理し得る。その結果、提案されたスナップショット時間505を選択するとき、様々な実施形態では、ワーカノード120は、対応するスナップショット要求510が、ディレクタノード135のそれぞれのローカルクロック205に従って、提案されたスナップショット時間505より前にディレクタノード135に到着すると推定されるように、提案されたスナップショット時間505を選択する。そのスナップショット要求510がディレクタノード135に早く到着した場合、ディレクタノード135は、その要求を記憶し、その処理を、そのディレクタノード135のローカルクロック205に従って、スナップショット要求510において識別された提案されたスナップショット時間505に到達するまで遅らせ得る。様々な場合において、ディレクタノード135は、同じローカル時間であるがグローバルな観点からは異なる時間に受信した要求を処理する。スナップショット要求510が、提案されたスナップショット時間505より後にディレクタノード135に到着した場合、そのディレクタノード135は、提案されたスナップショット時間505が拒否されたことを示すスナップショット応答520を発行し得る。いくつかの実施形態では、ワーカノード120は、スナップショット要求510をディレクタノード135に送信し、それらが対応するトランザクションのスナップショット時間505を選択することを可能にする。
【0037】
いくつかの実施形態では、提案されたスナップショット時間505に対する拒否を受信したことに応答して、ワーカノード120は、ワーカノード120の現在時刻から、拒否されたスナップショット時間505からワーカノード120によって選択された時間までよりも遠く離れている別の提案されたスナップショット時間505を選択する。
図9に関してより詳細に説明されるように、ワーカノード120は、ディレクタノード135と通信する際の遅延を追跡し得、それらの遅延を使用して、提案されたスナップショット時間505が選択されるのがどの程度先の未来になるかを調整し得る。いくつかの実施形態では、提案されたスナップショット時間505に対する拒否を受信したが、クラスタ130のディレクタノード135の少なくとも過半数から承認も受信したことに応答して、ワーカノード120は、提案されたスナップショット時間505を考慮してトランザクションの実行に進む。従って、場合によっては、特定のディレクタノード135が他のディレクタノード135よりも時間的に適度に遅れている場合、ワーカノード120は、対応するスナップショット要求510が、提案されたスナップショット時間505のより後に特定のディレクタノード135に到着すると推定される場合であっても、提案されたスナップショット時間505より前に他のディレクタノード135に到着すると推定されるように、提案されたスナップショット時間505を選択し得る。従って、提案されたスナップショット時間505を選択するとき、ワーカノード120は、より多くのディレクタノード135に到達すること(これは、過半数から応答を受信する機会を増加させる)と、あまり遠い未来ではない提案されたスナップショット時間505を選択すること(これは、トランザクションを遅らせ得る)との間のトレードオフを考慮し得る。
【0038】
提案されたスナップショット時間505とともにスナップショット要求510を受信したことに応答して、様々な実施形態では、ディレクタノード135は、提案されたスナップショット時間505を拒否するかどうかを決定する。提案されたスナップショット時間505が、ディレクタノード135における現在時刻の後であるか、又は他のトランザクションとの競合を引き起こす場合、ディレクタノード135はそれを拒否し得る。提案されたスナップショット時間505を承認したことに応答して、様々な実施形態では、ディレクタノード135は、提案されたスナップショット時間505までのディレクタノードの履歴情報220を有するスナップショット応答520を返す。図示のように、ワーカノード120は、ディレクタノード135A~Bからスナップショット応答520を受信するが、ディレクタノード135Cからは受信しない。ディレクタクラスタ130がディレクタノード135A~Cのみを含み、受信されたスナップショット応答520が提案されたスナップショット時間505を承認すると仮定すると、承認が不承認なしにディレクタクラスタ130の過半数から受信されたので、ワーカノード120はトランザクションの処理に進み得る。
【0039】
次に
図6を参照すると、ディレクタノード135A~C上の履歴情報の例示的なレイアウトのブロック図が示されている。図示の実施形態では、4つの履歴レコード225A~Dを含む完全な履歴600が存在する。図示のように、ディレクタノード135Aは、履歴レコード225A及び225C~Dを含み、ディレクタノード135Bは、履歴レコード225A~Bを含み、ディレクタノード135Cは、履歴レコード225A~Dを含む。場合によっては、完全な履歴600は、図示されているよりも多い又は少ない履歴レコード225を含んでもよく、ディレクタノード135上の履歴情報のレイアウトは異なっていてもよい。
【0040】
図5において、ワーカノード120は、ディレクタノード135A~Bからスナップショット応答520を受信するが、ディレクタノード135Cからは受信しない。説明したように、スナップショット応答520は、提案されたスナップショット時間505までの履歴レコード225を含む履歴情報220を含み得る。提案されたスナップショット時間505が履歴レコード225Dのコミット時間430より後であると仮定すると、この例では、ワーカノード120は、ディレクタノード135Aから履歴レコード225A及び225C~Dを受信し、ディレクタノード135Bから履歴レコード225A~Bを受信する。様々な実施形態では、ディレクタノード135の過半数がコミットを承認しなければならず、従って承認済みレコード115の履歴レコード225を有するので、ワーカノード120がディレクタノード135の過半数から承認を受信した場合、ワーカノード120は完全な履歴600を取得することが保証される。この例を続けると、ワーカノード120は、ディレクタノード135A~B(この例では過半数である)のいずれも完全な履歴600を記憶していなくても、これらのディレクタノードから完全な履歴600を取得する。完全な履歴600を取得するために、ワーカノード120は、ディレクタノード135A~Bから受信された履歴レコード225を結合(union)し得る。ワーカノード120が過半数未満のディレクタノード135からスナップショット応答520を受信する場合、ワーカノード120が完全な履歴600を取得することになるという保証はない。一例として、ワーカノード120がディレクタノード135Bのみからスナップショット応答520を受信した場合、ワーカノード120は、完全ではない履歴600を取得する。
【0041】
ここで
図7を参照すると、ワーカノード120及び3つのディレクタノード135A~Cを含む例示的なコミット関連の対話のブロック図が示されている。いくつかの実施形態では、図示されるよりも多くのディレクタノード135(例えば、5つのディレクタノード135)が存在してもよく、ワーカノード120は、ディレクタクラスタ130内の全てよりも少ないディレクタノード135(例えば、5つのうちの4つ)に対してコミット要求710を発行してもよい。
【0042】
トランザクションを処理した後、ワーカノード120は、そのトランザクションのためにワーカノードのインメモリキャッシュ210に書き込まれた1つ又は複数のレコード115を含むトランザクションをコミットすることを決定し得る。レコード115が他のワーカノード120によって書き込まれたレコード115と競合しないことを確実にするために、ワーカノード120は、ディレクタノード135の少なくとも過半数に対してコミット要求710を発行する。図示のように、ワーカノード120は、図示される実施形態では全てのディレクタノード135であるディレクタノード135A~Cに対してコミット要求710を発行する。コミット要求710は、様々な実施形態では、トランザクションのために書き込まれたレコード115(例えば、レコード識別子410を介して)、それらのレコード115に適用されるべき提案されたコミット時間705、及びトランザクションのために承認されたスナップショット時間を識別する。提案されたスナップショット時間505と同様に、提案されたコミット時間705は、時間(又は時間ウィンドウ)又は期間を示す数値を識別し得る。
【0043】
様々な実施形態では、スナップショット時間を選択するのと同様に、ディレクタノード135は、互いに通信しない可能性があるか、又は少なくともコミットについて通信しない可能性があるので、ワーカノード120は、ディレクタノード135の代わりにコミット時間を選択し得る。提案されたコミット時間705を選択するとき、様々な実施形態では、ワーカノード120は、対応するコミット要求710が、ディレクタノード135のそれぞれのローカルクロック205に従って提案されたコミット時間705より前にディレクタノード135に到着すると推定されるように提案されたコミット時間705を選択する。スナップショット要求510と同様に、コミット要求710がディレクタノード135に早く到着した場合、ディレクタノード135は、その要求を記憶し、その処理を、そのディレクタノード135のローカルクロック205に従って、コミット要求710において識別された提案されたコミット時間705に到達するまで遅らせ得る。コミット要求710が提案されたコミット時間705より後に到着した場合、ディレクタノード135は、コミット要求710が拒否されたことを示すコミット応答720を発行し得る。提案されたスナップショット時間505に関して説明したように、様々な実施形態では、ワーカノード120はまた、提案されたコミット時間705が選択されるのがどの程度先の未来になるかを調整し得る。例えば、その提案されたコミット時間705に基づいてコミット要求710に対する拒否を受信したことに応答して、ワーカノード120は、そのワーカノード120の現在時刻から、選択された時間から拒否されたコミット時間705までよりも遠く離れている別の提案されたコミット時間705を選択し得る。
【0044】
コミット要求710を受信したことに応答して、様々な実施形態では、ディレクタノード135は、コミット要求710を拒否するかどうかを決定する。コミット要求710を拒否するかどうかを決定することの一部として、ディレクタノード135は、要求内で識別されたレコード115のいずれかが、そのディレクタノード135によってコミットについて以前に承認されたレコード115と競合するかどうかを決定し得る。様々な実施形態では、ディレクタノード135は、承認済みレコード115を履歴レコード225の形態で記録するので、ディレクタノード135は、その履歴情報220内の履歴レコード225を調べることができる。様々な実施形態では、第1のレコード115は、第2のレコード115と、それらが同じレコード識別子に関連付けられている場合に競合し、第2のレコード115は、第1のレコード115のトランザクションに関連付けられたスナップショット時間より後にコミットされているものとして識別される。従って、ディレクタノード135は、その履歴レコード225を検索して、レコード識別子410が承認を検討されているレコード115のレコード識別子と一致するものを探し得る。履歴レコード225が見つかった場合、ディレクタノード135は、そのコミット時間430がコミット要求710において指定されたスナップショット時間より後に発生するかどうかを決定し得る。競合するレコード115が存在する場合、ディレクタノード135は、レコード競合が存在することを示す不承認コミット応答720をワーカノード120に送信する。競合するレコード115が存在しない場合、そのディレクタノード135は承認コミット応答720を送信する。ディレクタノード135はまた、承認されたトランザクションのレコード115についての履歴レコード225を作成し得る。
【0045】
図示のように、ワーカノード120は、ディレクタノード135A及び135Cからコミット応答720を受信するが、ディレクタノード135Bからは受信しない。ディレクタクラスタ130がディレクタノード135A~Cのみを含み、受信されたコミット応答720がコミットを承認すると仮定すると、不承認なしにディレクタクラスタ130の過半数から承認が受信されたので、ワーカノード120はトランザクションのコミットに進み得る。提案されたコミット時間705の不承認を受信したことに応答して、ワーカノード120は、新たな提案されたコミット時間705を選択し、その提案されたコミット時間705とともにコミット要求710をディレクタノード135A~Cに送信し得るか、又はワーカノード120は、トランザクションを中止し得る。1つ又は複数のレコード競合のためにコミットを承認しないコミット応答720を受信したことに応答して、ワーカノード120は、たとえワーカノード120がディレクタクラスタ130の過半数から承認を受信したとしても、トランザクションを中止してもよいし、中止しなくてもよい。いくつかの実施形態では、コミットを承認するディレクタノード135は、たとえトランザクションがワーカノード120によって中止されたとしても、コミットが発生したことを(例えば、履歴レコード225を介して)記録する。
【0046】
次に
図8を参照すると、ディレクタノード135A~C上の履歴情報の例示的なレイアウトのブロック図が示されている。図示の実施形態では、5つの履歴レコード225A~Eを含む完全な履歴600が存在する。図示のように、ディレクタノード135Aは、履歴レコード225A及び225C~Eを含み、ディレクタノード135Bは、履歴レコード225A~Bを含み、ディレクタノード135Cは、履歴レコード225A~Eを含む。場合によっては、完全な履歴600は、図示されているよりも多い又は少ない履歴レコード225を含んでもよく、ディレクタノード135上の履歴情報のレイアウトは異なっていてもよい。
【0047】
以下の説明を容易にするために、
図6に示される履歴情報の例示的なレイアウトは、
図7に示されるワーカノード120と3つのディレクタノード135A~Cとの間の例示的なコミット関連の対話の前に発生すると仮定する。また、
図8に示される履歴情報の例示的なレイアウトは、例示的なコミット関連の対話の後に発生する。上述したように、様々な実施形態では、ディレクタノード135がコミットを承認すると決定すると、ディレクタノード135は、コミットされるべきレコード115と、それらがコミットされると仮定される場所とを識別する履歴レコード225を記憶する。
図7において、図示されたワーカノード120は、ディレクタノード135A及び135Cからはコミット応答720を受信するが、ディレクタノード135Bからは受信しない。特定のレコード115を含むトランザクションがコミットすることを承認されたと仮定すると、ディレクタノード135A及び135Cは、この例では、その特定のレコード115に対する履歴レコード225Eを個々に記憶する。しかしながら、ディレクタノード135Bは、スローダウンを経験している可能性があり、
図7で受信したコミット要求710を処理することができない可能性があるので、履歴レコード225Eを記憶しない。その結果、1つのディレクタノード135に知られている承認済みレコードの履歴は、別のディレクタノード135に知られている承認済みレコードの履歴とは異なる可能性がある。トランザクションが過半数によって承認されて、履歴レコード225Eがディレクタノード135の過半数に記憶されたので、スナップショット要求510に対してディレクタノードの過半数から承認を受信するワーカノード120は、履歴レコード225Eを受信し、それらに特定のレコード115を認識させる。
【0048】
様々な実施形態では、ディレクタノード135は、時間の経過とともにその履歴情報220から履歴レコード225を削除する。様々な場合において、データベース構成物(例えば、データベース行)の新しいレコードバージョンは、以前のレコードバージョンを置き換えるコミットメントのために承認される。そのため、ディレクタノード135は、以前のレコードバージョンの履歴レコード225を新しいレコードバージョンの新しい履歴レコード225で置き換え得る。場合によっては、ディレクタノード135は、レコード225が特定のしきい値を超えて古くなったことに応答して、履歴レコード115を削除する。例えば、履歴レコード225Aに関連付けられたレコード115は、データベース110のLSMツリーに書き出され、時間の経過とともにLSMツリーのレベルを下ってマージされ得る。そのレコード115が特定のレベルに達した後、ディレクタノード135は、その履歴情報220から履歴レコード225Aを削除し得る(そのディレクタノード135がそのレコード115のトランザクションを承認し、履歴レコード225Aを作成した場合)。履歴レコード225をその履歴情報220から削除することの一部として、いくつかの実施形態では、ディレクタノード135は、データベース110からワーカノード120にアクセス可能になるように、履歴レコード225をデータベース110に送信する。
【0049】
ここで
図9を参照すると、システム100の構成要素間の時間を揃えることに関する例示的な要素のブロック図が示されている。図示の実施形態では、ワーカノード120及び3つのディレクタノード135A~Cがあり、全てがそれぞれのローカルクロック205を有する。更に図示するように、ディレクタノード135A及び135Bのそれぞれのローカルクロック205A及び205Bは、時間「10:11:20」を識別し、ディレクタノード135Cのローカルクロック205Cは、時間「10:11:23」を識別し、ワーカノード120のローカルクロック205Dは、時間「10:11:19」を識別する。3つのディレクタノード135及び1つのワーカノード120のみが示されているが、様々な実施形態では、より多くのディレクタノード135及び/又はワーカノード120が存在してもよい。また、いくつかの実施形態では、時間は、示されるものとは異なって表される。例えば、時間は、期間を示す数値であってもよく、分単位などであってもよい。
【0050】
説明したように、様々な実施形態では、システム100のノードは、システム100についてそのノードによって観察された時間を識別するローカルクロック205を含む。その時間は、別のノードによって観察された時間とは異なり得る。例えば、ワーカノード120は、時間「10:11:19」を観察し、ディレクタノード135は、時間「10:11:23」を観察する。更に説明されるように、ノードは、指定された時間に、他のノードに影響を及ぼし得る動作を実行し得る。システム100において観察された平均時間とは合理的に異なる時間を観察するノードは、1つ又は複数の動作が他のノードによって予想されるよりも後に実行されるので、望ましくない遅延を引き起こし得る。従って、ノードが互いに同期から大きく外れないように、システム100内の時間を継続的に揃えることを試みることが望ましいであろう。
【0051】
いくつかの実施形態では、ワーカノード120及びディレクタノード135は、それらのローカル時間を互いに直接通信する。しかしながら、様々な実施形態では、ワーカノード120及びディレクタノード135は、それらのローカル時間を互いに通信しない。代わりに、ワーカノード120とディレクタノード135との間の通信における時間遅延が追跡され、ノードが、その時間を他のノードによって観察された時間と揃えようとしてローカルクロック205をシフトするために使用され得る。様々な実施形態では、ワーカノード120がディレクタノード135に対して、要求(例えば、スナップショット要求510又はコミット要求710)を発行すると、そのワーカノード120は、そのローカルクロック205に従ってその要求が発行された時間を指定する送信タイムスタンプ910を記憶する。その要求がそのディレクタノード135で受信されると、そのローカルクロック205に従って、その要求が受信された時間を指定する到着タイムスタンプ920を記憶し得る。そのディレクタノード135が応答(例えば、スナップショット応答520又はコミット応答720)をワーカノード120に返すとき、その応答は、その到着タイムスタンプ920を含み得る。ワーカノード120は、送信タイムスタンプ910と到着タイムスタンプ920との間の差である時間遅延を計算し得る。ワーカノード120がディレクタノード135に別の要求を発行するとき、要求に時間遅延を含め得る。その結果、ディレクタノード135は、ワーカノード120がディレクタノード135及びディレクタクラスタ130の他のディレクタノード135と通信することに関連する時間遅延について学習し得る。
【0052】
例えば、ワーカノード120は、ディレクタノード135A~Cに対してコミット要求710を発行し、時間「10:11:17」を指定する送信タイムスタンプ910を記憶し得る。そのコミット要求710を受信したことに応答して、ディレクタノード135Aは、ローカルクロック205Aに従って時間「10:11:20」を指定する到着タイムスタンプ920Aを記憶し得、ディレクタノード135Bは、ローカルクロック205Bに従って時間「10:11:20」を指定する到着タイムスタンプ920Bを記憶し得、ディレクタノード135Cは、ローカルクロック205Cに従って時間「10:11:23」を指定する到着タイムスタンプ920Cを記憶し得る。それらの到着タイムスタンプ920は、コミット要求710に対するコミット応答720においてワーカノード120に提供され得る。送信タイムスタンプ910及び到着タイムスタンプ920A~Cに基づいて、ワーカノード120は、ディレクタノード135A及び135Bと通信する際に3秒の時間遅延があり、ディレクタノード135Cと通信する際に6秒の時間遅延があったと決定する。ワーカノード120がディレクタノード135Bと再び通信するとき、ワーカノード120は、それらの時間遅延を提供し得る。
【0053】
それらの時間遅延に基づいて、様々な実施形態では、ディレクタノード135は、そのローカルクロック205が速めるべきか遅くするべきかを決定する。例えば、ディレクタノード135Cは、ディレクタノード135A及び135Bの3秒と比較して、コミット要求710が到着するのに6秒かかったことを学習し得る。このことから、ディレクタノード135Cは、そのローカルクロック205Cが、ディレクタノード135A及び135Bによって観察された時間よりも約3秒進んだ時間を識別することを決定し得る。多くの場合、ディレクタノード135は、ディレクタノード135とワーカノード120との間の時間遅延に影響を及ぼす要因を考慮することを試みる。そのような要因には、例えば、ワーカノード120とディレクタノード135との間のネットワーク距離、あるノードから別のノードへの途中で要求が通過するデバイスの数、ワーカノード120が時間をサンプリングしてから要求を送信するまでの間の遅延、及びディレクタノード135が要求を受信してから時間をサンプリングするまでの間の遅延が含まれ得る。これらの要因のうちの1つ又は複数に基づいて、ディレクタノード135は、時間遅延に基づいて実際のクロックスキューを推定し得る。様々な実施形態では、ワーカノード120は、各ディレクタノード135と通信する際の時間遅延の平均(最近のトラフィックに対して重み付けされ得る)を維持する。ディレクタノード135は、複数のワーカノード120から平均時間遅延を受信し、次いで、それらの時間遅延を集約して、集約された平均時間遅延を生成し得る。従って、様々な実施形態では、ディレクタノード135は、所与のディレクタノード135と通信する際の複数のワーカノード120にわたる平均時間遅延を学習する。集約された平均時間遅延は、ディレクタノード135が、通信における遅延を引き起こす可能性がある要因を考慮して、実際のクロックスキューをより良好に推定することを可能にし得る。
【0054】
従って、ディレクタノード135は、それらの時間を非常に徐々に揃え得る。各ワーカ-ディレクタ対から要求を受信する際に知覚される遅延を比較することによって、ディレクタノード135は、他のディレクタノード135の時間遅延の加重平均に基づいて、その時間が他のノードと同期していないかどうかを決定し得る。そのローカルクロック205を速めると決定したことに応答して、様々な実施形態では、ディレクタノード135は、そのローカルクロック205の時間を前方にシフトし、そのローカルクロック205がより速い速度でシフトされ得るように、それが処理することができる要求の数を増加させるために、(例えば、より高い頻度でプロセッサコアを実行することによって)それ自体の実行速度を上げる。場合によっては、ディレクタノード135は、そのローカルクロック205の時間を前方にシフトし、指定された処理時間がシフトされている時間内に収まる作業(例えば、要求)をスキップし得る。そのローカルクロック205を遅くすると決定したことに応答して、様々な実施形態では、ディレクタノード135は、そのローカルクロック205の時間が前方にシフトされる速度を下げる。場合によっては、ディレクタノード135は、そのディレクタノード135がその時間を揃えたと考えるまで、そのローカルクロック205の時間をフリーズし得る。
【0055】
様々な実施形態では、ワーカノード120は、観察された時間遅延に基づいて、そのローカルクロック205の時間をシフトする。一例として、ワーカノード120は、その要求がディレクタノード135に到達するのにますます長い時間がかかっていることを観察し得る。この観察に基づいて、そのワーカノード120は、そのローカルクロック205を速め得る。代替的に、ワーカノード120は、その要求が予想よりも早くディレクタノード135に到達していることを観察してもよく、従って、そのローカルクロック205を遅くしもよい。様々な実施形態では、ワーカノード120はまた、観察された時間遅延を使用して、それぞれのローカルクロック205に従ってディレクタノード135においてそれらの提案された時間より前に到着するようにするためには、提案されたスナップショット時間505又はコミット時間705がどの程度先の未来に選択されるべきかを決定する。時間遅延は時間の経過とともに変化するにつれ、ワーカノード120は、提案されたスナップショット時間505又はコミット時間705が選択されるのがどの程度先の未来になるかを調整し得る。
【0056】
次に
図10を参照すると、アシスタントノード1030に関係する例示的な要素のブロック図が示されている。図示の実施形態では、ワーカノード120A~B、アシスタントノード1030、及び共有ストレージ1040が存在する。図示のように、ワーカノード120B及びアシスタントノード1030はレコード115を含み、共有ストレージ1040はログ1045を含む。図示した実施形態は、図示されるものとは異なるように実装され得る。一例として、ワーカノード120によって実行される作業を観察するアシスタントノード1030は複数存在してもよい。
【0057】
説明したように、トランザクションを処理することは、データベース110又はワーカノード120のインメモリキャッシュ210に記憶され得る1つ又は複数のレコード115にアクセスすることを含み得る。レコード115が(例えば、履歴レコード225を介して)インメモリキャッシュ210内にあると識別された場合、ワーカノード120は、そのレコード115についてのレコード要求204を対応するワーカノード120に送信し得る。例えば、図示のように、ワーカノード120Aは、ワーカノード120Bに記憶されたレコード115のために、レコード要求204をワーカノード120Bに発行する。システム100の他の構成要素と同様に、ワーカノード120は、そのワーカノード120をレコード要求204に対して遅くさせる又は反応しなくさせるスローダウンを経験し得る。その結果、そのワーカノード120は、他のワーカノード120のトランザクションの処理を遅らせ得る。例えば、ワーカノード120Bは、応答しなくなり得るので、ワーカノード120Aは、そのレコード要求204に対するレコード応答206を受信しない可能性がある。この問題を軽減するのを助けるために、様々な実施形態では、ワーカノード120は、スローダウンを経験したときにそのワーカノード120の代わりにレコード要求204に答えることができる1つ又は複数のアシスタントノード1030を有する。
【0058】
様々な実施形態では、アシスタントノード1030は、ワーカノード120Bによって実行される作業を観察し、その作業に対応する情報をローカルに記憶する。様々な実施形態では、アシスタントノード1030は、ハードウェア上で実行可能なソフトウェアルーチンのセットであり、いくつかの実施形態では、アシスタントノード1030は、ハードウェア及びソフトウェアルーチンの両方を包含する。いくつかの実施形態では、アシスタントノード1030は、別のワーカノード120である。その結果、ワーカノード120は、各ワーカノード120が別のワーカノード120に対するアシスタントノード1030となるように、互いに割り当てられ得る。いくつかの実施形態では、アシスタントノード1030は、単一の仮想マシン上で他のアシスタントノード1030とともに実行されるが、他の実施形態では、それらはそれぞれ別個の仮想マシン上で実行される。
【0059】
ワーカノード120Bによって実行される作業を観察するために、様々な実施形態では、アシスタントノード1030は、ワーカノード120Bのログ1045に従い、全てのレコード変更を読み取り、それらを自身のメモリ(例えば、メモリキャッシュ210)に配置する。図示するように、ログ1045は、ワーカノード120及びアシスタントノード1030の間で共有される共有ストレージ1040において保持される。いくつかの実施形態では、ワーカノードのログ1045は、共有ストレージ1040ではなくワーカノード120においてローカルに記憶され、従って、そのアシスタントノード(複数可)1030は、共有ストレージ1040からではなく、そのワーカノード120からログ1045にアクセスし得る。共有ストレージ1040は、データベース110又は別個のストレージ機構の一部であり得る。ログ1045は、様々な実施形態では、データベース(例えば、データベース110)に記憶された情報に対する変更(例えば、レコード変更)を識別するログレコードの集合体である。ログレコードは、データベース構成物(例えば、データベース行)の新しいデータ値を識別するレコード、トランザクションのコミットを識別するコミットレコード、又はデータベースの一部若しくは全てがロールバックされることを可能にするロールバックレコードであり得る。そのため、ログ1045は、保留中のトランザクション及びコミットされたトランザクションを、それらのトランザクションがコミットされた順序付けを含めて識別し得る。トランザクションのレコード115を書き込むワーカノード120は、その作業を識別するログレコードを付加することによって、そのログ1045を更新し得る。そのため、ログ1045は、より多くのログレコードがワーカノード120によって付加されるにつれて、時間の経過とともに成長し得る。
【0060】
従って、様々な実施形態では、アシスタントノード1030は、ワーカノード120Bのログ1045に書き込まれたログレコードを読み取り、ワーカノード120Bによって実行された最近のトランザクションのインメモリイメージを構築する。従って、ワーカノード120Bがレコード115をそのキャッシュ210に書き込み、ログレコードをそのログ1045に書き込むと、アシスタントノード1030は、そのログ1045から、それらのレコード115について学習し、それらをそれ自体のメモリ内で再現し得る。その結果、アシスタントノード1030は、ワーカノード120Bにおいて記憶される同じレコード115のうちの1つ又は複数を記憶し得る。アシスタントノード1030は、ワーカノード120Bのログ1045に従い、同じレコード115のうちの1つ又は複数を記憶するので、アシスタントノード1030は、ワーカノード120Bであるかのように、ワーカノード120Aからのレコード要求204を処理し得る。
【0061】
いくつかの実施形態では、レコード115をシークしているワーカノード120Aは、最初に、そのレコード115をコミットしていると識別されたワーカノード120Bにレコード要求204を送信する(但し、コミットが承認された後にそのトランザクションが中止された場合、コミットされていない可能性がある)。そのレコード要求204がタイムアウトし、レコード応答206がない場合、ワーカノード120Aは、レコード要求204をワーカノード120Bのアシスタントノード1030に送信し得る。いくつかの実施形態では、ワーカノード120Aは、レコード要求204をワーカノード120B及びそのアシスタントノード(複数可)1030に並行して送信し得る。これは、必要とされ得るよりも多くの要求を送信することを犠牲にして、時間を節約し得る。
【0062】
レコード要求204を受信したことに応答して、様々な実施形態では、アシスタントノード1030は、要求されたレコード115をワーカノード120Bがコミットしたかどうかを決定する。場合によっては、アシスタントノード1030は、(例えば、ワーカノード120Bのログ1045に書き込まれたコミットレコードを介して)要求されたレコード115がコミットされたと決定する。アシスタントノード1030は、それ自体のメモリからそのレコード115にアクセスし、それをレコード応答206でワーカノード120Aに返し得る。場合によっては、アシスタントノード1030は、要求されたレコード115が存在せず、ワーカノード120Bが、要求されたレコード115を有するトランザクションに関連付けられた時間を過ぎて作業をログ記録したと決定する。例えば、ワーカノード120Bは、そのトランザクションをコミットするのではなく中止し、次いで、後のコミット時間に関連付けられた別のトランザクションをコミットし得、従って、アシスタントノード1030は、作業が、要求されたレコード115を有するトランザクションを過ぎてログ記録されたと決定し得る。その結果、アシスタントノード1030は、要求されたレコード115が存在しないことを示すレコード応答206をワーカノード120Aに返し得る。場合によっては、アシスタントノード1030は、要求されたレコード115がコミットされたかどうかを知るのに十分なほど、ワーカノード120Bのログ1045を進んでいない。アシスタントノード1030は、ワーカノード120Bのログ1045を十分に読み取るまで応答を遅らせてもよいし、そのレコード要求204を後で再試行するようにワーカノード120Aに命令するレコード応答206をワーカノード120Aに提供してもよい。前者の場合、アシスタントノード1030は、レコード要求204において指定されたスナップショット時間より前の時間を示すタイムスタンプを有するワーカノード120Bのログ1045のレコードが読み取られたことを確実にし得る。
【0063】
場合によっては、アシスタントノード1030は、ワーカノード120Bのログ1045が、要求されたレコード115のトランザクションをコミットするポイントに到達していないこと、及びワーカノード120Bがそのログ1045に書き込んでいないか、又は定義された閾値に従って非常に遅い速度で書き込んでいることを決定する。ワーカノード120Bがそのログ1045を更新せず、要求されたレコード115がコミットされていないことに基づいて、様々な実施形態では、アシスタントノード1030は、ワーカノード120Bのログ1045をフェンスし、次いで、要求されたレコード115が存在しないことを示すレコード応答206をワーカノード120Aに返す。アシスタントノード1030がワーカノード120Aからレコード要求204を受信したので、ワーカノード120Aが、要求されたレコード115にリンクされた履歴レコード225を取得したことが示唆される。ワーカノード120Aがその履歴レコード225を有するので、ワーカノード120Bが、要求されたレコード115のトランザクションをコミットする許可を受信したことが示唆される。この場合、要求されたレコード115がコミットされていないことを示すレコード応答206を提供するために、アシスタントノード1030はワーカノード120Bのログ1045をフェンスし、要求されたレコード115がコミットされなかったことをアシスタントノード1030がワーカノード120Aに伝えた後に、要求されたレコード115をコミットすることができないようにする。ワーカノード120Bのログ1045をフェンスするために、様々な実施形態では、アシスタントノード1030は、共有ストレージ1040にコマンドを送信して、共有ストレージ1040に、ワーカノード120Bのログ1045への付加を無効にさせる。その結果、ワーカノード120Bは、ログレコードを書き込むことができず、従って、システム100のための作業を実行することができない。しかしながら、ワーカノード120Bのログ1045のコンテンツは、元の状態のままであり、他のノード(例えば、アシスタントノード1030)によって読み取られ得る。ワーカノード120Bのログ1045がフェンスされた後、アシスタントノード1030は、ログ1045において最終パスを取って、コミットが、要求されたレコード115のトランザクションに対して追加されたかどうかを決定し得る。そのトランザクションがコミットされている場合、アシスタントノード1030は、要求されたレコード115をワーカノード120Aに返し得、そうでない場合、アシスタントノード1030は、要求されたレコード115がコミットされていないことをワーカノード120Aに示し得る。
【0064】
ここで
図11を参照すると、ワーカノード120及びアシスタントノード1030によって実行されるフラッシュ動作のブロック図が示されている。図示の実施形態では、データベース110、ワーカノード120、及びアシスタントノード1030が存在する。図示のように、ワーカノード120及びアシスタントノード1030は両方とも、同じレコード115Aを含む。すなわち、それらは各々、同じデータベース構成物(例えば、データベース行)に対する同じ情報(例えば、値)を記憶するレコード115を有する。また、図示のように、データベース110は、ワーカノード120B及びアシスタントノード1030から同じ同一のレコード115を受信するログ構造マージツリー(LSMツリー)1100を含む。図示した実施形態は、図示されるものとは異なるように実装され得る。一例として、ワーカノード120と同じレコード115をデータベース110に書き込むアシスタントノード1030は複数存在してもよい。
【0065】
ログ構造マージツリー1100は、様々な実施形態では、レベルベースのスキームを使用する組織的な方式でファイルを記憶するデータ構造である。LSMツリー1100は、ワーカノード120のインメモリキャッシュ210において実装されるインメモリ構成要素と、データベース110において実装されるオンディスク構成要素という2つの高レベル構成要素を含み得る。場合によっては、インメモリ構成要素は、LSMツリー1100とは別個であると考えられる。ワーカノード120は、最初に、それらのインメモリキャッシュ210にレコード115を書き込み得る。それらのキャッシュ210が満杯になると、及び/又はある時点で、ワーカノード120は、レコード115をデータベース110にフラッシュし得る。レコード115をフラッシュすることの一部として、様々な実施形態では、ワーカノード120は、それらをLSMツリー1100のトップレベルの新しいファイルに書き込む。時間の経過とともに、これらのファイルのレコード115は、より新しいファイルがトップレベルに書き込まれるにつれて、LSMツリー1100のレベルを通して下方にマージされる。
図11に関して説明される様々な技法は、LSMツリーに関するが、そのような技法は、データベースにレコードを書き込み、コミットすることができるワーカノードが存在する、他の種類のデータベース実装に適用することができる。
【0066】
以下の説明では、ワーカノード120がレコード115Aをコミットしたと仮定する。いくつかの事例では、ワーカノード120がレコード115AをLSMツリー1100にフラッシュする前に、ワーカノード120は、ワーカノード120をカタトニック(catatonic)にし、適時にレコード115Aをフラッシュすることができないようにするスローダウンを経験し得る。システム100の効率は、コミットされたレコード115がLSMツリー1100にフラッシュされる速度に依存し得る。そのため、ワーカノード120のカタトニック性は、システム100の望ましくないスローダウンをもたらし得る。従って、様々な実施形態では、ワーカノード120とアシスタントノード1030の両方が、同じレコード115をLSMツリー1100にフラッシュする。その結果、ワーカノード120がスローダウンのために適時にレコード115Aをフラッシュすることができないものの、アシスタントノード1030が独立してレコード115AをLSMツリー1100にフラッシュし得る。
【0067】
様々な場合において、LSMツリー1100は、ワーカノード120とアシスタントノード1030の両方がそのレコード115をフラッシュした結果として、同じレコード115の複製を記憶する。上述したように、LSMツリー1100のレベルを通してレコード115を移動させるマージ動作が実行され得る。様々な実施形態では、マージ動作は複製を除去するので、レコード115の1つのコピーのみがLSMツリー1100の次のレベルに移動される。従って、LSMツリー1100は、システム100によって実行されるマージ動作によって最終的に除去されるレコード115の複製を一時的に記憶し得る。
【0068】
ここで
図12を参照すると、方法1200のフロー図が示されている。方法1200は、トランザクションを処理することの一部として、データベースシステム(例えば、システム100)のワーカノード(例えば、ワーカノード120)によって実行される方法の一実施形態である。方法1200は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1200は、示されるよりも多い又は少ないステップを含む。例えば、方法1200は、ワーカノードが、レコード(例えば、レコード115)を取得するために要求(例えば、レコード要求204)を別のワーカノードに送信するステップを含み得る。
【0069】
方法1200は、ステップ1210において、ワーカノードが、レコードを書き込むことを含むトランザクションを実行する要求を受信することから開始する。ワーカノードを有するデータベースシステムは、データベースシステムのトランザクションを実行するように動作可能な複数のワーカノード(例えば、ワーカノード120)と、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノード(例えば、ディレクタノード135)とを含み得る。ワーカノードは、ワーカノードのインメモリキャッシュ(例えば、インメモリキャッシュ210)にレコードを書き込み得る。
【0070】
ステップ1220において、ワーカノードは、複数のディレクタノードのうちのいくつかのディレクタノード(例えば、過半数のサブセット又は全て)に対して、トランザクションのための動作の実行を容易にする情報(例えば、履歴レコード225)を求める要求(例えば、スナップショット要求510、コミット要求710など)を発行する。場合によっては、情報を求める要求は、少なくともレコードを指定し得、動作は、トランザクションをコミットすることに対応し得る。ディレクタノードのうちの所与のディレクタノードは、レコードが所与のディレクタノードに知られている承認済みレコードの履歴(例えば、履歴情報220)と競合するかどうかに基づいて、トランザクションをコミットすることを承認するかどうかを決定し得る。ディレクタノードへの要求は、トランザクションのスナップショット時間を更に指定し得、所与のディレクタノードは、レコードと、スナップショット時間より後に承認された承認済みレコードの履歴のレコードのみとの間の競合をチェックし得る。承認済みレコードの履歴は、複数のワーカノードから、複数のワーカノード間で共有される永続ストレージ(例えば、データベース110)にフラッシュされていない1つ又は複数のレコードを含み得る。所与のディレクタノードは、ワーカノードへの承認応答の送信に応答して、(例えば、レコードの履歴レコード225を作成することによって)承認済みレコードの履歴にレコードを含め得る。様々な実施形態では、所与のディレクタノードは、複数のディレクタノードのうちの他のディレクタノードと通信することなく、トランザクションをコミットすることを承認するかどうかを決定する。ディレクタノードへの要求は、コミット時間(例えば、提案されたコミット時間705)を示し得、所与のディレクタノードは、そのコミット時間にワーカノードからの要求を処理し得る。
【0071】
ステップ1230において、ワーカノードは、複数のディレクタノードの過半数から承認応答(例えば、承認スナップショット応答520、承認コミット応答720など)を受信したことに応答して、トランザクションのための動作の実行に進み、受信された応答のいずれもトランザクションの不承認を示さない。場合によっては、トランザクションをコミットする許可が付与されたと決定した後、ワーカノードは、トランザクションをコミットし、複数のワーカノード間で共有される永続ストレージにレコードをフラッシュし得る。場合によっては、許可が付与されたと決定した後、ワーカノードはトランザクションを中止し得る。ワーカノードは、承認応答が複数のディレクタノードの過半数から受信されていないという決定に基づいて、トランザクションを中止し得る。ワーカノードは、ディレクタノードのうちの少なくとも1つから、レコードと少なくとも1つのディレクタノードに知られている別のレコードとの間の競合に基づいてトランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、トランザクションを中止し得る。ワーカノードは更に、ディレクタノードのうちの少なくとも1つから、コミット時間より後のコミット要求の到着に基づいてトランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、トランザクションを中止し得る。
【0072】
ここで
図13を参照すると、方法1300のフロー図が示されている。方法1300は、データベースシステム内のトランザクション整合性を確保することの一部として、データベースシステム(例えば、システム100)のディレクタノード(例えば、ディレクタノード135)によって実行される方法の一実施形態である。方法1300は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1300は、示されるよりも多い又は少ないステップを含む。例えば、方法1200は、ディレクタノードが、ワーカノード(例えば、ワーカノード120)から受信されたスナップショット要求(例えば、スナップショット要求510)を処理するステップを含み得る。
【0073】
方法1300は、ステップ1310において、ディレクタノードが、ワーカノードから、レコード(例えば、レコード115)を含むトランザクションをコミットする許可を求める要求(例えば、コミット要求710)を受信することから開始する。ワーカノードは、データベースシステムの一部であり得、データベースシステムは、トランザクションを実行するように動作可能な複数のワーカノードと、それらのトランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを含み得る。受信された要求は、トランザクションのレコードを指定し得る。
【0074】
ステップ1320において、ディレクタノードは、レコードが、複数のワーカノードのうちの他のワーカノードによって(例えば、コミット要求710の一部として)提供されたレコードのセット(例えば、履歴情報220において識別される)と競合するかどうかを決定する。受信された要求は、トランザクションに関連付けられたスナップショット時間(例えば、以前に承認されたスナップショット時間505)及びコミット時間(例えば、提案されたコミット時間705)を指定し得る。そのため、決定することは、ディレクタノードが、スナップショット時間とコミット時間との間にコミットされていると識別されたレコードのセット中に競合するレコードがあるかどうかを決定することを含み得る。更に、決定することは、コミット時間に等しい時間を示すディレクタノードのローカルクロック(例えば、ローカルクロック205)の後に実行され得る。場合によっては、レコードのセットは、複数のディレクタノードのうちの別のディレクタノードによって記憶されたレコードの別のセットに含まれない少なくとも1つのレコードを含む。
【0075】
ステップ1330において、決定に基づいて、ディレクタノードは、トランザクションをコミットする許可が付与されたかどうかを示す応答(例えば、コミット応答720)をワーカノードに送信する。いくつかの実施形態では、複数のディレクタノードは、トランザクションをコミットする許可が付与されたかどうかに関して互いに通信するように動作可能ではない。場合によっては、応答は、トランザクションをコミットする許可が付与されたことを示し、ディレクタノードは、ワーカノードがトランザクションをコミットするかどうかとは無関係に、コミットされたものとしてレコードを識別する履歴情報(例えば、履歴レコード225)を記憶する。場合によっては、応答は、トランザクションをコミットする許可が付与されていないことを示し、ワーカノードは、トランザクションをコミットするための承認を複数のディレクタノードのうちの他のディレクタノードから受信することとは無関係に、トランザクションを中止する。応答は、ワーカノードがいつトランザクションをコミットすることを許可されるかを示すインジケーション(例えば、提案されたコミット時間705の承認)をワーカノードに提供し得る。
【0076】
ここで
図14を参照すると、方法1400のフロー図が示されている。方法1400は、トランザクションを処理することの一部として、データベースシステム(例えば、システム100)のワーカノード(例えば、ワーカノード120)によって実行される方法の一実施形態である。方法1400は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1400は、示されるよりも多い又は少ないステップを含む。例えば、方法1400は、ワーカノードが、トランザクションをコミットする許可を求める要求(例えば、コミット要求710)をディレクタノード(例えば、ディレクタノード135)に送信するステップを含み得る。
【0077】
方法1400は、ステップ1410において、ワーカノードが、第1のレコード(例えば、レコード115)を書き込むことを含むトランザクションを実行するための要求を受信することから開始する。場合によっては、ワーカノードは、レコードの書き込みを含まない読み取り専用トランザクションを実行するための要求を受信する。ワーカノードを有するデータベースシステムは、データベースシステムのトランザクションを実行するように動作可能な複数のワーカノード(例えば、ワーカノード120)と、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノード(例えば、ディレクタノード135)とを含み得る。
【0078】
ステップ1420において、ワーカノードは、複数のディレクタノードのうちのいくつかのディレクタノード(例えば、過半数のサブセット又は全て)に対して、スナップショット要求(例えば、スナップショット要求510)を発行して、指定された時間(例えば、提案されたスナップショット時間505)までの承認済みレコードの履歴を記述する履歴情報(例えば、履歴情報220)を要求する。指定された時間は、ワーカノードによって選択され得、ディレクタノードは、指定された時間までスナップショット要求の処理を遅らせ得る。履歴情報は、承認済みレコードの履歴のレコードについて、レコードの位置(例えば、位置24)及びレコードがコミットされたと示された時間(例えば、コミット時間)を指定し得る。
【0079】
ステップ1430において、ワーカノードは、複数のディレクタノードの過半数から応答(例えば、スナップショット応答520)を受信したことに応答して、トランザクションの実行に進む。応答内の情報の結合が、要求された履歴情報を構成する。処理することは、要求された履歴情報に基づいて、第1のレコードと競合する第2のレコードが存在するかどうかを決定することと、競合する第2のレコードが存在すると決定したことに応答して、トランザクションを中止することとを含み得る。ディレクタノードのうちの第1のディレクタノードに知られている承認済みレコードの履歴は、ディレクタノードのうちの第2のディレクタノードに知られている承認済みレコードの履歴とは異なり得る。場合によっては、応答のいずれも、要求された履歴情報を個別に提供しない。ディレクタノードは、履歴情報を共有するために互いに通信するように動作可能でなくてもよい。
【0080】
トランザクションは、第2のレコードを含み得る。ワーカノードは、要求された履歴情報に基づいて、第2のレコードの位置を決定し得、当該位置から第2のレコードにアクセスすることを試み得る。場合によっては、位置は、複数のワーカノード間で共有される中央ストレージに対応する。場合によっては、位置は、別のワーカノードに対応する。第2のレコードにアクセスすることを試みる際、ワーカノードは、第2のレコードに対する要求(例えば、レコード要求204)を他のワーカノードに送信し得、第2のレコードがコミットされなかったことを示す応答(例えば、レコード応答206)を受信し得る。
【0081】
ここで
図15を参照すると、方法1500のフロー図が示されている。方法1500は、トランザクションを処理することの一部として、データベースシステム(例えば、システム100)のワーカノード(例えば、ワーカノード120)によって実行される方法の一実施形態である。方法1500は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1500は、示されるよりも多い又は少ないステップを含む。例えば、方法1500は、ワーカノードが、レコード(例えば、レコード115)を取得するために要求(例えば、レコード要求204)を別のワーカノードに送信するステップを含み得る。
【0082】
方法1500は、ステップ1510において、ワーカノードが、レコードを書き込むことを含むトランザクションを実行する要求を受信することから開始する。ワーカノードを有するデータベースシステムは、データベースシステムのトランザクションを実行するように動作可能な複数のワーカノード(例えば、ワーカノード120)と、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノード(例えば、ディレクタノード135)とを含み得る。
【0083】
ステップ1520において、ワーカノードは、トランザクションのための動作(例えば、トランザクションを開始すること、トランザクションをコミットすること、など)を実行することに関連付けられた提案された時間(例えば、提案されたスナップショット時間505、提案されたコミット時間705など)を選択する。様々な実施形態では、ワーカノードは、ディレクタノードと通信する際の時間遅延を決定する。時間遅延のうちの所与の時間遅延は、所与の要求をワーカノードからディレクタノードのうちの所与のディレクタノードに送信してから、所与のディレクタノードが所与の要求を受信するまでの間の遅延であり得る。従って、ワーカノードは、所与の要求が所与のディレクタノードに送信された第1の時間(例えば、送信タイムスタンプ910)を記録し、所与の要求が所与のディレクタノードにおいて受信された第2の時間(例えば、到着タイムスタンプ920)を識別する、所与の要求に対する応答を受信し得る。所与の時間遅延は、第1の時間及び第2の時間に基づいて決定され得、提案される時間は、承認要求がディレクタノードのそれぞれのクロック(例えば、ローカルクロック205)に従って、提案された時間より前にディレクタノードに到着すると推定されるように、時間遅延に基づいて選択され得る。提案された時間は、ワーカノードのクロックによって識別される時間に基づいて選択され得る。様々な場合において、ワーカノードのクロックは、ディレクタノードのクロックとは異なる時間を識別し、ディレクタノードのクロックは、複数のディレクタノードのうちの少なくとも1つの他のディレクタノードのクロックとは異なる時間を識別する。
【0084】
ステップ1530において、ワーカノードは、複数のディレクタノードのうちのいくつかのディレクタノード(例えば、過半数のサブセット又は全て)に対して、動作を実行するための承認要求を発行する。様々な実施形態では、これらのディレクタノードのうちのあるディレクタノードは、ディレクタノードによって観察された時間を識別するディレクタノードのクロックに従って、提案された時間に達すると、承認要求を処理するように動作可能である。場合によっては、動作は、トランザクションを開始することに関し、ディレクタノードは、提案された時間までの承認済みレコードの履歴を記述する履歴情報(例えば、履歴情報220)を返すように動作可能である。場合によっては、動作は、トランザクションをコミットすることに関し、ディレクタノードは、トランザクションのレコードと、提案された時間より前に発生したディレクタノードに知られている承認済みレコードのセットとの間の競合をチェックするように動作可能である。ワーカノードは、ディレクタノードのうちの第1のディレクタノードが、第1のディレクタノードによって観察された時間をディレクタノードのうちの第2のディレクタノードによって観察された時間と揃えることを試みることを可能にするために、承認要求に遅延情報を含め得る。
【0085】
ワーカノードは、ディレクタノードのクロックに従って、提案された時間より後にディレクタノードに要求が到着したことに基づいて、提案された時間の不承認を示す不承認応答をディレクタノードから受信し得る。提案された時間は、ワーカノードのクロックによって識別される現在時刻から第1の時間量後となるように選択され得る。その結果、不承認応答を受信したことに基づいて、ワーカノードは、別の提案された時間が、ワーカノードのクロックによって識別された現在時刻から第2の時間量後となるように、別の提案された時間を選択し得、第2の時間量は、第1の時間量よりも大きい。
【0086】
ここで
図16を参照すると、方法1600のフロー図が示されている。方法1600は、トランザクションを処理することの一部として、データベースシステム(例えば、システム100)のワーカノード(例えば、ワーカノード120)によって実行される方法の一実施形態である。方法1600は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1600は、示されるよりも多い又は少ないステップを含む。例えば、方法1600は、ワーカノードが、レコード(例えば、レコード115)を取得するために要求(例えば、レコード要求204)を別のワーカノードに送信するステップを含み得る。
【0087】
方法1600は、ステップ1610において、ワーカノードが、データベースシステムのトランザクションのトランザクション整合性を確保するように動作可能なデータベースシステムの複数のディレクタノードのうちのいくつかと通信する際の時間遅延を指定する遅延情報にアクセスすることから開始する。ステップ1620において、ワーカノードは、トランザクションを実行する要求を受信する。
【0088】
ステップ1630において、ワーカノードは、遅延情報とワーカノードのクロック(例えば、ローカルクロック205)とに基づいて、トランザクションのための提案されたスナップショット時間(例えば、提案されたスナップショット時間505)を選択する。提案されたスナップショット時間は、ディレクタノードのクロックに従って、提案されたスナップショット時間より前に承認要求がディレクタノードに到着することを可能にするように決定される時間となるように選択され得る。
【0089】
ステップ1640において、ワーカノードは、複数のディレクタノードのうちの2つ以上に対して、提案されたスナップショット時間の第1の承認要求(例えば、スナップショット要求510)を発行する。様々な実施形態では、2つ以上のディレクタノードのうちの1つのディレクタノードは、そのディレクタノードのクロックに従って、提案されたスナップショット時間に達すると、第1の承認要求を処理するように動作可能である。第1の承認要求を発行する前に、ワーカノードは、ディレクタノードに対して、別のトランザクションに関連付けられた提案された時間の第2の承認要求を発行し得る。ワーカノードは、ワーカノードのクロックに従って、第2の承認要求がディレクタノードに対して発行された第1の時間(例えば、送信タイムスタンプ910)を記録し、ディレクタノードのクロックに従って、第2の承認要求がディレクタノードで受信された第2の時間(例えば、到着タイムスタンプ920)を識別する、第2の承認要求に対する応答をディレクタノードから受信し得る。ワーカノードのクロックは、ディレクタノードのクロックとは異なる時間を識別し得、提案されたスナップショット時間は、第1の時間及び第2の時間に基づいて選択され得る。
【0090】
ここで
図17を参照すると、方法1700のフロー図が示されている。方法1700は、データベースシステム(例えば、システム100)のディレクタノード(例えば、ディレクタノード135)によって実行され、ディレクタノードによって観察された時間を他のディレクタノードによって観察された時間と揃えることを試みる方法の一実施形態である。方法1700は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1700は、示されるよりも多い又は少ないステップを含む。例えば、方法1700は、ディレクタノードが、履歴情報(例えば、履歴情報220)を含む応答をワーカノード(例えば、ワーカノード120)に提供するステップを含み得る。
【0091】
方法1700は、ステップ1710において、ディレクタノードが、ディレクタノードによって観察された時間を識別するクロック(例えば、ローカルクロック205)を維持することから開始する。ディレクタノードは、指定された時間にデータベース操作を実行し得る。
【0092】
ステップ1720において、ディレクタノードは、トランザクションを処理するように動作可能な複数のワーカノードのうちの1つのワーカノードから、そのワーカノードに関連付けられたトランザクションの実行を容易にする情報(例えば、履歴情報220)を求める要求(例えば、スナップショット要求510)を受信する。要求は、複数のディレクタノードのうちの他のディレクタノードによって観察された時間を示す第1のインジケーションを提供し得る。様々な実施形態では、要求は、複数のディレクタノードと通信する際にワーカノードによって観察された時間遅延を指定する。ディレクタノードは、この時間遅延を他のワーカノードによって提供される時間遅延と集約し、集約された時間遅延に基づいてそのクロックをシフトし得る。時間遅延のうちの所与の時間遅延は、ワーカノードから複数のディレクタノードのうちの所与のディレクタノードに所与の要求を送信してから、所与のディレクタノードが所与の要求を受信するまでの間の遅延であり得る。時間遅延は、ワーカノードによって観察された時間を識別するワーカノードのクロックに基づいて導出され得る。場合によっては、要求は、トランザクションに関連付けられた提案された時間(例えば、提案されたスナップショット時間505)を指定する。ディレクタノードは、ディレクタノードのクロックに従って、提案された時間に達すると要求を処理し得る。様々な場合において、ディレクタノードのクロックは、複数のディレクタノードのうちの別のディレクタノードのクロックとは異なる時間を識別する。従って、要求は、要求が他のディレクタノードで処理される前に、ディレクタノードで処理され得る。
【0093】
ステップ1730において、ディレクタは、第1のインジケーションに基づいて、クロックをシフトして、ディレクタノードによって観察された時間を他のディレクタノードによって観察された時間と揃えることを試みる。時間遅延に基づいて、ディレクタノードは、ワーカノードがディレクタノードと通信する際、ワーカノードが他のディレクタノードの過半数と通信する場合よりも大きな時間遅延があると決定し得る。従って、シフトすることは、クロックを遅くすることを含み得る。時間遅延に基づいて、ディレクタノードは、ワーカノードがディレクタノードと通信する際、ワーカノードが他のディレクタノードの過半数と通信する場合よりも少ない時間遅延があると決定し得る。従って、シフトは、クロックを高速化することを含む。場合によっては、ディレクタノードは、クロックに従って要求の到着時間(例えば、到着タイムスタンプ920)を識別し、その到着時間を指定する応答をワーカノードに送信し得る。ワーカノードは、要求を送信してからディレクタノードが要求を受信するまでの間の時間遅延を識別するように動作可能であり得る。場合によっては、クロックをシフトすることは、ディレクタノードに、ディレクタノードにおいて受信された1つ又は複数の要求の処理をスキップさせる。クロックのシフトは、他のディレクタノードと直接通信することなく実行され得る。
【0094】
ここで
図18を参照すると、方法1800のフロー図が示されている。方法1800は、データベースシステム(例えば、システム100)のディレクタノード(例えば、ディレクタノード135)によって実行され、ディレクタノードによって観察された時間を揃えることを試みる方法の一実施形態である。方法1800は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1800は、示されるよりも多い又は少ないステップを含む。例えば、方法1800は、ディレクタノードが、履歴情報(例えば、履歴情報220)を含む応答をワーカノード(例えば、ワーカノード120)に提供するステップを含み得る。
【0095】
方法1800は、ステップ1810において、ディレクタノードが、ディレクタノードによって観察されたそれぞれの時間を識別するそれぞれのクロック(例えば、ローカルクロック205)を維持することから開始する。所与のディレクタノードは、指定された時間にデータベース操作を実行し得る。ステップ1820において、ディレクタノードは、データベースシステムのワーカノードからタイミング情報を受信する。タイミング情報は、ワーカノードとディレクタノードとの間の通信時間遅延を示し得る。
【0096】
ステップ1830において、ディレクタノードは、タイミング情報に基づいて、ディレクタノードのそれぞれのクロックをシフトして、ディレクタノードによって観察されたそれぞれの時間を揃えることを試みる。様々な実施形態では、シフトは、ディレクタノードのうちのいくつかがディレクタノードのうちの他のいくつかと通信することなく実行される。ディレクタノードは、トランザクションをコミットする許可を求める要求(例えば、コミット要求710)をワーカノードから受信し得、要求は、提案されたコミット時間(例えば、提案されたコミット時間705)を指定し得る。所与のディレクタノードは、その所与のディレクタノードのそれぞれのクロックが、提案されたコミット時間より前ではない時間を指定すると、要求を処理し得る。所与のディレクタノードは、所与のディレクタノードのそれぞれのクロックに従って、所与のディレクタノードにおける要求の到着時間(例えば、到着タイムスタンプ920)を示す応答(例えば、コミット応答720)をワーカノードに送信し得る。ワーカノードは、到着時間に基づいて、ワーカノードが所与のディレクタノードと通信する際の時間遅延を決定し得る。様々な場合において、ワーカノードから受信された要求は、ディレクタノードのうちの別のディレクタノードによる要求の処理とは無関係に、所与のディレクタノードによって処理される。
【0097】
ここで
図19を参照すると、方法1900のフロー図が示されている。方法1900は、ワーカノード(例えば、ワーカノード120)によって実行される作業を観察するデータベースシステム(例えば、システム100)のアシスタントノード(例えば、アシスタントノード1030)によって実行される方法の一実施形態である。方法1900は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法1900は、示されるよりも多い又は少ないステップを含む。例えば、方法1900は、アシスタントノードが、ワーカノードによって同じくフラッシュされたデータベース(例えば、データベース110)にレコード(例えば、レコード115)をフラッシュするステップを含み得る。
【0098】
方法1900は、ステップ1910において、ワーカノードが、データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードを含むデータベースシステムの第1のワーカノードによって実行される作業を観察することから開始する。観察することは、アシスタントノードにおいて、第1のワーカノードに関連付けられたレコードを記憶することを含み得る。アシスタントノードは、第1のワーカノードとアシスタントノードとの間で共有されるデータストア(例えば、共有ストレージ1040)に記憶された第1のワーカノードのトランザクションログ(例えば、ログ1045)を読み取り得る。アシスタントノードに記憶されたレコードは、トランザクションログから決定され得る。場合によっては、アシスタントノードは、データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードのうちの1つである。様々な実施形態では、アシスタントノード及び第1のワーカノードは、異なる仮想マシンを使用して実行される。
【0099】
ステップ1920において、アシスタントノードは、複数のワーカノードのうちの第2のワーカノードから、第1のワーカノードに関連付けられたレコードに対する要求(例えば、レコード要求204)を受信する。要求は、第2のワーカノードのトランザクションに対応するスナップショット時間を指定し得る。第1のワーカノードがレコードをコミットしたかどうかに関する決定を行う前に、アシスタントノードは、スナップショット時間より前の時間を示すタイムスタンプを有するトランザクションログのレコードがアシスタントノードによって読み取られたことを確実にし得る。様々な実施形態では、第2のワーカノードは、レコードについて第1のワーカノードに送信された要求に対する応答を第1のワーカノードから受信しないことに応答して、レコードに対する要求をアシスタントノードに送信するように動作可能である。
【0100】
ステップ1930において、アシスタントノードは、第1のワーカノードがレコードをコミットしたかどうかについて決定を行う。決定を行うことは、トランザクションログに基づいてレコードがコミットされていないこと、及び第1のワーカノードが応答しないことを決定することを含み得る。その決定に基づいて、様々な実施形態では、アシスタントノードは、第1のワーカノードがレコードをコミットするためにトランザクションログを修正することを防止するためにトランザクションログをフェンスし、次いで、レコードがコミットされていないことを示す応答(例えば、レコード応答206)を第2のワーカノードに送信する。決定を行うことは、トランザクションログに基づいて、第1のワーカノードが、レコードを含むトランザクションをコミットしたと決定することを含み得る。従って、アシスタントノードは、アシスタントノードに記憶されたレコードからのレコードにアクセスし得、第2のワーカノードへの応答は、アクセスされたレコードを含み得る。決定を行うことは、第1のワーカノードが、レコードを含むトランザクションに関連付けられたコミット時間より後に作業をログ記録したことを示すトランザクションログと、レコードを示さないトランザクションログとに基づいて、レコードがコミットされていないと決定することを含み得る。そのため、第2のワーカノードへの応答は、レコードがコミットされていないことを示し得る。
【0101】
ステップ1940において、アシスタントノードは、レコードが第1のワーカノードによってコミットされたかどうかを示す応答を第2のワーカノードに送信する。レコードがコミットされたという決定に基づいて、アシスタントノードは、データベースシステムのログ構造マージツリー(LSMツリー)(例えば、LSM1100)にレコードをフラッシュし得る。第1のワーカノードはまた、ある期間にわたってLSMツリーにレコードのインスタンスが2つ存在するように、レコードをLSMツリーにフラッシュし得る。
【0102】
ここで
図20を参照すると、方法2000のフロー図が示されている。方法2000は、ワーカノード(例えば、ワーカノード120)によって実行される作業を観察するデータベースシステム(例えば、システム100)のアシスタントノード(例えば、アシスタントノード1030)によって実行される方法の一実施形態である。方法2000は、非一時的コンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得る。いくつかの実施形態では、方法2000は、示されるよりも多い又は少ないステップを含む。例えば、方法2000は、アシスタントノードが、ワーカノードによって同じくフラッシュされたデータベース(例えば、データベース110)にレコード(例えば、レコード115)をフラッシュするステップを含み得る。
【0103】
方法2000は、ステップ2010において、アシスタントが第1のワーカノードのトランザクションログ(例えば、ログ1045)を読み取ることから開始する。様々な実施形態では、トランザクションログは、第1のワーカノードによってコミットされたレコードのセットを指定する。トランザクションログの読み取りに基づいて、アシスタントノードは、アシスタントノードにおいて、レコードのセットのうちの1つ又は複数をキャッシュし得る。ステップ2020において、アシスタントノードは、第2のワーカノードから、第1のワーカノードに関連付けられたレコードに対する要求(例えば、レコード要求204)を受信する。
【0104】
ステップ2030において、トランザクションログの読み取りに基づいて、アシスタントノードは、レコードがコミットされたかどうかを決定する。第2のワーカノードから受信された要求は、スナップショットタイムスタンプを識別し得る。アシスタントノードは、第1のワーカノードがトランザクションログを更新していないこと、及び第1のワーカノードがスナップショットタイムスタンプの時間より後の時間を示すタイムスタンプを有するレコードをトランザクションログに書き込んでいないことを決定し得る。この決定に基づいて、アシスタントノードは、第1のワーカノードがトランザクションログを更新できないようにし得る。第2のワーカノードへの応答は、レコードがコミットされていないことを示し得る。レコードがコミットされたと決定したことに応答して、アシスタントノードは、1つ又は複数のキャッシュされたレコードからレコードにアクセスし得る。応答は、レコードを含み得る。
【0105】
ステップ2040において、アシスタントノードは、レコードがコミットされたかどうかを示す応答を第2のワーカノードに送信する。レコードがコミットされたと決定したことに応答して、アシスタントノードは、第1のワーカノードがレコードをデータベースにフラッシュするかどうかとは無関係に、レコードをデータベースシステムのデータベース(例えば、データベース110)にフラッシュし得る。
例示的なマルチテナントデータベースシステム
【0106】
ここで
図21を参照すると、本開示の様々な技法を実装することができる例示的なマルチテナントデータベースシステム(MTS)2100が示されており、例えば、システム100はMTS2100であり得る。
図21において、MTS2100は、データベースプラットフォーム2110と、アプリケーションプラットフォーム2120と、ネットワーク2140に接続されたネットワークインターフェース2130とを含む。また、図示のように、データベースプラットフォーム2110は、データストレージ2112と、データストレージ2112と対話するデータベースサーバ2114A~Nのセットとを含み、アプリケーションプラットフォーム2120は、それぞれの環境2124を有するアプリケーションサーバ2122A~Nのセットを含む。図示の実施形態では、MTS2100は、ネットワーク2140を介して様々なユーザシステム2150A~Nに接続される。開示されたマルチテナントシステムは、例示の目的で含まれており、本開示の範囲を限定することを意図するものではない。他の実施形態では、本開示の技法は、クライアント/サーバ環境、クラウドコンピューティング環境、クラスタ化されたコンピュータなどの非マルチテナント環境において実装される。
【0107】
MTS2100は、様々な実施形態では、MTS2100と対話するユーザ(代替的に「テナント」と呼ばれる)に様々なサービスを一緒に提供するコンピュータシステムのセットである。いくつかの実施形態では、MTS2100は、テナント(例えば、企業、政府機関など)が顧客及び潜在的顧客との関係及び対話を管理するための機構を提供する顧客関係管理(CRM)システムを実装する。例えば、MTS2100は、テナントが、顧客連絡先情報(例えば、顧客のウェブサイト、電子メールアドレス、電話番号、及びソーシャルメディアデータ)を記憶し、販売機会を識別し、サービス問題を記録し、マーケティングキャンペーンを管理することを可能にし得る。更に、MTS2100は、これらのテナントが、顧客にどのようにコミュニケーションを取ったか、顧客が何を購入したか、顧客が最後にアイテムを購入したのはいつか、及び顧客がいくら支払ったかを識別することを可能にし得る。CRMシステムのサービス及び/又は他のサービスを提供するために、図示のように、MTS2100は、データベースプラットフォーム2110及びアプリケーションプラットフォーム2120を含む。
【0108】
データベースプラットフォーム2110は、様々な実施形態では、テナントデータを含むMTS2100のデータを記憶及び管理するためのデータベースサービスを実装するソフトウェアルーチンとハードウェア要素との組合せである。図示のように、データベースプラットフォーム2110は、データストレージ2112を含む。データストレージ2112は、様々な実施形態では、ネットワーク(例えば、ストレージ接続ネットワーク(SAN))上で互いに接続され、データ損失を防ぐためにデータを冗長的に記憶するように構成されたストレージデバイス(例えば、ソリッドステートドライブ、ハードディスクドライブなど)のセットを含む。様々な実施形態では、データストレージ2112は、情報のアクセス、記憶、及び操作を可能にする方法で整理された情報の集合体を含むデータベース(例えば、データベース110)を実装するために使用される。データストレージ2112は、単一のデータベース、分散データベース、分散データベースの集合体、冗長オンライン若しくはオフラインバックアップ又は他の冗長性を有するデータベースなどを実装し得る。データベースを実装することの一部として、データストレージ2112は、それぞれのデータペイロード(例えば、データベーステーブルのフィールドの値)及びメタデータ(例えば、キー値、タイムスタンプ、レコードに関連付けられたテーブルのテーブル識別子、レコードに関連付けられたテナントのテナント識別子など)を有する1つ又は複数のデータベースレコードを含むファイルを記憶し得る。
【0109】
様々な実施形態では、データベースレコードは、テーブルの行に対応し得る。テーブルは一般に、閲覧可能なスキーマの列又はフィールドとして論理的に配置された1つ又は複数のデータカテゴリを含む。従って、テーブルの各レコードは、フィールドによって定義された各カテゴリのデータのインスタンスを含み得る。例えば、データベースは、名前、住所、電話番号、ファックス番号などの基本的な連絡先情報のフィールドを有する顧客を記述するテーブルを含み得る。従って、そのテーブルのレコードは、テーブル内のフィールドの各々についての値(例えば、名前フィールドの名前)を含み得る。別のテーブルは、顧客、製品、販売価格、日付などの情報のフィールドを含む購入注文を記述し得る。様々な実施形態では、アカウント、連絡先、リード、及び機会データのためのテーブルなどの標準エンティティテーブルが、全てのテナントによる使用のために提供され、それぞれ、事前定義されたフィールドを含む。MTS2100は、1つ又は複数のテナントについてのデータベースレコードを同じテーブルに記憶し得る。すなわち、テナントはテーブルを共有し得る。従って、様々な実施形態では、データベースレコードは、データベースレコードの所有者を示すテナント識別子を含む。結果として、あるテナントのデータはセキュアに保たれ、他のテナントのデータから分離されるので、データが明示的に共有されない限り、あるテナントが別のテナントのデータにアクセスすることはできない。
【0110】
いくつかの実施形態では、データストレージ2112に記憶されたデータは、ログ構造マージツリー(LSMツリー、例えば、LSMツリー1100)の一部として整理される。LSMツリーは、通常、インメモリバッファ及び永続ストレージという2つの高レベル構成要素を含む。動作中、データベースサーバ2114は、最初にデータベースレコードをローカルインメモリバッファに書き込み、その後、これらのレコードを永続ストレージ(例えば、データストレージ2112)にフラッシュし得る。データベースレコードをフラッシュすることの一部として、データベースサーバ2114は、LSMツリーの「トップ」レベルに含まれる新しいファイルにデータベースレコードを書き込み得る。時間の経過とともに、データベースレコードは、データベースレコードがLSMツリーのレベルを下に移動するにつれて、データベースサーバ2114によって、より低いレベルに含まれる新しいファイルに書き換えられ得る。様々な実装形態では、データベースレコードが古くなり、LSMツリーを下に移動されるにつれて、それらは、データストレージ2112のますます低速のストレージデバイスに(例えば、ソリッドステートドライブからハードディスクドライブに)移動される。
【0111】
データベースサーバ2114が特定のキーについてデータベースレコードにアクセスすることを望むとき、データベースサーバ2114は、その特定のキーについてのデータベースレコードを潜在的に含むファイルについてLSMツリーの異なるレベルをトラバースし得る。データベースサーバ2114が、ファイルが関連データベースレコードを含み得ると決定すると、データベースサーバ2114は、そのファイルをデータストレージ2112からデータベースサーバ2114のメモリにフェッチし得る。次いで、データベースサーバ2114は、特定のキーを有するデータベースレコードについて、フェッチされたファイルをチェックし得る。様々な実施形態では、データベースレコードは、データストレージ2112に書き込まれると不変である。従って、データベースサーバ2114が、(アクセスされたデータベースレコードから識別され得る)テーブルの行の値を修正することを望む場合、データベースサーバ2114は、新しいデータベースレコードをLSMツリーのトップレベルに書き出す。時間の経過とともに、そのデータベースレコードは、LSMツリーのレベルを下ってマージされる。従って、LSMツリーは、データベースキーについての様々なデータベースレコードを記憶し得、そのキーについてのより古いデータベースレコードは、より新しいデータベースレコードよりもLSMツリーの下位レベルに位置する。
【0112】
データベースサーバ2114は、様々な実施形態では、データ記憶、データ取出し、及び/又はデータ操作などのデータベースサービスを提供することが可能なハードウェア要素、ソフトウェアルーチン、又はそれらの組合せである。データベースサーバ2114は、ワーカノード120に対応し得る。そのようなデータベースサービスは、データベースサーバ2114によって、MTS2100内の構成要素(例えば、アプリケーションサーバ2122)及びMTS2100の外部の構成要素に提供され得る。一例として、データベースサーバ2114は、データストレージ2112へのデータの書き込み又は読み取りを要求しているアプリケーションサーバ2122からデータベーストランザクション要求を受信し得る。データベーストランザクション要求は、SQL SELECTコマンドを指定して、1つ又は複数のデータベーステーブルから1つ又は複数の行を選択し得る。行のコンテンツは、データベースレコードにおいて定義され得、従って、データベースサーバ2114は、選択された1つ又は複数のテーブル行に対応する1つ又は複数のデータベースレコードを探し出し、返し得る。様々な場合において、データベーストランザクション要求は、データベースサーバ2114に、LSMツリーのための1つ又は複数のデータベースレコードを書き込むように命令し得、データベースサーバ2114は、データベースプラットフォーム2110上に実装されたLSMツリーを維持する。いくつかの実施形態では、データベースサーバ2114は、データストレージ2112に対する情報の記憶及び取出しを容易にするリレーショナルデータベース管理システム(RDMS)又はオブジェクト指向データベース管理システム(OODBMS)を実装する。様々な場合において、データベースサーバ2114は、トランザクションの処理を容易にするために互いに通信し得る。例えば、データベースサーバ2114Aは、データベースサーバ2114Nと通信して、データベースサーバ2114Nが特定のキーについてデータベースレコードをそのインメモリバッファに書き込んだかどうか決定する。
【0113】
アプリケーションプラットフォーム2120は、様々な実施形態では、CRMソフトウェアアプリケーションを実装及び実行するとともに、関連するデータ、コード、フォーム、ウェブページ、及び他の情報をユーザシステム2150との間で提供し、データベースプラットフォーム2110を介して、関連するデータ、オブジェクト、ウェブページコンテンツ、及び他のテナント情報を記憶するソフトウェアルーチンとハードウェア要素との組合せである。これらのサービスを容易にするために、様々な実施形態では、アプリケーションプラットフォーム2120は、データベースプラットフォーム2110と通信して、データを記憶、アクセス、及び操作する。いくつかの事例では、アプリケーションプラットフォーム2120は、異なるネットワーク接続を介してデータベースプラットフォーム2110と通信し得る。例えば、1つのアプリケーションサーバ2122は、ローカルエリアネットワークを介して結合され得、別のアプリケーションサーバ2122は、直接ネットワークリンクを介して結合され得る。TCP/IP(Transfer Control Protocol and Internet Protocol)は、アプリケーションプラットフォーム2120とデータベースプラットフォーム2110との間で通信するための例示的なプロトコルであるが、使用されるネットワーク相互接続に応じて他のトランスポートプロトコルが使用され得ることは当業者には明らかであろう。
【0114】
アプリケーションサーバ2122は、様々な実施形態では、MTS2100のテナントから受信された要求を処理することを含む、アプリケーションプラットフォーム2120のサービスを提供することが可能なハードウェア要素、ソフトウェアルーチン、又はそれらの組合せである。アプリケーションサーバ2122は、様々な実施形態では、開発者がアプリケーション(例えば、ビジネスロジック)を開発、実行、及び管理するための機能を提供する、などの様々な目的のために使用可能な環境2124をスポーンし得る。データは、別の環境2124及び/又はデータベースプラットフォーム2110から環境2124に転送され得る。場合によっては、環境2124は、他の環境2124からのデータが明示的に共有されない限り、そのようなデータにアクセスすることができない。いくつかの実施形態では、複数の環境2124を単一のテナントに関連付けることができる。
【0115】
アプリケーションプラットフォーム2120は、CRMアプリケーション及び/又はテナントによって開発されたアプリケーションを含む、複数の異なるホストされた(標準及び/又はカスタム)アプリケーションへのアクセスをユーザシステム2150に提供し得る。様々な実施形態では、アプリケーションプラットフォーム2120は、アプリケーションの作成、アプリケーションの試験、データストレージ2112におけるデータベースオブジェクトへのアプリケーションの記憶、環境2124(例えば、プロセス空間の仮想マシン)におけるアプリケーションの実行、又はそれらの任意の組合せを管理し得る。いくつかの実施形態では、アプリケーションプラットフォーム2120は、いかなる理由であれ、いつでもサーバプールからアプリケーションサーバ2122を追加及び除去し得、特定のアプリケーションサーバ2122に対するユーザ及び/又は組織のサーバ親和性はないことがある。いくつかの実施形態では、ロードバランシング機能を実装するインターフェースシステム(図示せず)(例えば、F5 Big-IPロードバランサ)が、アプリケーションサーバ2122とユーザシステム2150との間に位置し、要求をアプリケーションサーバ2122に割り振るように構成される。いくつかの実施形態では、ロードバランサは、最小接続アルゴリズムを使用して、ユーザ要求をアプリケーションサーバ2122にルーティングする。ラウンドロビン及び観察レスポンスタイムなどのロードバランシングアルゴリズムの他の例を使用することもできる。例えば、特定の実施形態では、同じユーザからの3つの連続した要求が3つの異なるサーバ2122にヒットすることがあり、異なるユーザからの3つの要求が同じサーバ2122にヒットすることがある。
【0116】
いくつかの実施形態では、MTS2100は、データが共有されない限り、各テナントのデータを別個に保つために、暗号化などのセキュリティ機構を提供する。2つ以上のサーバ2114又は2122が使用される場合、それらは、互いに近接して(例えば、単一の建物又はキャンパスに位置するサーバファーム内に)位置してもよいし、互いに離れた場所に分散されていてもよい(例えば、都市Aに位置する1つ又は複数のサーバ2114及び都市Bに位置する1つ又は複数のサーバ2122)。従って、MTS2100は、ローカルに、又は1つ若しくは複数の地理的な位置にわたって分散された、1つ又は複数の論理的及び/又は物理的に接続されたサーバを含み得る。
【0117】
1人又は複数人のユーザ(例えば、ユーザシステム2150を介する)は、ネットワーク2140を介してMTS2100と対話し得る。ユーザシステム2150は、例えば、MTS2100のテナント、MTS2100のプロバイダ(例えば、管理者)、又はサードパーティに対応し得る。各ユーザシステム2150は、デスクトップパーソナルコンピュータ、ワークステーション、ラップトップ、PDA、携帯電話、又は任意のワイヤレスアクセスプロトコル(WAP)対応デバイス、又はインターネット若しくは他のネットワーク接続に直接若しくは間接的にインターフェースすることが可能な任意の他のコンピューティングデバイスであり得る。ユーザシステム2150は、ネットワーク2140を介してMTS2100とインターフェースするように構成された専用ハードウェアを含み得る。ユーザシステム2150は、MTS2100に対応するグラフィカルユーザーインターフェース(GUI)、HTTPクライアント(例えば、MicrosoftのInternet Explorer(登録商標)ブラウザ、NetscapeのNavigator(登録商標)ブラウザ、Operaのブラウザ、又は形態電話、PDA、若しくは他のワイヤレスデバイスの場合のWAP対応ブラウザなどのブラウジングプログラムなど)、又はその両方を実行することができ、ユーザシステム2150のユーザ(例えば、CRMシステムの加入者)が、ネットワーク2140を介してMTS2100から入手可能な情報及びページにアクセスし、処理し、閲覧することを可能にする。各ユーザシステム2150は、MTS2100又は他のシステム若しくはサーバによって提供されるページ、フォーム、及び他の情報とともに、ディスプレイモニタスクリーン、LCDディスプレイなどの上のブラウザによって提供されるグラフィカルユーザーインターフェース(GUI)と対話するための、キーボード、マウス、タッチスクリーン、ペンなどの1つ又は複数のユーザインターフェースデバイスを含み得る。上述したように、開示された実施形態は、ネットワークの特定のグローバルインターネットワークを指すインターネットでの使用に適している。しかしながら、インターネットの代わりに、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、非TCP/IPベースのネットワーク、任意のLAN又はWANなどの他のネットワークが使用され得ることを理解されたい。
【0118】
ユーザシステム2150のユーザは、異なる能力のユーザであり得るので、特定のユーザシステム2150の能力は、現在のユーザに関連付けられた1つ又は複数の許可レベルで決定され得る。例えば、販売員が特定のユーザシステム2150を使用してMTS2100と対話している場合、そのユーザシステム2150は、その販売員に割り当てられた能力(例えば、ユーザ特権)を有し得る。しかしながら、管理者が同じユーザシステム2150を使用してMTS2100と対話している場合、ユーザシステム2150は、その管理者に割り当てられた能力(例えば、管理特権)を有し得る。階層的役割モデルを有するシステムでは、ある許可レベルのユーザは、より低い許可レベルのユーザがアクセス可能なアプリケーション、データ、及びデータベース情報にアクセスすることができるが、より高い許可レベルのユーザがアクセス可能な特定のアプリケーション、データベース情報、及びデータにアクセスすることはできない。従って、異なるユーザは、ユーザのセキュリティ又は許可レベルに応じて、アプリケーション及びデータベース情報にアクセスし、それを修正することに関して異なる能力を有し得る。MTS2100によって管理されるデータ構造の中には、テナントレベルで割り振られるものもあれば、ユーザレベルで管理されるものもある。
【0119】
いくつかの実施形態では、ユーザシステム2150及びその構成要素は、1つ又は複数の処理要素上で実行可能なコンピュータコードを含む、ブラウザなどのアプリケーションを使用して構成可能である。同様に、いくつかの実施形態では、MTS2100(及び2つ以上存在する場合にはMTSの追加のインスタンス)及びそれらの構成要素は、処理要素上で実行可能なコンピュータコードを含むアプリケーション(複数可)を使用してオペレータが構成可能である。従って、本明細書で説明する様々な動作は、非一時的コンピュータ可読媒体上に記憶され、処理要素によって実行されるプログラム命令を実行することによって実施され得る。プログラム命令は、ハードディスクのような不揮発性媒体に記憶されてもよいし、周知のように、ROM又はRAMのような他の揮発性又は非揮発性メモリ媒体又はデバイスに記憶されてもよいし、コンパクトディスク(CD)媒体、デジタル多用途ディスク(DVD)媒体、フロッピー(登録商標)ディスクなど、プログラムコードを開始することが可能な任意の媒体に提供されてもよい。追加的に、プログラムコード全体又はその一部は、周知のように、例えば、インターネットを介して、又は別のサーバから、ソフトウェアソースから送信及びダウンロードされてもよいし、周知のように、任意の通信媒体及びプロトコル(例えば、TCP/IP、HTTP、HTTPS、イーサネット(登録商標)など)を使用して、周知のように、任意の他の従来のネットワーク接続(例えば、エクストラネット、VPN、LANなど)を介して送信されてもよい。開示された実施形態の態様を実装するためのコンピュータコードは、サーバ又はサーバシステム上で実行することができる任意のプログラム言語、例えば、C、C++、HTML、Java、JavaScript(登録商標)、又はVBScriptなどの任意の他のスクリプト言語で実装することができることも理解されよう。
【0120】
ネットワーク2140は、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、ワイヤレスネットワーク、ポイントツーポイントネットワーク、スター型ネットワーク、トークンリングネットワーク、ハブネットワーク、又は任意の他の適切な構成であり得る。ネットワークのグローバルインターネットワークは、大文字の「I」を有する「インターネット」と呼ばれることが多く、TCP/IP(Transfer Control Protocol and Internet Protocol)ネットワークの一例である。しかしながら、開示された実施形態は、様々な他の種類のネットワークのいずれかを利用し得ることを理解されたい。
【0121】
ユーザシステム2150は、TCP/IPを使用してMTS2100と通信し得、より高いネットワークレベルでは、HTTP、FTP、AFS、WAPなどの他の一般的なインターネットプロトコルを使用して通信し得る。例えば、HTTPが使用される場合、ユーザシステム2150は、MTS2100のHTTPサーバからHTTPメッセージを送受信するための、一般に「ブラウザ」と呼ばれるHTTPクライアントを含み得る。そのようなサーバは、MTS2100とネットワーク2140との間の唯一のネットワークインターフェースとして実装され得るが、他の技法が同様に又は代わりに使用されてもよい。いくつかの実装形態では、MTS2100とネットワーク2140との間のインターフェースは、負荷を平衡させ、到来するHTTP要求を複数のサーバにわたって均等に分配するためのラウンドロビンHTTP要求分配器などのロードシェア機能を含む。
【0122】
様々な実施形態では、ユーザシステム2150は、アプリケーションサーバ2122と通信して、データストレージ2112への1つ又は複数のクエリを必要とし得るMTS2100からのシステムレベル及びテナントレベルのデータを要求及び更新する。いくつかの実施形態では、MTS2100は、所望の情報にアクセスするように設計された1つ又は複数のSQLステートメント(SQLクエリ)を自動的に生成する。場合によっては、ユーザシステム2150は、MTS2100の少なくとも一部に対応する特定のフォーマットを有する要求を生成してもよい。一例として、ユーザシステム2150は、指定された複数のオブジェクトのオブジェクト関係マッピング(例えば、JavaScript(登録商標)オブジェクト表記マッピング)を記述するオブジェクト表記を使用して、データオブジェクトを特定の環境に移動するように要求し得る。
例示的なコンピュータシステム
【0123】
ここで
図22を参照すると、システム100、データベース110、ワーカノード120、ディレクタノード135、アシスタントノード1030、MTS2100、及び/又はユーザシステム2150を実装し得る例示的なコンピュータシステム2200のブロック図が示されている。コンピュータシステム2200は、相互接続2260(例えば、システムバス)を介してシステムメモリ2220及びI/Oインターフェース(複数可)2240に結合されたプロセッササブシステム2280を含む。I/Oインターフェース(複数可)2240は、1つ又は複数のI/Oデバイス2250に結合される。便宜上、
図22には単一のコンピュータシステム2200が示されているが、システム2200は、一緒に動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0124】
プロセッササブシステム2280は、1つ又は複数のプロセッサ又は処理ユニットを含み得る。コンピュータシステム2200の様々な実施形態では、プロセッササブシステム2280の複数のインスタンスが相互接続2260に結合され得る。様々な実施形態では、プロセッササブシステム2280(又は2280内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含み得る。
【0125】
システムメモリ2220は、システム2200に本明細書で説明される様々な動作を実行させるために、プロセッササブシステム2280によって実行可能なプログラム命令を記憶するのに使用可能である。システムメモリ2220は、ハードディスクストレージ、フロッピー(登録商標)ディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAMなど)、読み取り専用メモリ(PROM、EEPROMなど)などの異なる物理メモリ媒体を使用して実装され得る。コンピュータシステム2200内のメモリは、メモリ2220などの一次ストレージに限定されない。むしろ、コンピュータシステム2200はまた、プロセッササブシステム2280内のキャッシュメモリ及びI/Oデバイス2250上の二次ストレージ(例えば、ハードドライブ、ストレージアレイなど)などの他の形態のストレージを含み得る。いくつかの実施形態では、これらの他の形態のストレージはまた、プロセッササブシステム2280によって実行可能なプログラム命令を記憶し得る。いくつかの実施形態では、実行されると、データベースアプリケーション200、インメモリキャッシュ210、及び/又はオーケストレーションアプリケーション300を実装するプログラム命令が、システムメモリ2220内に含まれてもよい/記憶されてもよい。
【0126】
I/Oインターフェース2240は、様々な実施形態によれば、他のデバイスに結合し、他のデバイスと通信するように構成された様々な種類のインターフェースのいずれかであり得る。一実施形態では、I/Oインターフェース2240は、フロントサイドから1つ又は複数のバックサイドバスへのブリッジチップ(例えば、サウスブリッジ)である。I/Oインターフェース2240は、1つ又は複数の対応するバス又は他のインターフェースを介して1つ又は複数のI/Oデバイス2250に結合され得る。I/Oデバイス2250の例には、ストレージデバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、又はそれらの関連コントローラ)、(例えば、ローカル又はワイドエリアネットワークへの)ネットワークインターフェースデバイス、又は他のデバイス(例えば、グラフィックス、ユーザインターフェースデバイスなど)が含まれる。一実施形態では、コンピュータシステム2200は、(例えば、WiFi、Bluetooth(登録商標)、イーサネット(登録商標)などを介して通信するように構成された)ネットワークインターフェースデバイス2250を介してネットワークに結合される。
【0127】
本出願の主題の実現には、以下の実施例1~20が含まれるが、これらに限定されない。
[実施例1]
方法であって、
データベースシステムのワーカノードが、レコードを書き込むことを含むトランザクションを実行する要求を受信するステップであって、データベースシステムは、データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードと、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを含む、ステップと、
ワーカノードが、複数のディレクタノードのうちのいくつかのディレクタノードに対して、トランザクションのための動作の実行を容易にする情報の要求を発行するステップと、
複数のディレクタノードの過半数から承認応答を受信したことに応答して、ワーカノードが、トランザクションのための動作の実行に進むステップであって、受信された応答のいずれもトランザクションの不承認を示さない、ステップと
を含む方法。
[実施例2]
情報の要求はレコードを指定し、動作はトランザクションをコミットすることに対応し、ディレクタノードのうちの所与のディレクタノードは、レコードが、所与のディレクタノードに知られている承認済みレコードの履歴と競合するかどうかに基づいて、トランザクションのコミットを承認するかどうかを決定するように動作可能である、実施例1の方法。
[実施例3]
ディレクタノードへの要求は、トランザクションのスナップショット時間を指定し、所与のディレクタノードは、レコードと、スナップショット時間の後に承認された承認済みレコードの履歴のレコードのみとの間の競合をチェックするように動作可能である、実施例2の方法。
[実施例4]
承認済みレコードの履歴は、複数のワーカノードから複数のワーカノード間で共有される永続ストレージにフラッシュされていない1つ又は複数のレコードを含む、実施例2の方法。
[実施例5]
所与のディレクタノードは、ワーカノードへの承認応答の送信に応答して、承認済みレコードの履歴にレコードを含めるように動作可能である、実施例2の方法。
[実施例6]
所与のディレクタノードは、複数のディレクタノードのうちの他のディレクタノードと通信することなく、トランザクションのコミットを承認するかどうかを決定するように動作可能である、実施例2の方法。
[実施例7]
ディレクタノードへの要求はコミット時間を示し、所与のディレクタノードは、コミット時間にワーカノードからの要求を処理するように動作可能である、実施例2の方法。
[実施例8]
トランザクションをコミットする許可が付与されたと決定した後、ワーカノードが、トランザクションをコミットし、複数のワーカノード間で共有される永続ストレージにレコードをフラッシュするステップ
を更に含む、実施例2の方法。
[実施例9]
データベースシステムのワーカノードに動作を実行させることができるプログラム命令を記憶した非一時的コンピュータ可読媒体であって、動作は、
レコードを書き込むことを含むトランザクションを実行する要求を受信するステップであって、データベースシステムは、データベースシステムのためのトランザクションを実行するように動作可能な複数のワーカノードと、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを含む、ステップと、
ワーカノードのインメモリキャッシュにレコードを書き込むステップと、
レコードをコミットする許可を要求するコミット要求を、複数のディレクタノードのうちのいくつかのディレクタノードに対して発行するステップと、
トランザクションの不承認を示す応答を受信することなく、複数のディレクタノードの過半数から承認応答を受信したことに基づいて、レコードをコミットする許可が付与されたと決定するステップと
を含む、非一時的コンピュータ可読媒体。
[実施例10]
動作は、
承認応答が複数のディレクタノードの過半数から受信されていないという決定に基づいて、トランザクションを中止するステップ
を更に含む、実施例9の媒体。
[実施例11]
動作は、
ディレクタノードのうちの少なくとも1つから、レコードと少なくとも1つのディレクタノードに知られている別のレコードとの間の競合に基づいてトランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、トランザクションを中止するステップ
を更に含む、実施例9の媒体。
[実施例12]
コミット要求は、トランザクションをコミットするための提案された期間を指定し、動作は、
ディレクタノードのうちの少なくとも1つから、提案された期間の後のコミット要求の到着に基づいてトランザクションをコミットすることの不承認を示す不承認応答を受信したことに応答して、トランザクションを中止するステップ
を更に含む、実施例9の媒体。
[実施例13]
動作は、
別のワーカノードから、レコードの要求を受信するステップと、
トランザクションをコミットした後に、レコードを別のワーカノードに提供するステップと
を更に含む、実施例9の媒体。
[実施例14]
方法であって、
ディレクタノードが、レコードを含むトランザクションをコミットする許可を求める要求をワーカノードから受信するステップであって、ディレクタノード及びワーカノードは、トランザクションを実行するように動作可能な複数のワーカノードと、トランザクションのトランザクション整合性を確保するように動作可能な複数のディレクタノードとを有するデータベースシステムの一部である、ステップと、
ディレクタノードが、レコードが複数のワーカノードのうちの他のワーカノードによって識別されたレコードのセットと競合するかどうかを決定するステップと、
決定に基づいて、ディレクタノードが、トランザクションをコミットする許可が付与されたかどうかを示す応答をワーカノードに送信するステップと
を含む方法。
[実施例15]
要求はレコードを指定し、応答は、トランザクションをコミットする許可が付与されたことを示し、方法は、
ディレクタノードが、ワーカノードがトランザクションをコミットしたかどうかとは無関係に、レコードをコミットされたものとして識別する履歴情報を記憶するステップ
を更に含む、実施例14の方法。
[実施例16]
要求は、トランザクションに関連付けられたスナップショット時間及び提案されたコミット時間を指定し、決定するステップは、
スナップショット時間と提案されたコミット時間との間にコミットされていると識別されたレコードのセット内に競合するレコードがあるかどうかを決定するステップ
を含む、実施例14の方法。
[実施例17]
決定するステップは、ディレクタノードのローカルクロックがコミット時間に等しい時間を示した後に実行される、実施例16の方法。
[実施例18]
応答は、トランザクションをコミットする許可が付与されていないことを示し、ワーカノードは、コミットする許可が付与されなかったことを示す応答にもかかわらず、複数のディレクタノードの過半数から承認を受信したことに応答して、トランザクションをコミットするように動作可能である、実施例15の方法。
[実施例19]
ディレクタノードに知られているレコードのセットは、複数のディレクタノードのうちの別のディレクタノードに知られている別のレコードのセットに含まれていない少なくとも1つのレコードを含む、実施例15の方法。
[実施例20]
応答は、ワーカノードがトランザクションをコミットすることをいつ許可されるかを示すインジケーションをワーカノードに提供する、実施例15の方法。
【0128】
本開示は、開示された概念の非限定的な実装形態である「実施形態」への言及を含む。「実施形態」、「一実施形態」、「特定の実施形態」、「いくつかの実施形態」、「様々な実施形態」などへの言及は、必ずしも同じ実施形態を指すとは限らない。詳細に説明される特定の実施形態に加え、本開示の趣旨又は範囲内に入る修正形態又は代替形態を含む、多数の可能な実施形態が企図される。全ての実施形態が、本明細書で説明される潜在的な利点のいずれか又は全てを必ずしも明示するわけではない。
【0129】
本開示は、開示された実施形態から生じ得る潜在的な利点を論じ得る。これらの実施形態の全ての実装形態が、潜在的な利点のいずれか又は全てを必ずしも明示するとは限らない。特定の実装形態について利点が実現されるかどうかは、多くの要因に依存するものであり、それらのうちのいくつかは本開示の範囲外である。実際に、特許請求の範囲に含まれる実施形態が、開示された利点のいくつか又は全部を示さない理由はいくつかある。例えば、特定の実装形態は、開示された実施形態のうちの1つと併せて、開示された利点のうちの1つ又は複数を無効にするか又は減少させる、本開示の範囲外の他の回路構成を含み得る。更に、特定の実装形態(例えば、実装技法又はツール)の準最適な設計実行も、開示された利点を無効にするか又は減少させることがある。熟練した実装を想定しても、利点の実現は、依然として、実装が展開される環境状況などの他の要因に依存する可能性がある。例えば、特定の実装形態に供給される入力は、本開示で対処される1つ又は複数の問題が特定の場合に発生することを防止する可能性があり、その結果、その解決策の利益が実現されないことがある。本開示の外部の要因が存在する可能性を考慮すると、本明細書で説明される任意の潜在的な利点は、侵害を実証するために満たされなければならない特許請求の範囲の限定として解釈されるべきではないことが明確に意図される。むしろ、そのような潜在的な利点の識別は、本開示の利益を有する設計者が利用可能な改善の種類(複数可)を例示することを意図するものである。そのような利点が許容的に説明される(例えば、特定の利点が「生じ得る」と述べる)ことは、そのような利点が実際に実現可能かどうかについての疑いを伝えることを意図するものではなく、むしろ、そのような利点の実現が多くの場合追加の要因に依存するという技術的現実を認識することを意図するものである。
【0130】
別段の記載がない限り、実施形態は非限定的である。すなわち、開示された実施形態は、特定の特徴に関して単一の例のみが説明されている場合であっても、本開示に基づいて起草される特許請求の範囲を限定することを意図するものではない。開示された実施形態は、それとは反対の記述が本開示にない限り、制限的ではなく例示的であることを意図するものである。従って、本出願は、開示された実施形態、並びに本開示の利益を有する当業者には明らかであろう代替形態、修正形態、及び同等物を包含する特許請求の範囲を許可することを意図するものである。
【0131】
例えば、本出願における特徴は、任意の適切な方法で組み合わされ得る。従って、本出願(又はそれに対する優先権を主張する出願)の手続中に、そのような特徴の組合せに対して新しい請求項が作成され得る。特に、添付の特許請求の範囲を参照すると、従属請求項からの特徴は、必要に応じて、他の独立請求項に従属する請求項を含む他の従属請求項の特徴と組み合わされ得る。同様に、それぞれの独立請求項からの特徴は、必要に応じて組み合わされ得る。
【0132】
従って、添付の従属請求項は、各々が単一の他の請求項に従属するように起草され得るが、追加の従属性も企図される。本開示と一致する従属項における特徴の任意の組合せが企図され、本出願又は別の出願において特許請求され得る。要するに、組合せは、添付の特許請求の範囲に具体的に列挙されたものに限定されない。
【0133】
必要に応じて、1つの形式又は法定タイプ(例えば、装置)で起草された請求項は、別の形式又は法定タイプ(例えば、方法)の対応する請求項をサポートすることを意図するものであることも企図される。
【0134】
本開示は法的文書であるため、様々な用語及び表現は、行政解釈及び司法的解釈の対象となり得る。以下の段落、及び本開示全体を通して提供される定義が、本開示に基づいて起草される特許請求の範囲をどのように解釈するかを決定する際に使用されるべきであることが、ここに公示される。
【0135】
単数形の項目(すなわち、「1つの(a)」、「1つの(an)」、又は「その(the)」が先行する名詞又は名詞句)への言及は、文脈が別途明確に指示しない限り、「1つ又は複数の」を意味することを意図するものである。従って、特許請求の範囲における「1つの項目(an item)」への言及は、文脈を伴わない場合、項目の追加の事例を排除しない。「複数の(plurality)」項目は、項目のうちの2つ以上の項目のセットを指す。
【0136】
「してもよい/し得る(may)」という単語は、本明細書では、許容的な意味(すなわち、可能性を有する(having the potential to)、可能である(being able to))で使用されており、強制的な意味(すなわち、しなければならない(must))では使用されていない。
【0137】
「備える/含む(comprising)」及び「含む(including)」という用語並びにその形態は、オープンエンドであり、「含むが、これらに限定されない(including, but not limited to)」を意味する。
【0138】
「又は(or)」という用語が、選択肢のリストに関して本開示で使用されるとき、それは、概して、文脈が別段に規定しない限り、包括的な意味で使用されることが理解されるであろう。従って、「x又はy(x or y)」という記載は、「x若しくはy、又は両方(x or y, or both)」と同等であるので、1)xではあるがyではない、2)yではあるがxではない、及び3)x及びyの両方、を包含する。一方、「x又はyのいずれかであるが、両方ではない(either x or y, but not both)」などの表現は、「又は」が排他的な意味で使用されていることを明確にする。
【0139】
「w、x、y、若しくはz、又はそれらの任意の組合せ(w, x, y, or z, or any combination thereof)」又は「…w、x、y、及びzのうちの少なくとも1つ(at least one of … w, x, y, and z)」という記載は、セット中の要素の総数まで、単一の要素を含む全ての可能性を包含することを意図するものである。例えば、セット[w,x,y,z]が与えられると、これらの表現は、セットの任意の単一の要素(例えば、wではあるが、x、y、又はzではない)、任意の2つの要素(例えば、w及びxではあるが、y又はzではない)、任意の3つの要素(例えば、w、x、及びyではあるが、zではない)、及び4つ全ての要素を包含する。従って、「…w、x、y、及びzのうちの少なくとも1つ」という表現は、セット[w,x,y,z]の少なくとも1つの要素を指し、それによって、この要素のリスト中の全ての可能な組合せを包含する。この表現は、wの少なくとも1つの事例、xの少なくとも1つの事例、yの少なくとも1つの事例、及びzの少なくとも1つの事例が存在することを必要とすると解釈されるべきではない。
【0140】
本開示では、様々な「ラベル」が名詞又は名詞句に先行し得る。文脈が別段に規定しない限り、特徴のために使用される異なるラベル(例えば、「第1の回路」、「第2の回路」、「特定の回路」、「所与の回路」など)は、特徴の異なる事例を指す。追加的に、「第1の」、「第2の」、及び「第3の」というラベルは、特徴に適用されるとき、別段の記載がない限り、いかなる種類の順序付け(例えば、空間的、時間的、論理的など)も意味しない。
【0141】
「~に基づく(based on)」という表現は、決定に影響を及ぼす1つ又は複数の要因を説明するために使用される。この用語は、追加の要因が決定に影響を及ぼし得る可能性を排除するものではない。すなわち、決定は、指定された要因のみに基づいてもよいし、指定された要因及び他の指定されていない要因に基づいてもよい。「Bに基づいてAを決定する」という表現を考える。この表現は、Bが、Aを決定するために使用されるか、又はAの決定に影響を及ぼす要因であることを指定する。この表現は、Aの決定がCなどの何らかの他の要因にも基づく可能性があることを排除しない。この表現はまた、AがBのみに基づいて決定される実施形態を包含することを意図するものである。本明細書で使用される場合、「~に基づく」という表現は、「~に少なくとも部分的に基づく(based at least in part on)」という表現と同義である。
【0142】
「~に応答して(in response to)」及び「~に応答して(responsive to)」という表現は、効果を誘発する1つ又は複数の要因を説明する。この表現は、追加の要因が、指定された要因と共同して、又は指定された要因から独立して、効果に影響を及ぼすか、又は別様に効果を誘発し得る可能性を排除しない。すなわち、効果は、これらの要因のみに応答し得るか、又は指定された要因及び他の指定されていない要因に応答し得る。「Bに応答してAを実行する」という表現を考える。この表現は、Bが、Aの実行をトリガするか、又はAの特定の結果をトリガする要因であることを指定する。この表現は、Aを実行することが、Cなどの何らかの他の要因にも応答して行われ得ることを排除しない。この表現はまた、Aを実行することが、B及びCに共同で応答して行われ得ることを排除しない。この表現はまた、AがBのみに応答して実行される実施形態を包含することを意図するものである。本明細書で使用される場合、「~に応答して(responsive to)」という表現は、表現「~に少なくとも部分的に応答して(responsive at least in part to)」と同義である。同様に、「~に応答して(in response to)」という句は、「~に少なくとも部分的に応答して(at least in part in response to)」という表現と同義である。
【0143】
本開示内で、(「ユニット」、「回路」、他の構成要素などと様々に呼ばれ得る)異なるエンティティが、1つ又は複数のタスク又は動作を実行するように「構成される」ものとして説明又は請求され得る。この定式化-[1つ又は複数のタスクを実行する]ように構成された[エンティティ]-は、本明細書では、構造(すなわち、何か物理的なもの)を指すために使用される。より具体的には、この定式化は、この構造が、動作中に1つ又は複数のタスクを実行するように構成されることを示すために使用される。構造は、その構造が現在動作していない場合であっても、何らかのタスクを実行するように「構成されている」と言うことができる。従って、何らかのタスクを実行する「ように構成される」ものとして説明又は列挙されるエンティティは、デバイス、回路、タスクを実施するために実行可能なプログラム命令を記憶するメモリとプロセッサユニットとを有するシステムなど、何か物理的なものを指す。この表現は、本明細書では、何か無形のものを指すために使用されない。
【0144】
場合によっては、様々なユニット/回路/構成要素が、タスク又は動作のセットを実行するものとして本明細書で説明され得る。それらのエンティティは、特に言及されていなくても、それらのタスク/動作を実行する「ように構成される」ことが理解される。
【0145】
「ように構成される(configured to)」という用語は、「ように構成可能である(configurable to)」ことを意図するものではない。例えば、プログラムされていないFPGAは、特定の機能を実行するように「構成されている」とはみなされない。しかしながら、このプログラムされていないFPGAは、その機能を実行するように「構成可能」であり得る。適切なプログラミングの後、FPGAは、特定の機能を実行するように「構成されている」と言うことができる。
【0146】
本開示に基づく米国特許出願の目的上、構造が1つ又は複数のタスクを実行する「ように構成される」という請求項における記載は、その請求項の要素に対して米国特許法第112条(f)項を行使しないことを明示的に意図するものである。出願人が、本開示に基づく米国特許出願の手続き中に第112条(f)項を行使することを望む場合、[機能を実行する]「ための手段」という構成を使用して請求項の要素を列挙する。
【0147】
本開示では、異なる「回路」が説明され得る。これらの回路(circuit)又は「回路構成(circuitry)」は、組合せ論理、クロックド記憶デバイス(例えば、フリップフロップ、レジスタ、ラッチなど)、有限状態機械、メモリ(例えば、ランダムアクセスメモリ、埋込みダイナミックランダムアクセスメモリ)、プログラマブル論理アレイなど、様々な種類の回路要素を含むハードウェアを構成する。回路構成は、カスタム設計されてもよいし、標準的なライブラリから取得されてもよい。様々な実装形態では、回路構成は、必要に応じて、デジタル構成要素、アナログ構成要素、又は両方の組合せを含むことができる。特定の種類の回路は、一般に「ユニット」(例えば、復号ユニット、算術論理ユニット(ALU)、機能ユニット、メモリ管理ユニット(MMU)など)と呼ばれることがある。そのようなユニットはまた、回路又は回路構成を指す。
【0148】
従って、図面に示され、本明細書で説明される、開示された回路/ユニット/構成要素及び他の要素は、前の段落で説明されたものなどのハードウェア要素を含む。多くの場合、特定の回路内のハードウェア要素の内部配置は、その回路の機能を記述することによって指定され得る。例えば、特定の「復号ユニット」は、「命令のオペコードを処理し、その命令を複数の機能ユニットのうちの1つ又は複数にルーティングする」機能を実行するものとして説明され得、これは、復号ユニットがこの機能を実行する「ように構成される」ことを意味する。この機能の仕様は、コンピュータ技術の当業者には、回路の可能な構造のセットを含意するのに十分である。
【0149】
様々な実施形態では、前の段落で説明したように、回路、ユニット、及び他の要素は、それらが実装するように構成された機能又は動作によって定義され得る。互いに対する配置及びそのような回路/ユニット/構成要素、並びにそれらが対話する方法は、最終的に集積回路内に製造されるか、又はFPGAにプログラムされて、マイクロアーキテクチャ定義の物理的実装を形成する、ハードウェアのマイクロアーキテクチャ定義を形成する。従って、マイクロアーキテクチャ定義は、当業者には、多くの物理的実装が導出され得る構造として認識され、その全てが、マイクロアーキテクチャ定義によって記述されるより広い構造に含まれる。すなわち、本開示に従って供給されるマイクロアーキテクチャ定義を提示された当業者は、過度の実験を行うことなく、通常の技術を適用して、Verilog又はVHDLなどのハードウェア記述言語(HDL)で回路/ユニット/構成要素の記述をコーディングすることによって構造を実装し得る。HDL記述は、多くの場合、機能的であるように見える様式で表現される。しかしながら、この分野の当業者には、このHDL記述は、回路、ユニット、又は構成要素の構造を次のレベルの実装詳細に変換するために使用される方法である。そのようなHDL記述は、挙動コード(典型的には合成可能ではない)、レジスタ転送言語(RTL)コード(挙動コードとは対照的に、典型的には合成可能である)、又は構造コード(例えば、論理ゲート及びそれらの接続性を指定するネットリスト)の形態をとり得る。HDL記述は、その後、所与の集積回路製造技術のために設計されたセルのライブラリに対して合成され得、タイミング、電力、及び他の理由で修正されて、最終的な設計データベースが得られ、このデータベースは、マスクを生成し、最終的に集積回路を製造するためにファウンドリに送信される。いくつかのハードウェア回路又はその一部はまた、回路図エディタにおいてカスタム設計され、合成回路構成とともに集積回路設計に取り込まれ得る。集積回路は、トランジスタ及び他の回路要素(例えば、キャパシタ、抵抗器、インダクタなどの受動素子)と、トランジスタと回路要素との間の相互接続とを含み得る。いくつかの実施形態は、ハードウェア回路を実装するために互いに結合された複数の集積回路を実装してもよく、及び/又は、いくつかの実施形態では、ディスクリート要素が使用されてもよい。代替的に、HDL設計は、フィールドプログラマブルゲートアレイ(FPGA)などのプログラマブル論理アレイに合成されてもよく、FPGAに実装されてもよい。回路のグループの設計とこれらの回路のその後の低レベル実装との間のこの分離は、このプロセスが回路実装プロセスの異なる段階で実行されるので、一般に、回路又は論理設計者が、回路が何を行うように構成されるかの記述を超えて、低レベル実装のための構造の特定のセットを決して指定しないというシナリオをもたらす。
【0150】
同じ仕様の回路を実現するために回路素子の多くの異なる低レベルの組合せが使用され得るという事実により、その回路には多数の等価構造が存在することになる。上記のように、これらの低レベル回路実装形態は、製造技術、集積回路を製造するために選択されたファウンドリ、特定のプロジェクトのために提供されるセルのライブラリなどの変化に応じて変化し得る。多くの場合、これらの異なる実装形態を生成するために異なる設計ツール又は方法によって行われる選択は任意であり得る。
【0151】
更に、回路の特定の機能仕様の単一の実装形態が、所与の実施形態について、多数のデバイス(例えば、数百万個のトランジスタ)を含むことが一般的である。従って、この情報は膨大な量であるため、単一の実施形態を実装するために使用される低レベル構造の完全な列挙を提供することは非現実的でなく、ましてや、同等の可能な実装の膨大なアレイについては言うまでもない。このため、本開示は、業界で一般的に採用されている機能的略記法を使用して回路の構造を説明する。
【国際調査報告】