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

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

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

<>
  • 特表-キー空間参照 図1
  • 特表-キー空間参照 図2A
  • 特表-キー空間参照 図2B
  • 特表-キー空間参照 図3
  • 特表-キー空間参照 図4
  • 特表-キー空間参照 図5
  • 特表-キー空間参照 図6
  • 特表-キー空間参照 図7
  • 特表-キー空間参照 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-21
(54)【発明の名称】キー空間参照
(51)【国際特許分類】
   G06F 16/23 20190101AFI20231114BHJP
【FI】
G06F16/23
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023525563
(86)(22)【出願日】2021-09-09
(85)【翻訳文提出日】2023-04-26
(86)【国際出願番号】 US2021049626
(87)【国際公開番号】W WO2022093408
(87)【国際公開日】2022-05-05
(31)【優先権主張番号】17/083,000
(32)【優先日】2020-10-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ヘランド,パトリック ジェームズ
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA09
(57)【要約】
データベースノードのセットにわたるキー空間に対するレコード書き込みの追跡に関連する手法を開示する。データベースシステムの第1のデータベースノードは、キー空間に含まれるキーに対する特定のレコードを書き込むことを含むデータベーストランザクションを実行する要求を受信することができる。第1のデータベースノードは、データベースシステムのデータベースノードによりキー空間がいつ書き込まれたかの複数の指標を記憶するキー空間参照カタログにアクセスすることができる。第2のデータベースノードが特定の時間枠内にキー空間に対するレコードを書き込んだと判断したことに応答して、第1のデータベースノードは、第2のデータベースノードに、第2のデータベースノードが上記キーに対するレコードを書き込んだかどうかを示す情報の要求を送信することができる。第2のデータベースノードから受信した応答に基づいて、第1のデータベースノードは、この特定のレコードを書き込むかどうかを判断することができる。
【特許請求の範囲】
【請求項1】
データベースシステムの第1のデータベースノードにより、キー空間に含まれるキーに対する特定のレコードを書き込むことを含むデータベーストランザクションを実行する要求を受信するステップと、
前記第1のデータベースノードにより、前記データベースシステムのデータベースノードによりキー空間がいつ書き込まれたかの複数の指標を記憶するキー空間参照カタログにアクセスするステップと、
第2のデータベースノードが特定の時間枠内に前記キー空間に対するレコードを書き込んだと判断したことに応答して、前記第1のデータベースノードが、前記第2のデータベースノードに、前記第2のデータベースノードが前記キーに対するレコードを書き込んだかどうかを示す情報の要求を送信するステップと、
前記第2のデータベースノードから受信した応答に基づいて、前記第1のデータベースノードが、前記特定のレコードを書き込むかどうかを判断するステップと、
を含む方法。
【請求項2】
前記データベーストランザクションを実行する前記要求を受信する前に、前記第1のデータベースノードが、
前記データベースシステムに、前記キー空間に対するレコードを書き込む承認のための許可要求を発行するステップと、
前記キー空間に対するレコードを書き込む許可を受信するステップであり、前記許可は、前記第2のデータベースノードから前記第1のデータベースノードに移転される、ステップと、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記キー空間へのレコードを書き込むことを含む前記第2のデータベースノード上のアクティブなトランザクションは、前記キー空間に対するレコードを書き込む前記許可が前記第1のデータベースノードにより受信された後にコミットすることを許可されており、前記アクティブなトランザクションの少なくとも1つが、前記許可が前記第1のデータベースノードにより受信される前に前記キー空間に対するレコード書き込みを引き起こしたものである、請求項2に記載の方法。
【請求項4】
前記複数の指標のうちの特定の指標は、前記許可が前記第1のデータベースノードに付与されている間、前記特定の指標により識別される前記キー空間への全てのレコード書き込みが前記第1のデータベースノードにより実行されるべきであることを示す、請求項2に記載の方法。
【請求項5】
前記第2のデータベースノード上のアクティブなトランザクションの一部として前記キー空間に対するレコードを前記第2のデータベースノードが書き込むことを許可するために、前記第2のデータベースノードに対して前記許可を放棄する放棄要求を、前記第1のデータベースノードにより受信するステップと、
前記第1のデータベースノードにより、前記放棄要求に応答して前記許可を放棄するステップと、
をさらに含む、請求項4に記載の方法。
【請求項6】
前記複数の指標のうちの特定の指標が、前記キー空間に対するエポック範囲を識別し、前記第2のデータベースノードに関連づけられており、当該方法は、
前記第1のデータベースノードにより、前記データベーストランザクションに対応するエポックが前記エポック範囲内に入るという判断を行うステップであり、前記判断は、前記第2のデータベースノードが前記特定の時間枠内に前記キー空間に対するレコードを書き込んだことを示す、ステップ
をさらに含む、請求項1乃至5のうちいずれか1項に記載の方法。
【請求項7】
前記特定の指標にリンクされている最後のアクティブなトランザクションのコミットメントに応答して前記エポック範囲を修正するステップであり、前記エポック範囲は、前記修正の前に前記エポック範囲の上限のエポックを定義していない、ステップ
をさらに含む、請求項6に記載の方法。
【請求項8】
前記キー空間に対して前記第2のデータベースノードで書き込まれた全てのレコードを前記データベースシステムの永続データベースに記憶した後、前記特定の指標を削除するステップ
をさらに含む、請求項6に記載の方法。
【請求項9】
前記複数の指標は、前記キー空間に対する指標のセットを含み、前記指標のセットのうちの1つは、前記キー空間に対するレコードを書き込むことを許可されたデータベースノードを識別し、前記指標のセットのうちの2つ以上が、前記キー空間に対して書き込まれたレコードを読み取るためのデータベースノードを識別する、請求項1に記載の方法。
【請求項10】
前記第2のデータベースノードが前記キーに対するレコードを書き込んだと判断したことに応答して、前記第1のデータベースノードが、前記特定のレコードを書き込むことを含む前記データベーストランザクションの少なくとも一部を中止するステップ
をさらに含む、請求項1乃至9のうちいずれか1項に記載の方法。
【請求項11】
データベースシステムの第1のデータベースノードに動作を実行させるために前記第1のデータベースノードにより実行可能であるプログラム命令を記憶させたコンピュータ読取可能媒体であって、前記動作は、
キー空間に含まれるキーに対する特定のレコードを書き込むことを含むデータベーストランザクションを実行する要求を受信することと、
前記データベースシステムのデータベースノードによりキー空間がいつ書き込まれたかの複数の指標を記憶するキー空間参照カタログにアクセスすることと、
第2のデータベースノードが特定の時間枠内に前記キー空間に対するレコードを書き込んだと判断したことに応答して、前記第2のデータベースノードに、前記第2のデータベースノードが前記キーに対するレコードを書き込んだかどうかを示す情報の要求を送信することと、
前記第2のデータベースノードから受信した応答に基づいて、前記特定のレコードを書き込むかどうかを判断することと、
を含む、媒体。
【請求項12】
前記第2のデータベースノードに対応する前記複数の指標のうちの特定の指標が、最小キーと最大キーにより前記キー空間を識別し、前記特定の指標は、前記特定の時間枠を包含する時間枠を指定している、請求項11に記載の媒体。
【請求項13】
前記動作は、
前記第1のデータベースノードで前記キー空間に対するレコードを書き込む承認を要求することと、
前記キー空間に対するレコードを書き込む許可を受信することと、
前記キー空間参照カタログに特定の指標を記憶させることであり、前記特定の指標は、前記キー空間に対する全てのレコード書き込みが前記第1のデータベースノードで発生すべきであることを示す、ことと、
をさらに含む、請求項11に記載の媒体。
【請求項14】
前記動作は、
前記キー空間に含まれる前記キーに対する別の特定のレコードを書き込むことを含む別のデータベーストランザクションを実行することと、
前記キー空間参照カタログを使用し、前記キー空間に対するレコードを書き込む前記許可が第3のデータベースノードに移転されたと判断することと、
前記第3のデータベースノードに、前記別の特定のレコードを書き込む書き込み要求を送信することと、
をさらに含む、請求項13に記載の媒体。
【請求項15】
少なくとも1つのプロセッサと、
請求項1乃至10のうちいずれか1項に記載の方法を実行するために前記少なくとも1つのプロセッサにより実行可能であるプログラム命令を記憶させたメモリと、
を含むコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にデータベースシステムに関し、より具体的には、データベースノードのセットにわたるキー空間に対するレコード書き込みを追跡することに関する。
【背景技術】
【0002】
現代のデータベースシステムは、ユーザが効率的にアクセス及び操作することができる編成方法で情報の集合を記憶することができる管理システムを日常的に実装している。いくつかの場合、これらの管理システムは、情報をキー・値ペアとしてデータベースレコードに各々記憶する複数のレベルを有するログ構造化マージツリー(LSMツリー)を維持する。LSMツリーは通常、2つの高レベルコンポーネント、すなわちインメモリバッファと永続ストレージを含む。動作の間、データベースシステムは、永続ストレージにデータベースレコードを書き込むことを含むトランザクションを処理するためのトランザクション要求を受信する。データベースシステムは、後にデータベースレコードを永続ストレージにフラッシュする前に、最初にデータベースレコードをインメモリバッファに書き込む。データベースレコードをフラッシュすることの一部として、データベースシステムは、データベースレコードを、永続ストレージに記憶される新しいファイルに書き込む。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、キー空間参照を使用してデータベースノードのセットにわたるキー空間に対するレコード書き込みを追跡することができるシステムの例示的な要素を示すブロック図である。
図2A】いくつかの実施形態による、キー空間許可の例示的な要素を示すブロック図である。
図2B】いくつかの実施形態による、キー空間参照の例示的な要素を示すブロック図である。
図3】いくつかの実施形態による、キー空間参照を使用してアクティブなデータベーストランザクションを処理するデータベースノードに関連する例示的な要素を示すブロック図である。
図4】いくつかの実施形態による、データベーストランザクションをコミットした後にキー空間参照を更新するデータベースノードに関連する例示的な要素を示すブロック図である。
図5】いくつかの実施形態による、キー空間参照を使用したデータベーストランザクションの処理に関連する例示的な方法を示すフロー図である。
図6】いくつかの実施形態による、キー空間参照を使用したデータベーストランザクションの処理に関連する例示的な方法を示すフロー図である。
図7】いくつかの実施形態による、マルチテナントシステムの要素を示すブロック図である。
図8】いくつかの実施形態による、本開示に記載される様々なシステムを実装するコンピュータシステムの要素を示すブロック図である。
【発明を実施するための形態】
【0004】
上記で説明したように、現代のデータベースシステムは、キー・値ペアを有するデータベースレコードを含むLSMツリーを維持することがある。多くの場合、データベースシステムは、LSMツリーの永続ストレージコンポーネントにデータベースレコードを書き込むことを担当する単一のアクティブなデータベースノードを含む。しかし、いくつかの場合、データベースシステムは、LSMツリーに対するデータベースレコードを書き込んでいる複数のデータベースノードを含む。複数のデータベースノードが同じデータベースキーに対してほぼ同時にデータベースレコードを書き込むことを防ぐために、データベースノードは、それらのデータベースノードが対応するデータベースレコードを書き込むことを許可されているキーを識別するキー許可をプロビジョニングされる(provisioned)場合がある。
【0005】
しかしながら、様々な場合に、キー許可を前の所有者データベースノードから新しい所有者データベースノードに再プロビジョニングする(re-provision)ことが望ましい場合がある。一例として、管理者が、データベースノードの新しいソフトウェアバージョンへのローリングアップグレードを実行したい場合がある。そのデータベースノードにプロビジョニングされたキー許可にキーが関連づけられている、データベーストランザクションの遅延を防ぐために、それらのキー許可を別のデータベースノードに再プロビジョニングすることが望ましい場合があり、それにより、別のデータベースノードは、以前のデータベースノードがアップグレードされるためにオフラインにされている間、それらのデータベーストランザクションを実行することができる。しかし、多くの場合、再プロビジョニングが発生すべき時点で、その以前のデータベースノードは、再プロビジョニングされるキー許可に結び付けられている進行中のデータベーストランザクションを依然として有する。それらの進行中のデータベーストランザクションをリスタートさせることは、それらのデータベーストランザクションの一部が実行するのに長い時間がかかる場合があるため(例えば、1時間)、望ましくない。本開示は、とりわけ、キー許可を新しい所有者データベースノードに再プロビジョニングするときに進行中のトランザクションをどのように取り扱うかというこの技術的問題に対処する。
【0006】
より具体的には、本開示は、キー空間に対する進行中のトランザクションが前の所有者データベースノードでコミットし(commit)又はロールバックすることを可能にする一方で、同じキー空間に対する新しいトランザクションが新しい所有者データベースノードで開始されることを可能にするための様々な手法について説明する。しかし、同じキー空間に対するデータベースレコードをコミットする、2つ以上の別個のデータベースノードで実行されているトランザクションが存在する可能性があるため、それらの書き込みがデータベース内でデータ破損を引き起こさないことを保証するメカニズムが望まれる。したがって、本開示は、同じキー空間に対して複数のデータベースノードにわたり実行される複数のトランザクションがあるときにデータベースシステム内の一貫性を保証するという技術的な問題にさらに対処する。
【0007】
以下に説明する様々な実施形態において、特定のキー空間に対するデータベースレコード書き込みが発生すべき場所と、このキー空間に対してデータベースレコード書き込みが前に発生した場所とを追跡するために、キー空間参照(keyspace references)が使用される。キー空間に対して書き込む許可がデータベースシステムの第1のデータベースノードに最初にプロビジョニングされるとき、そのキー空間に対するデータベースレコード書き込みが第1のデータベースノードのみで発生すべきであることを示す、第1のキー空間参照を作成することができる。結果として、データベースシステムのデータベースノードは、第1のキー空間参照に基づいて書き込み要求を第1のデータベースノードに向け(direct)、このキー空間参照は、データベースシステムの様々なキー空間に対するキー空間参照を記憶する参照カタログに含めることができる。
【0008】
データベースシステムの動作の間のあるポイントで、特定のキー空間が第1のデータベースノードから第2のデータベースノードに再プロビジョニングされる場合がある。そのキー空間が第2のデータベースノードにプロビジョニングされるとき、いくつかの実施形態において、このキー空間に対するデータベースレコード書き込みが第2のデータベースノードで発生すべきであることを示す「オープン(open)」状態を有する、第2のキー空間参照が作成される。第1のデータベースノードに関連づけられた第1のキー空間参照は、このキー空間に対するデータベースレコード書き込みが第1のデータベースノードでもはや発生しないことを示す「クローズド(closed)」状態に設定することができる。結果的に、データベースシステムのデータベースノードは、書き込み要求を第1のデータベースノードでなく第2のデータベースノードに向ける。結果として、キー空間に対するデータベースレコード書き込みは、第1のデータベースノードがオフラインにされている場合でも、発生し続けることができる。新しいデータベースレコード書き込みは第2のデータベースノードに向けられるが、第1のデータベースノードは、キー空間に対するレコードを書き込んだがコミットしていないアクティブなトランザクションを依然として有する場合がある。結果として、同じキーに対する第1のデータベースノードのレコードの前に第2のデータベースノードがレコードを書き込み、コミットする状況が生じる可能性があり、結果として、前のレコードが後のレコードの前に書き込まれたにもかかわらず、後のレコードが前のレコードの前に書き込まれているように見えるため、一貫性のないデータベースがもたらされる。
【0009】
この状況を回避するために、様々な実施形態において、第2のデータベースノードが特定のキー空間内のキーに対するデータベースレコードを書き込みたいとき、第2のデータベースノードは参照カタログのキー空間参照を調べ直す。キー空間参照に基づいて、第2のデータベースノードは、キー空間に対するそのレコード書き込みが特定の時間枠内の別のデータベースノードのレコード書き込みと潜在的に衝突するかどうかを判断することができる。例えば、第2のデータベースノードは、キー空間に対するデータベースレコードを書き込んだ、第1のデータベースノードにおける進行中のデータベーストランザクションがあると判断することができる。第2のデータベースノードが、少なくとも1つのデータベースレコードがキー空間内に書き込まれるべきと判断した場合、様々な実施形態において、第2のデータベースノードは、第2のデータベースノードがデータベースレコードを書き込むつもりであるキーに固有のデータベースレコードを書き込んだ可能性のあるデータベースノードの各々に、要求を送信する。例えば、第2のデータベースノードは、第1のデータベースノードに、それがキー空間に対して書き込んだデータベースレコードの1つが上記キーに関連づけられているかどうかを判断する要求を送信することができる。そのキーに対してレコードが書き込まれていない場合、第2のデータベースノードは、それがキーに対して望むレコードを書き込む。別のデータベースノードによりキーに対して書き込まれたレコードがある場合、第2のデータベースノードは、そのトランザクションを中止し、あるいはそのレコードが別のデータベースノードのレコードの後にコミットされることを保証することができる。所与のキーに対する、他のデータベースノードによるデータベースレコード書き込みについて学習可能であることにより、データベースノードは、それ自体が、破損したデータベースをもたらすことになる方法で同じキーに対するデータベースレコードを書き込み及びコミットするのを防ぐことができる。
【0010】
いくつかの場合、キー空間は、いくつかのデータベースノードをあちこちに移動される場合があり、結果として、いくつかの「読み取り」キー空間参照(キー空間に対してデータベースレコード書き込みが前に発生した場所を識別する)と、1つの「書き込み」キー空間参照(キー空間に対するデータベースレコード書き込みが発生すべき場所を識別する)がある可能性がある。したがって、データベースノードがキーに対するデータベースレコードを読み取り又は書き込みしたいとき、それは、キーに対応するレコードについて、複数のキー空間参照とそれらに関連づけられたデータベースノードをチェックする必要があり得る。
【0011】
本開示の手法は、これらの手法が、データベースノード間でキー空間を再プロビジョニングすることを可能にする一方で、それらのデータベースノードが誤った時間的順序でレコードをコミットすることを防ぐことによりデータベースシステムにおける一貫性を保証するためのメカニズムを提供するため、従前のアプローチよりも有利である可能性がある。特に、これらの手法は、進行中のトランザクションをリスタートさせる必要なく、キー空間を再プロビジョニングすることを可能にする。データベーストランザクションは実行するのに長時間かかる可能性があるため、進行中のトランザクションをリスタートさせないことにより、データベースリソースが浪費されず、時間が節約される。さらに、進行中のトランザクションをリスタートさせるコストをキー空間移転の一部として負担する必要がないことにより、データベースノードにおける更新の実行はより高価でなくなる。したがって、データベースシステムの全体的な動作が向上する。次に、始めに図1を参照し、本開示の手法の一例示的な適用について論じる。
【0012】
次に図1を参照し、システム100のブロック図を示す。システム100は、ハードウェア又はハードウェアとソフトウェアルーチンの組み合わせにより実装され得るコンポーネントのセットを含む。例示の実施形態において、システム100は、データベース110(LSMファイル115を有する)、データベースノード120A及び120B、及びカタログマネージャノード140を含む。さらに図示するように、カタログマネージャノード140は、キー空間許可124及びキー空間参照126を有するストレージカタログ(storage catalog)145を含み、キー空間許可124及びキー空間参照126のうちの1つ以上が、データベースノード120に記憶されている。さらに例示するように、データベースノード120は、キー134に対するデータベースレコード132を記憶するそれぞれのインメモリ(in-memory)キャッシュ130を含む。いくつかの実施形態において、システム100は、図示されるものとは別様に実装される。一例として、カタログマネージャノード140が存在しない場合があり、代わりに、ストレージカタログ145は、データベースノード120がキー空間許可124とキー参照126を維持するように、データベースノード120により共有されたストレージ領域に記憶されてもよい。さらに、本開示の手法はLSMツリーを参照して論じられるが、これらの手法は、複数のノードがデータベースのレコードを書き込み及びコミットする他のタイプのデータベース実装に適用することができる。
【0013】
システム100は、様々な実施形態において、そのサービスのユーザがアプリケーションを開発、実行、及び管理することを可能にするプラットフォームサービス(例えば、顧客関係管理(CRM)プラットフォームサービス)を実現する。システム100は、マルチテナントシステムによりホストされる複数のユーザ/テナントに様々な機能を提供するマルチテナントシステムでもよい。したがって、システム100は、システム100に関連づけられたユーザ、データベース、及び他のエンティティにコード、ウェブページ、及び他のデータを提供するだけでなく、様々な異なるユーザ(例えば、システム100のプロバイダ及びテナント)からのソフトウェアルーチンを実行する場合がある。例示のように、例えば、システム100は、システム100のユーザのためにデータベース110のLSMファイル115からのデータを記憶、操作、及び取り出すことができるデータベースノード120を含む。
【0014】
データベース110は、様々な実施形態において、その情報のアクセス、記憶、及び操作を可能にする方法で編成されている情報の集合である。したがって、データベース110は、データベースノード120がデータベース110に記憶されている情報に対して操作(例えば、アクセス、記憶など)を実行することができるようにするサポートソフトウェアを含む場合がある。いくつかの実施形態において、データベース110は、ネットワーク上で一緒に接続され(例えば、ストレージアタッチトネットワーク(storage attached network、SAN))、データ損失を防ぐために情報を冗長に記憶するように構成された、単一又は複数のストレージデバイスにより実装される。ストレージデバイスは、データを永続的に記憶する場合があり、したがって、データベース110は、永続ストレージとして機能する場合がある。様々な実施形態において、1つのデータベースノード120によりLSMファイル115に書き込まれたデータベースレコード132は、他のデータベースノード120によりアクセス可能である。LSMファイル115は、データベース110で実装されたログ構造化マージツリー(log-structured merge tree)(LSMツリー)の一部として記憶される場合がある。
【0015】
LSMツリーは、様々な実施形態において、レベルベースのスキームを使用する編成方法でLSMファイル115を記憶するデータ構造である。LSMツリーは、2つの高レベルコンポーネント、すなわち、インメモリキャッシュ130で実装されたインメモリコンポーネントと、データベース110で実装されたオンディスクコンポーネントを含むことができる。いくつかの実施形態において、インメモリキャッシュ130は、LSMツリーとは別個であると見なされる。データベースノード120は、最初、データベースレコード132をそれらのインメモリキャッシュ130に書き込むことができる。キャッシュ130がフルになったとき、及び/又は特定の時点で、データベースノード120は、それらのデータベースレコード132をデータベース110にフラッシュすることができる。これらのデータベースレコード132をフラッシュすることの一部として、様々な実施形態において、データベースノード120は、データベースレコード132をデータベース110における新しいLSMファイル115のセットに書き込む。
【0016】
LSMファイル115は、様々な実施形態において、データベースレコード132のセットである。データベースレコード132は、データと、そのデータベースレコードをルックアップするために使用可能である対応するデータベースキー134とを含むキー・値ペア(key-value pair)でもよい。例えば、データベースレコード132は、データベーステーブルにおけるデータ行に対応してもよく、これにおいて、データベースレコード132は、データベーステーブルに関連づけられた1つ以上の属性の値を指定している。様々な実施形態において、ファイル115は、そのLSMファイル115に含まれるデータベースレコードのキー134により定義される1つ以上のデータベースキー範囲に関連づけられる。ファイル115が、キー134「XYA」、「XYW」、及び「XYZ」にそれぞれ関連づけられた3つのデータベースレコード132を記憶する一例について考える。これらの3つのキー134は、XYA→XYZのデータベースキー範囲に及び、したがって、そのLSMファイル115は、そのデータベースキー範囲に関連づけられる。
【0017】
データベースノード120は、様々な実施形態において、データストレージ、データ取り出し、及び/又はデータ操作などのデータベースサービスを提供することができるハードウェア、ソフトウェア、又はこれらの組み合わせである。これらのデータベースサービスは、システム100内の他のコンポーネント、又はシステム100の外部コンポーネントに提供されてもよい。例えば、データベースノードAは、アプリケーションサーバから、データベーストランザクション122を実行する要求を受信することができる。データベーストランザクション122は、様々な実施形態において、データベース110に関連して実行される論理的なワーク単位(例えば、データベース操作の指定されたセット)である。一例として、データベーストランザクション122を処理することは、1つ以上のデータベーステーブルから1つ以上の行を選択するために、SQL SELECTコマンドを実行することを含んでもよい。行の内容は、データベースレコード132内に指定されている場合があり、したがって、データベースノード120は、選択された1つ以上のテーブル行に対応する1つ以上のデータベースレコード132を返す場合がある。様々な場合に、データベーストランザクション122を実行することは、データベースノード120が1つ以上のデータベースレコード132をLSMツリーに書き込むことを含んでもよい。データベースノード120は、様々な実施形態において、それらのデータベースレコード132をデータベース110にフラッシュする前に、最初にそれらのデータベースレコード132をそのインメモリキャッシュ130に書き込む。
【0018】
インメモリキャッシュ130は、様々な実施形態において、データベースノード120のメモリ(例えば、ランダムアクセスメモリ)にデータを記憶するバッファである。HBaseTM Memstoreは、インメモリキャッシュ130の一例である。前述したように、データベースノード120は、最初にそのインメモリキャッシュ130にデータベースレコード132を書き込むことができる。いくつかの場合、データベーステーブル内の行の最新/最も新しいバージョンは、インメモリキャッシュ130に記憶されているデータベースレコード132で見つかる場合がある。しかしながら、いくつかの実施形態において、データベースノード120のインメモリキャッシュ130に書き込まれているデータベースレコード132は、他のデータベースノード120にとっては見えない。すなわち、他のデータベースノード120は、尋ねることなしには、どんな情報がデータベースノード120のインメモリキャッシュ130内に記憶されているかがわからない。あるデータベースノード120が別のデータベースノード120により書き込まれたデータベースレコード132について知らない可能性があるときの、データベースレコード競合を防ぐために、様々な実施形態において、データベースノード120は、所与のデータベースノード120によってどのデータベースレコード132を書き込むことができるかを制御するキー空間許可124をプロビジョニングされる。したがって、キー空間許可124は、2つ以上のデータベースノード120が特定の時間間隔内に同じデータベースキー134に対するデータベースレコード132を書き込むことを防いで、これらのデータベースノード120が競合するデータベースレコード132をデータベース110にフラッシュするのを防ぐことができる。
【0019】
キー空間許可124は、様々な実施形態において、キー空間とそのキー空間の対応する所有者とを識別する情報である。例えば、図示するように、データベースノード120Bはキー空間許可124をプロビジョニングされ、したがって、データベースノード120Bは、対応するキー134がそのキー空間許可124に関連づけられたキー空間内に入るデータベースレコード132を、そのインメモリキャッシュ130に書き込むことを許可される。様々な実施形態において、キー空間許可124は、いつでも、最大で1つのデータベースノード120にプロビジョニングされる。したがって、キー空間許可124がデータベースノード120Bにプロビジョニングされている間、データベースノード120Aは、対応するキー134がそのキー空間許可124に関連づけられたキー空間内に入るデータベースレコード132を書き込むことを許可されない。特定のキー134に対するデータベースレコード132を書き込むことを許可されるために、様々な実施形態において、データベースノード120は、カタログマネージャノード140に、キー134を指定する許可要求を発行することができる。いくつかの場合、許可要求は、複数のキー134(キー空間)を指定してもよい。
【0020】
カタログマネージャノード140は、様々な実施形態において、データベースノード120間におけるキー空間許可124及びキー空間参照126の管理と配布を容易にする。キー空間許可124の管理と配布を容易にすることの一部として、様々な実施形態において、カタログマネージャノード140は、データベースノード120からの要求を受信したことに応答してキー空間許可124を更新し、配布する。例えば、カタログマネージャノード140は、データベースノード120Bから、キー空間「XY」に対するレコード132を書き込む許可の要求を受信する場合がある。応答して、カタログマネージャノード140は、このキー空間に対するキー空間許可124がデータベースノード120にすでにプロビジョニングされているかどうかを判断することができる。それがプロビジョニングされていない場合、カタログマネージャノード140は、キー空間許可124を更新してキー空間をデータベースノード120Bにプロビジョニングすることができ、次いで、そのキー空間のプロビジョニングについて、データベースノード120Bを含む全てのデータベースノード120に通知することができる。要求されたキー空間に対する許可がプロビジョニングされている場合、様々な実施形態において、カタログマネージャノード140は、所有しているデータベースノード120を識別し、そのデータベースノード120に、要求されたキー空間を放棄する(relinquish)要求を送信する。そのデータベースノード120は、キー空間が放棄されたことを示す応答を送信することができ、その後、カタログマネージャノード140は、キー空間許可124を更新してキー空間をデータベースノード120Bにプロビジョニングすることができ、次いで、そのキー空間の再プロビジョニングについて全てのデータベースノード120に通知することができる。様々な実施形態において、キー空間がデータベースノード120にプロビジョニングされるとき、キー空間参照126が作成される。
【0021】
キー空間参照126は、様々な実施形態において、指定されたデータベースノード120が、指定されたキー空間内に入るキー134を有するデータベースレコード132を書き込んだ、時間枠を識別する情報を含む。例えば、キー空間参照126は、データベースノード120Aが、第1のトランザクションコミット番号(transaction commit number、XCN)から第2のより後に発生するXCNまでで定義される時間枠の間に、キー空間「XY」に属するデータベースレコード132を書き込んだことを示すことができる。様々な実施形態において、キー空間に対するキー空間参照126の1つは、そのキー空間に属するデータベースレコード132を書き込むことを現在許可されているデータベースノード120を識別することができる。キー空間に対して書き込むことを許可されているデータベースノード120を識別するキー空間参照126は、本明細書において「書き込み」キー空間参照126と呼ばれる。これは、キー空間に対して前に書き込んだが、もはやキー空間に対して書き込むことを許可されていないデータベースノード120(そのデータベースノード120に、関連するキー空間許可124が再プロビジョニングされていない限り)を識別する、「読み取り」キー空間参照126と対照的である。結果的に、様々な実施形態において、カタログマネージャノード140は、同じキー空間に対する複数のキー空間参照126を記憶する場合があり、そのうちの1つは書き込みキー空間参照126であり、他は読み取りキー空間参照126である。キー空間が別のデータベースノード120に再プロビジョニングされるとき、現在の書き込みキー空間参照126は読み取りキー空間参照126に変換することができ、新たに作成されたキー空間参照126は書き込みキー空間参照126になることができる。
【0022】
データベースノード120が、特定のキー134に対してデータベースレコード132が書き込まれることを望むとき、様々な実施形態において、データベースノード120は、カタログマネージャノード140に、1つ以上のキー空間参照126のカタログ要求142を送信する。様々な場合に、カタログマネージャノード140は、書き込みキー空間参照126をカタログ応答144の一部として要求データベースノード120に返すことができる。その後、要求データベースノード120は、書き込みキー空間参照126により、適切なキー134を含むキー空間に対して書き込むことを許可されていると識別されているデータベースノード120に、レコード書き込み要求を送信することができる。データベースノード120Aがキー134「X」に対するデータベースレコード132を書き込みたいが、キー134「X」を包含するキー空間許可124がデータベースノード120Bにプロビジョニングされている一例について考える。そのデータベースレコード132が書き込まれるために、データベースノード120Aは、ストレージカタログ145から、データベースノード120Bがキー134「X」を包含するキー空間に対するデータベースレコード132を書き込むことを許可されていることを示す書き込みキー空間参照126を取得することができる。結果として、データベースノード120Aは、データベースノード120Bに、特定のデータベースレコード132が書き込まれるレコード書き込み要求を送信することができる。
【0023】
データベースノード120が、キー134に対してデータベースレコード132をその自身のインメモリキャッシュ130に書き込みたいとき、様々な実施形態において、データベースノード120は、カタログマネージャノード140に、1つ以上のキー空間参照126のカタログ要求142を送信することができる。その後、カタログマネージャノード140は、1つ以上の読み取りキー空間参照126をカタログ応答144の一部として要求データベースノード120に返すことができる。様々な実施形態において、そのデータベースノード120は、それらの読み取りキー空間参照126を調べて、別のデータベースノード120が、関連するキー空間に対して、それらのデータベースノード120間で潜在的にコミット競合を結果としてもたらす特定の時間枠内に書き込んだかを判断する。一例として、データベースノード120Bは、キー134Bを有するデータベースレコード132Bを書き込みたい場合がある。データベースノード120Bは、読み取りキー空間参照126のセットから、データベースノード120Aがキー134Bを含むキー空間に対するレコード132を書き込んだが、レコード132がコミットされていないと判断することができる。図示のように、データベースノード120Aは、この例のキー空間に属するキー134Aを有するデータベースレコード132Aを書き込んでいる。
【0024】
様々な実施形態において、別のデータベースノード120が特定の時間枠内にキー空間に対して書き込んだと判断したことに応答して、データベースノード120は、そのデータベースノード120に、データベースノード120が具体的に特定のキー134に対するレコード132を書き込んだかを判断するレコード要求136を送信する。前の例を続けると、データベースノード120Bは、データベースノード120Aに、それがキー134Bに対するデータベースレコードを書き込んだかを判断するレコード要求136を送信することができる。データベースノード120Aは、キー134Bに対するデータベースレコード132が書き込まれたかどうかを示すレコード応答138を送信することができる。キー134Bに対してデータベースレコード132が書き込まれていた場合、データベースノード120Bは、そのレコード書き込みに関連づけられたデータベーストランザクション122を中止することができ、あるいはその他のデータベースレコード132がデータベースノード120Aによりコミットされるまでレコード書き込みを遅延させることができる。キー134Bに対してデータベースレコード132が書き込まれていない場合、データベースノード120Bは、キー134Bに対するデータベースレコード132を書き込み、コミットすることができる。
【0025】
システム100のキー空間許可124とキー空間参照126を維持することにより、データベースノード120は、データベースレコード132がどこで書き込まれるべきか、及び前に書き込まれたがコミットされたデータベースレコード132をどこで見つけることができるかを判断することが可能な場合がある。そのため、ユーザが、特定のデータベースノード120を更新することの一部として1つ以上のキー空間を他のデータベースノード120に再プロビジョニングさせたとき、システム100の全てのデータベースノード120が、キー空間許可124とキー空間参照126から、どのデータベースノード120が再プロビジョニングされたキー空間に対するデータベースレコード132を書き込むことを許可されているかを判断することができる。結果として、これらのキー空間へのデータベースレコード書き込みは、その特定のデータベースノード120が更新されている間、発生し続けることができる。さらに、更新されている特定のデータベースノード120上の進行中のデータベーストランザクション122は、これらのキー空間をプロビジョニングされた他のデータベースノード120が、特定のデータベースノード120でどんなデータベースレコード書き込みが発生したかについて学習することができるため、競合を引き起こすことなくコミットすることができる。したがって、これらのデータベースノード120は、それら自体が、特定のデータベースノード120で書き込まれたデータベースレコードと競合するデータベースレコード132を書き込み及びコミットするのを防ぐことができる。
【0026】
次に、図2Aを参照し、キー空間許可124の例示的な要素のブロック図を示す。例示の実施形態において、キー空間許可124は、キー空間210とノード指標(node indication)220を指定する。いくつかの実施形態において、システム100は、キー空間許可124を含まないが、それらの役割を果たすためにキー空間参照126を使用する。いくつかの実施形態において、キー空間許可124は、図示されるものとは別様に実装される。一例として、キー空間許可124は、それを他のキー空間許可124と区別し、キー空間許可124がストレージカタログ145でルックアップされることを可能にする識別子を指定することができる。
【0027】
キー空間210は、様々な実施形態において、図1に示されているように、最小キー134と最大キー134により定義されたキー134の範囲に対応する。例えば、キー空間210は、「AAAAA」から「EEEEE」のキー134の範囲に対応する場合がある。いくつかの実施形態において、キー空間210は、複数のキー範囲(例えば、「AAAAA」から「BBBBB」までと、「CCCCC」から「EEEEE」まで)に対応する。いくつかの場合、キー空間210のキー範囲は、最小キー134と最大キー134の代わりに、単一のキープレフィックスにより指定されてもよい。例えば、キー空間210は、プレフィックス「XY」を有する全てのキー134を包含する、「XY」を指定することができる。いくつかの実施形態において、所与のキー空間210に対して単一のキー空間許可124があり、それにより、最大で1つのデータベースノード120がそのキー空間210に対してデータベースレコード132を書き込むことを許可される。したがって、所有していないデータベースノード120が、特定のキー空間210に対するデータベースレコード132について書き込みたいとき、所有していないデータベースノード120は、キー空間210の所有権を要求するか、あるいは、所有しているデータベースノード120に、データベースレコード132を書き込む要求を発行するかのいずれかを行うことができる。キー空間210の所有権が移転されるべき場合、様々な実施形態において、対応するキー空間許可124のノード指標220は、新しい所有しているデータベースノード120を反映するように更新される。
【0028】
ノード指標220は、様々な実施形態において、キー空間許可124に関連づけられているデータベースノード120を示す。いくつかの実施形態において、データベースノード120は、このデータベースノード120がログ情報を書き込むことを許可されているログファイルのリストを定義するログウィンドウを割り当てられる。ノード指標220は、ログウィンドウの識別子を指定し、したがってログウィンドウを介してデータベースノード120に関連づけられてもよい。ノード指標220は、様々なイベントの発生に応答して更新されることがある。例えば、カタログマネージャノード140は、特定のキー空間許可124のノード指標220を、その特定のキー空間許可124に対応するキー空間210の所有権の要求をデータベースノード120から受信した後、更新する場合がある。別の例として、キー空間210の所有権は、そのデータベースアプリケーションに対するソフトウェア更新を受信しているデータベースノード120から離れて移転される場合があり、したがって、ノード指標220は、そのデータベースノード120からキー空間210の所有権を除去するように更新される場合がある。
【0029】
様々な実施形態において、キー空間許可124は、複数のキー空間許可124に分割することができる。例えば、キー空間210「XY」を指定するキー空間許可124は、2つのキー空間許可124に分割されてもよく、すなわち、そのうちの一方はキー空間210「XYA-XYM」を指定し、そのうちの他方はキー空間210「XYN-XYZ」を指定する。様々な実施形態において、複数のキー空間許可124を、単一のキー空間許可124にマージすることができる。例えば、前の例からの2つのキー空間許可124は、キー空間210「XY」を指定する単一のキー空間許可124にマージされてもよい。
【0030】
次に図2Bを参照し、キー空間参照126の例示的な要素のブロック図を示す。例示の実施形態において、キー空間参照126は、キー空間210、ノード指標220、エポック範囲(epoch range)230、及び状態240を指定する。いくつかの実施形態において、キー空間参照126は、図示されるものとは別様に実装され、例えば、キー空間参照126は、状態240を指定しない場合がある。
【0031】
前述したように、キー空間参照126は、キー空間210に対して書き込む許可がデータベースノード120に授与されるときに作成される場合がある。キー空間参照126が作成されるとき、様々な実施形態において、キー空間参照126のキー空間210は、授与されたキー空間を識別するために設定され、ノード指標220は、関連づけられたデータベースノード120を識別するために設定される。キー空間参照126に含まれる様々な情報は、識別されたキー空間に対して書き込む許可が別のデータベースノード120に授与された後を含む、ある時間にわたり、追加及び更新されてもよい。例えば、キー空間参照126のエポック範囲230(後述)は、キー空間210に対して書き込んだ全てのアクティブなデータベーストランザクション122がコミットするまで、完全な範囲(例えば、上限)を指定しない場合がある。
【0032】
エポック範囲230は、様々な実施形態において、対応するキー空間210に対してデータベースレコード132がコミットされた時間枠を識別する。データベーストランザクション122がコミットされているとき、そのデータベーストランザクション122に関して書き込まれたデータベースレコード132には、トランザクションコミット番号(XCN)をスタンプすることができる。時間においてより前にコミットされているデータベースレコード132は、より後の時間にコミットされたデータベースレコード132のXCNより小さい数値を有するXCNをスタンプされ得る。コミットされたデータベースレコード132は、様々な実施形態において、それらがトリガイベント(例えば、インメモリキャッシュ130が閾値量のデータを記憶すること)に応答してデータベース110にフラッシュされるまで、データベースノード120のインメモリキャッシュ130に残存する。データベースノード120がそのインメモリキャッシュ130をフラッシュするとき、それは、特定のXCN(「フラッシュXCN」と呼ばれる)までの1つ以上のデータベースレコード132をフラッシュしてもよい。様々な実施形態において、エポック範囲230は、最小XCNと最大XCNを指定することにより時間枠を定義する。最小XCNは、キー空間参照126が作成される時の最も最新のフラッシュXCNを識別することができる。例えば、データベースノード120Bは、600未満のXCNを有する全てのデータベースレコード132をフラッシュする場合がある。その後、キー空間参照126がデータベースノード120Bと関連づけて作成される場合、そのキー空間参照126のエポック範囲230の下限は600に設定することができる。
【0033】
最大XCNは、キー空間210に対して、それが別のデータベースノード120に授与される前に書き込んだ、最後のデータベーストランザクション122に関連づけられたXCNを識別することができる。すなわち、データベースノード120が特定のキー空間210を所有する間、それは、そのキー空間210に対するデータベースレコード132を書き込む複数のデータベーストランザクション122を実行することができる。特定のキー空間210は、何らかのポイントで別のデータベースノード120に授与される場合があり、しかしながら、これらのデータベーストランザクション122は、依然としてアクティブである可能性がある。様々な実施形態において、これらのデータベーストランザクション122は、完了することを許容されており、途中で中止されない。これらのデータベーストランザクション122に対応するキー空間参照126のエポック範囲230は、エポック範囲230の最大XCNとして、コミットするこれらのトランザクション122のうち最後のもののXCNを指定するために、更新することができる。最大XCNは、これらのトランザクション122のうち最後のものがコミットするまで設定されない場合があるため、様々な実施形態において、エポック範囲230は、最初に最大XCNに対してヌル値を指定する。結果として、最大XCNがヌル値に設定されている間、エポック範囲230により示される時間枠は、始まりを有するが終わりを有さない場合がある。
【0034】
状態240は、様々な実施形態において、キー空間参照126の、そのライフサイクルにおけるステージを識別する。状態は、「オープン」、「クローズド」、及び「非アクティブ」を含んでもよい。様々な実施形態において、「オープン」状態は、対応するキー空間210に対するレコード書き込みが、対応するノード指標220により示されるデータベースノード120で許可されていることを示す。キー空間参照126が最初に作成されるとき、その状態240は「オープン」に設定されてもよい。様々な実施形態において、「クローズド」状態は、1)キー空間210に対するレコード書き込みが、対応するデータベースノード120で許可されていないこと、及び、2)そのデータベースノード120で依然としてアクティブなデータベーストランザクション122があることを示す。アクティブなデータベーストランザクション122は、様々な実施形態において、データベースノード120がそのインメモリキャッシュ130にデータベースレコード132を書き込んでいる進行中のデータベーストランザクション122を指す。アクティブなデータベーストランザクション122は、そのデータベーストランザクション122に関するデータベースレコード132がコミットしたとき、コミットされたデータベーストランザクション122になり得る。キー空間参照126のキー空間210が別のデータベースノード120にプロビジョニングされているとき、キー空間参照126の状態240は、「クローズド」に設定され得る。様々な実施形態において、「非アクティブ」状態は、キー空間210に関連づけられたアクティブなデータベーストランザクション122が、対応するデータベースノード120でコミットしたことを示す。様々な実施形態において、キー空間参照126に関連づけられたコミットされたデータベースレコード132が、対応するデータベースノード120のインメモリキャッシュ130から永続ストレージ(例えば、データベース110)にフラッシュされた後、キー空間参照126は、削除されてもよい。
【0035】
次に、図3を参照すると、アクティブなデータベーストランザクション122を処理するためにキー空間参照126を使用するデータベースノード120に関連する例示的なレイアウトのブロック図である。例示の実施形態において、データベースノード120Bは、キー空間参照126、インメモリキャッシュ130、及びデータベースアプリケーション300を含む。図示のように、データベースアプリケーション300は、キー空間許可124「XY」を割り当てられ、関連するスナップショットトランザクションコミット番号(スナップショットXCN)310「445」を有するアクティブなデータベーストランザクション122を処理している。さらに図示されるように、3つのキー空間参照126があり、各々、異なるデータベースノード120に関連づけられているが、同じキー空間210「XY」に対応している。いくつかの実施形態において、データベースノード120は、図示されるものとは別様に実装されている。一例として、データベースアプリケーション300は、複数のアクティブなトランザクション122と複数のコミットされたトランザクション122を処理することができる。
【0036】
データベースアプリケーション300は、様々な実施形態において、データベース110を中心として構築されたLSMツリーを管理することを含む、データベース110を管理するために実行可能なプログラム命令のセットである。そのため、データベースアプリケーション300は、データベース110のデータベースレコード132を読み取ること及び/又は書き込むことを含むデータベーストランザクション122を実行する要求を受信することができる。一例として、データベースノード120Bは、アプリケーションノードから、アプリケーションノードにより識別されたSQL文のセットを実行するトランザクション要求を受信する場合がある。トランザクション要求を受信すると、データベースアプリケーション300は、受信したトランザクション要求に基づいてアクティブなデータベーストランザクション122を開始することができる。様々な実施形態において、アクティブなデータベーストランザクション122は、スナップショットXCNに関連づけられる。スナップショットXCNは、様々な実施形態において、対応するデータベースレコード132をアクティブなデータベーストランザクション122により読み取ることができる、最新のXCNを識別する。例えば、例示のアクティブなデータベーストランザクション122は、スナップショットXCN310「445」に関連づけられている。結果として、そのアクティブなデータベーストランザクション122は、「445」以下のXCNを割り当てられているコミットされたデータベースレコード132を読み取ることができる。いくつかの場合、そのXCNが「445」未満であるデータベースレコード132のみを読み取ることができる。
【0037】
以下の議論では、本開示を通じて論じられる概念のより詳細な理解を提供するために一例を用いる。データベースノード120Bが、例示のアクティブなデータベーストランザクション122のために、キー134「XYZ」を有するデータベースレコード132を書き込みたい一例について考える。データベースレコード132を書き込む前、様々な実施形態において、データベースノード120Bは、キー空間参照126を考慮して、スナップショットXCN310「445」を含む時間枠内にキー空間210「XY」に対して別のデータベースノード120が書き込んだかどうかを判断する。開示されているように、キー空間参照126は、カタログマネージャノード140から、カタログ要求142とその後のカタログ応答144を介してアクセスすることができる。データベースノード120Bは、アクティブなデータベーストランザクション122を開始するときにカタログ要求142を発行することができる。いくつかの場合、カタログマネージャノード140は、開始されたデータベーストランザクション122のスナップショットXCN310を包含するエポック範囲230を有するキー空間参照126のみを提供することができる。
【0038】
例示のように、キー空間参照126Aは、データベースノード120Bを識別し、キー空間210「XY」に対してデータベースノード120Bでレコード書き込みが発生すべきであることを示すオープン状態240を有する。したがって、キー空間参照126Aは「書き込み」キー空間参照126と見なされ、一方、キー空間参照126B及び126Cは、それらがキー空間210「XY」に対してレコード書き込みが発生することを前に許容されていた場所を識別するため、「読み取り」キー空間参照126と見なされる。いくつかの場合、データベースノード120Bは、コミットしていないキー134「XYZ」に対するデータベースレコード132を前に書き込んだ可能性がある。そのため、いくつかの実施形態において、データベースノード120Bは、最初に、キー134「XYZ」を有するデータベースレコード132についてインメモリキャッシュ130を検索する。キー134「XYZ」を有するデータベースレコード132が特定された場合、データベースノード120Bは、その特定されたデータベースレコード132に関する新しいデータベースレコード132を書き込むことができる。インメモリキャッシュ130にそのようなデータベースレコード132がない場合、データベースノード120Bは他のキー空間参照126を考慮することができる。
【0039】
さらに例示されるように、キー空間参照126Bは、データベースノード120Aを識別し、オープンのエポック範囲(上限XCNが定義されていない)を有し、コミットしていないキー空間210「XY」に対するデータベースレコード132を書き込んだ可能性のある依然としてアクティブなデータベーストランザクション122があることを示すクローズド状態240を有する。データベースノード120Bは、最初に、スナップショットXCN310「445」がキー空間参照126Bのエポック範囲230内に入るかどうかの判断を行うことができる。スナップショットXCN310「445」がエポック範囲230「390-ヌル」内に入り、キー空間210「XY」に関連づけられた全てのデータベーストランザクション122がコミットしたわけではないため、データベースノード120Aが、データベースノード120Bに知られていないキー134「XYZ」を有するデータベースレコード132を書き込んだ可能性が存在する。結果として、様々な実施形態において、データベースノードBは、キー134「XYZ」に対してデータベースノードAでデータベースレコード132が書き込まれたかどうかを判断する。そのようにするために、データベースノード120Bは、データベースノードAに、データベースノードAがそのようなデータベースレコード132を書き込んだかどうかの指標を要求するレコード要求136を送信することができる。データベースノード120Aは、レコード応答138を返すことができる。レコード応答138が、データベースノード120Aがキー134「XYZ」に対するデータベースレコード132を書き込んだことを示す場合、データベースノード120Bは、アクティブなデータベーストランザクション122(又は、サブトランザクション部分)を中止し、あるいは、キー134「XYZ」に対するそのデータベースレコード132を書き込む前に、その他のデータベースレコード132がコミットするまで待機することができる。レコード応答138は、いくつかの実施形態において、データベースノード120により書き込まれたデータベースレコード132を含む。レコード応答138が、データベースノード120Aがキー134「XYZ」に対するデータベースレコード132を書き込んでいないことを示す場合、データベースノード120Bは、他のキー空間参照126を考慮することができる。
【0040】
例示のように、キー空間参照126Bは、データベースノード120Cを識別し、クローズドのエポック範囲230を有し、データベースノード120Cにおける全てのアクティブなデータベーストランザクション122がコミットされたことを示す非アクティブ状態240を有する。これらのデータベーストランザクション122がコミットされている間、いくつかの場合、対応するデータベースレコード132はデータベース110にフラッシュされておらず、データベースノード120Cのインメモリキャッシュ130に残存している。したがって、データベースノード120Bは、データベースノードCに、データベースノード120Cがキー134「XYZ」に対するデータベースレコード132を書き込んだかどうかの指標のレコード要求136を送信することができる。データベースノード120から受信したレコード応答138に基づいて、データベースノード120Bは、アクティブなデータベーストランザクション122を中止し、あるいは、そのデータベースレコード132を、他のデータベースレコード132がフラッシュされた後に書き込むために、待機することができる。レコード応答138が、データベースノード120Cがキー134「XYZ」に対するレコード132を書き込んでいないことを示す場合、データベースノード120Cは、キー134「XYZ」に関連づけられたさらなるキー空間参照126があり、そのエポック範囲230がスナップショットXCN310「445」を包含している場合、他のキー空間参照126を考慮することができる。
【0041】
次に図4を参照すると、アクティブなデータベーストランザクション122のコミットメント(commitment)に応答してキー空間参照126を更新させるデータベースノード120に関連する例示的なレイアウトのブロック図である。例示の実施形態において、データベースノード120Aは、キー空間参照126、インメモリキャッシュ130、及びデータベースアプリケーション300を含む。図示のように、データベースアプリケーション300は、XCN410「600」でデータベーストランザクション122をコミットしている。
【0042】
以下の議論はデータベースノード120Aを参照して行われるが、この議論は、データベースノード120Bなどの他のデータベースノード120に適用可能である。動作の間、データベースノード120Aは、キー空間210「XY」に対するデータベースレコード132を書き込むためのキー空間許可124を取得することができる。様々な場合に、データベースノード120Aがそのキー空間許可124を保持する間、データベースノード120Aは、キー空間210「XY」に対するデータベースレコード132を書き込む複数のアクティブなデータベーストランザクション122を開始することができる。データベースノード120Aがそれらのデータベーストランザクション122を処理している間、データベースノード120Aは、カタログマネージャノード140から、キー空間210「XY」の一部分又は全てを放棄する要求を受信する場合がある。例えば、データベースノード120Aは、キー空間210「XYZ」を放棄するように要求されることがある。様々な実施形態において、データベースノード120Aは、要求されたキー空間210を放棄するが、そのキー空間210に関連づけられたアクティブなデータベーストランザクション122がコミットすることを可能にする。そのキー空間210に関連づけられた少なくとも1つのアクティブなデータベーストランザクション122がある間、データベースノード120Aは、そのエポック範囲230の上限を定義するために、対応するキー空間参照126(例えば、キー空間210「XY」のキー空間参照126B)を更新しない場合がある。
【0043】
アクティブなデータベーストランザクション122を処理した後、データベースノード120Aは、そのデータベーストランザクション122をコミットすることができ、これは、コミットされたデータベーストランザクション122を結果としてもたらす。コミットメントプロセスの一部として、いくつかの実施形態において、データベースノード120Aは、データベーストランザクション122の各データベースレコード132にXCN410をスタンプする。例示のように、例えば、コミットされたトランザクション122は、XCN410「600」を有する。したがって、コミットされたトランザクション122に関連づけられた各レコード132は、XCN410「600」を識別するメタデータを含むことができる。放棄されたキー空間120に関連づけられた最後のアクティブなトランザクションを処理した後、様々な実施形態において、データベースノード120Aは、対応するキー空間参照126Bのエポック範囲230を、そのデータベーストランザクション122のXCN410で更新する。例示のコミットされたデータベーストランザクション122が、キー空間210「XY」に対するデータベースノード120Aにおける最後のアクティブなトランザクション122であった一例について考える。したがって、データベースノード120Aは、「XCN390-600」を指定するためにキー空間参照126Bのエポック範囲230を、及び、状態240を「非アクティブ」に更新することができる。データベースノード120Aは、カタログマネージャノード140に、キー空間参照140Bの新しいバージョンをシステム100の他のデータベースノード120に配布する参照更新要求404を送信することができる。
【0044】
次に図5を参照し、方法500のフロー図を示す。方法500は、データベーストランザクション(例えば、データベーストランザクション122)を処理することの一部としてデータベースシステム(例えば、システム100)の第1のデータベースノード(例えば、データベースノード120B)により実行される方法の1つの実施形態である。いくつかの場合、方法500は、非一時的コンピュータ読取可能媒体(例えば、メモリ820)に記憶されたプログラム命令を実行することにより実行される場合がある。いくつかの実施形態において、方法500は、図示されているよりもより多くの又は少ないステップを含む。一例として、方法500は、第1のデータベースノードがトランザクション要求元に応答を返すステップを含んでもよい。
【0045】
方法500は、ステップ510において、第1のデータベースノードが、キー空間(例えば、キー空間210)に含まれるキー(例えば、キー134)に対する特定のレコード(例えば、データベースレコード132)を書き込むことを含むデータベーストランザクションを実行する要求を受信することで開始する。データベーストランザクションを実行する要求を受信する前に、第1のデータベースノードは、データベースシステム(例えば、カタログマネージャノード140)に、キー空間に対するレコードを書き込む承認のための許可要求を発行することができる。したがって、第1のデータベースノードは、キー空間に対するレコードを書き込む許可(例えば、キー空間許可124)を受信することができる。いくつかの例において、キー空間に対するアクセス許可は、第2のデータベースノード(例えば、データベースノード120A)から第1のデータベースノードに再プロビジョニングされる場合がある。いくつかの実施形態において、キー空間へのレコードを書き込むことを含む第2のデータベースノード上のアクティブなトランザクションは、キー空間に対するレコードを書き込む許可が第1のデータベースノードにより受信された後にコミットすることを許可されている。いくつかの場合、アクティブなトランザクションの少なくとも1つが、第1のデータベースノードにより許可が受信される前にキー空間へのレコード書き込みを発生させた可能性がある。
【0046】
ステップ520において、第1のデータベースノードは、キー空間がデータベースシステムのデータベースノードによりいつ書き込まれたかの複数の指標(例えば、キー空間参照126)を記憶するキー空間参照カタログ(例えば、ストレージカタログ145)にアクセスする。複数の指標は、キー空間に固有である指標のセットを含むことができる。指標のセットのうちの1つは、キー空間に対するレコードを書き込むことを許可されているデータベースノードを識別することができ、指標のセットのうちの2つ以上が、キー空間に対して書き込まれたレコードを読み取るためのデータベースノードを識別することができる。そのため、特定の指標は、第1のデータベースノードに許可が付与されている間、キー空間への全てのレコード書き込みが第1のデータベースノードにより実行されるべきであることを示すことができる。第1のデータベースノードは、第2のデータベースノードから、第2のデータベースノード上のアクティブなトランザクションの一部としてキー空間に対する特定のレコードを書き込む書き込み要求を受信する場合がある。したがって、第1のデータベースノードは、第2のデータベースノードに特定のレコードを書き込む許可を付与することができる。その後、第2のデータベースノードは、この許可を使用してその書き込みを完遂することができる。
【0047】
いくつかの場合、特定の指標は、キー空間のエポック範囲(例えば、エポック範囲230)を識別することができ、第2のデータベースノードに関連づけられている。第1のデータベースノードは、データベーストランザクションに対応するエポックがエポック範囲内に入るという判断を行うことができる。この判断は、第2のデータベースノードが特定の時間枠内にキー空間に対するレコードを潜在的に(potentially)書き込んだことを示すことができる。いくつかの場合、特定の指標のエポック範囲は、特定の指標にリンクされている最後のアクティブなトランザクションのコミットメントに応答して修正される場合がある。エポック範囲は、特定の指標の修正の前に、エポック範囲の上限のエポックを定義している場合もそうでない場合もある。特定の指標は、キー空間に対して第2のデータベースノードで書き込まれた全てのレコードをデータベースシステムの永続データベース(例えば、データベース110)に記憶した後、削除されてもよい。様々な実施形態において、指標は、コミットされていないワークのため、又は、メインメモリ内にあって永続ストレージにまだフラッシュされていないトランザクションのためにのみ維持される。
【0048】
ステップ530において、第2のデータベースノードが特定の時間枠内にキー空間に対するレコードを潜在的に書き込んだと判断したことに応答して、第1のデータベースノードは、第2のデータベースノードに、第2のデータベースノードが上記キーに対するレコードを書き込んだかどうかを示す情報の要求(例えば、レコード要求136)を送信する。ステップ540において、第2のデータベースノードから受信した応答(例えば、レコード応答138)に基づいて、第1のデータベースノードは、特定のレコードを書き込むかどうかを判断する。いくつかの場合、第2のデータベースノードがキーに対するレコードを書き込んだと判断したことに応答して、第1のデータベースノードは、特定のレコードを書き込むことを含むデータベーストランザクションの少なくとも一部を中止することができる。いくつかの場合、第2のデータベースノードがキーに対するレコードを書き込んだと判断したことに応答して、第1のデータベースノードは、特定のレコードを書き込む前に、第2のデータベースノードにより書き込まれたレコードがコミットされるまで待機することができる。
【0049】
次に図6を参照し、方法600のフロー図を示す。方法600は、データベーストランザクション(例えば、データベーストランザクション122)を処理することの一部としてデータベースシステム(例えば、システム100)により実行される方法の1つの実施形態である。いくつかの場合、方法600は、非一時的コンピュータ読取可能媒体(例えば、メモリ820)に記憶されたプログラム命令を実行することにより実行される場合がある。いくつかの実施形態において、方法600は、図示されているよりもより多くの又は少ないステップを含む。例えば、方法600は、データベースシステムの第1のデータベースノード(例えば、データベースノード120B)がトランザクション要求元に応答を返すステップを含んでもよい。
【0050】
方法600は、ステップ610において、データベースシステムが、キー空間(例えば、キー空間210)に関連する複数の指標(例えば、キー空間参照126)を記憶するキー空間参照カタログ(例えば、ストレージカタログ145)を維持する(maintaining)ことで開始する。ステップ620において、データベースシステムは、キー空間を第1のデータベースノードに割り当てる。様々な場合に、複数の指標のうちの第1の特定の指標は、第1の時間枠(例えば、エポック範囲230)と、キー空間を前に割り当てられていたデータベースシステムの第2のデータベースノード(例えば、データベースノード120A)を識別し、それにより、第2のデータベースノードは、キー空間内にそのキーが入るレコードを第2のデータベースノードで書き込むことを許可されていた。データベースシステムは、キー空間参照カタログに、キー空間に対する全てのレコード書き込みが第1のデータベースノードで発生すべきであることを示すオープン状態(例えば、オープン状態240)を指定する第2の特定の指標を追加することができる。データベースシステムは、第1の特定の指標を更新して、キー空間に対するレコード書き込みが第2のデータベースノードで発生すべきでないことを示すクローズド状態(例えば、クローズド状態240)を指定することができる。いくつかの場合、データベースシステムは、第2のデータベースノードでローリングアップグレードを実行するアップグレード要求を受信し、アップグレード要求を受信したことに応答して割り当てを実行する。
【0051】
ステップ630において、第1のデータベースノードは、キー空間内のキーに対するレコードを書き込むことを含むトランザクションを実行する。この実行することは、ステップ632において、第1のデータベースノードが、第1の特定の指標に基づいて、第1の時間枠がトランザクションに関連づけられた第2の時間枠と重なっていることを判断することを含む。この実行することは、ステップ634において、この判断することに応答して、第1のデータベースノードが、第2のデータベースノードに、キーに対して第2のデータベースノードによりレコードが書き込まれたがコミットされていないかどうかを示す情報の要求(例えば、レコード要求136)を送信することを含む。第2のデータベースノードがキーに対するレコードを書き込んでいないと判断したことに応答して、第1のデータベースノードは特定のレコードを書き込むことができる。
【0052】
例示的なマルチテナントデータベースシステム
次に図7を参照し、本開示の様々な手法を実装可能な例示的なマルチテナントデータベースシステム(MTS)700を示す。例えば、システム100は、MTS700でもよい。図7において、MTS700は、データベースプラットフォーム710、アプリケーションプラットフォーム720、及びネットワーク740に接続されたネットワークインターフェース730を含む。さらに図示するように、データベースプラットフォーム710は、データストレージ712と、データストレージ712と相互作用するデータベースサーバ714A~Nのセットを含み、アプリケーションプラットフォーム720は、それぞれの環境724を有するアプリケーションサーバ722A~Nのセットを含む。例示の実施形態において、MTS700は、ネットワーク740を介して様々なユーザシステム750A~Nに接続されている。開示されるマルチテナントシステムは説明の目的で含まれており、本開示の範囲を制限することを意図していない。他の実施形態において、本開示の手法は、クライアント/サーバ環境、クラウドコンピューティング環境、クラスタ化されたコンピュータなどの非マルチテナント環境で実装される。
【0053】
MTS700は、様々な実施形態において、MTS700と相互作用するユーザ(代替的に、「テナント」と呼ばれる)に様々なサービスを一緒に提供するコンピュータシステムのセットである。いくつかの実施形態において、MTS700は、テナント(例えば、企業、政府機関など)が顧客及び潜在的な顧客とのそれらの関係及び相互作用を管理するためのメカニズムを提供する顧客関係管理(CRM)システムを実装している。例えば、MTS700により、テナントは、顧客連絡先情報(例えば、顧客のウェブサイト、電子メールアドレス、電話番号、及びソーシャルメディアデータ)を記憶し、販売機会を識別し、サービスの問題を記録し、マーケティングキャンペーンを管理することができる場合がある。さらに、MTS700により、これらのテナントは、顧客とどのようにコミュニケーションを図ったか、顧客が何を購入したか、顧客が最後にいつ品目を購入したか、及び顧客が何を支払ったかを識別することができる場合がある。CRMシステムのサービス及び/又は他のサービスを提供するために、図示のように、MTS700は、データベースプラットフォーム710とアプリケーションプラットフォーム720を含む。
【0054】
データベースプラットフォーム710は、様々な実施形態において、テナントデータを含むMTS700のデータを記憶及び管理するためのデータベースサービスを実装するハードウェア要素とソフトウェアルーチンの組み合わせである。図示のように、データベースプラットフォーム710はデータストレージ712を含む。データストレージ712は、様々な実施形態において、ネットワーク上で一緒に接続され(例えば、ストレージアタッチトネットワーク(SAN))、データ損失を防ぐためにデータを冗長に記憶するように構成されたストレージデバイス(例えば、ソリッドステートドライブ、ハードディスクドライブなど)のセットを含む。様々な実施形態において、データストレージ712は、情報のアクセス、記憶、及び操作を可能にする方法で編成されている情報の集合を含むデータベース(例えば、データベース110)を実装するために使用される。データストレージ712は、単一のデータベース、分散データベース、分散データベースの集合、冗長なオンライン若しくはオフラインバックアップ又は他の冗長性を有するデータベースなどを実装することができる。データベースを実装することの一部として、データストレージ712は、それぞれのデータペイロード(例えば、データベーステーブルのフィールドの値)とメタデータ(例えば、キー値、タイムスタンプ、レコードに関連づけられたテーブルのテーブル識別子、レコードに関連づけられたテナントのテナント識別子など)とを有する1つ以上のデータベースレコードを含むファイル(例えば、ファイル115)を記憶することができる。
【0055】
様々な実施形態において、データベースレコードは、テーブルの行に対応することができる。テーブルは一般に、可視のスキーマ内の列又はフィールドとして論理的に配置されている1つ以上のデータカテゴリを含む。したがって、テーブルの各レコードは、フィールドにより定義された各カテゴリのデータのインスタンスを含むことができる。例えば、データベースは、名前、住所、電話番号、FAX番号などの基本的な連絡先情報のフィールドを用いて顧客を記述するテーブルを含む場合がある。したがって、そのテーブルのレコードは、テーブル内にフィールドの各々に対する値(例えば、名前フィールドに対する名前)を含むことができる。別のテーブルが、顧客、製品、販売価格、日付などの情報のフィールドを含む購入注文を記述する場合がある。様々な実施形態において、全てのテナントによる使用のために、各々が予め定義されたフィールドを含むアカウント、連絡先、リード、及び機会データのテーブルなどの、標準のエンティティテーブルが提供される。MTS700は、1つ以上のテナントのためのデータベースレコードを同じテーブルに記憶することができ、すなわち、テナントは、テーブルを共有する場合がある。したがって、データベースレコードは、様々な実施形態において、データベースレコードの所有者を示すテナント識別子を含む。結果として、あるテナントのデータは、安全に、他のテナントのデータとは別個に保持され、それにより、そのあるテナントは、別のテナントのデータが明示的に共有されていない限りそのようなデータにアクセスできない。
【0056】
いくつかの実施形態において、データストレージ712に記憶されたデータは、ログ構造化マージツリー(LSMツリー)の一部として編成されている。LSMツリーは通常、2つの高レベルコンポーネント、すなわちインメモリキャッシュと永続ストレージを含む。動作において、データベースサーバ714は、後にデータベースレコードを永続ストレージ(例えば、データストレージ712)にフラッシュする前に、最初にこれらのレコードをローカルのインメモリキャッシュに書き込むことができる。データベースレコードをフラッシュすることの一部として、データベースサーバ714は、データベースレコードを、LSMツリーの「トップ」レベルに含まれる新しいファイルに書き込むことができる。ある時間にわたり、データベースレコードが、LSMツリーのレベルの下方へ移動されると、データベースレコードは、データベースサーバ714により、より下位レベルに含まれる新しいファイルに再書き込みされる場合がある。様々な実施形態において、データベースレコードが古くなり、LSMツリーの下方へ移動されると、それらは、データストレージ712のますます遅いストレージデバイスに(例えば、ソリッドステートドライブからハードディスクドライブへ)移動される。
【0057】
データベースサーバ714が、特定のキーに対するデータベースレコードにアクセスしたいとき、データベースサーバ714は、その特定のキーに対するデータベースレコードを潜在的に含むファイルについて、LSMツリーの異なるレベルをトラバースすることができる。データベースサーバ714が、あるファイルが関連するデータベースレコードを含む可能性があると判断した場合、データベースサーバ714は、そのファイルをデータストレージ712からデータベースサーバ714のメモリにフェッチすることができる。次いで、データベースサーバ714は、特定のキーを有するデータベースレコードについて、フェッチされたファイルをチェックすることがある。様々な実施形態において、データベースレコードは、ひとたびデータストレージ712に書き込まれると不変(immutable)である。したがって、データベースサーバ714が、テーブルの行(これは、アクセスされたデータベースレコードから識別され得る)の値を修正したい場合、データベースサーバ714は、新しいデータベースレコードをLSMツリーのトップレベルに書き出す。ある時間にわたり、そのデータベースレコードは、LSMツリーのレベルの下方へマージされる。したがって、LSMツリーは、あるデータベースキーに対する様々なデータベースレコードを記憶することができ、これにおいて、そのキーに対するより古いデータベースレコードは、より新しいデータベースレコードよりも、LSMツリーのより下位レベルに配置されている。
【0058】
データベースサーバ714は、様々な実施形態において、データ記憶、データ取り出し、及び/又はデータ操作などのデータベースサービスを提供することができるハードウェア要素、ソフトウェアルーチン、又はこれらの組み合わせである。データベースサーバ714は、データベースノード120に対応することができる。このようなデータベースサービスは、データベースサーバ714により、MTS700内のコンポーネント(例えば、アプリケーションサーバ722)に、及びMTS700の外部コンポーネントに提供することができる。一例として、データベースサーバ714は、アプリケーションサーバ722から、データがデータストレージ712に書き込まれ又はデータストレージ712から読み取られるよう要求しているデータベーストランザクション要求を受信する場合がある。データベーストランザクション要求は、1つ以上のデータベーステーブルから1つ以上の行を選択するSQL SELECTコマンドを指定することができる。行の内容は、データベースレコードで定義される場合があり、したがって、データベースサーバ714は、選択された1つ以上のテーブル行に対応する1つ以上のデータベースレコードを特定し、返すことができる。様々な場合に、データベーストランザクション要求は、データベースサーバ714に、LSMツリーに対する1つ以上のデータベースレコードを書き込むように指示することができ、データベースサーバ714は、データベースプラットフォーム710に実装されたLSMツリーを維持する。いくつかの実施形態において、データベースサーバ714は、データストレージ712に対する情報の記憶及び取り出しを容易にする関係データベース管理システム(RDMS)又はオブジェクト指向データベース管理システム(OODBMS)を実装している。様々な場合に、データベースサーバ714は、トランザクションの処理を容易にするために互いに通信することができる。例えば、データベースサーバ714Aは、データベースサーバ714Nと通信して、データベースサーバ714Nが特定のキーに対してデータベースレコードをそのインメモリキャッシュに書き込んだかを判断することができる。
【0059】
アプリケーションプラットフォーム720は、様々な実施形態において、CRMソフトウェアアプリケーションを実装及び実行し、並びにユーザシステム750との間で関連データ、コード、フォーム、ウェブページ、及び他の情報を提供し、データベースプラットフォーム710を介して関連データ、オブジェクト、ウェブページコンテンツ、及び他のテナント情報を記憶するハードウェア要素とソフトウェアルーチンの組み合わせである。これらのサービスを容易にするために、様々な実施形態において、アプリケーションプラットフォーム720は、データを記憶、アクセス、及び操作するためにデータベースプラットフォーム710と通信する。いくつかの例において、アプリケーションプラットフォーム720は、異なるネットワーク接続を介してデータベースプラットフォーム710と通信することができる。例えば、あるアプリケーションサーバ722はローカルエリアネットワークを介して結合される場合があり、別のアプリケーションサーバ722は直接ネットワークリンクを介して結合される場合がある。転送制御プロトコル及びインターネットプロトコル(TCP/IP)は、アプリケーションプラットフォーム770とデータベースプラットフォーム710との間で通信するための例示的なプロトコルであるが、当業者には、使用されるネットワーク相互接続に応じて他のトランスポートプロトコルが使用されてもよいことが明らかであろう。
【0060】
アプリケーションサーバ722は、様々な実施形態において、MTS700のテナントから受信した要求を処理することを含むアプリケーションプラットフォーム720のサービスを提供することができるハードウェア要素、ソフトウェアルーチン、又はこれらの組み合わせである。アプリケーションサーバ722は、様々な実施形態において、開発者がアプリケーション(例えば、ビジネスロジック)を開発、実行、及び管理するための機能を提供することなどの様々な目的に使用可能である環境724をスポーンする(spawn)ことができる。データは、環境724に、別の環境724から、及び/又はデータベースプラットフォーム710から転送される場合がある。いくつかの場合、環境724は、他の環境724からのデータが明示的に共有されていない限りそのようなデータにアクセスできない。いくつかの実施形態において、複数の環境724を単一のテナントに関連づけることができる。
【0061】
アプリケーションプラットフォーム720は、ユーザシステム750に、CRMアプリケーション及び/又はテナントにより開発されたアプリケーションを含む、複数の異なるホストされた(標準及び/又はカスタムの)アプリケーションへのアクセスを提供することができる。様々な実施形態において、アプリケーションプラットフォーム720は、アプリケーションの作成、アプリケーションのテスト、データストレージ712におけるデータベースオブジェクトへのアプリケーションの記憶、環境724(例えば、プロセス空間の仮想マシン)におけるアプリケーションの実行、又はこれらの任意の組み合わせを管理することができる。いくつかの実施形態において、アプリケーションプラットフォーム720は、任意の理由でいつでもサーバプールからアプリケーションサーバ722を追加及び除去することができ、特定のアプリケーションサーバ722に対するユーザ及び/又は組織のサーバアフィニティがない場合がある。いくつかの実施形態において、ロードバランシング機能(例えば、F5 Big-IPロードバランサ)を実装するインターフェースシステム(図示せず)が、アプリケーションサーバ722とユーザシステム750の間に配置され、アプリケーションサーバ722への要求を分散させるように動作する。いくつかの実施形態において、ロードバランサは、最小接続アルゴリズムを使用してユーザ要求をアプリケーションサーバ722にルーティングする。ラウンドロビン及び観測された応答時間などの、ロードバランシングアルゴリズムの他の例を使用することもできる。例えば、特定の実施形態において、同じユーザからの3つの連続した要求が3つの異なるサーバ722に行き当たる可能性があり、異なるユーザからの3つの要求が同じサーバ722に行き当たる可能性がある。
【0062】
いくつかの実施形態において、MTS700は、データが共有されていない限り各テナントのデータを別個に保持するために、暗号化などのセキュリティメカニズムを提供する。複数のサーバ714又は722が使用される場合、それらは互いに近く近接して配置される場合があり(例えば、1つの建物又はキャンパス内に配置されたサーバファーム内)、あるいは、それらは互いから遠隔の場所に分散される場合がある(例えば、1つ以上のサーバ714が都市Aに配置され、1つ以上のサーバ722が都市Bに配置される)。したがって、MTS700は、ローカルで又は1つ以上の地理的な場所に分散された、1つ以上の論理的及び/又は物理的に接続されたサーバを含むことができる。
【0063】
1以上のユーザ(例えば、ユーザシステム750を介して)が、ネットワーク740を介してMTS700と相互作用することができる。ユーザシステム750は、例えば、MTS700のテナント、MTS700のプロバイダ(例えば、管理者)、又はサードパーティに対応することができる。各ユーザシステム750は、デスクトップパーソナルコンピュータ、ワークステーション、ラップトップ、PDA、セルフォン、又は任意の無線アクセスプロトコル(WAP)対応デバイス、又は、インターネット又は他のネットワーク接続に直接又は間接的にインターフェースすることができる任意の他のコンピューティングデバイスでもよい。ユーザシステム750は、ネットワーク740を通じてMTS700とインターフェースするように構成された専用ハードウェアを含むことができる。ユーザシステム750は、MTS700、HTTPクライアント(例えば、Microsoft(登録商標)のInternet ExplorerTMブラウザ、NetscapeのNavigatorTMブラウザ、Opera(登録商標)のブラウザ、又は、セルフォン、PDA、又は他の無線デバイスの場合におけるWAP対応ブラウザなどのブラウジングプログラム)、又は双方に対応するグラフィカルユーザインターフェース(GUI)を実行し、ユーザシステム750のユーザ(例えば、CRMシステムの加入者)がネットワーク740を通じてMTS700からそれに利用可能な情報及びページにアクセス、処理、及び閲覧することを可能にする。各ユーザシステム750は、MTS700又は他のシステム若しくはサーバにより提供されるページ、フォーム、及び他の情報と関連してディスプレイモニタ画面、LCDディスプレイなどにブラウザにより提供されるグラフィカルユーザインターフェース(GUI)と相互作用するために、キーボード、マウス、タッチスクリーン、ペンなどの1つ以上のユーザインターフェースデバイスを含むことができる。上記で論じたように、開示された実施形態は、ネットワークの特定のグローバルなインターネットワークを指すインターネットでの使用に適している。しかしながら、インターネットの代わりに、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、非TCP/IPベースのネットワーク、任意のLAN又はWANなどの他のネットワークが使用されてもよいことを理解されたい。
【0064】
ユーザシステム750のユーザは、異なるキャパシティにおけるユーザである可能性があるため、特定のユーザシステム750のキャパシティは、現在のユーザに関連づけられた1つ以上の許可レベルを決定されてもよい。例えば、販売員が、MTS700と相互作用するために特定のユーザシステム750を使用しているとき、そのユーザシステム750は、その販売員に割り当てられたキャパシティ(例えば、ユーザ特権)を有することができる。しかし、管理者が、MTS700と相互作用するために同じユーザシステム750を使用しているとき、このユーザシステム750は、その管理者に割り当てられたキャパシティ(例えば、管理者特権)を有することができる。階層ロールモデルを有するシステムでは、ある許可レベルにおけるユーザは、より低い許可レベルのユーザによりアクセス可能なアプリケーション、データ、及びデータベース情報にアクセスすることができる場合があるが、より高い許可レベルにおけるユーザによりアクセス可能な特定のアプリケーション、データベース情報、及びデータにはアクセスできない場合がある。したがって、異なるユーザは、ユーザのセキュリティ又は許可レベルに応じて、アプリケーション及びデータベース情報にアクセス及び修正することに関して異なる能力を有することができる。さらに、テナントレベルで割り振られている、MTS700により管理されるいくつかのデータ構造があってもよく、一方で、他のデータ構造がユーザレベルで管理される。
【0065】
いくつかの実施形態において、ユーザシステム750とそのコンポーネントは、1つ以上の処理要素上で実行可能なコンピュータコードを含むブラウザなどのアプリケーションを使用して構成可能である。同様に、いくつかの実施形態において、MTS700(及び、複数が存在する場合にはMTSのさらなるインスタンス)とそれらのコンポーネントは、処理要素上で実行可能なコンピュータコードを含むアプリケーションを使用してオペレータ構成可能である。したがって、本明細書で説明される様々な動作は、非一時的コンピュータ読取可能媒体に記憶された、処理要素により実行されるプログラム命令を実行することにより実行されてもよい。プログラム命令は、ハードディスクなどの不揮発性媒体に記憶されてもよく、あるいは、ROM又はRAMなどのよく知られている任意の他の揮発性又は不揮発性のメモリ媒体又はデバイスに記憶され、あるいはコンパクトディスク(CD)媒体、デジタル多用途ディスク(DVD)媒体、フロッピーディスクなどのプログラムコードを記憶することができる任意の媒体で提供されてもよい。さらに、プログラムコード全体又はその部分が、よく知られているように、ソフトウェアソースから、例えばインターネットを通じて、又は別のサーバから伝送され、ダウンロードされてもよく、あるいは、よく知られている任意の通信媒体及びプロトコル(例えば、TCP/IP、HTTP、HTTPS、イーサネットなど)を使用して、よく知られている任意の他の従来のネットワーク接続(例えば、エクストラネット、VPN、LANなど)を通じて伝送されてもよい。さらに、開示された実施形態の態様を実装するためのコンピュータコードは、例えばC、C+、HTML、Java(登録商標)、JavaScript(登録商標)、又はVBScriptなどの他の任意のスクリプト言語などの、サーバ又はサーバシステム上で実行可能な任意のプログラミング言語で実装することができることを理解されたい。
【0066】
ネットワーク740は、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、無線ネットワーク、ポイントツーポイントネットワーク、スターネットワーク、トークンリングネットワーク、ハブネットワーク、又は任意の他の適切な構成でもよい。大文字の「I」を有する「インターネット」でしばしば参照される、ネットワークのグローバルなインターネットワークは、TCP/IP(転送制御プロトコル及びインターネットプロトコル)ネットワークの1つの例である。しかしながら、開示された実施形態は、ネットワークの様々な他のタイプのうち任意のものを利用してもよいことを理解されたい。
【0067】
ユーザシステム750は、TCP/IPを使用してMTS700と通信し、より高いネットワークレベルでは、HTTP、FTP、AFS、WAPなどの、通信するための他の一般的なインターネットプロトコルを使用することができる。例えば、HTTPが使用される場合、ユーザシステム750は、MTS700におけるHTTPサーバからHTTPメッセージを送信及び受信するための、一般に「ブラウザ」と呼ばれるHTTPクライアントを含むことができる。このようなサーバは、MTS700とネットワーク740との間の単なるネットワークインターフェースとして実装される場合があるが、他の手法が同様に又は代わりに使用されてもよい。いくつかの実装において、MTS700とネットワーク740との間のインターフェースは、負荷のバランスをとり、入ってくるHTTP要求を複数のサーバにわたり均等に分散させるラウンドロビンHTTP要求分散器などの、ロードシェアリング機能を含む。
【0068】
様々な実施形態において、ユーザシステム750は、データストレージ712への1つ以上のクエリを必要とする可能性のあるMTS700からのシステムレベル及びテナントレベルのデータを要求及び更新するために、アプリケーションサーバ722と通信する。いくつかの実施形態において、MTS700は、所望の情報にアクセスするように設計された1つ以上のSQL文(SQLクエリ)を自動的に生成する。いくつかの場合、ユーザシステム750は、MTS700の少なくとも一部に対応する特定のフォーマットを有する要求を生成することができる。一例として、ユーザシステム750は、指定された複数のオブジェクトのオブジェクト関係マッピング(例えば、JavaScript object notationマッピング)を記述するオブジェクト表記を使用して、データオブジェクトを特定の環境724に移動するように要求することができる。
【0069】
例示的なコンピュータシステム
次に図8を参照し、システム100、データベース110、データベースノード120、MTS700、及び/又はユーザシステム750を実装することができる例示的なコンピュータシステム800のブロック図を示す。コンピュータシステム800は、インターコネクト860(例えば、システムバス)を介してシステムメモリ820及びI/Oインターフェース840に結合されたプロセッササブシステム880を含む。I/Oインターフェース840は、1つ以上のI/Oデバイス850に結合される。簡便さのため、図8には単一のコンピュータシステム800を示しているが、システム800は、一緒に動作する複数のコンピュータシステムとして実装されてもよい。
【0070】
プロセッササブシステム880は、1つ以上のプロセッサ又は処理ユニットを含むことができる。コンピュータシステム800の様々な実施形態において、プロセッササブシステム880の複数のインスタンスがインターコネクト860に結合されてもよい。様々な実施形態において、プロセッササブシステム880(又は、880内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含んでもよい。
【0071】
システムメモリ820は、本明細書で説明される様々な動作をシステム800に実行させるために、プロセッササブシステム880により実行可能なプログラム命令を記憶するために使用可能である。システムメモリ820は、ハードディスクストレージ、フロッピーディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM、すなわち、SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読取専用メモリ(PROM、EEPROM等)などの、異なる物理メモリ媒体を使用して実装されてもよい。コンピュータシステム800のメモリは、メモリ820などの一次記憶装置に限定されない。むしろ、コンピュータシステム800は、プロセッササブシステム880内のキャッシュメモリ及びI/Oデバイス850(例えば、ハードドライブ、ストレージアレイ等)上の二次記憶装置などの他の形態の記憶装置をさらに含んでもよい。いくつかの実施形態において、これらの他の形態の記憶装置も、プロセッササブシステム880により実行可能なプログラム命令を記憶してもよい。いくつかの実施形態において、実行されたときにデータベースアプリケーション146を実現するプログラム命令は、システムメモリ820内に含まれ/記憶されてもよい。
【0072】
I/Oインターフェース840は、様々な実施形態に従い、他のデバイスに結合し、通信するように構成された様々なタイプのインターフェースのいずれかでもよい。1つの実施形態において、I/Oインターフェース840は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップ(例えば、サウスブリッジ)である。I/Oインターフェース840は、1つ以上の対応するバス又は他のインターフェースを介して、1つ以上のI/Oデバイス850に結合されてもよい。I/Oデバイス850の例には、ストレージデバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、又はそれらの関連するコントローラ)、ネットワークインターフェースデバイス(例えば、ローカル又はワイドエリアネットワークに対する)、又は他のデバイス(例えば、グラフィックス、ユーザインターフェースデバイス等)が含まれる。1つの実施形態において、コンピュータシステム800は、ネットワークインターフェースデバイス850(例えば、WiFi、Bluetooth(登録商標)、イーサネットなどを通じて通信するように構成される)を介してネットワークに結合される。
【0073】
本出願の対象事項の実現には、これらに限られないが以下の例1~20が含まれる。
1. データベースシステムの第1のデータベースノードにより、キー空間に含まれるキーに対する特定のレコードを書き込むことを含むデータベーストランザクションを実行する要求を受信するステップと、
前記第1のデータベースノードにより、前記データベースシステムのデータベースノードによりキー空間がいつ書き込まれたかの複数の指標を記憶するキー空間参照カタログにアクセスするステップと、
第2のデータベースノードが特定の時間枠内に前記キー空間に対するレコードを書き込んだと判断したことに応答して、前記第1のデータベースノードが、前記第2のデータベースノードに、前記第2のデータベースノードが前記キーに対するレコードを書き込んだかどうかを示す情報の要求を送信するステップと、
前記第2のデータベースノードから受信した応答に基づいて、前記第1のデータベースノードが、前記特定のレコードを書き込むかどうかを判断するステップと、
を含む方法。
2. 前記データベーストランザクションを実行する前記要求を受信する前に、前記第1のデータベースノードが、
前記データベースシステムに、前記キー空間に対するレコードを書き込む承認のための許可要求を発行するステップと、
前記キー空間に対するレコードを書き込む許可を受信するステップであり、前記許可は、前記第2のデータベースノードから前記第1のデータベースノードに移転される、ステップと、
をさらに含む、例1に記載の方法。
3. 前記キー空間へのレコードを書き込むことを含む前記第2のデータベースノード上のアクティブなトランザクションは、前記キー空間に対するレコードを書き込む前記許可が前記第1のデータベースノードにより受信された後にコミットすることを許可されており、前記アクティブなトランザクションの少なくとも1つが、前記許可が前記第1のデータベースノードにより受信される前に前記キー空間に対するレコード書き込みを引き起こしたものである、例2に記載の方法。
4. 前記複数の指標のうちの特定の指標は、前記許可が前記第1のデータベースノードに付与されている間、前記特定の指標により識別される前記キー空間への全てのレコード書き込みが前記第1のデータベースノードにより実行されるべきであることを示す、例2に記載の方法。
5. 前記第2のデータベースノード上のアクティブなトランザクションの一部として前記キー空間に対するレコードを前記第2のデータベースノードが書き込むことを許可するために、前記第2のデータベースノードに対して前記許可を放棄する放棄要求を、前記第1のデータベースノードにより受信するステップと、
前記第1のデータベースノードにより、前記放棄要求に応答して前記許可を放棄するステップと、
をさらに含む、例4に記載の方法。
6. 前記複数の指標のうちの特定の指標が、前記キー空間に対するエポック範囲を識別し、前記第2のデータベースノードに関連づけられており、当該方法は、
前記第1のデータベースノードにより、前記データベーストランザクションに対応するエポックが前記エポック範囲内に入るという判断を行うステップであり、前記判断は、前記第2のデータベースノードが前記特定の時間枠内に前記キー空間に対するレコードを書き込んだことを示す、ステップ
をさらに含む、例1に記載の方法。
7. 前記特定の指標にリンクされている最後のアクティブなトランザクションのコミットメントに応答して前記エポック範囲を修正するステップであり、前記エポック範囲は、前記修正の前に前記エポック範囲の上限のエポックを定義していない、ステップ
をさらに含む、例6に記載の方法。
8. 前記キー空間に対して前記第2のデータベースノードで書き込まれた全てのレコードを前記データベースシステムの永続データベースに記憶した後、前記特定の指標を削除するステップ
をさらに含む、例6に記載の方法。
9. 前記複数の指標は、前記キー空間に対する指標のセットを含み、前記指標のセットのうちの1つは、前記キー空間に対するレコードを書き込むことを許可されたデータベースノードを識別し、前記指標のセットのうちの2つ以上が、前記キー空間に対して書き込まれたレコードを読み取るためのデータベースノードを識別する、例1に記載の方法。
10. 前記第2のデータベースノードが前記キーに対するレコードを書き込んだと判断したことに応答して、前記第1のデータベースノードが、前記特定のレコードを書き込むことを含む前記データベーストランザクションの少なくとも一部を中止するステップ
をさらに含む、例1に記載の方法。
11. データベースシステムの第1のデータベースノードに動作を実行させるために前記第1のデータベースノードにより実行可能であるプログラム命令を記憶させた非一時的コンピュータ読取可能媒体であって、前記動作は、
キー空間に含まれるキーに対する特定のレコードを書き込むことを含むデータベーストランザクションを実行する要求を受信することと、
前記データベースシステムのデータベースノードによりキー空間がいつ書き込まれたかの複数の指標を記憶するキー空間参照カタログにアクセスすることと、
第2のデータベースノードが特定の時間枠内に前記キー空間に対するレコードを書き込んだと判断したことに応答して、前記第2のデータベースノードに、前記第2のデータベースノードが前記キーに対するレコードを書き込んだかどうかを示す情報の要求を送信することと、
前記第2のデータベースノードから受信した応答に基づいて、前記特定のレコードを書き込むかどうかを判断することと、
を含む、媒体。
12. 前記第2のデータベースノードに対応する前記複数の指標のうちの特定の指標が、最小キーと最大キーにより前記キー空間を識別し、前記特定の指標は、前記特定の時間枠を包含する時間枠を指定している、例11に記載の媒体。
13. 前記動作は、
前記第1のデータベースノードで前記キー空間に対するレコードを書き込む承認を要求することと、
前記キー空間に対するレコードを書き込む許可を受信することと、
前記キー空間参照カタログに特定の指標を記憶させることであり、前記特定の指標は、前記キー空間に対する全てのレコード書き込みが前記第1のデータベースノードで発生すべきであることを示す、ことと、
をさらに含む、例11に記載の媒体。
14. 前記動作は、
前記キー空間に含まれる前記キーに対する別の特定のレコードを書き込むことを含む別のデータベーストランザクションを実行することと、
前記キー空間参照カタログを使用し、前記キー空間に対するレコードを書き込む前記許可が第3のデータベースノードに移転されたと判断することと、
前記第3のデータベースノードに、前記別の特定のレコードを書き込む書き込み要求を送信することと、
をさらに含む、例13に記載の媒体。
15. 前記動作は、
前記第2のデータベースノードが前記キーに対するレコードを書き込んだと判断したことに応答して、前記特定のレコードを書き込む前に、前記第2のデータベースノードにより書き込まれた前記レコードがコミットされるまで待機すること
をさらに含む、例11に記載の媒体。
16. データベースシステムにより、キー空間に関連する複数の指標を記憶するキー空間参照カタログを維持するステップと、
前記データベースシステムにより、前記データベースシステムの第1のデータベースノードにキー空間を割り当てるステップであり、前記複数の指標のうちの第1の特定の指標は、第1の時間枠と、前記キー空間を前に割り当てられていた前記データベースシステムの第2のデータベースノードを識別し、それにより、前記第2のデータベースノードは、前記キー空間内にそのキーが入るレコードを前記第2のデータベースノードで書き込むことを許可されていた、ステップと、
前記第1のデータベースノードにより、前記キー空間のキーに対するレコードを書き込むことを含むトランザクションを実行するステップであり、前記実行することは、
前記第1の特定の指標に基づいて、前記第1の時間枠が前記トランザクションに関連づけられた第2の時間枠と重なっていることを判断することと、
前記判断することに応答して、前記第2のデータベースノードに、前記キーに対して前記第2のデータベースノードによりレコードが書き込まれたがコミットされていないかどうかを示す情報の要求を送信するステップと、
を含む方法。
17. 前記データベースシステムにより、前記第2のデータベースノードでローリングアップグレードを実行するアップグレード要求を受信するステップであり、前記割り当てることは、前記アップグレード要求を受信したことに応答して実行される、ステップと
をさらに含む、例16に記載の方法。
18. 前記割り当てることは、
前記データベースシステムにより、前記キー空間参照カタログに第2の特定の指標を追加することであり、前記第2の特定の指標は、前記キー空間に対する全てのレコード書き込みが前記第1のデータベースノードで発生すべきであることを示すオープン状態を指定している、ことと、
前記データベースシステムにより、前記第1の特定の指標を、前記キー空間に対するレコード書き込みが前記第2のデータベースノードで発生すべきでないことを示すクローズド状態を指定するために、更新することと、
を含む、例16に記載の方法。
19. 前記実行することは、
前記キー空間参照カタログに基づいて、前記複数の指標のうち少なくとも2つが前記キー空間に関連すると判断することであり、前記少なくとも2つの指標は前記第1の特定の指標を含む、ことと、
前記少なくとも2つの指標のうち前記第1の特定の指標とは異なる指標により識別される時間枠が前記第2の時間枠と重なっていると判断したことに応答して、第3のデータベースノードに、前記キーに対して前記第3のデータベースノードによりレコードが書き込まれたがコミットされていないかどうかを示す情報の要求を送信することと、
を含む、例16に記載の方法。
20. 前記第2のデータベースノードが前記キーに対するレコードを書き込んでいないと判断したことに応答して、前記第1のデータベースノードが前記特定のレコードを書き込む、例16に記載の方法。
【0074】
本開示は、開示された概念の非限定的な実装である「実施形態」への参照を含む。「一実施形態」、「1つの実施形態」、「特定の実施形態」、「いくつかの実施形態」、「様々な実施形態」等への参照は、必ずしも同じ実施形態を指すわけではない。詳細に説明された特定の実施形態、並びに本開示の主旨又は範囲内に入る修正又は代替を含む、多数の可能な実施形態が考えられる。全ての実施形態が、必ずしも本明細書で説明された潜在的な利点のいずれか又は全てを示すわけではない。
【0075】
本開示は、「一実施形態」又は「実施形態」のグループ(例えば、「いくつかの実施形態」又は「様々な実施形態」)への参照を含む。実施形態は、開示された概念の異なる実装又はインスタンスである。「一実施形態」、「1つの実施形態」、「特定の実施形態」などへの参照は、必ずしも同じ実施形態を指すわけではない。具体的に開示されたもの、並びに本開示の主旨又は範囲内に入る修正又は代替を含む、多数の可能な実施形態が考えられる。
【0076】
本開示は、開示された実施形態から生じる可能性のある潜在的な利点を論じる場合がある。これらの実施形態の全ての実装が、必ずしも潜在的な利点のいずれか又は全てを示すわけではない。特定の実装に対して利点が実現されるかどうかは多くのファクタに依存し、そのいくつかは本開示の範囲外である。実際、特許請求の範囲の範囲内に入る実装が、開示された利点の一部又は全部をなぜ提示しない可能性があるのかの、いくつかの理由がある。例えば、特定の実装が、開示された実施形態の1つに関連して、1つ以上の開示された利点を打ち消し又は減らす、本開示の範囲外の他の回路を含む可能性がある。さらに、特定の実装(例えば、実装手法又はツール)の準最適な設計実行も、開示された利点を打ち消し又は減らす可能性がある。熟練した実装を仮定しても、利点の実現は、実装が配備される環境状況などの他のファクタに依然として依存する可能性がある。例えば、特定の実装に供給される入力は、本開示で対処される1つ以上の問題が特定の機会に生じるのを防ぐ可能性があり、その結果、その解決策の利益が実現されない可能性がある。本開示の外部のあり得るファクタの存在を前提として、本明細書に記載される潜在的な利点は、侵害を証明するために満たされなければならない請求項の制限として解釈されるべきではないことが、明示的に意図されている。むしろ、そのような潜在的な利点の識別は、本開示の利益を有する設計者にとって利用可能な向上のタイプを例示することを意図している。そのような利点が許容的に説明されていること(例えば、特定の利点が「生じる可能性がある」と述べること)は、そのような利点を実際に実現することができるかどうかについての疑いを伝えることを意図しているわけではなく、むしろ、そのような利点の実現がしばしばさらなるファクタに依存するという技術的な現実性を認識することを意図している。
【0077】
別段示されない限り、実施形態は非限定的である。すなわち、開示された実施形態は、特定の特徴に関して単一の例のみが説明されている場合でも、本開示に基づいて起草される請求項の範囲を制限することを意図していない。開示された実施形態は、開示において反対の記述がない限り、限定的ではなく例示的であることを意図している。したがって、本出願は、開示された実施形態、並びに本開示の利益を有する当業者には明らかであろう代替、修正、及び同等物をカバーする特許請求の範囲を可能にすることを意図している。
【0078】
例えば、本出願における特徴は、任意の適切な方法で組み合わせられてもよい。したがって、本出願(又は、これに対する優先権を主張する出願)の手続きの間、任意のこのような特徴の組み合わせに対して、新しい請求項を立てることができる。特に、添付された特許請求の範囲を参照して、従属請求項からの特徴は、他の独立請求項に従属する請求項を含め、適切な場合には他の従属請求項の特徴と組み合わせることができる。同様に、それぞれの独立請求項からの特徴は、適切な場合には組み合わせることができる。
【0079】
したがって、添付された従属請求項は、各々が1つの他の請求項に従属するように起草される場合があるが、さらなる依存関係も考えられる。本開示と矛盾しない従属における特徴の任意の組み合わせが考えられ、この又は別の出願で請求される場合がある。要するに、組み合わせは、添付された特許請求の範囲に具体的に列挙されているものに限定されない。
【0080】
適切な場合には、さらに、ある形式又は法定タイプ(例えば、装置)で起草された請求項は、別の形式又は法定タイプ(例えば、方法)の対応する請求項をサポートすることを意図していると考えらる。
【0081】
本開示は法的文書であるため、様々な用語及びフレーズが行政的及び司法的解釈の対象となる場合がある。本開示に基づいて起草された請求項を解釈する方法を判断する際には、以下の段落、並びに本開示全体を通して提供される定義を使用すべきであるという公告がここで与えられる。
【0082】
項目の単数形(すなわち、「a」、「an」、又は「the」が前にある名詞又は名詞句)への参照は、別段文脈が明確に示さない限り、「1つ以上」を意味することを意図している。したがって、請求項における「項目」への参照は、付随する文脈なしには、項目のさらなるインスタンスを排除しない。「複数」の項目は、2つ以上のその項目のセットを指す。
【0083】
語「する場合がある(may)」は、本明細書において許容的な意味(すなわち、潜在性を有すること、可能であること)で使用され、強制的な意味(すなわち、しなければならない(must))では使用されない。
【0084】
用語「含む(comprising)」及び「含む(including)」並びにそれらの形式は、無制限であり、「を含むがこれらに限定されない」を意味する。
【0085】
本開示において、選択肢のリストに関して用語「又は」が用いられるとき、それは一般に、別段文脈が規定しない限り、包括的な意味で使用されるものと理解される。したがって、「x又はy」の記載は、「x又はy、又は双方、」と同等であり、したがって、1)xはあるがyはない、2)yはあるがxはない、及び3)xとyの双方をカバーする。一方、「x又はyのいずれかであるが双方ではない」などのフレーズは、「又は」が排他的な意味で用いられていることを明確にしている。
【0086】
「w、x、y、又はz、又はこれらの任意の組み合わせ」又は「... w、x、y、及びzのうち少なくとも1つ」の記載は、セット内の要素の合計数まで、単一の要素を含む全ての可能性をカバーすることを意図している。例えば、セット[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つのインスタンスがあることを要求するものと解釈されるべきではない。
【0087】
本開示において、様々な「ラベル」が名詞又は名詞句の前にある場合がある。別段文脈が規定しない限り、特徴に対して使用される異なるラベル(例えば、「第1の回路」、「第2の回路」、「特定の回路」、「所与の回路」など)は、この特徴の異なるインスタンスを指す。さらに、特徴に適用されたとき、ラベル「第1の」、「第2の」、及び「第3の」は、別段示されない限り、いかなるタイプの順序付け(例えば、空間的、時間的、論理的など)も意味しない。
【0088】
フレーズ「に基づく」又はは、決定に影響を与える1つ以上のファクタを説明するために用いられる。この用語は、さらなるファクタが決定に影響を与え得る可能性を排除するわけではない。すなわち、決定は、指定されたファクタのみに基づく場合があり、あるいは、指定されたファクタと、他の指定されていないファクタに基づく場合がある。フレーズ「Bに基づいてAを決定する」について考える。このフレーズは、Bが、Aを決定するために使用されるか又はAの決定に影響を与えるファクタであることを指定している。このフレーズは、Aの決定が、Cなどの何らかの他のファクタにさらに基づく可能性があることを排除するわけではない。このフレーズは、AがBのみに基づいて決定される実施形態をカバーすることも意図している。本明細書で用いられるとき、フレーズ「に基づく」は、「に少なくとも部分的に基づく」と同義的である。
【0089】
フレーズ「に応答して」及び「に応じて」は、効果を引き起こす1つ以上のファクタを説明している。このフレーズは、さらなるファクタが、指定されたファクタと連帯的に又は指定されたファクタから独立してのいずれかで、効果に影響を与え、あるいはその他の方法で効果をトリガし得る可能性を排除するわけではない。すなわち、効果は、それらのファクタにのみ応答したものである場合があり、あるいは、指定されたファクタと、他の指定されていないファクタに応答したものである場合がある。フレーズ「Bに応答してAを実行する」について考える。このフレーズは、Bが、Aの実行をトリガするか又はAの特定の結果をトリガするファクタであることを指定している。このフレーズは、Aを実行することが、Cなどの何らかの他のファクタにさらに応答したものである可能性があることを排除するわけではない。このフレーズはさらに、Aを実行することが、連帯的にB及びCに応答したものである可能性があることを排除するわけではない。このフレーズはさらに、Aが、Bに応答してのみ実行される実施形態をカバーすることを意図している。本明細書で用いられるとき、フレーズ「に応じて」は、「に少なくとも部分的に応じて」と同義的である。同様に、フレーズ「に応答して」は、「に少なくとも部分的に応答して」と同義的である。
【0090】
本開示の中で、異なるエンティティ(これらは、「ユニット」、「回路」、他のコンポーネントなどと様々に呼ばれることがある)は、1つ以上のタスク又は動作を実行するように「構成され」ているとして記載又は請求される場合がある。この定式化 -[1つ以上のタスクを実行する]ように構成された[エンティティ]- は、本明細書において、構造(すなわち、物理的な何か)を指すために用いられている。より具体的には、この定式化は、この構造が動作の間に1つ以上のタスクを実行するように配置されていることを示すために用いられている。構造は、この構造が現在操作されていない場合でも、何らかのタスクを実行する「ように構成され」ていると言うことができる。したがって、何らかのタスクを実行する「ように構成され」ていると説明又は記載されているエンティティは、デバイス、回路、プロセッサユニットとタスクを実現するために実行可能なプログラム命令を記憶するメモリとを有するシステムなどの、物理的な何かを指している。このフレーズは、本明細書において無形の何かを指すために使用されていない。
【0091】
いくつかの場合、様々なユニット/回路/コンポーネントが、タスク又は動作のセットを実行するものとして本明細書で説明されている場合がある。これらのエンティティは、具体的に記述されていない場合でも、これらのタスク/動作を実行する「ように構成され」ていると理解される。
【0092】
用語「ように構成される」は、「ように構成可能である」を意味することを意図しているわけではない。例えば、プログラムされていないFPGAは、特定の機能を実行する「ように構成され」ているとは見なされない。ただし、このプログラムされていないFPGAは、その機能を実行する「ように構成可能である」場合がある。適切なプログラミングの後、FPGAは次いで、特定の機能を実行する「ように構成され」ていると言うことができる。
【0093】
本開示に基づく米国特許出願を目的として、請求項に、構造が1つ以上のタスクを実行する「ように構成され」ていると記載することは、その請求項要素について35U.S.C.§112(f)を援用しないことを明示的に意図している。出願人が、本開示に基づく米国特許出願の手続きの間にセクション112(f)を援用することを望む場合は、[機能を実行する]「ための手段(means for)」の構成体を用いて請求項要素を記載する。
【0094】
本開示において、異なる「回路」が記載される場合がある。これらの回路又は「回路網」は、組み合わせ論理、クロック記憶装置(例えば、フリップフロップ、レジスタ、ラッチなど)、有限状態機械、メモリ(例えば、ランダムアクセスメモリ、組み込みダイナミックランダムアクセスメモリ)、プログラマブル論理アレイなどの、様々なタイプの回路要素を含むハードウェアを構成する。回路網は、カスタム設計されてもよく、あるいは標準ライブラリから取得されてもよい。様々な実装において、回路網は、必要に応じて、デジタルコンポーネント、アナログコンポーネント、又は双方の組み合わせを含むことができる。特定のタイプの回路は、一般的に「ユニット」(例えば、デコードユニット、算術論理ユニット(ALU)、機能ユニット、メモリ管理ユニット(MMU)など)と呼ばれることがある。このようなユニットも回路又は回路網を指す。
【0095】
したがって、図面に示され本明細書に記載されている開示された回路/ユニット/コンポーネント及び他の要素は、前の段落に記載されているようなハードウェア要素を含む。多くの場合、特定の回路内のハードウェア要素の内部配置は、その回路の機能を記述することにより指定することができる。例えば、特定の「デコードユニット」は、「命令のオペコードを処理し、その命令を複数の機能ユニットの1つ以上にルーティングする」機能を実行するものとして記述することができ、これは、デコードユニットがこの機能を実行する「ように構成され」ていることを意味する。この機能の仕様は、コンピュータ分野における当業者にとって、回路の可能な構造のセットを意味するのに十分である。
【0096】
様々な実施形態において、前の段落で論じたように、回路、ユニット、及び他の要素は、それらが実装するように構成されている機能又は動作により定義される。互いに関する配置及びそのような回路/ユニット/コンポーネントと、それらが相互作用する方法は、マイクロアーキテクチャ定義の物理的な実装を形成するために最終的に集積回路で製造され又はFPGAにプログラムされる、ハードウェアのマイクロアーキテクチャ定義を形成する。したがって、マイクロアーキテクチャ定義は、多くの物理的な実装が導出され得る構造として当業者により認識されており、その全てが、マイクロアーキテクチャ定義により記述されるより広範な構造に該当する。すなわち、本開示に従って供給されるマイクロアーキテクチャ定義を提示された当業者は、過度の実験なく、通常のスキルの適用により、回路/ユニット/コンポーネントの記述をVerilog又はVHDLなどのハードウェア記述言語(HDL)でコーディングすることにより、構造を実装することができる。HDL記述は、しばしば、機能的であるように見え得る方法で表現される。しかし、この分野における当業者にとって、このHDL記述は、回路、ユニット、又はコンポーネントの構造を次のレベルの実装的な詳細に変形するために使用される方法である。このようなHDL記述は、挙動コード(これは、典型的には合成できない)、レジスタ転送言語(RTL)コード(これは、挙動コードと対照的に、典型的には合成可能である)、又は構造コード(例えば、論理ゲートとそれらの接続性を指定するネットリスト)の形式をとる場合がある。HDL記述は、その後、所与の集積回路製作技術のために設計されたセルのライブラリに対して合成される場合があり、マスクを生成し、最終的に集積回路を生産するためにファウンドリに送信される最終的な設計データベースをもたらすために、タイミング、電力、及び他の理由で修正される場合がある。一部のハードウェア回路又はそれらの部分は、回路図エディタでカスタム設計され、合成回路網とともに集積回路設計に取り込まれる場合もある。集積回路は、トランジスタと他の回路要素(例えば、キャパシタ、抵抗器、インダクタなどの受動素子)を含み、トランジスタと回路要素との間を相互接続することができる。いくつかの実施形態は、ハードウェア回路を実装するために一緒に結合された複数の集積回路を実装することができ、かつ/あるいは、いくつかの実施形態では、個別素子を使用することができる。代替的に、HDL設計は、フィールドプログラマブルゲートアレイ(FPGA)などのプログラマブル論理アレイに合成されてもよく、FPGAで実装されてもよい。回路グループの設計とこれらの回路のその後の低レベル実装との間のこの分離は、一般的に、回路又は論理設計者が、回路が何を行うように構成されているかの記述を超えて低レベル実装のための構造の特定のセットを指定することがないシナリオを結果としてもたらし、なぜならば、このプロセスは、回路実装プロセスの異なる段階で実行されるためである。
【0097】
回路の同じ仕様を実装するために、回路要素の多くの異なる低レベルの組み合わせが使用される場合があるという事実は、その回路について、多数の同等の構造を結果としてもたらす。前述したように、これらの低レベルの回路実装は、製作技術、集積回路を製造するために選択されるファウンドリ、特定のプロジェクトに対して提供されるセルのライブラリなどにおける変化に従って変動する可能性がある。多くの場合、これらの異なる実装を生産するために異なる設計ツール又は方法論により行われる選択は、任意であってよい。
【0098】
さらに、回路の特定の機能仕様の単一の実装が、所与の実施形態について、多数のデバイス(例えば、数百万個のトランジスタ)を含むことが一般的である。したがって、この情報の莫大な量は、同等の可能な実装の広大な配列はもちろんのこと、単一の実施形態を実装するために使用される低レベル構造の完全な記載を提供することを非現実的にする。この理由で、本開示は、業界で一般的に採用されている機能的な省略表現を使用して回路の構造について説明している。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8
【国際調査報告】