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

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

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

<>
  • 特許-キー許可の配布 図1
  • 特許-キー許可の配布 図2
  • 特許-キー許可の配布 図3
  • 特許-キー許可の配布 図4
  • 特許-キー許可の配布 図5
  • 特許-キー許可の配布 図6
  • 特許-キー許可の配布 図7
  • 特許-キー許可の配布 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-25
(45)【発行日】2024-12-03
(54)【発明の名称】キー許可の配布
(51)【国際特許分類】
   G06F 16/23 20190101AFI20241126BHJP
   G06F 16/13 20190101ALI20241126BHJP
【FI】
G06F16/23
G06F16/13 100
【請求項の数】 12
(21)【出願番号】P 2023506487
(86)(22)【出願日】2021-09-08
(65)【公表番号】
(43)【公表日】2023-10-02
(86)【国際出願番号】 US2021049394
(87)【国際公開番号】W WO2022066410
(87)【国際公開日】2022-03-31
【審査請求日】2023-03-31
(31)【優先権主張番号】17/029,928
(32)【優先日】2020-09-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ヘランド,パトリック ジェームズ
【審査官】酒井 恭信
(56)【参考文献】
【文献】国際公開第2020/068856(WO,A1)
【文献】米国特許出願公開第2020/0097558(US,A1)
【文献】特開2008-217797(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00 - 16/958
(57)【特許請求の範囲】
【請求項1】
データベースシステムの許可オーケストレータノードによって実行される方法であって、
記データベースシステムの複数のデータベースノードに第1の許可情報を配布することであって、前記第1の許可情報は、前記複数のデータベースノードの各々に対するキー範囲許可の配布を識別し、所与のデータベースノードに配布されている所与のキー範囲許可は、前記所与のキー範囲許可に関連付けられたキー範囲内にキーが入るレコードを前記所与のデータベースノードが前記所与のデータベースノードのメモリ内キャッシュに書き込むことを許可する、ことと、
2のデータベースノードにプロビジョニングされた第1のキー範囲許可の要求を第1のデータベースノードから受信することと、
記第1の許可情報を修正して、前記第2のデータベースノードの代わりに前記第1のデータベースノードに前記第1のキー範囲許可をプロビジョニングする第2の許可情報を導出することと、
記複数のデータベースノードの各々に前記第2の許可情報を配布することと、を含む、方法。
【請求項2】
前記第1の許可情報を修正する前に
前記第1のキー範囲許可を放棄するための要求を前記第2のデータベースノードに送信することであって、前記第2のデータベースノードは、前記第1のキー範囲許可が前記第2のデータベースノードにおいて実行されているアクティブトランザクションのセットで使用されていないと判定することに応答して、前記第1のキー範囲許可を放棄するように動作可能である、ことと、
前記第2のデータベースノードから、前記第1のキー範囲許可が放棄されたことを示す表示を受信することと、をさらに含む、請求項1に記載の方法。
【請求項3】
前記第1の許可情報は、前記第2のデータベースノードに、前記第1のキー範囲許可のスーパーセットである第2のキー範囲許可をプロビジョニングし、前記第2のデータベースノードは、前記第1のキー範囲許可を放棄するが、前記第2のキー範囲許可の残りの部分を保持するように動作可能である、請求項2に記載の方法。
【請求項4】
前記表示は、前記第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたトランザクションコミット番号を指定し、前記第2の許可情報は、前記第1のデータベースノードへの前記トランザクションコミット番号を識別し、前記第1のデータベースノードは、前記トランザクションコミット番号に基づいて、特定のレコードを前記第1のデータベースノードのメモリ内キャッシュに書き込むかどうかを判定するように動作可能である、請求項2又は3に記載の方法。
【請求項5】
前記第2の許可情報は、前記第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたキー範囲トランザクションコミット番号を定義し、前記第1のデータベースノードは、
前記第1のデータベースノードに関連付けられたトランザクションコミット番号が、前記キー範囲トランザクションコミット番号よりも大きいかどうかを判定することと、
前記トランザクションコミット番号が前記キー範囲トランザクションコミット番号よりも大きいと判定することに応答して、前記第1のキー範囲許可に関連付けられた特定のキーのレコードを前記第1のデータベースノードのメモリ内キャッシュに書き込むことと、を行うように動作可能である、請求項1に記載の方法。
【請求項6】
前記第2の許可情報は、前記第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたキー範囲トランザクションコミット番号を定義し、前記第1のデータベースノードは、
前記第1のデータベースノードに関連付けられたトランザクションコミット番号が、前記キー範囲トランザクションコミット番号よりも大きいかどうかを判定することと、
前記トランザクションコミット番号が前記キー範囲トランザクションコミット番号以下であると判定することに応答して、前記最新のコミットされたレコードをコミットしたデータベースノードから、前記第1のキー範囲許可に関連付けられた特定のキーのレコードトランザクションコミット番号を検索することと、を行うように動作可能である、請求項1に記載の方法。
【請求項7】
前記第1のデータベースノードは、
前記第1のデータベースノードに関連付けられた前記トランザクションコミット番号がレコードトランザクションコミット番号以下であると判定することに応答して、前記第1のデータベースノードのメモリ内キャッシュへの前記特定のキーのレコード書き込みを防止するように動作可能である、請求項6に記載の方法。
【請求項8】
前記第1のデータベースノードは、
前記第1のデータベースノードに関連付けられた前記トランザクションコミット番号がレコードトランザクションコミット番号よりも大きいと判定することに応答して、前記特定のキーのレコードを前記第1のデータベースノードのメモリ内キャッシュに書き込むように動作可能である、請求項6に記載の方法。
【請求項9】
前記第2の許可情報は、複数のブランチを含むトライ木データ構造に記憶され、前記複数のブランチのうちの特定のブランチは、前記第1のキー範囲許可に対応する、請求項1~8のいずれか一項に記載の方法。
【請求項10】
前記複数のデータベースノードの各々に前記第2の許可情報を配布することは、
前記複数のデータベースノードに前記第2の許可情報を通知することと、
前記複数のデータベースノードの各々から、前記第2の許可情報に対する情報要求を受信することと、
前記情報要求に応答して、トライ木データ構造を返すことと、を含む、請求項9に記載の方法。
【請求項11】
データベースシステムの許可オーケストレータノードによって実行可能に記憶されたプログラム有する非一時的なコンピュータ可読記憶媒体であって、前記プログラム、前記データベースシステムの前記許可オーケストレータノードに、請求項1~10のいずれか一項に記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【請求項12】
データベースシステムの許可オーケストレータノードであって、
少なくとも1つのプロセッサと、
請求項1~10のいずれか一項に記載の方法を実行するために前記少なくとも1つのプロセッサによって実行可能なプログラム記憶したメモリと、を含む、許可オーケストレータノード
【発明の詳細な説明】
【関連技術】
【0001】
本開示は、一般に、データベースシステムに関し、より具体的には、データベースノード間のデータベースキー許可の配布に関する。
【背景技術】
【0002】
現代のデータベースシステムは、ユーザが効率的にアクセスし操作できるように組織化された方式で情報の集合を記憶することを可能にする管理システムを日常的に実装している。場合によっては、これらの管理システムは、各々がキー値ペアとしてデータベースレコードに記憶する複数レベルを有する、ログ構造化されたマージツリー(log-structured merge tree、LSMツリー)を維持する。LSMツリーは、典型的には、メモリ内キャッシュと永続ストレージの2つの高レベル構成要素を含む。動作中、データベースシステムは、永続的記憶装置にデータベースレコードを書き込むことを含むトランザクションを処理するためのトランザクション要求を受信する。データベースシステムは、最初にデータベースレコードをインメモリキャッシュに書き込み、その後、永続的記憶装置にそれらをフラッシュする。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、許可オーケストレータノード及びワーカノードを含むシステムの例示的な要素を例示するブロック図である。
【0004】
図2】いくつかの実施形態による、キー許可を放棄するワーカノードの例示的な要素を例示するブロック図である。
【0005】
図3】いくつかの実施形態による、許可オーケストレータノードの例示的な要素を例示するブロック図である。
【0006】
図4】いくつかの実施形態による、キー許可を取得するワーカノードの例示的な要素を例示するブロック図である。
【0007】
図5】いくつかの実施形態による、キー許可の配布に関する例示的な方法を例示するフロー図である。
図6】いくつかの実施形態による、キー許可の配布に関する例示的な方法を例示するフロー図である。
【0008】
図7】いくつかの実施形態による、マルチテナントシステムの要素を例示するブロック図である。
【0009】
図8】いくつかの実施形態による、コンピュータシステムの要素を例示するブロック図である。
【発明を実施するための形態】
【0010】
上述のように、現代のデータベースシステムは、キー値ペアを有するデータベースレコードを含むLSMツリーを維持することがある。多くの場合、データベースシステムは、LSMツリーの永続的記憶構成要素へのデータベースレコードの書き込みを担当する単一のアクティブデータベースノード(及び複数のスタンバイデータベースノード)を含む。しかし、場合によっては、データベースシステムは、データベースレコードをLSMツリーに書き込んでいる複数のアクティブデータベースノードを含む。複数のアクティブデータベースノードは、共通の永続ストレージを共有することがあるが、自分自身の個々のメモリ内キャッシュを有する。このような実装では、アクティブデータベースノードによってその個々のメモリ内キャッシュに書き込まれるデータベースレコードは、それらのレコードが共通の永続的記憶装置にフラッシュされるまで、他のアクティブデータベースノードには表示されない。
【0011】
複数のアクティブなデータベースノードを有する実装では、それらのデータベースノードが何らかの方法で制限されていなければ、2つ以上のデータベースノードが同じデータベースキーのレコードをほとんど同時に書き込む可能性が存在する。(対照的に、ローカルトランザクションからの変更が調整され、競合しないことを確実にするローカルロックマネージャがあるため、単一のアクティブデータベースノードを有する実装では、このシナリオの懸念はほとんどない。)したがって、いくつかのマルチアクティブノード実装では、アクティブデータベースノードのうちの1つに、特定のデータベースキーに対するデータベースキー許可がプロビジョニングされて、そのデータベースノードがデータベースキーのレコードを書き込むことが許可される。しかしながら、他のアクティブデータベースノードには、データベースキー許可がプロビジョニングされず、したがって、特定のデータベースキーのレコードを書き込むことができない。しかし、場合によっては、所有者のアクティブデータベースノードから別のアクティブなデータベースノードにデータベースキー許可を再プロビジョニングすることが望ましいことがある。一例として、所有者のデータベースノードが他のデータベースワークで圧倒され、特定のデータベースキーのレコードを書き込むことを伴う未解決のトランザクションが存在する場合、その未解決のトランザクションを別のデータベースノードにオフロードすることが望ましいことがある。本開示は、とりわけ、データベースシステムの要求を満たすために、データベースキー許可を再配布することを可能にしながら、比較的同時に同じキーのレコードを複数のデータベースノードが書き込まないことを確実にすることが可能なこの技術的課題に対処する。
【0012】
より具体的には、本開示は、データベースシステムの複数のデータベースノード間でデータベースキー許可の配布をオーケストレーションするための様々な技術を記載する。以下に記載される様々な実施形態では、データベースシステムは、データベースシステムのデータベースにデータベースレコードを書き込むことが可能なワーカノード間のキー許可の配布をオーケストレーションする許可オーケストレータノードを含む。データベースシステムの動作中に、第1のワーカノードは、特定のデータベースキー(例えば、データベースキー「XYZ」)のレコードを書き込むことを伴うトランザクションを実行するための要求を受信してもよい。様々な実施形態では、第1のワーカノードは、許可オーケストレータノードからの許可情報に最初にアクセスし(第1のワーカノードが以前に許可情報を取得していない場合)、それが特定のデータベースキーのデータベースレコードを書き込む許可を有するかどうかを判定する。場合によっては、許可情報は、関連するキー許可が第1のワーカノードにプロビジョニングされていることを示してもよく、第1のワーカノードはレコードを書き込んでもよい。第1のワーカノードはまた、それがトランザクションのレコードを書き込む前に、特定の時間枠内に特定のデータベースキーに対して別のレコードがコミットされていないことを確実にしてもよい。それ以外の場合、許可情報は、関連するキー許可がプロビジョニングされていないか、又は他のワーカノードにプロビジョニングされていることを示してもよい。その後、第1のワーカノードは、関連するキー許可のために、要求を許可オーケストレータノードに対して発行する。場合によっては、第1のワーカノードは、関連するデータベースキー許可を含むキー範囲許可(例えば、データベースキー「XYZ」を含むキー範囲「XY」)を要求してもよい。
【0013】
所与のワーカノードから要求を受信すると、様々な実施形態では、許可オーケストレータノードは、関連するキー許可が別のワーカノードによって所有されているかどうかを最初に判定する。関連するキー許可が所有されていない場合、許可オーケストレータノードは、第1のワーカノードに、関連するキー許可をプロビジョニングする更新された許可情報を生成してもよい。次いで、許可オーケストレータノードは、許可情報をデータベースシステムのワーカノードに配布してもよい。いくつかの実施形態では、許可オーケストレータノードは、関連するキー許可を含むある範囲のキー許可(これは、「キー範囲許可」と呼ばれてもよい)をプロビジョニングしてもよい。一例として、許可オーケストレータノードは、キー範囲「XY」(特定のデータベースキー「XYZ」を含む、「XY」で始まる任意のキーを包含する)に対するキー許可をプロビジョニングしてもよい。しかし、第2のワーカノードが関連するキー許可を所有している場合、許可オーケストレータノードは、いくつかの実施形態では、関連するキー許可を放棄するための放棄要求を第2のワーカノードに送信する。
【0014】
放棄要求を受信すると、様々な実施形態では、第2のワーカノードは、レコードコミットのために関連するキー許可をロックした第2のワーカノードにおけるアクティブなトランザクションがあるかどうかを判定する。アクティブトランザクションは、キー許可に対応するデータベースキーのレコードをコミットしようとする場合、そのキー許可をロックすることがある。ロックされたキー許可は、他のアクティブなトランザクションによって使用されたり、キー許可がロック/ホールドされている間に許可オーケストレータノードに戻して放棄されたりすることはできない。関連するキー許可が、第2のワーカノードで実行しているアクティブトランザクションによってホールドされている場合、第2のワーカノードは、トランザクションが完了するまで待機し、その後キー許可を返す。いくつかの実施形態では、第2のワーカノードは、関連するキー許可を含むキー許可のセットを放棄してもよい。いくつかの実施形態では、第2のワーカノードはまた、放棄したキー許可に関連するトランザクションコミット番号(「XCN」)を識別する履歴情報を返す。XCNは、放棄したキー許可(又は放棄したキー許可を含むキー許可のセット)に対して最新のデータベースレコードがいつコミットされかを示してもよい。キー範囲「XY」の最新のコミットされたデータベースレコードが「501」のXCNでコミットされた例を考えてみる。その結果、第2のワーカノードは、放棄されたキー許可「XYZ」の「501」の最大XCNを示す履歴情報を返してもよい。関連するキー許可が第2のワーカノードにおいて取り消されたことを確実にした後に、様々な実施形態において、許可オーケストレータノードは、許可情報を更新し、それをワーカノードに配布することにより、関連するするキー許可を第1のワーカノードにプロビジョニングする。更新された許可情報は、他のワーカノードが特定のデータベースキーのレコードをコミットしてもよいかどうかを判定することができるように、第2のワーカノードによって返される履歴情報を含んでもよい。
【0015】
関連するキー許可を受信すると、第1のワーカノードは、その許可情報を使用して、特定の時間枠内に関連するキー許可のレコードがコミットされたかどうかを判定してもよい。例えば、第2のワーカノードがキー許可を所有している間に、関連するキー許可のレコードをコミットしたかどうかを判定してもよい。レコードがコミットされたかのように見える場合、第1のワーカノードは、実際にレコードがコミットされたかどうかを判定するために、第2のワーカノードと通信してもよい。レコードがコミットされている場合、第1のワーカノードはトランザクションを中止し、2つのトランザクションが競合しないことを確実にし、それ以外の場合、第1のワーカノードは、関連するキー許可のレコードをそのメモリ内キャッシュに書き込む。キー許可を放棄すると(例えば、放棄要求を受信することに応答において)、様々な実施形態では、第1のワーカノードは、他のワーカノードがキー関連許可を取得したら認識することができるように、許可オーケストレータノードに、そのレコードの書き込み及びコミットについて通知する。いくつかの実施形態では、関連するキー許可はレコードコミットを識別する。結果として、キー許可は、ロックと並行性保護であると同時に、最近の更新に対するロケーションの列挙でもあってもよい。
【0016】
このようにして、データベースキー許可は、許可オーケストレータノードによって、ワーカノード間で配布され、再配布されてもよい。これは、システムのトランザクションのデータベースレコードを書き込むために、ワーカノードがデータベースキー許可を「引っ張る(tug)」という「綱引き」シナリオをもたらしてもよい。つまり、ワーカノードは、特定のキー許可を取得し、特定のキー許可のレコードを書き込み、特定のキー許可を放棄し、その後、別のレコード書き込みの特定のキー許可を再取得してもよい。その結果、特定のキー許可は、特定のキー許可を使用してレコードを書き込もうとしているワーカノードによって「取り戻す」ことが行われてもよい。
【0017】
これらの技法は、複数のデータベースノードがほぼ同時に同じデータベースキーのレコードを書き込んでおり、トランザクション分離の違反を引き起こし、アプリケーションの可視異常を導入する可能性がないことを確実にしながら、データベースシステムが複数のアクティブデータベースノードで実装されることを可能にするので、有利であり得る。つまり、一度に最大1つのデータベースノードにキー許可が配分され、他のデータベースノードがキー許可に関連付けられたキーを有するデータベースレコードを書き込むことが防止される。これらのテクニックは、1つのアクティブデータベースノードがデータベースキーに関連付けられた全てのワークを処理する必要がないように、アクティブデータベースノード間でキー許可を移動させることを可能にするので、さらに有利であり得る。これにより、以前のデータベースシステム実装と比較して、トランザクションがより迅速に処理されることをもたらすことができる。図1の参照から開始して、これらの技法の例示的な適用をここで説明する。
【0018】
ここで図1を参照すると、システム100のブロック図が示されている。システム100は、ハードウェア又はハードウェアとソフトウェアのルーチンの組み合わせを介して実装され得る構成要素のセットを含む。例示された実施形態では、システム100は、LSMファイル115を有するデータベース110、ワーカノード120A及び120B、並びに許可オーケストレータノード150を含む。さらに例示されるように、ワーカノード120及び許可オーケストレータノード150は、キー範囲許可145A及び145Bを定義する許可情報140を含む。また、例示されるように、ワーカノード120は、キー134に関連付けられたデータベースレコード132を記憶するそれぞれのメモリ内キャッシュ130を含む。いくつかの実施形態では、システム100は、図示のものとは異なって実装される。例えば、許可オーケストレータノード150は、キー範囲許可145の配布をオーケストレーションすることに加えて、ワーカノード120の機能も実装してもよい。さらに、本開示の技術はLSMツリーに関して説明されるが、この技法は、複数のノードがデータベースのレコードを書き込み、コミットしている他のタイプのデータベース実装に適用され得る。
【0019】
システム100は、様々な実施形態では、プラットフォームサービス(例えば、顧客関係管理(CRM)プラットフォームサービス)を実装し、そのサービスのユーザがアプリケーションを開発、実行、及び管理することを可能にする。システム100は、マルチテナントシステムによってホストされるマルチユーザ/テナントに様々な機能を提供するマルチテナントシステムであってもよい。したがって、システム100は、様々な異なるユーザ(例えば、システム100のプロバイダ及びテナント)からのソフトウェアルーチンを実行し、コード、ウェブページ、及び他のデータを、システム100に関連付けられたユーザ、データベース、及び他のエンティティに提供してもよい。図示のように、例えば、システム100は、システム100のユーザに代わってデータベース110のLSMファイル115からデータを記憶し、操作し、検索することができるワーカノード120を含む。
【0020】
データベース110は、様々な実施形態では、その情報のアクセス、記憶、及び操作を可能にするように組織化された情報の集合である。したがって、データベース110は、ワーカノード120がデータベース110に記憶された情報に対する動作(例えば、アクセス、記憶など)を実行することを可能にする支援ソフトウェアを含んでもよい。いくつかの実施形態では、データベース110は、ネットワーク上で互いに接続された単一又は複数の記憶デバイス(例えば、記憶装置接続ネットワーク(SAN))によって実装され、データ損失を防止するために情報を冗長的に記憶するように構成されている。記憶デバイスは、永続的にデータを記憶してもよく、したがって、データベース110は、永続的記憶装置として機能してもよい。様々な実施形態では、一方のワーカノード120によってLSMファイル115に書き込まれるデータベースレコード132は、他方のワーカノード120によってアクセス可能である。LSMファイル115は、データベース110に実装されたログ構造化されたマージツリーの一部として記憶されてもよい。
【0021】
LSMツリーは、様々な実施形態では、レベルベースのスキームを使用する組織化された方法でLSMファイル115を記憶するデータ構造である。LSMツリーは、メモリ内キャッシュ130に実装されたメモリ内記憶要素と、データベース110に実装されたディスク上記憶要素の2つの高レベル記憶要素を含んでもよい。いくつかの実施形態では、メモリ内キャッシュ130は、LSMツリーから分離されていると考えられる。作業ノード120は、様々な実施形態では、最初に、データベースレコード132をそれらのメモリ内キャッシュ130に書き込む。キャッシュ130が満杯になると、及び/又は特定の時点で、ワーカノード120は、それらのデータベースレコード132をデータベース110にフラッシュし得る。データベースレコード132をフラッシュする一部として、様々な実施形態では、ワーカノード120は、データベース110において、データベースレコード132を新しいセットのLSMファイル115に書き込む。
【0022】
LSMファイル115は、様々な実施形態では、データベースレコード132のセットである。データベースレコード132は、データと、そのデータベースレコードをルックアップするために使用可能な対応するデータベースキー134とを含むキー値ペアであってもよい。例えば、データベースレコード132は、データベーステーブル内のデータ行に対応し、データベースレコード132は、データベーステーブルに関連付けられた1つ以上の属性の値を指定する。様々な実施形態では、ファイル115は、そのLSMファイル115に含まれるデータベースレコード132のキー134によって定義される1つ以上のデータベースキー範囲に関連付けられる。ファイル115が、キー134「XYA」、「XYW」、及び「XYZ」にそれぞれ関連付けられた3つのデータベースレコード132をそれぞれ記憶する例を考える。これら3つのキー134は、XYA→XYZのデータベースキー範囲にまたがり、したがって、LSMファイル115は、そのデータベースキー範囲に関連付けられる。
【0023】
ワーカノード120は、様々な実施形態では、ハードウェア、ソフトウェア、又はそれらの組み合わせであり、データ記憶、データ検索、及び/又はデータ操作などのデータベースサービスを提供することが可能である。これらのデータベースサービスは、システム100内の他の構成要素に提供されてもよいし、システム100の外部の構成要素に提供されてもよい。例えば、ワーカノード120Aは、1つ以上のデータベースタスクを実行するためのデータベーストランザクション要求を受信してもよい。この要求は、データベースレコード132のセットにアクセスしようとしているアプリケーションサーバから受信されてもよい。トランザクション要求は、1つ以上のデータベーステーブルから1つ以上の行を選択するためのSQL SELECTコマンドを指定してもよい。行の内容は、データベースレコード132内で定義されてもよく、したがって、ワーカノード120Aは、選択された1つ以上のテーブル行に対応する1つ以上のデータベースレコード132を返してもよい。様々な場合では、データベーストランザクション要求は、ワーカノード120に、1つ以上のデータベースレコード132をLSMツリーに書き込むように命令してもよい。様々な実施形態では、ワーカノード120は、データベースレコード132を、データベース110にフラッシュする前に、最初に、そのメモリ内キャッシュ130に書き込む。
【0024】
メモリ内キャッシュ130は、様々な実施形態では、ワーカノード120のメモリ(例えば、ランダムアクセスメモリ)にデータを記憶するバッファである。HBase(登録商標)Memstoreは、メモリ内キャッシュ130の一例である。上述のように、ワーカノード120は、最初に、そのメモリ内キャッシュ130にデータベースレコード132を書き込んでもよい。場合によっては、データベーステーブル内の行の最新/最も新しいバージョンが、メモリ内キャッシュ130に記憶されたデータベースレコード132内に見つかることがある。しかしながら、ワーカノード120のメモリ内キャッシュ130に書き込まれたデータベースレコード132は、様々な実施形態では、他のワーカノード120には見えない。すなわち、他のワーカノード120は、どの情報がワーカノード120のメモリ内キャッシュ130内に記憶されているかを尋ねなければ知らない。1つのワーカノード120が別のワーカノード120によって書きこまれたデータベースレコード132について知らないことがあることによるデータベースレコード衝突することを防止するために、様々な実施形態では、ワーカノード120には、どのレコード132が所与のワーカノード120によって書き込むことができるかを制御する許可情報140がプロビジョニングされる。このように、許可情報140は、2つ以上のワーカノード120が特定の時間間隔内に同じデータベースキー134のデータベースレコード132を書き込むことを防止して、ワーカノード120が矛盾するデータベースレコード132をデータベース110にフラッシュすることを防止するようにすることができる。
【0025】
許可情報140は、様々な実施形態では、キー範囲許可145及びそれらのキー範囲許可に対する所有者の対応するセットを識別する情報である。例えば、ワーカノード120Aには、キー範囲許可145A(ワーカノード120Aに実線ボックスで示される)がプロビジョニングされ、ワーカノード120Bには、キー範囲許可145B(ワーカノード120Bに実線ボックスで示される)がプロビジョニングされる。キー範囲許可145は、様々な実施形態では、所有するワーカノード120がデータベースレコード132を書き込むことを許可されているデータベースキー134の範囲に対応するキー許可の範囲を示す。一例として、キー範囲許可145Aは、キー134Aに対するキー許可を示してもよい。結果として、ワーカノード120Aは、図示のように、そのメモリ内キャッシュ130にデータベースレコード132Aを書き込むことができる。様々な実施形態では、キー許可は、任意の時点で最大1つのワーカノード120に提供される。キー範囲許可145Bが、キー134Bに対するキー許可を示す例を考える。そのキー許可はワーカノード120Bにプロビジョニングされており、ワーカノード120Aはキー134Bを有するレコード132を書き込むことが許可されない。特定のキー134のレコード132を書き込むことが許可されるために、様々な実施形態では、ワーカノード120は、特定のキー134を指定する許可要求112を許可オーケストレータノード150に対して発行してもよい。様々な場合では、許可要求112は、複数のキー134(例えば、キー範囲)を指定してもよい。
【0026】
許可オーケストレータノード150は、様々な実施形態では、ワーカノード120間のキー許可の配布を容易にし、最大1つのワーカノード120がキー許可の所有権を有することを確実にする。キー許可の配布を容易にする一部として、様々な実施形態では、許可オーケストレータノード150は、許可要求112の受信に応答して、許可情報140を更新してもよい。図示のように、許可オーケストレータノード150は、ワーカノード120Bから許可要求112を受信する。許可オーケストレータノード150は、許可要求112を受信することに応答して、要求されたデータベースキー134に対するキー許可が既にプロビジョニングされているかどうかを最初に判定してもよい。プロビジョニングされていない場合、許可オーケストレータノード150は、許可情報140を更新して、ワーカノード120Bにキー許可をプロビジョニングし、許可応答114を介してワーカノード120Bに更新を通知し、許可情報表示156を介して他のワーカノード120に更新を通知してもよい。様々な実施形態では、ワーカノード120Bを含む全てのワーカノード120は、許可情報表示156を介して通知を受ける。
【0027】
キー許可(又はキー範囲が要求されている場合はキー範囲許可145)がプロビジョニングされている場合、許可オーケストレータノード150は、所有しているワーカノード120を識別し、解除要求152をそのワーカノード120に対して発行してもよい。一例として、ワーカノード120Bは、キー134Aに関連付けられたキー許可のための許可要求112を発行してもよい。許可オーケストレータノード150は、キー許可が、既にワーカノード120Aに提供されているキー範囲許可145Aの一部であると判定してもよい。このように、許可オーケストレータノード150は、放棄要求152をワーカノード120Aに対して発行してもよい。ワーカノード120は、キー許可を放棄するときに、様々な実施形態では、放棄されるべきキー許可が使用されていないことを確実にする。その後、ワーカノード120は、キー許可を放棄し、放棄応答154を介して許可オーケストレータノード150に通知してもよい。場合によっては、ワーカノード120は、レコード132が放棄されたキー許可(場合によっては放棄されたキー範囲許可145)を使用してコミットされた可能性があるかどうかを示す履歴情報を放棄応答154に含めてもよい。
【0028】
許可オーケストレータノード150は、放棄応答154を受信することに応答して、許可情報140を更新して、ワーカノード120Bにキー許可をプロビジョニングし、許可応答114を介してワーカノード120Bに更新を通知し、許可情報表示156を介して他のワーカノード120に更新を通知してもよい。このように、許可オーケストレータノード150は、許可要求112に応答して許可情報140を更新し、更新された許可情報140をワーカノード120に伝搬することによって、キー許可の所有権をワーカノード120に配布及び再配布し得る。
【0029】
ここで図2を参照すると、キー許可を放棄するワーカノード120に関する例示的なレイアウトのブロック図が示されている。例示される実施形態では、ワーカノード120Aは、メモリ内キャッシュ130、許可情報140、及びデータベースアプリケーション200を含む。さらに図示のように、データベースアプリケーション200は、ロック215をホールドするアクティブトランザクション210と、関連付けられたトランザクションコミット番号(XCN)225を有するコミットトランザクション220とを処理している。また、図示のように、許可情報140は、キー許可205を有するキー範囲許可145A~145Cと、XCN225を指定する対応する履歴情報230と、を含む。いくつかの実施形態では、ワーカノード120Aは、図示されているものとは異なって実装される。一例として、データベースアプリケーション200は、複数のアクティブトランザクション210及び複数のコミットされたトランザクション220を処理してもよい。
【0030】
データベースアプリケーション200は、様々な実施形態では、データベース110の周囲に構築されたLSMツリーの管理を含む、データベース110を管理するために実行可能なプログラム命令のセットである。したがって、データベースアプリケーション200は、LSMツリーからレコード132を読み出し、レコード132を書き込むために、データベーストランザクションを処理してもよい。データベーストランザクションの処理を支援するために、様々な実施形態では、データベースアプリケーション200は、どこにファイル115がデータベース110に記憶されているか、及び何のレコード132がそれらのファイル115に含まれ得るか含む、LSMツリーの構造レイアウトを記載するメタデータを維持する。いくつかの実施態様では、メタデータは、ファイル115に対応するトライを含む。データベースアプリケーション200は、メタデータを使用して、データベーストランザクションの処理の一部として、より迅速でより効率的なキー範囲ルックアップを実行してもよい。
【0031】
説明のように、データベースアプリケーション200は、データベースレコード132を読み込み、書き込むためのトランザクションを実行するための要求を受信してもよい。トランザクション要求を受信すると、データベースアプリケーション200は、受信したトランザクション要求に基づいてアクティブトランザクション210を開始してもよい。アクティブトランザクション210は、様々な実施形態では、データベースアプリケーション200がインメモリキャッシュ130内にデータベースレコード132を書き込んでいる進行中のトランザクションを参照する。トランザクションがアクティブトランザクション210である間、そのトランザクションについて書着こまれたデータベースレコード132は、コミットされておらず、それらを書き込んだワーカノード120以外の別のエンティティによって読み出し可能/アクセス可能とすることができない。様々な場合では、データベースアプリケーション200は、アクティブトランザクション210のロールバックを実行することを決定してもよく、したがって、アクティブトランザクション210に対して書き込まれたデータベースレコード132は、コミットされず、フラッシュされる。例えば、一連の基準(例えば、図4に関してより詳細に説明される時間期間分析)に基づいて、データベースアプリケーション200が特定のデータベースレコード132を書き込むことが許可されない場合、データベースアプリケーション200は、そのデータベースレコード132を書き込むことを含むアクティブトランザクション210をロールバックしてもよい。場合によっては、データベースアプリケーション200は、アクティブトランザクション210のサブ部分のみのロールバックを実行することを決定してもよい。
【0032】
所与のアクティブトランザクション210を処理するときにデータベースレコード132を書き込むために、様々な実施形態において、データベースアプリケーション200は、ワーカノード120Aが適切な許可205を有するかどうかを判定し、データベースレコード132を書き込む前に、それらの許可205に対するロック215を取得する。例示のアクティブトランザクション210が、値「XYT」(「キー134(XYT)」と呼ばれる)を有するキー134を有するデータベースレコード132を書き込むことを伴う例を考える。データベースアプリケーション200は、最初に許可情報140を検査して、キー134に対する許可キー205がワーカノード120Aに提供されているかどうかを判定してもよい。キー許可205は、様々な実施形態では、関連付けられたキー134及びそのキー134の所有者を識別する。図示のように、キー範囲許可145A及び145C(実線のボックスで例示)は、ワーカノード120Aにプロビジョニングされており、キー範囲許可145B(破線のボックスで例示)は、ワーカノード120Aに提供されていない。したがって、例示の実施形態では、データベースアプリケーション200は、キー許可205Aが、キー134(XYT)の所有者として、ワーカノード120Aを識別することを判定するが、他の場合では、ワーカノード120Aは、所有者ではなく、したがって、キー134(XYT)の所有権を要求しなければならないことがある。所有権を要求する例は、図4に関して詳細に説明される。
【0033】
ワーカノード120は、所望のキー許可205がワーカノード120にプロビジョニングされていることを判定した後に、様々な実施形態では、キー134を有するデータベースレコード132を書き込むときに、関連付けられたキー134に対するロック215を取得する。前の例に続いて、ワーカノード120Aは、キー134(XYT)に対するロック215(XYT)を取得してもよい。ロック215は、様々な実施形態では、他のエンティティ(例えば、他のワーカノード120)が、関連付けられたキー134を有するデータベースレコード132を書き込むことを防止し、さらに、関連付けられたキー許可205が取り消されて他のエンティティに再プロビジョニングされることを防止してもよい。ロック215が取得されると、ワーカノード120は対応するキー134に対するデータベースレコード132を書き込み得る。図4に関してより詳細に説明するように、データベースレコード132を書き込む前に、ワーカノード120は、XCN225に基づいて特定の期間内に別のワーカノード120が同じデータベースキー134に対するデータベースレコード132をコミットしたかどうかをさらに判定してもよい。
【0034】
アクティブトランザクション210を処理した後(例えば、トランザクションに対して要求された全てのデータベースレコード132を書き込んだ後)に、ワーカノード120は、そのトランザクションをコミットしてもよく、コミットされたトランザクション220をもたらす。コミットプロセスの一部として、様々な実施形態では、ワーカノード120は、トランザクションの各データベースレコード132にトランザクションコミット番号225をスタンプする。例示のように、コミットされたトランザクション220は、T501のXCN225(「XCN225(T501)」と呼ばれる)を有する。したがって、コミットされたトランザクション220に関連付けられた各レコード132は、XCN225(T501)を識別するメタデータを含んでもよい。XCN225は、様々な実施形態では、単調に増加する値であり、したがって、時間期間を示すことができる。すなわち、動作中に、システム100は、コミット時にトランザクションに割り当てられるデータベースシステムのXCN225を周期的にインクリメントしてもよい。データベースシステムのXCN225が周期的にインクリメントされているので、2つのコミットされたトランザクション220が異なるXCN225に関連付けられてもよい。例えば、第1のコミットされたトランザクション220はXCN225(T501)に割り当てられてもよく、第2のコミットされたトランザクション220はXCN225(T412)に割り当てられてもよい。データベースシステムのXCN225がインクリメントされているので、ワーカノード120(又は別のエンティティ)は、第2のコミットされたトランザクション220が、時間的に第1のコミットされたトランザクション220(T412<T501)よりも前に発生したことを判定することができる。様々な実施形態では、コミットされたデータベースレコード132は、要求に応じて他のワーカノード120に利用可能となり、最終的には、データベース110におけるファイル115に書き込まれる。
【0035】
コミットプロセスの一部として、様々な実施形態では、ワーカノード120は、コミットされているトランザクションのXCN225に基づいて履歴情報230も更新する。様々な実施形態では、履歴情報230は、キー許可205及び/又はキー範囲許可145に対して、そのキー許可205/キー範囲許可145を伴う直近のレコードコミットに関連付けられたXCN225を識別する。そのXCN225は、そのキー許可205/キー範囲許可145に対する「最大XCN」又は「最新XCN」と呼ばれる。図示したコミットされたトランザクション220に対してキー134を有するデータベースレコード132がコミットされた例を考える。ワーカノード120Aはキー許可205Bをホールドし、ワーカノード120Aがキー許可205Bをホールドする間に、他のワーカノード120はキー134(XYZ)に対して書き込む許可を有さないので、データベースレコード132は、キー134(XYZ)対する直近のコミットされたレコード132である。したがって、ワーカノード120Aは、履歴情報230を更新して、キー許可205B(又は、キー許可205Bを含むキー範囲許可145A)をXCN225(T501)に関連付け得る。
【0036】
履歴情報230は、異なる方法で更新されてもよい。様々な場合では、ワーカノード120は、履歴情報230を更新して、ワーカノード120における所与のトランザクションで使用される各キー許可205を、その所与のトランザクションのXCN225に関連付けてもよい。場合によっては、キー許可205のセットがグループ化され、キー範囲許可145としてプロビジョニングされてもよく、履歴情報230の一部をそのキー範囲許可145にリンクされてもよい。したがって、ワーカノード120は、履歴情報230を更新して、キー範囲許可145をXCN225に関連付けてもよい。これは、「キー範囲XCN」と呼ばれ得る。示すように、キー範囲許可145Cは、XCN225(T412)に関連付けられている。したがって、キー範囲許可145Cに対する最新のコミットされたデータベースレコード132は、XCN225(T412)を有するコミットされたトランザクション220において発生している。しかし、キー範囲許可145Cに対する他のレコード132は、異なるより小さいXCN225と関連付けられていることがあり、そのため、より早い時点に、別のワーカノード120によってコミットされている。図4に関してより詳細に説明するように、ワーカノード120は、履歴情報230を使用して、記録の書き込みを中止するかどうかを判定してもよい。
【0037】
動作中、ワーカノード120Aは、1つ以上のキー許可205(又はキー範囲許可145)を放棄するための放棄要求152を受信してもよい。放棄要求152は、許可オーケストレータノード150から受信されてもよく、放棄されるべき1つ以上のキー許可205を識別してもよい。ワーカノード120Aは、放棄要求152を受信することに応答して、様々な実施形態では、要求されたキー許可205に対するロック215を任意の新しいトランザクションが取得することを最初に防止する。次いで、ワーカノード120Aは、任意のアクティブトランザクション210が、要求されたキー許可205に対してロック215を有するかどうかを判定してもよい。これらのキー許可205に関連付けられたロック215がない場合、ワーカノード120Aは、放棄応答154を許可オーケストレータノード150に戻すように送信してもよい。場合によっては、ワーカノード120Aは、キー許可205を放棄してもよいが、放棄されたキー許可105を含むキー範囲に対してキー許可205を保持する。例えば、ワーカノード120Aは、キー許可205「XYZ」を放棄してもよいが、他の残りのキー許可205をキー範囲「XY」に対して保持してもよい。放棄応答154は、様々な実施形態では、要求されたキー許可205が放棄されたこと、したがって、キー許可205がワーカノード120Aに再プロビジョニングされない限り、トランザクションに使用されないことの表示を含む。場合によっては、ワーカノード120は、要求された1つ以上のキー許可205を含むキー範囲許可145のセットを放棄してもよく、したがって、放棄応答154は、放棄されたキー範囲許可145の表示を含んでもよい。例えば、放棄要求152は、キー許可205Bを指定してもよいが、ワーカノード120Aは、キー範囲許可145A全体を放棄することを決定してもよい。放棄応答154はまた、ワーカノード120にこれらのキー許可205が提供されていた間に、どの放棄されたキー許可205がレコード132をコミットするために使用されたかについての表示を提供する履歴情報230を含んでもよい。
【0038】
場合によっては、ワーカノード120Aは、要求されたキー許可205に対するロック215をホールドするアクティブトランザクション210が存在することを判定してもよい。例えば、放棄要求152は、例示の実施形態のアクティブトランザクション210によって取得されたキー許可205Aを識別する可能性がある。いくつかの実施形態では、ワーカノード120Aは、関連するアクティブトランザクション210がコミット又は中止するのを待つ。その後、ワーカノード120Aは、要求されたキー許可205に対して、オーケストレータノード150に解放応答154を提供してもよい。ワーカノード120がキー範囲許可145を放棄しようとするが、そのキー範囲許可145内の要求されていないキー許可205に対してロック215が存在する場合、ワーカノード120はロックされたキー許可205を保持するが、キー範囲許可145の残りの部分を放棄し得る。一例として、ワーカノード120Aは、キー許可205Bを識別する放棄要求152を受信してもよい。ワーカノード120Aは、キー範囲許可145Aを返すことを決定してもよい。しかし、キー許可205A(要求されたキー許可ではない)は、アクティブトランザクション210によってロックされるため、ワーカノード120Aは、キー許可205Aを除いて、キー範囲許可145Aのすべてのキー許可205を返してもよい。作業ノード120Aは、キー許可205A上に保持されたロック215が存在しなくなった後に、キー許可205Aを返してもよい。
【0039】
ここで図3を参照すると、例示的な許可オーケストレータノード150のブロック図が示されている。例示の実施形態では、許可オーケストレータノード150は、許可情報140を有する許可エンジン300を含む。いくつかの実施形態では、許可オーケストレータノード150は、図示のものとは異なって実装される。例えば、許可オーケストレータノード150は、ワーカノード120として実装されてもよく、したがって、データベースアプリケーション200及びメモリ内キャッシュ130をさらに含んでもよい。
【0040】
図示のように、許可オーケストレータノード150は、ワーカノード120Bによって発行された許可要求112を受信する。許可要求112は、ワーカノード120Bが取得しようとする1つ以上のキー許可205又はキー範囲許可145を識別してもよい。例えば、ワーカノード120Bからの許可要求112は、キー範囲許可145Aを識別してもよい。許可エンジン300は、許可要求112を受信することに応答して、許可要求112を処理し、要求元が要求したキー許可205を受信したかどうかを示す許可応答114を返してもよい。
【0041】
許可エンジン300は、様々な実施形態では、ワーカノード120間のキー許可205のプロビジョニング及び放棄を容易にするために実行可能なソフトウェアルーチンのセットである。許可エンジン300は、許可要求112を受信することに応答して、様々な実施形態では、要求されたキー許可205がワーカノード120に提供されたかどうかを最初に判定する。示されるように、許可エンジン300は許可情報140を記憶し、したがって、許可エンジン300は、許可情報140を参照して、要求されたキー許可205がプロビジョニングされたどうかを判定してもよい。これらのキー許可205がプロビジョニングされていない場合、許可エンジン300は、要求されたキー許可205を、要求しているワーカノード120に配分する更新された許可情報140を生成してもよい。次いで、許可エンジン300は、更新された許可情報140をワーカノード120に配布してもよい。いくつかの実施形態では、許可エンジン300は、更新された許可情報140を含む許可情報表示156をワーカノード120に対して発行する。さらにいくつかの実施形態では、許可情報表示156は、許可情報140が更新されたことを示す。したがって、ワーカノード120は、許可情報表示156を受信することに応答して、許可オーケストレータノード150から、更新された許可情報140を検索してもよい。
【0042】
要求されたキー許可205がワーカノード120に提供されている場合、許可エンジン300は、放棄要求152をワーカノード120に対して発行することができる。例えば、許可エンジン300は、許可情報140の第1バージョン(例えば、許可情報140A)から、キー範囲許可145Aが(図示のように)ワーカノード120Aに提供されたと判定してもよい。したがって、許可エンジン300は、上述のようにキー範囲許可145Aを放棄するための放棄要求152をワーカノード120Aに送信してもよい。許可エンジン300は、要求されたキー許可205が放棄されたことを示す放棄応答154を受信することに応答して、様々な実施形態において、第1のバージョンを、要求されたキー許可205が要求しているワーカノード120に配分される許可情報140(例えば、許可情報140B)を第2のバージョンに更新する。図示のように、許可エンジン300は、ワーカノード120Aがキー範囲許可145Aの所有者である許可情報140Aを、ワーカノード120Bがキー範囲許可145Aの所有者である許可情報140Bに更新する。次いで、許可エンジン300は、更新された許可情報140のための許可情報表示156を発行してもよい。いくつかの実施形態では、許可エンジン300は、更新された許可情報140を含む許可応答114を、要求しているワーカノード120に対して発行する。
【0043】
キー許可205の所有権を修正するために許可情報140を更新するときに、様々な実施形態では、許可エンジン300は、許可情報140に含まれる履歴情報230も更新する。前述のように、放棄応答154は、放棄するワーカノード120でのトランザクションで使用されたキー許可205又はキー範囲許可145のためのXCN225を識別してもよい。キー許可205(又はキー範囲許可145)に提供されるXCN225は、システム100全体にわたって対応するキー134に対してレコード132がコミットされた直近の時間期間を表してもよい。したがって、許可エンジン300は、履歴情報230を更新して、受信された放棄応答154において識別されるXCN225を含めてもよい。
【0044】
次に、図4を参照すると、キー許可205を取得するワーカノード120に関する例示的なレイアウトのブロック図が示されている。例示される実施形態では、ワーカノード120Bは、メモリ内キャッシュ130、許可情報140、及びデータベースアプリケーション200を含む。図示のように、データベースアプリケーション200は、ロック215及びスナップショットXCN 410に関連付けられたアクティブトランザクション210を含む。また、図示のように、許可情報140は、キー範囲許可145A~145C及び関連付けられた履歴情報230を含む。いくつかの実施形態では、ワーカノード120Bは、図示されているものとは異なって実装される。例えば、データベースアプリケーション200は、複数のアクティブトランザクション210及び複数のコミットされたトランザクション220を処理してもよい。
【0045】
説明のように、データベースアプリケーション200は、データベースレコード132を読み込み、書き込むためのトランザクションを実行するための要求を受信してもよい。トランザクション要求を受信すると、データベースアプリケーション200は、受信したトランザクション要求に基づいて新しいアクティブトランザクション210を開始してもよい。データベースアプリケーション200は、そのアクティブトランザクション210を処理するときに、様々なレコード132をメモリ内キャッシュ130に書き込んでもよい。データベースアプリケーション200は、特定のレコード132を書き込むときに、許可情報140に基づいて、ワーカノード120Bに適切な許可205をプロビジョニングされているかどうかを判定してもよい。適切な許可205がワーカノード120Bに提供されない場合、ワーカノード120Bは、上述のように、その許可205を要求してもよい。一旦、ワーカノード120Bが適切な許可205を所有すると、データベースアプリケーション200は、データベースレコード132を書き込む前に、その許可205に対するロック215を取得してもよい。データベースアプリケーション200は、様々な場合では、レコード132を書き込む前に、アクティブトランザクション210が閲覧を許可されるシステム100の状態を識別するスナップショットXCN410に対応する時間の後に、別のレコード132がコミットされていないことを確実にしてもよい。
【0046】
スナップショットXCN410は、様々な実施形態では、データベースレコード132が対応するアクティブトランザクション210によって読み出され得る最新のXCN225を示す値である。図示のように、アクティブトランザクション210は、スナップショットXCN410(T432)が割り当てられる。したがって、アクティブトランザクション210は、XCN225が「T432」以下であるコミットされたデータベースレコード132を読み出してもよい。(場合によっては、スナップショットXCN410未満のデータベースレコード132が読み出されてもよい。)例えば、アクティブトランザクション210は、データベース110から、XCN225(T230)(T230<T432)でスタンプされたデータベースレコード132を読み出すことができる。
【0047】
システム100に記憶されたデータの完全性を確実するために、様々な実施形態では、データベースアプリケーション200は、特定のキー134のデータベースレコード132を、同じ特定のキー134の別のデータベースレコード132が、対応するアクティブトランザクション210に割り当てられたスナップショットXCN410よりも大きいXCN225でコミットされている場合、書き込まない。このように、様々な実施形態では、データベースアプリケーション200は、アクティブトランザクション210に対して、特定のキー134のデータベースレコード132が、履歴情報230に基づいてスナップショットXCN410(T432)よりも大きいXCN225でコミットされているかどうかを判定する。例えば、アクティブトランザクション210は、キー134のデータベースレコード132を書き込むことを伴ってもよい。データベースアプリケーション200は、そのデータベースレコード132を書き込む前に、履歴情報230をチェックして、キー許可205Aに関連付けられたXCN225を判定してもよい。いくつかの実施態様において、履歴情報230は、各キー許可205に対するそれぞれのXCN225を識別する。キー許可205Aに関連付けられたXCN225がスナップショットXCN410(T432)よりも大きい場合、データベースアプリケーション200は、キー134のデータベースレコード132の書き込みを中止してもよい。しかし、XCN225がスナップショットXCN410(T432)以下である場合、データベースアプリケーション200は、そのデータベースレコード132を書き込んでもよい。
【0048】
いくつかの実施形態では、履歴情報230は、キー範囲許可145全体についてXCN225を識別する。図示のように、XCN225(T501)は、キー許可205Aを含むキー範囲許可145Aに関連付けられている。キー範囲許可145Aに対するXCN225(T501)がスナップショットXCN410(T432)よりも大きいと判定することに応答して、データベースアプリケーション200は、キー許可205A自体がより小さいXCN225に関連付けられているかどうかを判定してもよい。XCN225(T501)は、キー範囲許可145A全体に関連付けられているが、それは、キー134 XYZとは異なるキー134(例えば、XYA)に関連付けられたデータベースレコード132のコミットの結果として、履歴情報に追加された可能性がある。特定のキー許可205に対するXCN225を判定するために、様々な実施形態では、ワーカノード120Bは、XCN要求420をワーカノード120に送信する。いくつかの実施形態では、履歴情報230は、キー許可205に関連付けられた最後のワーカノード120を識別し、したがって、ワーカノード120Bは、識別されたワーカノード120のみにXCN要求420を送信してもよい。場合によっては、データベースアプリケーション200は、XCN要求420で識別されるキー許可205に対するXCN225を識別し得るXCN応答425を受信してもよい。識別されたXCN225がスナップショットXCN410(T432)よりも大きい場合、データベースアプリケーション200は、キー134(XYZ)のデータベースレコード132の書き込みを中止してもよい。しかし、XCN225がスナップショットXCN410(T432)以下である場合、データベースアプリケーション200は、そのデータベースレコード132を書き込んでもよい。
【0049】
ここで図5を参照すると、方法500のフロー図が示されている。方法500は、データベースシステムの複数のデータベースノード(例えば、ワーカノード120)間のキー範囲許可(例えば、キー範囲許可145)の配布をオーケストレーションするデータベースシステム(例えば、システム100)によって実行される方法の一実施形態である。方法500は、非一時的なコンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行されてもよい。いくつかの実施形態では、方法500は、図示されているよりも多い又は少ないステップを含む。例えば、方法500は、データベースシステムが第1の許可情報を生成するステップを含んでもよい。
【0050】
方法500は、ステップ510において、データベースシステムが複数のデータベースノードに第1の許可情報(例えば、許可情報140A)を配布することから始まる。第1の許可情報は、複数のデータベースノードの各々に対するキー範囲許可の配布を識別することができる。所与のキー範囲許可が所与のデータベースノードに配布されると、所与のデータベースノードは、所定のキー範囲許可に関連付けられたキー範囲内にキー(例えば、キー134)が入るレコード(例えば、データベースレコード132)を書き込むことが許可されてもよい。場合によっては、第1の許可情報が、第2のデータベースノードに、第1のキー範囲許可を含む第2のキー範囲許可をプロビジョンしてもよい。
【0051】
ステップ520において、データベースシステムは、第1のデータベースノード(例えば、ワーカノード120B)から、第2のデータベースノード(例えば、ワーカノード120A)にプロビジョニングされた第1のキー範囲許可に対する要求(例えば、許可要求112)を受信する。様々な実施形態では、データベースシステムは、第2のデータベースノードに、第1のキー範囲許可を放棄するための放棄要求(例えば、放棄要求152)を送信する。第2のデータベースノードは、第1のキー範囲許可が第2のデータベースノードにおいて実行されているアクティブなトランザクション(例えば、アクティブトランザクション210)のセットで使用されていないことを判定することに応答して、第1のキー範囲許可を放棄してもよい。データベースシステムは、第2のデータベースノードから、第1のキー範囲許可が放棄されたことを示す表示(例えば、放棄応答154)を受信してもよい。場合によっては、第2のデータベースノードは、第1のキー範囲許可を放棄し、第2のキー範囲許可の残りの部分を保持してもよい。場合によっては、最新のレコードが第1のキー範囲許可に対してコミットされたときの時間間隔を示すトランザクションコミット番号(例えば、XCN225)を指定してもよい。
【0052】
ステップ530において、データベースシステムは、第1の許可情報を修正して、第2のデータベースノードの代わりに第1のデータベースノードに第1のキー範囲許可をプロビジョニングする第2の許可情報(例えば、許可情報140B)を導出する。様々な実施形態では、第2の許可情報は、複数のブランチを含むトライ木データ構造に記憶され、複数のブランチのうちの特定のものは、第1のキー範囲許可に対応する。
【0053】
ステップ540において、データベースシステムは、第2の許可情報を複数のデータベースノードに配布する。第2の許可情報を配布することは、第2の許可情報について複数のデータベースノードに通知し(例えば、許可情報表示156を介して)、複数のデータベースノードから、第2の許可情報に対する要求を受信することに応答して、第2の許可情報を返すことを含んでもよい。
【0054】
様々な場合では、第2の許可情報は、最新のレコードが第1のキー範囲許可に対してコミットされたときの第1の時間間隔を示すキー範囲トランザクションコミット番号を識別してもよい。様々な実施形態では、第1のデータベースノードは、第1のデータベースノードに関連付けれた第2の時間間隔(例えば、スナップショットXCN410に対応する)が、第1の時間間隔の後に発生するかどうかを判定する。第2の時間間隔が第1の時間間隔の後に発生すると判定することに応答して、第1のデータベースノードは、第1のキー範囲許可に関連付けられた特定のキーのデータベースレコードを書き込んでもよい。第2の時間間隔が第1の時間間隔の後に発生しないと判定することに応答して、第1のデータベースノードは、特定のキーの直近のレコードをコミットしたデータベースノードから、特定のキーのレコードトランザクションコミット番号を検索してもよい。第1のデータベースノードは、レコードトランザクションコミット番号が第1のデータベースノードに関連付けられた第2の時間間隔より前には発生しない時間間隔を示すと判定することに応答して、特定のキーのレコード書き込みを防止してもよい。第1のデータベースノードは、レコードトランザクションコミット番号が第1のデータベースノードに関連付けられた第2の時間間隔より前に発生する時間間隔を示すと判定することに応答して、特定のキーのレコードを書き込みしてもよい。
【0055】
ここで図6を参照すると、方法600のフロー図が示されている。方法600は、データベースシステムの複数のデータベースノード(例えば、ワーカノード120)間のキー範囲許可(例えば、キー範囲許可145)の配布をオーケストレーションするデータベースシステム(例えば、システム100)によって実行される方法の一実施形態である。方法600は、非一時的なコンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行されてもよい。いくつかの実施形態では、方法600は、図示されているよりも多い又は少ないステップを含む。例えば、方法600は、データベースシステムが第1の許可情報を生成するステップを含んでもよい。
【0056】
メソッド600は、ステップ610において、許可オーケストレータデータベースノード(例えば、許可オーケストレーションノード150)がデータベースシステムの第1のワーカデータベースノード(例えば、ワーカノード120A)に第1のキー範囲許可(例えば、キー範囲許可145)をプロビジョニングすることから始まる。第1のキー範囲許可は、キー(例えば、キー134)が第1のキー範囲許可に関連付けられた第1のキー範囲内に入るレコード(例えば、データベースレコード132)が書き込まれることを許可してもよい。ステップ620において、許可オーケストレータデータベースノードは、データベースシステムの第2のワーカデータベースノード(例えば、ワーカノード120B)から、第1のキー範囲に包含される第2のキー範囲に関連付けられた第2のキー範囲許可に対する許可要求(例えば、許可要求112)を受信する。
【0057】
ステップ630において、許可オーケストレータデータベースノードは、許可要求を受信することに応答して、第1のワーカデータベースノードに、第1のキー範囲許可の少なくとも一部を放棄させる。放棄させることは、第2のキー範囲に関連付けられた許可を放棄するための放棄要求(例えば、放棄要求152)を第1のワーカデータベースノードに送信することを含んでもよい。第1のワーカデータベースノードは、トランザクションが、放棄要求の受信に応答して、第2のキー範囲に関連付けられたキーを使用することを防止してもよい。様々な場合では、第1のワーカデータベースノードは、第2のキー範囲内に入るキーに関連付けられたレコードが進行中のトランザクション(例えば、アクティブトランザクション210)に対して書き込まれたと判定してもよい。第1のワーカデータベースノードは、進行中のトランザクションをコミットしてもよい。進行中のトランザクションをコミットした後に、第1のワーカデータベースノードは、許可オーケストレータデータベースノードに、第2のキー範囲に関連付けられた第1のキー範囲許可の一部が放棄されたことの表示(例えば、放棄応答154)を返してもよい。
【0058】
ステップ640において、第1のワーカデータベースノードが第1のキー範囲許可の少なくとも一部を放棄することに続いて、許可オーケストレータデータベースノードは、第2のキー範囲許可を第2のワーカデータベースノードにプロビジョニングする。様々な実施形態では、第2のキー範囲許可を第2のワーカデータベースノードにプロビジョニングすることは、許可オーケストレータデータベースノードが、第1のワーカデータベースノードによって実行された1つ以上の書き込みを示す履歴情報(例えば、履歴情報230)を第2のワーカデータベースノードに提供することを含む。第2のワーカデータベースノードは、履歴情報に基づいて、第1のワーカデータベースノードが、特定の時間間隔中に第2のキー範囲内に入る特定のキーを有するレコードをコミットしたかどうかを判定する。第1のワーカデータベースノードが特定の時間間隔中に特定のキーを持つレコードをコミットしたと判定することに応答して、第2のワーカデータベースノードは、特定のキーを有するレコードを書き込むことを伴うトランザクションの一部を中止してもよい。例示的なマルチテナントデータベースシステム
【0059】
ここで図7を参照すると、本開示の様々な技法が実装され得る例示的なマルチテナントデータベースシステム(MTS)700が示されている。例えば、システム100がMTS700であってもよい。図7では、MTS700は、データベースプラットフォーム710、アプリケーションプラットフォーム720、及びネットワーク740に接続されたネットワークインターフェース730を含む。また、図示のように、データベースプラットフォーム710は、データ記憶装置712と、データ記憶装置712と対話するデータベースサーバ714A~714Nのセットと、を含み、アプリケーションプラットフォーム720は、それぞれの環境724を有するアプリケーションサーバ722A~722Nのセットを含む。例示の実施形態では、MTS700は、ネットワーク740を介して様々なユーザシステム750A~750Nに接続されている。開示されるマルチテナントシステムは、説明目的のために含まれており、本開示の範囲を制限しようとしていない。他の実施形態では、本開示の技法は、クライアント/サーバ環境、クラウドコンピューティング環境、クラスタ化コンピュータなどのマルチテナント環境ではない環境で実装される。
【0060】
MTS700は、様々な実施形態では、MTS700と対話するユーザ(代替的に「テナント」と呼ばれる)に様々なサービスを共に提供するコンピュータシステムのセットである。いくつかの実施形態では、MTS700は、テナント(例えば、企業、政府機関など)が顧客及び潜在的顧客との関係及び対話を管理するためのメカニズムを提供する顧客関係管理(CRM)システムを実装する。例えば、MTS700は、テナントが顧客の連絡先情報(例えば、顧客のウェブサイト、電子メールアドレス、電話番号、及びソーシャルメディアデータ)を記憶し、販売機会を指定し、サービス問題を記録し、マーケティングキャンペーンを管理することを可能にする可能性がある。さらに、MTS700は、それらのテナントが、顧客とのコミュニケーション方法、顧客が購入したもの、顧客が最後に購入した商品の時期、及び顧客が支払ったものを識別することを可能にしてもよい。図示のように、CRMシステム及び/又は他のサービスのサービスを提供するために、MTS700は、データベースプラットフォーム710及びアプリケーションプラットフォーム720を含む。
【0061】
データベースプラットフォーム710は、様々な実施形態では、テナントデータを含むMTS700のデータを記憶及び管理するためのデータベースサービスを実装するハードウェア要素及びソフトウェアルーチンの組み合わせである。図示のように、データベースプラットフォーム710は、データ記憶装置712を含む。データ記憶装置712は、様々な実施形態では、ネットワーク(例えば、記憶装置接続ネットワーク(SAN))上で互いに接続され、データ損失を防止するためにデータを冗長的に記憶するように構成された記憶デバイス(例えば、ソリッドステートドライブ、ハードディスクドライブなど)のセットを含む。様々な実施形態では、データ記憶装置712は、情報のアクセス、記憶、及び操作を可能にするように組織化された情報の集合を含むデータベース(例えば、データベース110)を実装するために使用される。データ記憶装置712は、単一のデータベース、分散データベース、分散データベースの集合、冗長なオンライン若しくはオフラインバックアップ又は他の冗長性を有するデータベースを実装してもよい。データベースを実装する一部として、データ記憶装置712は、それぞれのデータペイロード(例えば、データベーステーブルのフィールドに対する値)及びメタデータ(例えば、キー値、タイムスタンプ、レコードに関連付けられたテーブルのテーブル識別子、レコードに関連付けられたテナントのテナント識別子など)を有する1つ以上のデータベースレコードを含むファイル(例えば、ファイル115)を記憶してもよい。
【0062】
様々な実施形態において、データベースレコードは、表の行に対応してもよい。テーブルには、視認可能なスキーマ内の列又はフィールドとして論理的に配置された1つ以上のデータカテゴリを一般に含む。したがって、テーブルの各レコードは、フィールドによって定義された各カテゴリのデータのインスタンスを含んでもよい。例えば、データベースは、名前、住所、電話番号、ファックス番号などの基本的な連絡先情報のフィールドを有する顧客を記載するテーブルを含んでもよい。したがって、そのテーブルのレコードは、テーブル内の各フィールドの値(例えば、名前フィールドの名前)を含んでもよい。別のテーブルは、顧客、製品、販売価格、日付などの情報のためのフィールドを含む発注を記載する可能性がある。様々な実施形態では、アカウント、連絡先、リード、機会データなど、すべてのテナントによって使用されるための標準エンティティテーブルが提供され、各々は事前に定義されたフィールドを含む。MTS700は、同じテーブル内に、1つ以上のテナントのデータベースレコードを記憶してもよい。すなわち、テナントは、テーブルを共有してもよい。したがって、データベースレコードは、様々な実施形態では、データベースレコードの所有者を示すテナント識別子を含む。結果として、1つのテナントのデータはセキュアに保持され、他のテナントのデータとは分離されて、その結果、1つのテナントは、別のテナントのデータに対して、そのようなデータが明示的に共有されない限りアクセスを有さない。
【0063】
いくつかの実施態様では、データ記憶装置712に記憶されたデータは、ログ構造化されたマージツリー(LSMツリー)の一部として組織化される。LSMツリーは、通常、メモリ内キャッシュと永続ストレージの2つの高レベル構成要素を含む。動作では、データベースサーバ714は、後にレコードを永続的記憶装置(例えば、データ記憶装置712)にフラッシュする前に、それらのデータベースレコードをローカルインメモリキャッシュに最初に書き込んでもよい。データベースレコードのフラッシュすることの一部として、データベースサーバ714は、データベースレコードを、LSMツリーの「トップ」レベルに含まれる新しいファイルに書き込んでもよい。経時的に、データベースレコードは、データベースサーバ714によって、データベースレコードがLSMツリーのレベルの下方に移動されるにつれて、より低いレベルに含まれる新しいファイルに書き換えられ得る。様々な実装では、データベースレコードが古くなり、LSMツリーの下方に移動するにつれて、それらは、データ記憶装置712のだんだんと遅い記憶装置(例えば、ソリッドステートドライブからハードディスクドライブ)に移動される。
【0064】
データベースサーバ714が特定のキーのデータベースレコードにアクセスすることを望むときに、データベースサーバ714は、その特定のキーのデータベースレコードを潜在的に含むファイルのために、LSMツリーの異なるレベルを横断してもよい。データベースサーバ714が、ファイルが関連するデータベースレコードを含んでもよいと判定する場合、データベースサーバ714は、データ記憶装置712からデータベースサーバ714のメモリにファイルをフェッチしてもよい。次いで、データベースサーバ714は、特定のキーを有するデータベースレコードについて、フェッチされたファイルをチェックしてもよい。様々な実施形態では、データベースレコードは、一旦データ記憶装置712に書き込まれると、不変である。したがって、データベースサーバ714がテーブルの行(アクセスされたデータベースレコードから識別され得る)の値を修正したい場合、データベースサーバ714は、新しいデータベースレコードをLSMツリーの最上位レベルに書き出す。経時的に、そのデータベースレコードはLSMツリーの下にマージされる。したがって、LSMツリーは、データベースキーの様々なデータベースレコードを記憶してもよく、そのキーの古いデータベースレコードは、LSMツリーの下位レベルに位置し、次いで、より新しいデータベースレコードが位置する。
【0065】
データベースサーバ714は、様々な実施形態では、ハードウェア要素、ソフトウェア、又はそれらの組み合わせであり、データ記憶、データ検索、及び/又はデータ操作などのデータベースサービスを提供することが可能である。データベースサーバ714は、ワーカノード120に対応してもよい。そのようなデータベースサービスは、データベースサーバ714によって、MTS700内の構成要素(例えば、アプリケーションサーバ722)及びMTS700の外部の記憶要素に提供されてもよい。一例として、データベースサーバ714は、データ記憶装置712への書き込み又はデータ記憶装置712からの読み出しを要求しているアプリケーションサーバ722からデータベーストランザクション要求を受信してもよい。データベーストランザクション要求は、1つ以上のデータベーステーブルから1つ以上の行を選択するためのSQL SELECTコマンドを指定してもよい。行の内容は、データベースレコード内で定義されてもよく、したがって、データベースサーバ714は、選択された1つ以上のテーブル行に対応する1つ以上のデータベースレコードを特定し、返してもよい。様々な場合では、データベーストランザクション要求は、データベースサーバ714に、LSMツリーに対する1つ以上のデータベースレコード714を書き込むように命令し、データベースサーバ714は、データベースプラットフォーム710上で実装されるLSMツリーを維持する。いくつかの実施形態では、データベースサーバ714は、データ記憶装置712に対する情報の記憶及び検索を容易にする関係データベース管理システム(RDMS)又はオブジェクト指向データベース管理システム(OODBMS)を実装する。様々な場合では、データベースサーバ714は、トランザクションの処理を容易にするために互いに通信してもよい。例えば、データベースサーバ714Aは、データベースサーバ714Nと通信して、データベースサーバ714Nが、特定のキーのデータベースレコードをそのメモリ内キャッシュに書き込んだかどうかを判定してもよい。
【0066】
アプリケーションプラットフォーム720は、様々な実施形態では、CRMソフトウェアアプリケーションを実装及び実行し、ユーザシステム750に関連データ、コード、フォーム、ウェブページ、及び他の情報を提供し、これらのユーザシステム750にそれらを提供し、データベースプラットフォーム710を介して関連データ、オブジェクト、ウェブページコンテンツ、及び他のテナント情報を記憶するハードウェア要素及びソフトウェアルーチンの組み合わせである。これらのサービスを容易にするために、様々な実施形態では、アプリケーションプラットフォーム720は、データベースプラットフォーム710と通信して、データを記憶し、アクセスし、操作する。いくつかのインスタンスでは、アプリケーションプラットフォーム720は、異なるネットワーク接続を介してデータベースプラットフォーム710と通信してもよい。例えば、1つのアプリケーションサーバ722はローカルエリアネットワークを介して結合されてもよく、別のアプリケーションサーバ722は直接ネットワークリンクを介して結合されてもよい。TCP/IP(Transfer Control Protocol and Internet Protocol)は、アプリケーションプラットフォーム770とデータベースプラットフォーム710との間で通信するための例示的なプロトコルであるが、使用されるネットワーク相互接続に応じて他のトランスポートプロトコルが使用されてもよいことは当業者には明らかであろう。
【0067】
アプリケーションサーバ722は、様々な実施形態では、MTS700のテナントから受信された処理要求を含む、アプリケーションプラットフォーム720のサービスを提供することが可能なハードウェア要素、ソフトウェアルーチン、又はそれらの組み合わせである。アプリケーションサーバ722は、様々な実施形態では、アプリケーション(例えば、ビジネスロジック)を開発、実行、及び管理するために開発者に機能性を提供するなど、様々な目的に使用可能な環境724を発生させることができる。データは、別の環境724及び/又はデータベースプラットフォーム710から環境724に転送されてもよい。場合によっては、環境724は、そのようなデータが明示的に共有されない限り、他の環境724からのデータにアクセスすることができない。いくつかの実施形態では、複数の環境724が、単一のテナントと関連付けられてもよい。
【0068】
アプリケーションプラットフォーム720は、CRMアプリケーション及び/又はテナントによって開発されたアプリケーションを含む、複数の異なるホスト(標準及び/又はカスタム)アプリケーションへのユーザシステム750のアクセスを提供してもよい。様々な実施形態では、アプリケーションプラットフォーム720は、アプリケーションの作成、アプリケーションのテスト、データ記憶装置712におけるデータベースオブジェクトへのアプリケーションの記憶、環境724(例えば、プロセス空間の仮想マシン)におけるアプリケーションの実行、又はそれらの任意の組み合わせを管理してもよい。いくつかの実施形態では、アプリケーションプラットフォーム720は、何らかの理由で任意の時点でアプリケーションサーバ722をサーバプールに追加し、ここから除去してもよく、特定のアプリケーションサーバ722へのユーザ及び/又は組織に対するサーバアフィニティが存在しなくてもよい。いくつかの実施形態では、負荷バランシング機能(例えば、F5 Big-IP負荷バランサ)を実装するインターフェースシステム(図示せず)は、アプリケーションサーバ722とユーザシステム750との間に位置し、要求をアプリケーションサーバ722に分散するように構成されている。いくつかの実施形態では、負荷バランサは、ユーザ要求をアプリケーションサーバ722にルーティングするために、最小接続アルゴリズムを使用する。ラウンドロビン、観測応答時間などの負荷バランシングアルゴリズムの他の例も使用され得る。例えば、特定の実施形態では、同じユーザからの3つの連続した要求が3つの異なるアプリケーションサーバ722にヒットし、異なるユーザからの3つの要求が同じサーバ722にヒットすることができる。
【0069】
いくつかの実施形態では、MTS700は、データが共有されない限り、各テナントのデータを別々に保持するために、暗号化などのセキュリティメカニズムを提供する。複数の714又は722が使用される場合、それらは、互いに近接して位置する(例えば、1つの建物又はキャンパス内に位置するサーバファーム内)か、又はそれらは、互いから離れたロケーションに分散されていてもよい(例えば、シティA内に位置する1つ以上のサーバとシティB内に位置する1つ以上のサーバ)。したがって、MTS700は、ローカル又は1つ以上の地理的ロケーションに分散された1つ以上の論理的及び/又は物理的に接続されたサーバを含んでもよい。
【0070】
1つ以上のユーザ(例えば、ユーザシステム750を介して)は、ネットワーク740を介してMTS700と対話してもよい。ユーザシステム750は、例えば、MTS700のテナント、MTS700のプロバイダ(例えば、管理者)、又は第三者に対応してもよい。各ユーザシステム750は、デスクトップパーソナルコンピュータ、ワークステーション、ラップトップ、PDA、携帯電話、又は任意の無線アクセスプロトコル(WAP)が可能なデバイス、又はインターネット若しくは他のネットワーク接続と直接的若しくは間接的にインターフェースすることが可能な任意の他のコンピューティングシステムであってもよい。ユーザシステム750は、ネットワーク740を介してMTS700とインターフェースするように構成された専用ハードウェアを含んでもよい。ユーザシステム750は、MTS700に対応するグラフィックユーザインターフェース(GUI)、HTTPクライアント(例えば、MicrosoftのInternet Explorer(登録商標)ブラウザ、NetscapeのNavigator(登録商標)ブラウザ、Operaのブラウザ、携帯電話、PDA、若しくは他の無線デバイスの場合のWAPが可能なブラウザなどのブラウザプログラム)、又はその両方を実行して、ユーザシステム750のユーザ(例えば、CRMシステムの加入者)が、ネットワーク740を介してMTS700から利用可能な情報及びページにアクセスし、処理し、閲覧することを可能にする。各ユーザシステム750はまた、典型的には、ページ、フォーム、及びMTS700又は他のシステム若しくはサーバによって提供される他の情報と併せて、ディスプレイモニタ画面、LCDディスプレイなど上にブラウザによって提供されるグラフィカルユーザインターフェース(GUI)と対話するための、キーボード、マウス、タッチ画面、ペンなどの1つ以上のユーザインターフェースデバイスを含んでもよい。上述のように、開示された実施形態は、ネットワークの特定のグローバルインターネットワークを指すインターネットを伴う使用に好適である。しかしながら、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、非TCP/IPベースのネットワーク、任意のLAN又はWANなどの他のネットワークが、インターネットの代わりに使用され得ると理解されたい。
【0071】
ユーザシステム750のユーザは、容量が異なるユーザであってもよく、特定のユーザシステム750の容量は、現在のユーザに関連付けられた1つ以上の許可レベルで判定される可能性がある。例えば、販売員が特定のユーザシステム750を使用してMTS700と対話するときに、そのユーザシステム750は、その販売員に配分された容量(例えば、ユーザ特権)を有してもよい。しかし、管理者が同じユーザシステム750を使用して、MTS700と対話するときに、ユーザシステム750は、その管理者に配分された容量(例えば、管理特権)を有してもよい。階層的ロールモデルを有するシステムでは、1つの許可レベルのユーザは、下位の許可レベルのユーザがアクセスできるアプリケーション、データ、及びデータベース情報へのアクセスを有してもよいが、上位の許可レベルのユーザがアクセスできる特定のアプリケーション、データベース情報、及びデータにはアクセスできないことがある。したがって、異なるユーザは、ユーザのセキュリティ又は許可レベルに依存して、アプリケーション及びデータベース情報へのアクセス及び修正に関して異なる能力を有してもよい。また、MTS700によって管理されるいくつかのデータ構造があってもよく、これらは、テナントレベルで配分され、他のデータ構造がユーザレベルで管理される。
【0072】
いくつかの実施形態では、ユーザシステム750及びその構成要素は、1つ以上の処理要素上で実行可能なコンピュータコードを含む、ブラウザなどのアプリケーションを使用して設定可能である。同様に、いくつかの実施形態では、MTS700(及び複数のものが存在する場合のMTSの追加のインスタンス)並びにそれらの構成要素は、処理要素上で実行可能なコンピュータコードを含むアプリケーションを使用して、オペレータが設定可能である。したがって、本明細書に記載される様々な動作は、非一時的なコンピュータ可読媒体に記憶されたプログラム命令を実行することによって実行され得、処理要素によって実行されてもよい。プログラム命令は、ハードディスクのような不揮発性媒体に記憶されてもよいし、ROM又はRAMのような周知の他の任意の揮発性又は不揮発性メモリ媒体又はデバイスに記憶されてもよいし、コンパクトディスク(CD)媒体、デジタル多用途ディスク(DVD)媒体、フロッピーディスクなどのプログラムコードをスターリングすることが可能な任意の媒体上に提供されてもよい。追加的に、プログラムコード全体又はその一部は、ソフトウェアソースから、例えばインターネットを介して、又は周知の別のサーバから、送信及びダウンロードされてもよいし、周知の任意の通信媒体及びプロトコル(例えば、TCP/IP、HTTP、HTTPS、Ethernetなど)を使用して、周知の任意の他の従来のネットワーク接続(例えば、エクストラネット、VPN、LANなど)を介して送信されてもよい。また、開示された実施形態の態様を実装するためのコンピュータコードは、例えばC、C+、HTML、Java、JavaScript、又はVBScriptのような任意の他のスクリプト言語など、サーバ又はサーバシステム上で実行され得る任意のプログラミング言語で実装され得ることが理解されよう。
【0073】
ネットワーク740は、LAN(local area network)、WAN(wide area network)、無線ネットワーク、ポイントツーポイントネットワーク、スターネットワーク、トークンリングネットワーク、ハブネットワーク、又は任意の他の適切な構成であってもよい。大文字「I」を有する「Internet」と呼ばれることが多いネットワークのグローバルなインターネットワークは、TCP/IP(Transfer Control Protocol and Internet Protocol)ネットワークの一例である。しかしながら、開示された実施形態は、様々な他のタイプのネットワークのいずれかを利用し得ることが理解されたい。
【0074】
ユーザシステム750は、TCP/IPを使用してMTS700と通信し、より上位のネットワークレベルにおいて、HTTP、FTP、AFS、WAPなどの他の一般的なインターネットプロトコルを使用して通信してもよい。例えば、HTTPが使用される場合、ユーザシステム750は、MTS700においてHTTPサーバからHTTPメッセージを送信及び受信するために、一般的に「ブラウザ」と呼ばれるHTTPクライアントを含む可能性がある。そのようなサーバは、MTS700とネットワーク740との間の唯一のネットワークインターフェースとして実装される可能性があるが、他の技術も同様に又は代わりに使用される可能性がある。いくつかの実装では、MTS700とネットワーク740との間のインターフェースは、負荷をバランシングし、複数のサーバを介して到来HTTP要求を均等に分散させるために、ラウンドロビンHTTP要求ディストリビュータのような負荷共有機能を含む。
【0075】
様々な実施形態では、ユーザシステム750は、アプリケーションサーバ722と通信して、データストレージ712に1つ以上のクエリを必要とし得るMTS700からのシステムレベル及びテナントレベルのデータを要求及び更新する。いくつかの実施態様では、MTS700は、所望の情報にアクセスするように設計された1つ以上のSQL文(SQLクエリ)を自動的に生成する。場合によっては、ユーザシステム750は、MTS700の少なくとも一部に対応する特定のフォーマットを有する要求を生成してもよい。一例として、ユーザシステム750は、特定の複数のオブジェクトのオブジェクト関係マッピング(例えば、JavaScriptオブジェクト表記マッピング)を記載するオブジェクト表記を使用して、データオブジェクトを特定の環境724に移動するよう要求してもよい。例示的なコンピュータシステム
【0076】
ここで、図8を参照すると、システム100、データベース110、ワーカノード120、MTS700、及び/又はユーザシステム750を実装し得る例示的なコンピュータシステム800のブロック図が示されている。コンピュータシステム800は、相互接続860(例えば、システムバス)を介してシステムメモリ820及びI/Oインターフェース840に結合されるプロセッササブシステム880を含む。I/Oインターフェース1330は、1つ以上のI/Oデバイス850に結合されてもよい。図8には、便宜上単一のコンピュータシステム800が示されているが、システム800はまた、一緒に動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0077】
プロセッササブシステム880は、1つ以上のプロセッサ又は処理ユニットを含んでもよい。コンピュータシステム800の様々な実施形態では、プロセッササブシステム880の複数のインスタンスが、相互接続860に結合されてもよい。様々な実施形態では、プロセッササブシステム880(又はプロセッササブシステム880内の各プロセッサ)は、キャッシュ又は他の形態のオンボードメモリを含んでもよい。
【0078】
システムメモリ820は、プロセッササブシステム880によって実行可能なプログラム命令を記憶するように使用可能であり、プログラム命令は、システム800に本明細書に記載される様々な動作を実行させる。システムメモリ820は、ハードディスク記憶装置、フロッピーディスク記憶装置、リムーバブルディスク記憶装置、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RDRAM RAMなど)、読み出し専用メモリ(PROM、EEPROMなど)など、異なる物理メモリ媒体を使用して実装されてもよい。コンピュータシステム800内のメモリは、メモリ820のような一次記憶装置に限定されない。むしろ、コンピュータシステム800は、プロセッササブシステム880内のキャッシュメモリ、I/Oデバイス850上の二次記憶装置(例えば、ハードドライブ、記憶アレイなど)などの他の形態の記憶装置を含んでもよい。いくつかの実施形態では、これらの他の形態の記憶装置はまた、プロセッササブシステム880によって実行可能なプログラム命令を記憶してもよい。いくつかの実施形態では、実行されるときに、データベースアプリケーション200を実装するプログラム命令は、システムメモリ820内に含まれ/記憶されてもよい。
【0079】
I/Oインターフェース840は、様々な実施形態による、他のデバイスに結合して通信するように構成されている様々なタイプのインターフェースのいずれであってもよい。一実施形態では、I/Oインターフェース840は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップ(例えば、サウスブリッジ)である。I/Oインターフェース840は、1つ以上の対応するバス又は他のインターフェースを介して、1つ以上のI/Oデバイス850に結合されてもよい。I/Oインターフェースの例は、記憶デバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、記憶アレイ、SAN、又はそれらに関連付けられたコントローラ)、ネットワークインターフェースデバイス(例えば、ローカル又はワイドエリアネットワークへの)、又は他のデバイス(例えば、グラフィック、サウンドなど)を含む。一実施形態では、コンピュータシステム800は、ネットワークインターフェースデバイス850(例えば、Wi-Fi、Bluetooth、Ethernetなどを介して通信するように構成されている)を介してネットワークに結合されている。
【0080】
出願の主題の実現は、以下の例1~20を含むが、これらに限定されない。方法であって、
例1.データベースシステムによって、データベースシステムの複数のデータベースノードに第1の許可情報を配布することであって、第1の許可情報は、複数のデータベースノードの各々に対するキー範囲許可の配布を識別し、所与のデータベースノードに配布されている所与のキー範囲許可は、所与のキー範囲許可に関連付けられたキー範囲内にキーが入るレコードを所与のデータベースノードが書き込むことを許可する、ことと、
データベースシステムによって、第2のデータベースノードにプロビジョニングされた第1のキー範囲許可の要求を第1のデータベースノードから受信することと、
データベースシステムによって、第1の許可情報を修正して、第2のデータベースノードの代わりに第1のデータベースノードに第1のキー範囲許可をプロビジョニングする第2の許可情報を導出することと、
データベースシステムによって、複数のデータベースノードの各々に第2の許可情報を配布することと、を含む、方法。
例2.第1の許可情報を修正する前に、データベースシステムは、
第1のキー範囲許可を放棄するための要求を第2のデータベースノードに送信することであって、第2のデータベースノードは、第1のキー範囲許可が第2のデータベースノードにおいて実行されているアクティブトランザクションのセットで使用されていないと判定することに応答して、第1のキー範囲許可を放棄するように動作可能である、ことと、
第2のデータベースノードから、第1のキー範囲許可が放棄されたことを示す表示を受信することと、をさらに含む、例1に記載の方法。
例3.第1の許可情報は、第2のデータベースノードに、第1のキー範囲許可のスーパーセットである第2のキー範囲許可をプロビジョニングし、第2のデータベースノードは、第1のキー範囲許可を放棄するが、第2のキー範囲許可の残りの部分を保持するように動作可能である、例2に記載の方法。
例4.表示は、第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたトランザクションコミット番号を指定し、第2の許可情報は、第1のデータベースノードへのトランザクションコミット番号を識別し、第1のデータベースノードは、トランザクションコミット番号に基づいて、特定のレコードを書き込むかどうかを判定するように動作可能である、例2に記載の方法。
例5.第2の許可情報は、第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたキー範囲トランザクションコミット番号を定義し、第1のデータベースノードは、
第1のデータベースノードに関連付けられたトランザクションコミット番号が、キー範囲トランザクションコミット番号よりも大きいかどうかを判定することと、
トランザクションコミット番号がキー範囲トランザクションコミット番号よりも大きいと判定することに応答して、第1のキー範囲許可に関連付けられた特定のキーのレコードを書き込むことと、を行うように動作可能である、例1に記載の方法。
例6.第2の許可情報は、第1のキー範囲許可に対する最新のコミットされたレコードに関連付けられたキー範囲トランザクションコミット番号を定義し、第1のデータベースノードは、
第1のデータベースノードに関連付けられたトランザクションコミット番号が、キー範囲トランザクションコミット番号よりも大きいかどうかを判定することと、
トランザクションコミット番号がキー範囲トランザクションコミット番号以下であると判定することに応答して、最新のコミットされたレコードをコミットしたデータベースノードから、第1のキー範囲許可に関連付けられた特定のキーのレコードトランザクションコミット番号を検索することと、を行うように動作可能である、例1に記載の方法。
例7.第1のデータベースノードは、
第1のデータベースノードに関連付けられたトランザクションコミット番号がレコードトランザクションコミット番号以下であると判定することに応答して、特定のキーのレコード書き込みを防止するように動作可能である、例6に記載の方法。
例8.第1のデータベースノードは、
第1のデータベースノードに関連付けられたトランザクションコミット番号がレコードトランザクションコミット番号よりも大きいと判定することに応答して、特定のキーのレコードを書き込むように動作可能である、例6に記載の方法。
例9.第2の許可情報は、複数のブランチを含むトライ木データ構造に記憶され、複数のブランチのうちの特定のブランチは、第1のキー範囲許可に対応する、例1に記載の方法。
例10.複数のデータベースノードの各々に第2の許可情報を配布することは、
複数のデータベースノードに第2の許可情報を通知することと、
複数のデータベースノードの各々から、第2の許可情報に対する情報要求を受信することと、
情報要求に応答して、トライ木データ構造を返すことと、を含む、例9に記載の方法。
例11.データベースシステムによって実行可能に記憶されたプログラム命令を有する非一時的なコンピュータ可読媒体であって、プログラム命令は、データベースシステムに、
データベースシステムの複数のデータベースノードに第1の許可情報を配布することであって、第1の許可情報は、複数のデータベースノードの各々に対するキー範囲許可の配布を識別し、所与のデータベースノードに配布されている所与のキー範囲許可は、所与のキー範囲許可に関連付けられたキー範囲内にキーが入るレコードを所与のデータベースノードが書き込むことを許可する、ことと、
第2のデータベースノードにプロビジョニングされた第1のキー範囲許可の許可要求を第1のデータベースノードから受信することと、
第1の許可情報を修正して、第2のデータベースノードの代わりに第1のデータベースノードに第1のキー範囲許可をプロビジョニングする第2の許可情報を導出することと、
複数のデータベースノードの各々に第2の許可情報を配布すること、を含む動作を実行させる、媒体。
例12.前記動作は、
第2のデータベースノードに、少なくとも第1のキー範囲許可を放棄するための要求を送信することと、
第1の許可情報を変更する前に、第2のデータベースノードから、第1のキー範囲許可及び第2のキー範囲許可が放棄されたことを示す表示を受信することと、をさらに含む、例11に記載の媒体。
例13.第1の許可情報の修正は、スーパーセットキー範囲許可が、第1のデータベースノードに提供されるように実行され、スーパーセットキー範囲許可は、第1のキー範囲許可と、許可要求において第1のデータベースノードによって要求されなかった第2のキー範囲許可を含む、例12に記載の媒体。
例14.第1の許可情報の修正は、第2の許可情報が、特定の時間枠中に、第1のキー範囲許可に関連付けられたキー範囲内に入るキーを有するレコードを別のデータベースノードがコミットしたかどうかの表示を含むように実行される、例12に記載の媒体。
例15.第1の許可情報の修正は、第2の許可情報が、特定の時間枠中に、第1のキー範囲許可に関連付けられたキー範囲内に入るキーを有するレコードを別のデータベースノードがコミットしたかどうかの表示を含むように実行される、例11に記載の媒体。
例16.方法であって、
データベースシステムの許可オーケストレータデータベースノードによって、データベースシステムの第1のワーカデータベースノードに第1のキー範囲許可をプロビジョニングすることであって、第1のキー範囲許可は、第1のキー範囲許可に関連付けられた第1のキー範囲にキーが入るレコードが書き込まれるのを許可する、ことと、
データベースシステム許可オーケストレータデータベースノードによって、第2のワーカデータベースノードから、第1のキー範囲に包含される第2のキー範囲に関連付けられた第2のキー範囲許可に対する許可要求を受信することと、
許可オーケストレータデータベースノードが、許可要求を受信することに応答して、第1のワーカデータベースノードに、第1のキー範囲許可の少なくとも一部を放棄させることと、
第1のワーカデータベースノードが第1のキー範囲許可の少なくとも一部を放棄することに続いて、許可オーケストレータデータベースノードは、第2のキー範囲許可を第2のワーカデータベースノードにプロビジョニングすることと、を含む、方法。
例17.放棄させることは、第2のキー範囲に関連付けられた許可を放棄するための放棄要求を第1のワーカデータベースノードに送信することを含み、方法は、
第1のワーカデータベースノードによって、第2のキー範囲内に入るキーに関連付けられたレコードが進行中のトランザクションに対して書き込まれたと判定することと、
第1のワーカデータベースノードによって、進行中のトランザクションをコミットすることと、
進行中のトランザクションをコミットした後に、第1のワーカデータベースノードが、許可オーケストレータデータベースノードに、第2のキー範囲に関連付けられた第1のキー範囲許可の一部が放棄されたことの表示を返すことと、をさらに含む、例17に記載の方法。
例18.第1のワーカデータベースノードによって、トランザクションが、放棄要求を受信することに応答して、第2のキー範囲に関連付けられたキーを使用することを防止することをさらに含む、例17に記載の方法。
例19.第2のキー範囲許可を第2のワーカデータベースノードにプロビジョニングすることは、第2のワーカデータベースノードに、第1のワーカデータベースノードによって実行された1つ以上の書き込みを示す履歴情報を提供することを含み、方法は、
第2のワーカデータベースノードによって、履歴情報に基づいて、第1のワーカデータベースノードが、特定の時間間隔中に第2のキー範囲内に入る特定のキーを有するレコードをコミットしたかどうかを判定することをさらに含む、例16に記載の方法。
例20.第1のワーカデータベースノードが特定の時間間隔中に特定のキーを持つレコードをコミットしたと判定することに応答して、第2のワーカデータベースノードが、特定のキーを有するレコードを書き込むことを伴うトランザクションの一部を中止する、例19に記載の方法。
【0081】
本開示は、開示された概念の非限定的な実装である「実施形態」への言及を含む。「実施形態」、「一実施形態」、「特定の実施形態」、「いくつかの実施形態」、「様々な実施形態」などへの言及は、必ずしも同じ実施形態を指しているわけではない。多数の可能な実施形態が企図され、これらには、詳細に記載される特定の実施形態、並びに本開示の精神又は範囲に含まれる修正又は代替が含まれる。全ての実施形態が、必ずしも本明細書に記載される潜在的な利点のいずれか又は全てを明らかにする必要はない。
【0082】
特に断らない限り、特定の実施形態は、特定の特徴に関して単一の例のみが記載されている場合であっても、本開示に基づいてドラフトされる特許請求の範囲を開示された形態に制限しようとしていない。したがって、開示される実施形態は、限定的ではなく例示的であるようにしており、これに反する記述はない。本出願は、本開示の利益を有する当業者に明らかであるような代替、修正、及び等価をカバーするようにしている。
【0083】
特定の特徴、構造、又は特性は、本開示と矛盾しない任意の好適な様式で組み合わされ得る。したがって、本開示は、本明細書に(明示的か、又は暗示的に)開示される任意の特徴もしくは特徴の組み合わせ、又はそれらの任意の一般化を含むようにしている。したがって、新たな請求項が、この出願(又はその優先権を主張する出願)のこのような特徴の組み合せに対するプロセキューション中に明確にされることがある。特に、添付の特許請求の範囲を参照すると、従属請求項からの特徴は、独立請求項の特徴と組み合わせてもよく、それぞれの独立請求項からの特徴は、添付の特許請求の範囲に列挙された特定の組み合わせのみでなく、任意の適切な様式で組み合わされてもよい。
【0084】
例えば、添付の従属請求項は、各々が単一の他の請求項に従属するようにドラフトされているが、クレーム6は、先行するクレームのいずれかに従属することができ、クレーム9は、先行するクレームのいずれかに従属することができ、クレーム15は、クレーム11~14のいずれかに従属することができ、クレーム19は、クレーム16~18のいずれかに従属することができることを含む追加の従属も企図されている。適当な場合には、1つの法定タイプ(例えば、装置)でドラフトされたクレームは、他の法定タイプ(例えば、方法)の対応するクレームを示唆することも企図されている。
【0085】
本開示は法的文書であるため、様々な用語及び語句は、行政上及び司法上の解釈の対象となることがある。本開示に基づいてドラフトされるクレームの解釈方法を判定する際には、以下の段落、及び本開示全体を通じて提供される定義を使用することがここに公告される。
【0086】
「a」、「an」、「the」などの単数形への言及は、文脈上明らかに別段の指示がない限り、「1つ以上」を意味しようとしている。したがって、請求項内の「アイテム」への言及は、そのアイテムの追加のインスタンスを排除しない。
【0087】
本明細書において、「may」という語は、許容的な意味(すなわち、可能性を有し、可能である)で使用され、必須の意味(すなわち、必須)では使用されない。
【0088】
「comprising」及び「including」及びその形態は、オープンエンドであり、「含むがこれに限定されない」を意味する。
【0089】
「又は」という用語がオプションのリストに関して本開示において使用されるときに、文脈が他に提供しない限り、それは包括的な意味で使用されると一般に理解されよう。したがって、「x又はy」の記述は、「x若しくはy、又はその両方」と同等であり、yではなくx、xではなくy、及びxとyの両方をカバーする。一方、「x又はyのいずれか、ただし両方ではない」という表現は、「又は」が排他的な意味で使用されていることを明確にしている。
【0090】
「w、x、y、若しくはz、又はその任意の組み合わせ」、又は「w、x、y及びzのうちの少なくとも1つ」の規定は、セット内の単一の要素から要素の総数までを伴う全ての可能性をカバーしようとしている。例えば、セット[w、x、y、z]が与えられると、これらの語句はセットの任意の単一の要素(例えば、wであるが、w、x又は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つのインスタンスが存在することを要求するように解釈されるべきではない。
【0091】
様々な「ラベル」は、本開示において名詞を進めてもよい。文脈が他を提供しない限り、特徴のために使用される異なるラベル(例えば、「第1の回路」、「第2の回路」、「特定の回路」、「所与の回路」など)は、特徴の異なるインスタンスを指す。ラベル「第1」、「第2」及び「第3」は、特定の特徴に適用されるときに、特に断らない限り、任意のタイプの順序付け(例えば、空間的、時間的、論理的など)も暗示しない。
【0092】
本開示においては、異なるエンティティ(「ユニット」、「回路」、他の構成要素などと様々に呼ばれてもよい)は、1つ以上のタスク又は動作を実行するように「構成」されていると記載されるか、又は特許請求の範囲において記載されてもよい。この定式化、つまり、[1つ以上のタスクを実行する]ように構成されている[エンティティ]は、本明細書において構造(すなわち、何らかの物理的なもの)を指すために使用される。より具体的には、この定式化は、この構造が、動作中に1つ以上のタスクを実行するように配置されていることを示すために使用される。構造は、たとえその構造が現在動作していなくても、いくつかのタスクを実行するように「構成」されているということができる。したがって、いくつかのタスクを実行するように「構成されている」と記載されるか、又は規定されるエンティティは、デバイス、回路、タスクを実行するために実行可能なプログラム命令を記憶するメモリなどの何らかの物理的なものを指す。この語句は、本明細書において何らかの無形のものを指すためには使用されない。
【0093】
「~するように構成」という用語は、「~することが構成可能」ということを意味しようとしていない。例えば、プログラムされていないFPGAは、何らかの機能を実行「するように構成」されているとは考えられないだろう。しかし、このプログラムされていないFPGAは、その機能を実行「することが構成可能」であり得る。
【0094】
本明細書において使用される場合、「~に基づいて」という語句は、判定に影響する1つ以上のファクタを記載するために使用される。この用語は、追加的なファクタが判定に影響する可能性を排除しない。すなわち、判定は、指定されたファクタのみに基づいてもよいし、指定されたファクタ及び他の指定されていないファクタに基いてもよい。「Bに基づいてAを判定する」という語句を考える。この語句は、BがAを判定するために使用されるか、又はAの判定に影響するファクタであることを指定する。この語句は、Aの判定がCなどの他のファクタにも基づいてもよいことを排除しない。この語句は、AがBのみに基づいて判定される実施形態をもカバーしようとしている。本明細書で使用される場合、「~に基づいて」という語句は、「~に少なくとも部分的に基づいて」という語句と同義である。
【0095】
「~に応答して」という語句は、効果をトリガする1つ以上のファクタを記載する。この語句は、追加的なファクタが影響するか、そうでなければ効果をトリガする可能性を排除しない。すなわち、効果は、それらのファクタだけに応答するものであってもよいし、指定されたファクタ及び他の指定されていないファクタに応答するものであってもよい。「Bに応答してAを実行する」という語句を考える。この語句は、BがAの性能をトリガするファクタであることを指定している。この語句は、Aを実行することがCなどの何らかの他のファクタにも応答してもよいことを排除しない。この語句はまた、AがBだけに応答して実行される実施形態をカバーしようともしている。
【0096】
本開示では、指定された機能を実行するように動作可能な様々な「モジュール」が、図に示され、上記で詳細に記載されている。本明細書で使用される場合、「モジュール」は、特定の動作のセットを実行するように動作可能なソフトウェア又はハードウェアを指す。モジュールは、動作のセットを実行するためにコンピュータシステムによって実行可能なソフトウェア命令のセットを指してもよい。モジュールはまた、動作のセットを実行するように構成されているハードウェアを指してもよい。ハードウェアモジュールは、汎用ハードウェア、及びプログラム命令、又はカスタマイズされたASICのような特殊なハードウェアを記憶する非一時的なコンピュータ可読な媒体を構成してもよい。したがって、動作を実行するように「実行可能」であると記載されているモジュールは、ソフトウェアモジュールを指し、動作を実行するように「構成されている」として記載されたモジュールはハードウェアモジュールを指す。動作を実行するために「動作可能」であるとして記載されているモジュールは、ソフトウェアモジュール、ハードウェアモジュール、又はそれらのいくつかの組み合わせを指す。さらに、本明細書では、特定の動作を実行するように「実行可能」なモジュールを指す任意の説明について、これらの動作は、他の実施形態では、動作を実行するために「構成されている」ハードウェアモジュールによって実装されてもよく、その逆も可能であることが理解されるべきである。
図1
図2
図3
図4
図5
図6
図7
図8