(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-07
(45)【発行日】2024-03-15
(54)【発明の名称】確率的データ構造を使用した要求の低減
(51)【国際特許分類】
G06F 16/23 20190101AFI20240308BHJP
【FI】
G06F16/23
(21)【出願番号】P 2022546342
(86)(22)【出願日】2021-01-15
(86)【国際出願番号】 US2021013623
(87)【国際公開番号】W WO2021154516
(87)【国際公開日】2021-08-05
【審査請求日】2022-07-29
(32)【優先日】2020-01-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】アグラワル,アティッシュ
(72)【発明者】
【氏名】マーティン,ジャメイソン ベアー
【審査官】松尾 真人
(56)【参考文献】
【文献】米国特許出願公開第2008/0155229(US,A1)
【文献】Tao ZHU et al.,Fault-tolerant precise data access on distributed log-structured merge-tree,Frontiers of Computer Science,中国,Higher Education Press,2019年,Vol.13, No.4,pp.760-777,Internet<https://doi.org/10.1007/s11704-018-7198-6>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
第1データベースノードによって、データベースレコードのセットを前記第1データベースノードのインメモリキャッシュに書き込むことを伴う、データベーストランザクションを処理するステップであって、該処理するステップは、前記データベースレコードのセットに対応するデータベースキーのセットを確率的データ構造のセット
のうちの特定の確率的データ構造に挿入することを含
み、前記特定の確率的データ構造は、前記データベーストランザクションのトランザクションコミット番号(XCN)に関連付けられ、前記データベースキーのセットのうちの所与のデータベースキーを前記特定の確率的データ構造に挿入することは、
ハッシュ関数を前記所与のデータベースキーに適用して、前記特定の確率的データ構造に含まれる複数のキャッシュラインのうちの特定のキャッシュラインを識別することと、
ハッシュ値のセットに基づいて前記特定のキャッシュラインのビットのセットを設定することによって、前記所与のデータベースキーを前記特定のキャッシュラインに挿入することと、
を含む、ステップと、
前記第1データベースノードによって、第2データベースノードから、特定のデータベースキーに関連付けられるデータベースレコードの最新のバージョンを求める要求を受け取るステップであって、前記要求は、前記第2データベースノードに関連付けられるXCNを指定する、ステップと、
前記第1データベースノードによって、前記第2データベースノードに、前記確率的データ構造のセットうち、前記第2データベースノードに関連付けられる前記XCNより後の時点を示すXCNを有する確率的データ構造のみを含む、前記要求に対する応答を送信するステップであって、送信されるデータ構造は、前記第1データベースノードからデータベースキーに関連付けられるデータベースレコードを要求するかどうかを
前記第2データベースノードが判断することを可能にする
、ステップと、
を含む、方法。
【請求項2】
前記所与のデータベースキー
を前記特定のキャッシュラインに挿入することは、
前記第1データベースノードによって、ハッシュ関数のセットを前記所与のデータベースキーに適用して、
前記ハッシュ値のセットを導出すること
を含む、請求項
1に記載の方法。
【請求項3】
前記データベースキーのセットを挿入することは、
前記
特定の確率的データ構造が、定義された閾値数のデータベースキーを含んでいることに応答して、前記第1データベースノードが、前記データベースキーのセットのうちの残りのデータベースキーを前記確率的データ構造のセットのうちの
別の特定の確率的データ構造に挿入することと、
を含む、請求項
1又は2に記載の方法。
【請求項4】
前記特定の確率的データ構造は、該
特定の確率的データ構造にデータベースキーが挿入されたアクティブトランザクションの数を示すメタデータに関連付けられ、当該方法は、
前記第1データベースノードによって、前記アクティブトランザクションの数が、前記
特定の確率的データ構造についてアクティブトランザクションが存在することを示すかどうかに基づいて、前記
特定の確率的データ構造をパージす
るかどうかを判断するステップ、
を更に含む、請求項1乃至
3のいずれか一項に記載の方法。
【請求項5】
前記確率的データ構造のセットのうちの少なくとも2つの確率的データ構造は各々、前記データベーストランザクションを処理することの一部として挿入されるそれぞれのデータベースキーを含み、当該方法は、
前記インメモリキャッシュに関連して前記データベーストランザクションをコミットすることに応答して、前記第1データベースノードが、前記少なくとも2つの確率的データ構造の各々について、その確率的
データ構造に関連付けられる前記アクティブトランザクションの数をデクリメントするステップ、
を更に含む、請求項
4に記載の方法。
【請求項6】
前記第1データベースノードによって、前記インメモリキャッシュから、前記第1データベースノードと前記第2データベースノードとの間で共有される永続的ストレージに、前記データベースレコードのセットのうちの1つ以上のデータベースレコードを書き込むステップと、
前記書き込むステップに応答して、前記第1データベースノードが、前記確率的データ構造のセットのうちの所与の確率的データ構造をパージするかどうかを判断するステップと、
を更に含む、請求項1乃至
5のいずれか一項に記載の方法。
【請求項7】
前記確率的データ構造のセットのうちの少なくとも1つの確率的データ構造は、複数の異なるトランザクションからのデータベースキーに関連付けられる、請求項1乃至
6のいずれか一項に記載の方法。
【請求項8】
コンピュータシステムであって、
少なくとも1つのプロセッサと、
請求項1乃至
7のいずれか一項に記載の方法を実行するために前記少なくとも1つのプロセッサによって実行可能であるプログラム命令を有するメモリと、
を含む、コンピュータシステム。
【請求項9】
第1コンピュータシステムに、
データベースレコードのセットを前記第1コンピュータシステムのインメモリキャッシュに書き込むことを伴う、データベーストランザクションを処理するステップであって、該処理するステップは、前記データベースレコードのセットに対応するデータベースキーのセットを確率的データ構造のセット
のうちの特定の確率的データ構造に挿入することを含
み、
前記特定の確率的データ構造は、前記データベーストランザクションのトランザクションコミット番号(XCN)に関連付けられ、前記データベースキーのセットのうちの所与のデータベースキーを前記特定の確率的データ構造に挿入することは、
ハッシュ関数を前記所与のデータベースキーに適用して、前記特定の確率的データ構造に含まれる複数のキャッシュラインのうちの特定のキャッシュラインを識別することと、
ハッシュ値のセットに基づいて前記特定のキャッシュラインのビットのセットを設定することによって、前記所与のデータベースキーを前記特定のキャッシュラインに挿入することと、
を含む、ステップと、
第2コンピュータシステムから、特定のデータベースキーに関連付けられるデータベースレコードの最新のバージョンを求める要求を受け取るステップであって、前記要求は、前記第2コンピュータシステムに関連付けられるXCNを指定する、ステップと、
前記第2コンピュータシステムに、前記確率的データ構造のセットうち、前記第2コンピュータシステムに関連付けられる前記XCNより後の時点を示すXCNを有する確率的データ構造のみを含む、前記要求に対する応答を送信するステップであって、送信されるデータ構造は、前記第1コンピュータシステムから特定のデータベースキーに関連付けられるデータベースレコードを要求するかどうかを
前記第2コンピュータシステムが判断することを可能にする
、ステップと、
を含む動作を実行させることができるプログラム命令を有する、コンピュータ読取可能媒体。
【請求項10】
前記データベースキーのセットを
挿入することは、
前記
特定の確率的データ構造の閾値数に到達した後に、前記データベースキーのセットのうちの他のデータベースキーを、前記確率的データ構造のセットのうちの
別の特定の確率的データ構造に挿入することと、
を含む、請求項
9に記載のコンピュータ読取可能媒体。
【請求項11】
前記特定の確率的データ構造は、該特定の確率的データ構造にデータベースキーが挿入されたアクティブトランザクションの数を示すアクティブトランザクションカウントを指定するメタデータを含み、
前記動作は、
前記データベーストランザクションをコミットすることに応答して、前記特定の確率的データ構造の前記アクティブトランザクションの数をデクリメントするステップ、
を更に含む、請求項
9又は10に記載のコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示は、一般に、データベースシステムに関し、より具体的には、確率的データ構造を使用して、データベースノード間の呼び出し/要求を低減することに関する。
【背景技術】
【0002】
関連技術の説明
現代のデータベースシステムは、ユーザが、効率的にアクセスして操作できるように組織化された方法で情報の集合を記憶することを可能にする、管理システムを日常的に実装する。場合によっては、これらの管理システムは、各々がキー値ペアとして情報を記憶する複数のレベルを有する、ログ構造化マージツリー(LSM(log-structured merge)ツリー)を維持する。LSMツリーは、通常、インメモリキャッシュ(in-memory cache)と永続的ストレージという2つの高レベル構成要素を含む。動作中、データベースシステムは、最初にデータベースレコードをインメモリキャッシュに書き込み、後で永続的ストレージにそれらをフラッシュする。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、確率的データ構造を含むデータベースノードを有するシステムの例示的要素を示すブロック図である。
【0004】
【
図2A】いくつかの実施形態による、確率的データ構造の例示的要素を示すブロック図である。
【0005】
【
図2B】いくつかの実施形態による、確率的データ構造のキャッシュライン構造の例示的要素を示すブロック図である。
【0006】
【
図3】いくつかの実施形態による、キャッシュライン構造にデータベースキーを挿入することができるトランザクションエンジンの例示的要素を示すブロック図である。
【0007】
【
図4】いくつかの実施形態による、確率的データ構造を有するデータベースノード間の対話の例示的要素を示すブロック図である。
【0008】
【
図5】いくつかの実施形態による、長期実行トランザクション(long-running transaction)を処理するトランザクションエンジンの例示的要素を示すブロック図である。
【0009】
【
図6】いくつかの実施形態による、確率的データ構造のセットを生成して提供することに関連する例示的方法を示すフロー図である。
【0010】
【
図7】いくつかの実施態様による、確率的データ構造のセットを使用することに関連する例示的方法を示すフロー図である。
【0011】
【
図8】いくつかの実施形態による、長期実行トランザクションを処理することに関連する例示的方法を示すフロー図である。
【0012】
【
図9】いくつかの実施形態による、例示的コンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0013】
本開示は、「一実施形態」又は「実施形態」への言及を含む。「一実施形態において」又は「実施形態において」というフレーズの出現は、必ずしも同じ実施形態を指していない。特定の特徴、構造又は特性は、本開示と矛盾しない任意の適切な方法で組み合わされてよい。
【0014】
本開示内において、異なるエンティティ(「ユニット」、「回路」、他の構成要素等と様々に称され得る)が、1つ以上のタスク又は動作を実行するよう「構成」されるとして説明され、特許請求されることがある。この定式化 -[1つ以上のタスクを実行]するよう構成される[エンティティ]- は、本明細書では、構造(すなわち、電子回路のような何らかの物理的なもの)を指すために使用される。より具体的には、この定式化は、この構造が、動作中に1つ以上のタスクを実行するように配置されることを示すために使用される。構造は、たとえその構造が現在動作していない場合であっても、なんらかのタスクを実行するよう「構成」されるということができる。「ネットワークを介して通信するよう構成されるネットワークインタフェース」は、例えば、たとえ当該集積回路が現在使用されていない(例えば電源が接続されていない)場合であっても、動作中にこの機能を実行する回路を有する集積回路をカバーするよう意図される。したがって、あるタスクを実行するよう「構成される」として説明又は記載されるエンティティは、デバイス、回路、そのタスクを実行するために実行可能なプログラム命令を記憶しているメモリ等のような何らかの物理的なものを指す。このフレーズは、本明細書では、何かの無形のものを指すためには使用されない。したがって、「構成された」構造物は、本明細書では、アプリケーションプログラミングインタフェース(API)のようなソフトウェアエンティティを指すためには使用されない。
【0015】
「よう構成される」という用語は、「よう構成可能」を意味するようには意図されていない。例えばプログラムされていないFPGAは、何らかの特定の機能を実行する「よう構成される」とは見なされないが、その機能を実行する「よう構成可能」である可能性があり、プログラミングの後に、その機能を実行する「よう構成される」可能性がある。
【0016】
本明細書において使用されるとき、「第1」、「第2」等の用語は、それらが先行する名詞のラベルとして使用され、特段の記載がない限り、いかなる種類の順序付け(例えば空間的、時間的、論理的等)も暗示しない。例えば8つの処理コアを有するプロセッサにおいて、「第1」及び「第2」処理コアという用語は、8つの処理コアのうちの任意の2つを指すために使用することができる。言い換えると、第1処理コア及び第2処理コアは、例えば処理コア0及び1に限定されない。
【0017】
本明細書中で使用されるとき、「に基づいて」という用語は、決定に影響を与える1つ以上の要因を説明するために使用される。この用語は、追加的な要因が決定に影響を与え得る可能性を除外しない。すなわち、決定は、指定された要因のみに基づくか、あるいは指定された要因並びに他の指定されていない要因に基づくものであり得る。「Bに基づいてAを決定する」というフレーズを考える。このフレーズは、Bが、Aを決定するために使用される要因であるか又はAの決定に影響を与える要因であることを指定する。このフレーズは、Aの決定がCのような何らかの他の要因にも基づく可能性があることを除外しない。このフレーズは、AがBのみに基づいて決定される実施形態を網羅するようにも意図される。本明細書で使用されるとき、「に基づいて」というフレーズは、したがって、「に少なくとも部分的に基づいて」というフレーズと同義である。
【0018】
詳細な説明
いくつかの実装では、LSMツリーを維持するデータベースシステムは、LSMツリーに関連付けられる永続的ストレージにレコードを書き込む前に、LSMツリーのインメモリキャッシュにこれらのレコードを書き込む。いくつかのアプローチでは、データベースシステムは、LSMツリーへのレコードの書き込みを担当する単一のデータベースノードを含む。他のアプローチでは、データベースシステムは、LSMツリーからレコードの読み込みも行う間に、LSMツリーにレコードを書き込む複数のデータベースノードを含む。これらのデータベースノードは、共通の永続的ストレージを共有し得るが、各々それら自身のインメモリキャッシュを有している。このシナリオでは、しかしながら、データベースノードによってそのインメモリキャッシュに書き込まれるレコードは、それらのレコードが共通の永続的ストレージにフラッシュされるまで、他のデータベースノードに対して可視ではない。本発明者らは、この配置が、ある非効率性を引き起こすことを認識している。ある特定のレコードの最新バージョン(latest version)にアクセスすることを伴うトランザクションを処理している第1データベースノードを考える。このレコードは、第2データベースノードのインメモリキャッシュに記憶されていることがあり、よって、第1データベースノードに対して可視ではない。その結果、第1データベースノードは、第2データベースノードがそのレコードの最新バージョンを有しているかどうかを判断するために、第2データベースノードに要求を発行しなければならない。
【0019】
多くの場合、データベースノードのインメモリキャッシュのサイズは非常に小さい可能性があり(例えば2GB又は10GB)、したがって、任意の時点で限られた数のレコードしか記憶できない可能性がある。その結果、たとえ多くのレコード要求がデータベースノードによって生成されるとしても、これらの要求のほとんどではないにしてもその多くが、レコードが返されるという結果をもたらさない。したがって、要求されたレコードが、第2データベースノードのインメモリキャッシュ内に存在しないことが多いが、第1データベースノードは、レコードがそこに存在するかどうかを確かめるために、依然として第2データベースノードへの要求を行わなければならない。本発明者らは、これらの要求が多くの場合、レコードが返されるという結果をもたらさないにもかかわらず、データベースノードが、互いにレコード要求を発行するのに膨大な時間を費やすため、このことが、データベースシステムの全体的な動作を遅らせることを認識している。本開示は、他のデータベースノードには通常存在しないレコードについて、データベースノード間で送信される要求が多すぎる結果として消費されるリソースが多すぎる、というこの技術的問題に対処する。
【0020】
本開示は、データベースノードが、別のデータベースノードからのデータベースレコードを要求するかどうかを判断することを可能にする確率的データ構造を実装するための技術を説明する。本明細書で使用されるとき、「確率的データ構造」という用語は、特定のアイテムがシステム内の特定の位置に存在しないか又は存在する可能性があることを示す情報を記憶するデータ構造を指す。例えば確率的データ構造は、特定のデータベースキーについて、データベースレコードが、ある特定のデータベースノードのインメモリキャッシュに存在しないか又は存在する可能性があることを示す情報を記憶することができる。ブルームフィルタ、カッコウフィルタ(cuckoo filters)、hyperloglog関連構造(hyperloglog-related structures)、サーフトライ(surf tries)は確率的データ構造の例である。
【0021】
以下で説明される様々な実施形態において、システムは、それらのデータベースノードによって共有される永続的ストレージにそれらのデータベースレコードをフラッシュする前に、データベースレコードをそれら自身のローカルインメモリキャッシュに書き込むことができる複数のデータベースノードを含む。データベースレコードをインメモリキャッシュに書き込むとき、様々な実施形態において、データベースノードは、データベースレコードのデータベースキーを確率的データ構造に挿入する。本明細書で使用されるとき、「データベースキーを確率的データ構造に挿入する」というフレーズは、広く、データベースキーに基づいて確率的データ構造内の情報に対する修正をもたらすことを指す。データベースキー自体は、確率的データ構造に記憶される必要はない。例えばハッシュ関数のセットをデータベースキーに適用して、ハッシュ値のセットを導出してよい。これらのハッシュ値を使用して、確率的データ構造内のビットを設定することができる。
【0022】
データベースキーを確率的データ構造に挿入するために、様々な実施形態において、データベースノードは、ハッシュ関数のセットを適用して、対応するハッシュ値のセットを導出する。ハッシュ値のうちの1つは、確率的データ構造内の部分又は「キャッシュライン」を選択するために使用され得る。残りのハッシュ値は、データベースキーを表すようにキャッシュライン内のビットを設定するために使用され得る。動作中に、データベースノードは、様々なデータベースキーを1つ以上の確率的データ構造に挿入してよい。いくつかの実施形態において、データベースノードは、閾値数のキーが確率的データ構造に挿入されるまで、データベースキーを確率的データ構造に挿入する。(この閾値は、データ構造の何らかの最大サイズに対応してよく;これは、様々な実施形態において、システム設計選択又は構成設定とすることができる。)データベースノードは、次いで、別の確率的データ構造を作成し、データベースキーをそれに挿入し始めてもよい。その結果、様々な場合において、データベースノードは、各々がデータベースキーの異なるセットに関連付けられる確率的データ構造のスタックを作成し得る。
【0023】
データベースノードは、スタックからの確率的データ構造を第2データベースノードに提供し得る。いくつかの実施形態において、データベースノードは、指定されたデータベースキーに関連付けられるデータベースレコードについての第2データベースノードからの要求に対する応答の一部として、スタックからの確率的データ構造を提供する。いくつかの実施形態において、データベースノードは、その第2データベースノードに、第2データベースノードが確率的データ構造を最後に受け取った後に作成又は変更されたそれらの確率的データ構造のみを提供してもよい。例えば第2データベースノードが第1データベースノードと最初に通信するとき、第1データベースノードは、そのスタックからのすべての確率的データ構造を提供してよい。その後、第1データベースノードは、新しい確率的データ構造をスタックに追加することがある。第2データベースノードがデータベースレコードについて第1データベースノードに要求を送信するとき、第1データベースノードは、要求に対する応答の一部として、新しい確率的データ構造を提供し得るが、スタックからの他の確率的データ構造は提供しなくてよい。
【0024】
確率的データ構造を受け取るデータベースノードは、それらの確率的データ構造を使用して、別のデータベースノード(例えばそれらの確率的データ構造の所有者)からデータベースレコードを要求するかどうかを判断してもよい。動作中に、データベースノードは、指定されたデータベースキーについてのデータベースレコードにアクセスすることを伴う、データベーストランザクションを処理する要求を受け取ることがある。しかしながら、指定されたデータベースキーは、第2データベースノードによって管理されるキー空間内にある可能性がある。したがって、前のデータベースノード(第1データベースノード)は、第2データベースノードに関連付けられる確率的データ構造をチェックして、それが第2データベースノードからのデータベースレコードを要求すべきかどうかを判断し得る。確率的データ構造をチェックするために、いくつかの実施形態において、第1データベースノードは、データベースキーをその確率的データ構造に挿入するために第2データベースノードによって使用されたものと同じハッシュ関数のセットを、指定されたデータベースキーに適用する。指定されたデータベースキーについて導出されたハッシュ値が、確率的データ構造で設定されたビットと一致する場合、次いで第1データベースノードは、指定されたデータベースキーについてデータベースレコードが第2データベースノードに存在する可能性があると判断してよく、そうでなければ、第1データベースノードは、そのキーについて、データベースレコードが第2データベースノードに存在しないと判断する。
【0025】
これらの技術は、データベースノードが、データベースノード間で送信されるデータベースレコード要求の数を低減することを伴う、より効果的な方法で通信することを可能にするので、これらの技術は、従来のアプローチよりも有利であり得る。従来のアプローチでは、データベースノードは、そのレコードのデータベースキーが別のデータベースノードのキー空間内にある場合、データベースレコードについてその別のデータベースノードに要求を発行する。本開示において議論される確率的データ構造を使用することによって、データベースノードは、データベースレコードについて別のデータベースノードに要求を発行するかどうかを判断することができる。確率的データ構造が特定のデータベースキーを示す情報セットを有していない場合、次いで、データベースノードは、その特定のデータベースキーについてのデータベースレコードが、その別のデータベースノードに存在していないことを知り、したがって、その別のデータベースノードに要求を行う必要がない。
【0026】
これらの技術はまた、追加の利点も提供することができる。様々な場合において、データベースシステムは、確率的データ構造に対応し得るキャッシュラインと対話している複数のプロセッサを有し得る。非単一キャッシュラインアプローチでデータベースキーを確率的データ構造に挿入するとき、そのキーの複数のハッシュ値は異なるキャッシュラインにマップされる可能性がある。プロセッサがキャッシュラインの所有権を取得することを必要とするアトミック比較及びスワップ操作によって、確率的データ構造のビットの更新が起こることがあり、その間に他のプロセッサがキャッシュラインを更新することを妨げる。その結果、キーのハッシュ値が複数のキャッシュラインにマップされるとき、プロセッサは、これらのキャッシュラインの所有権をめぐって、同時実行システムにおいてより多くの回数争わなければならない。これは、より多くのプロセッサストール(processor stalls)(キャッシュラインの所有権を待つ)を引き起こし、確率的データ構造へキーの挿入の性能を低下させる可能性がある。単一キャッシュラインアプローチでは、キーのハッシュ値はすべて同じハードウェアキャッシュラインにマップされる。これは、プロセッサが、複数のキャッシュラインの代わりに、単一のキャッシュラインのみの所有権を求めることを可能にする。したがって、プロセッサは、データベースキーを挿入する能力を待つのに費やす時間を少なくすることができる。これらの技術の例示的な適用を、
図1を参照して開始して、ここで議論する。
【0027】
次に、
図1に移ると、システム100のブロック図が示されている。システム100は、ハードウェア又はハードウェアとソフトウェアのルーチンの組合せを介して実装され得る構成要素のセットを含む。図示される実施形態において、システム100は、データベース110と、データベースノード120A~120Cのセットを含む。更に図示されるように、データベースノード120A~120Cは、各々、インメモリキャッシュ130(それぞれのデータベースレコード135A~135Cを記憶する)と、確率的データ構造140のセットを含む。いくつかの実施形態において、システム100は、図示されるものとは異なるように実装されてもよい。例えばシステム100は、より多くの又はより少ないデータベースノード120を含んでもよい。
【0028】
システム100は、様々な実施形態において、そのサービスのユーザがアプリケーションを開発し、実行し、管理することを可能にするプラットフォームサービスを実装する。例として、システム100は、マルチテナントシステムによってホストされる複数のユーザ/テナントに様々な機能を提供する、マルチテナントシステムであってよい。したがって、システム100は、様々な異なるユーザ(例えばシステム100のプロバイダ及びテナント)からのソフトウェアルーチンを実行し、コード、ウェブページ及び他のデータを、ユーザ、データベース(例えばデータベース110)及びシステム100に関連付けられる他のエンティティに提供してよい。図示されるように、システム100は、データベース110と対話し、かつ、システム100に関連付けられるユーザのためのデータを記憶してアクセスする、データベースノード120A~120Cを含む。
【0029】
データベース110は、様々な実施形態において、その情報のアクセス、記憶及び操作を可能にする方法で編成される情報の集合である。したがって、データベース110は、データベースノード120がデータベース110内の情報に対する操作(例えばアクセス、記憶等)を実行することを可能にする支援ソフトウェアを含んでよい。図示されるように、データベース110は、1つのデータベースノード120によって書かれたデータベースレコード135が、他のデータベースノード120によってアクセス可能であるように、データベースノード120A~120Cの間で共有される。いくつかの実施形態において、データベース110は、ネットワーク(例えばストレージ接続ネットワーク(SAN:storage attached network))上で一緒に接続され、かつデータ損失を防止するために情報を冗長的に記憶するよう構成される、単一又は複数のストレージデバイスによって実装される。これらのストレージデバイスは、永続的にデータを記憶してよく、したがって、データベース110は、永続的ストレージとして機能し得る。
【0030】
様々な実施形態において、データベース110は、データベースレコード135の複数のレベルを有するログ構造化マージツリー(LSM(log-structured merge)ツリー)の一部を実装する。前述のように、LSMツリーは、インメモリ部分とオンディスク部分(on-disk portion)という2つの高レベル部分を含み得る。LSMツリーの1つ以上のレベルは、インメモリキャッシュ130に書き込まれるデータベースレコード135を含み得る。LSMツリーの残りのレベルは、データベース110に書き込まれるデータベースレコード135を含み得る。したがって、インメモリキャッシュ130A~130Cは、LSMツリーのインメモリ部分を容易にし、一方、データベース110は、そのLSMツリーのオンディスク部分を容易にする。
【0031】
データベースノード120は、様々な実施形態において、データ記憶、データ取り出し及びデータ操作のようなデータベースサービスを提供することができる、ハードウェア、ソフトウェア又はそれらの組合せである。これらのデータベースサービスは、システム100内の他の構成要素に又はシステム100の外部の構成要素に提供され得る。図示されるように、データベースノード120Bは、データベーストランザクション要求105を受け取るが、この要求は、データベースレコード135のセットにアクセスしようと試みているアプリケーションサーバ(図示せず)から受け取られる可能性がある。例として、データベーストランザクション要求105は、1つ以上のデータベーステーブルから1つ以上の行を選択するSQL SELECTコマンドを指定してよい。行の内容はデータベースレコード135内で定義されてよく、したがって、データベースノード120は、選択された1つ以上のテーブル行に対応する1つ以上のデータベースレコード135を返し得る。場合によっては、データベーストランザクション要求105は、データベースノード120に、LSMツリーのための1つ以上のデータベースレコード135を書き込むよう指示することがある。データベースノード120は、様々な実施形態において、データベースレコード135を、それらのデータベースレコードをデータベース110にフラッシュする前に、そのインメモリキャッシュ130に最初に書き込む。
【0032】
インメモリキャッシュ130は、様々な実施形態において、データベースノード120のメモリ(例えばランダムアクセスメモリ(RAM))にデータを記憶するバッファである。HBase(登録商標)Memstoreは、インメモリキャッシュ130の一例である。説明したように、データベースノード120は、(例えばキー値ペアの形態で)データベースレコード135をそのインメモリキャッシュ130内に最初に書き込んでよい。場合によっては、データベーステーブル内の行の最新の/最も新しいバージョンが、インメモリキャッシュ130に記憶されているデータベースレコード135内で見つかることがある。しかしながら、データベースノード120のインメモリキャッシュ130に書き込まれるデータベースレコード135は、様々な実施形態において、他のデータベースノード120に対して可視ではない。すなわち、これらの他のデータベースノード120は、尋ねることなしには、そのデータベースノード120のインメモリキャッシュ130内にどのような情報が記憶されているかを知らない。インメモリキャッシュ130が、特定のキーに関連付けられるデータベースレコード135を記憶しているかどうかを判断するために、場合によっては、データベースノード120は、インメモリキャッシュ130のデータベースノード120にデータベースレコード要求122を発行してよい。そのようなデータベースレコード要求122は特定のキーを含んでよく、データベースノード120は、特定のキーに対応するものが存在する場合、データベースレコード135を返すことができる。
【0033】
多くの場合、あるデータベースノード120は、データベースレコード応答124を別のデータベースノード120に返すことができ、その場合、その応答はデータベースレコード135を含まない。これは、様々な実施形態において、インメモリキャッシュ130が比較的小さなサイズであり、したがって、特定のキーに対応するデータベースレコード135がインメモリキャッシュ130内にある可能性が比較的低いためであり得る。したがって、様々な実施形態において、データベースノード120は、確率的データ構造140を使用して、それらの特定の確率的データ構造140を提供した別のデータベースノード120に発行するデータベースレコード要求122の量を低減する。
【0034】
確率的データ構造140は、様々な実施形態において、対応するデータベースキーについて、データベースレコード135がインメモリキャッシュ130内に存在する確率を示す情報を記憶する、データ構造である。説明したように、データベースノード120は、そのインメモリキャッシュ130に1つ以上のデータベースレコード135を書き込むことを伴い得る、データベーストランザクション要求105を受け取ることができる。データベースレコード135をそのインメモリキャッシュ130に書き込むとき、いくつかの実施形態において、データベースノード120は、データベースレコード135に対応するデータベースキーを確率的データ構造140に挿入する。データベースキーを確率的データ構造140に挿入するために、様々な実施形態において、データベースノード120は、データベースキーに対して1つ以上のハッシュ関数を実行して、ハッシュ値のセットを導出する。これらのハッシュ値は、確率的データ構造140の一部分を選択し、かつ、その部分内に情報のビットを設定するために使用され得る。
【0035】
確率的データ構造140を受け取るデータベースノード120は、ある特定のデータベースキーに対して同じ1つ以上のハッシュ関数を実行して、そのデータベースキーについて適切なビットが設定されているかどうかを判断することができる。そのデータベースキーについて適切なビットが設定されている場合、データベースノード120は、データベースキーについてのデータベースレコード135が、確率的データ構造140を提供したデータベースノード120のインメモリキャッシュ130に存在し得ると判断してよい。そのデータベースキーについて適切なビットが設定されていない場合、データベースノード120は、そのデータベースキーについてのデータベースレコード135が、その他のデータベースノード120のインメモリキャッシュ130に存在しないと判断してよい。データベースレコード135が存在する可能性がある場合、様々な実施形態において、データベースノード120は、可能性のあるデータベースレコード135について、データベースレコード要求122を他のデータベースノード120に送信する。
【0036】
次に、
図2Aに移ると、例示的な確率的データ構造140のブロック図が示されている。図示される実施形態において、確率的データ構造140は、キャッシュライン構造210、キー範囲(key range)220、キーの数の値230、アクティブトランザクションカウント240、最も古いトランザクションコミット番号250、最も新しいトランザクションコミット番号260、状態270及び識別子値275を含む。いくつかの実施形態において、確率的データ構造140は、図示されるものとは異なるように実装されてもよい。例として、確率的データ構造140は識別子値を含んでもよい。1つのデータベースノード120が確率的データ構造140をパージ(purge)するとき、そのデータベースノード120は、別のデータベースノード120がその確率的データ構造140の自身のコピーをパージし得るように、別のデータベースノード120にその確率的データ構造140の識別子値を提供してよい。
【0037】
キャッシュライン構造210は、様々な実施形態において、データベースキーについて、2つのデータポイントのうちの一方を示す情報、すなわち、1)そのデータベースキーについてのデータベースレコードが、確率的データ構造140に関連付けられるインメモリキャッシュ130に記憶されていないこと又は2)そのデータベースキーについてのデータベースレコードが、インメモリキャッシュ130に記憶されている可能性があること、のうちの一方を示す情報を記憶することができるデータ構造である。様々な実施形態において、キャッシュライン構造210は、複数のキャッシュラインを含み、その各々は、キャッシュライン構造210に挿入されるデータベースキーに基づいて設定することができる一連のビットであり得る。特定のキャッシュライン内にどのようなビットが設定されているかに基づいて、データベースノード120は、特定のデータベースキーについてのデータベースレコードが、別のデータベースノード120のインメモリキャッシュ130に記憶され得るかどうかを判断することができる。キャッシュライン構造210の例は、
図2Bに関連してより詳細に議論される。
【0038】
キー範囲220は、様々な実施形態において、確率的データ構造140に挿入されているデータベースキーの範囲を定義するデータ値のセットである。キー範囲220は、データベースノード120によって、ある特定のデータベースキーについて、別のデータベースノード120にデータベースレコード135が存在する可能性があるかどうかを学習するために、確率的データ構造140をチェックするかどうかを判断するために使用されてよい。データベースノード120Bが、データベースノード120Aから3つの確率的データ構造140を受け取る例を考える。データベースノード120Bは、該データベースノード120Bによって処理されているデータベーストランザクションにおいて識別される特定のデータベースキーについて、インメモリキャッシュ130A内にデータベースレコード135が存在するかどうかを判断することを望むことがある。したがって、データベースノード120Bは、特定のデータベースキーがキー範囲220内にあるかどうかを判断するために、3つの確率的データ構造140の各々についてキー範囲220をチェックし得る。これは、キー範囲220が特定のデータベースキーを含まない場合には、確率的データ構造140のキャッシュライン構造210をチェックしないことによって、データベースノード120Bが処理リソース及び時間を節約することを可能にし得る。いくつかの実施形態において、複数の確率的データ構造140は、重複するキー範囲220を有してもよい。
【0039】
キーの数の値230は、様々な実施形態において、確率的データ構造140に挿入されているデータベースキーの数を示すデータ値である。場合によっては、キーの数の値230は、挿入されたデータベースキーの数に近似し得る。これは、値230が、同期なしでインクリメントされていることに起因する可能性があり、したがって、一部のインクリメントは同期がないために失われる可能性がある。様々な実施形態において、確率的データ構造140は、指定された数のデータベースキーが挿入された後にキャップされる。挿入することができるデータベースキーの数をキャップすることによって、確率的データ構造140についての偽陽性率(すなわち、確率的データ構造140は、データベースレコード135がインメモリキャッシュ130にあることを示しているが、データベースレコードは実際にはそこにない確率――したがって、データベースレコード135が、インメモリキャッシュ130にある「可能性」がある確率)を、目標の確率(例えば1%)で維持し得るが、これは、データベースキーの挿入が、偽陽性率を増分的に増加させる可能性があるからである。このように、キーの数の値230は、指定された数のデータベースキーが挿入されたかどうかを判断するために使用されてよい。キーの数の値230が、指定された数のデータベースキーに一致するか又はそれを超える値を識別した後、データベースノード120は、追加のデータベースキーが挿入されることを防ぐことができ、データベースキー挿入のために別の確率的データ構造140を生成してよい。
【0040】
アクティブトランザクションカウント240は、様々な実施形態において、少なくとも1つのデータベースキーを確率的データ構造140に挿入した後、各々まだアクティブであるトランザクションの数を示すデータ値である。例えばデータベースノード120は、データベーストランザクション要求105を受け取って、データベーストランザクションを実行し得る。そのデータベーストランザクションを処理することの一部として、データベースノード120は、データベースキーを確率的データ構造140に挿入してよい。データベースキーを挿入したことに応答して、様々な実施形態において、データベースノード120はアクティブトランザクションカウント240をインクリメントする。この例を続けると、データベースノード120は、別のデータベーストランザクション要求105を受け取って、第2データベーストランザクションを実行し得る。第2データベーストランザクションを処理することの一部として、データベースノード120は、データベースキーを確率的データ構造140に挿入してよい。データベースキーを挿入したことに応答して、データベースノード120は、アクティブトランザクションカウント240をインクリメントして、少なくとも1つのキーを確率的データ構造140に挿入した2つのアクティブトランザクションを示してよい。第1データベーストランザクションをコミットしたことに応答して、様々な実施形態において、データベースノード120は、次いで、アクティブトランザクションカウント240をデクリメントする。データベースノード120は、第2データベーストランザクションがコミットすると、アクティブトランザクションカウント240を再びデクリメントしてよい。様々な実施形態において、データベーストランザクションは、該データベーストランザクションが完了したことをデータベースノード120が認めると、コミットされ得る。トランザクションをコミットした結果、コミットされたトランザクションに関連付けられるデータベースレコード135が、レコード要求122を介して他のデータベースノード120に利用可能となり得る。アクティブトランザクションカウント240はまた、データベーストランザクションが中止(abort)するときにデクリメントされてもよい。
【0041】
アクティブトランザクションカウント240がゼロより大きい値を識別する間、様々な実施形態において、確率的データ構造140をパージすることができない。すなわち、パージャエンジン(purger engine)は、確率的データ構造140に関連付けられるアクティブなデータベーストランザクションが存在しない後にのみ、確率的データ構造140を再利用(reclaim)してよい。
【0042】
最も古いトランザクションコミット番号250は、様々な実施形態において、少なくとも1つのデータベースキーを確率的データ構造140に挿入した、(時間的に)最も古いコミットされたトランザクションを示すデータ値である。すなわち、トランザクションがデータベースノード120によってコミットされると、トランザクションは、該トランザクションが実行された時に基づき得るトランザクションコミット番号を割り当てられてよい。その結果、別のトランザクションよりも時間的に早くコミットされたトランザクションは、より少ない/低いトランザクションコミット番号を有する。最も古いトランザクションコミット番号250は、様々な実施形態において、データベースノード120によって、データベースキーについて確率的データ構造140をチェックすべきかどうかを判断するために使用される。例えばデータベースノード120が、最も古いトランザクションコミット番号250よりも小さい値のトランザクションスナップショットを処理している場合、そのデータベースノード120は、対応する確率的データ構造140をチェックしなくてよい。
【0043】
最も新しいトランザクションコミット番号260は、様々な実施形態において、少なくとも1つのデータベースキーを確率的データ構造140に挿入した、(時間的に)最も新しいコミットされたトランザクションを示すデータ値である。最も新しいトランザクションコミット番号260は、第1データベースノード120によって、どの確率的データ構造140を第2データベースノード120に送信するかを決定するために使用され得る。例えば第2データベースノード120が、データベースレコードについて第1データベースノード120に要求を送信するとき、該要求はトランザクションコミット番号を識別し得る。トランザクションコミット番号は、第2データベースノード120が第1データベースノード120から以前に受け取った確率的データ構造140の最新の最も新しいトランザクションコミット番号260に対応し得る。第1データベースノード120は、第2データベースノード120の要求で指定されたトランザクションコミット番号よりも大きい、最も新しいトランザクションコミット番号260を有する確率的データ構造140を含む応答を送信し得る。
【0044】
状態270は、様々な実施形態において、確率的データ構造140がそのライフサイクルにおいてどの段階にあるかを示すデータ値である。様々な実施形態において、確率的データ構造140のライフサイクルには、オープン(open)、クローズ(closed)及び未使用(unused)という3つの異なる段階がある。確率的データ構造140は、最初に、そのライフサイクルの「オープン」段階で開始し、したがって、「オープン」の状態270を有し得る。そのライフサイクルの「オープン」段階にある間、確率的データ構造140は、現在実行中のデータベーストランザクションから起こるデータベースキー挿入のために使用され得る。様々な実施形態において、指定された数のデータベースキーが確率的データ構造140に挿入された後、その状態270は「クローズ」に更新される。「クローズ」段階にある間、確率的データ構造140はデータベースノード120によって使用され続けてもよいが、それ以上のデータベースキーは確率的データ構造140に挿入されてはならない。その結果、現在実行中のデータベーストランザクションは、新しい確率的データ構造140への挿入に進み得る。
【0045】
識別子値275は、様々な実施形態において、他の確率的データ構造140から確率的データ構造140を識別する値である。様々な場合において、確率的データ構造140はその存在の間に複数回更新されて共有され得るので、識別子値275は、データベースノード120が確率的データ構造140の古くなったコピーをリフレッシュすることを可能にし得る。例として、トランザクションは、確率的データ構造140が別のデータベースノード120に提供された後に、確率的データ構造140にキーを挿入し続ける可能性がある。更新された確率的データ構造140が他のデータベースノード120と再び共有される場合、他のデータベースノード120は、更新されたバージョンと置き換えることができるように、より古いバージョンの確率的データ構造140を識別するために識別子値275を使用してよい。いくつかの実施形態において、データベースノード120は、データベースレコード要求122の一部として識別子値275を含んでよく、それにより、受信側のデータベースノード120は、対応する確率的データ構造140が更新されたかどうか及びデータベースレコード応答124の一部として返されるべきかどうかを判断することができる。
【0046】
いくつかの実施形態において、確率的データ構造140の最も新しいトランザクションコミット番号260が、フラッシャトランザクションコミット番号(データベース110にフラッシュされた最新のトランザクションを識別し得る)を超えた後、対応するデータベースノード120上で実行するパージャエンジンは、確率的データ構造140をリタイアする手順を開始する。パージャエンジンは、確率的データ構造140を「未使用」状態に遷移させてよい。したがって、状態270は、確率的データ構造140が未使用状態であることを反映するよう更新され得る。
【0047】
次に、
図2Bに移ると、例示のキャッシュライン構造210のブロック図が示されている。図示される実施形態では、キャッシュライン構造210は、各々がそれぞれのキャッシュラインセクション285を有する、キャッシュライン280A~280Dを含む。いくつかの実施形態では、キャッシュライン構造210は、図示されるものとは異なるように実装されてもよい。キャッシュライン280A~280Dは接続されていないように示されているが、いくつかの実施形態において、キャッシュライン280A~280Dは、所与のキャッシュライン280がオフセット値によって識別され得、そのセグメント内の設定されたバイト数にわたり得る、メモリの連続セグメントの一部である。
【0048】
キャッシュライン280は、様々な実施形態において、各々、データベースキーを確率的データ構造140に挿入することの一部として設定され得るビットの集合である。したがって、キャッシュラインセクション285はビット値であり得る。様々な実施形態において、キャッシュライン280は、ハードウェア構成であるが、他の実施形態では、キャッシュライン280は、ソフトウェアで実装されてもよい。図示されるように、キャッシュライン280当たり5つのキャッシュラインセクション285(すなわち、5ビット)が存在するが、キャッシュライン280当たりのビット量は、他の実施形態では、異なる可能性がある。場合によっては、キャッシュライン280当たりのビット量は、キャッシュライン構造210の所望のサイズと所望の偽陽性率とに基づくものであってよい。
図3に関連してより詳細に議論されるように、初期ハッシュ関数を実行して、キャッシュライン280(例えばキャッシュライン280A)を選択するために使用可能なハッシュ値を生成することができ、次いで、ハッシュ関数のセットを実行して、そのキャッシュライン280のビットを設定(例えばセクション285A及び285Cのビットを設定)するために使用可能なハッシュ値を生成することができる。設定されるビット数は、システム100のプロパティに基づいてもよい。例えばシステム100は、8つの異なる位置からの同時ロードを可能にする命令を提供し得る。したがって、その命令の特性から利益を得るために、所与のデータベースキーについて、8ビットがキャッシュライン280内に設定され得る。
【0049】
次に、
図3に移ると、例示のトランザクションエンジン310のブロック図が示されている。図示される実施形態では、トランザクションエンジン310はハッシュ関数315を含む。更に図示されるように、トランザクションエンジン310は、インメモリキャッシュ130及びキャッシュライン構造210と対話する。いくつかの実施形態において、トランザクションエンジン310は、図示されるものとは異なるように実装されてもよい。
【0050】
トランザクションエンジン310は、様々な実施形態において、データベーストランザクションを処理するために実行可能なソフトウェアルーチンのセットであり、そのようなデータベーストランザクションは、データベースレコード135をインメモリキャッシュ130に挿入し、対応するデータベースキー320を確率的データ構造140のキャッシュライン構造210に挿入することを含むことができる。
図4に関連してより詳細に議論されるように、データベーストランザクションを処理することの一部として、トランザクションエンジン310は、他のインメモリキャッシュ130からデータベースレコード135を潜在的に受け取るために、他のデータベースノード120における他のトランザクションエンジン310に対してデータベースレコード要求122を発行し得る。
【0051】
図示されるように、トランザクションエンジン310は、データベーストランザクション要求105を受け取ることができる。様々な場合において、データベーストランザクション要求105を処理することは、1つ以上のデータベースレコード135をインメモリキャッシュ130に書き込むことを伴ってよい。データベースレコード135がインメモリキャッシュ130に書き込まれると、様々な実施形態において、トランザクションエンジン310は、対応するデータベースキー320をキャッシュライン構造210に挿入する。いくつかの実施形態において、トランザクションエンジン310は、そのトランザクションのデータベースキー320の、確率的データ構造140へのバルク挿入を実行し、それに続いてトランザクションコミットを開始してよく、場合によっては、バルク挿入は、トランザクションを最終的にコミットする前にデータベースノード120がアクションのセットを実行する、事前コミットフェーズ(pre-commit phase)の一部として実行される。
【0052】
データベースキー320をキャッシュライン構造210に挿入するために、トランザクションエンジン310は、ハッシュ関数315のセットをデータベースキー320に対して実行して、ハッシュ値のセットを導出し得る。ハッシュ関数315は、様々な実施形態において、任意のサイズのデータ(例えばデータベースキー320)を固定サイズの値にマップするために実行可能な関数である。ハッシュ関数315は、例えばMurmurHashファミリーに見られるハッシュ関数に対応してよい。データベースキー320をキャッシュライン構造210に挿入するとき、トランザクションエンジン310は、最初に、ハッシュ関数315をデータベースキー320に対して実行して、キャッシュライン280を選択するために使用可能なハッシュ値を導出し得る。図示されるように、トランザクションエンジン310は、ハッシュ関数315Aをデータベースキー320に対して実行してハッシュ値330Aを導出する。ハッシュ値330Aは、キャッシュライン280Cを選択するために使用される。結果として、トランザクションエンジン310は、キャッシュライン280C内のビットを設定し得る。どのビットを設定するかを決定するために、トランザクションエンジン310は、追加のハッシュ関数315を実行して、キャッシュライン280内のビットを設定するために使用される追加のハッシュ値を導出し得る。図示されるように、トランザクションエンジン310は、ハッシュ関数315B及び315Cをデータベースキー320に対して実行して、それぞれ、ハッシュ値330B及び330Cを導出し得る。ハッシュ値330B及び330Cは、キャッシュライン280C内のビットを設定するために使用される。
【0053】
いくつかの実施形態において、データベースキー範囲を示す情報が、キャッシュライン構造210に挿入されてもよい。トランザクションエンジン310は、データベースキー範囲内のデータベースキーの間で共有されるプレフィックス部分に対して、上述の手順を実行してよい。その結果、プレフィックス部分が、キャッシュライン構造210に挿入され得る。データベースノード120は、さらに、別のデータベースノード120から受け取った確率的データ構造140内のプレフィックス部分の挿入をチェックすることによって、別のデータベースノード120からキー範囲に関連付けられるデータベースレコードを要求するかどうかを判断し得る。
【0054】
次に、
図4に移ると、例示のデータベースノード120A及び120Bのブロック図が示されている。図示される実施形態において、データベースノード120A及び120Bは、インメモリキャッシュ130、確率的データ構造140A~140C及びトランザクションエンジン310を含む。図示されるように、確率的データ構造140A及び140Bは、それらがデータベースノード120Aによって生成されたという点で、データベースノード120Aに対してローカルであり、一方、確率的データ構造140Cは、それがデータベースノード120Bによって生成されたという点で、データベースノード120Bに対してローカルである。図示される実施形態は、図示されるものとは異なるように実装されてもよく、例えばデータベースノード120A及び120Bは、パージャエンジンを含んでもよい。
【0055】
以前に説明したように、データベースノード120は、データベースサービス(例えばデータ記憶)をシステム100のテナント(例えば組織)に提供してよい。テナントのデータは、そのテナントに関連付けられるキー空間を定義し得る。いくつかの実施形態において、キー空間は、各々がそれぞれのデータベースノード120に割り当てられる、複数のキー空間区分に分割され得る。したがって、データベースノード120は、その割り当てられたキー空間内にあるデータベースレコードのみをそのインメモリキャッシュ130に書き込むことができる。その結果、データベースノード120によって生成される確率的データ構造140は、その割り当てられたキー空間に対応し得る。したがって、例として、確率的データ構造140A及び140Bはデータベースノード120Aのキー空間に対応し、確率的データ構造140Cはデータベースノード120Bのキー空間に対応する。
【0056】
データベースノード120がデータベースレコード135にアクセスすることを望むとき、その対応するデータベースキー320に基づいて、データベースレコード135がどのキー空間に属するかを決定することができる。そのデータベースレコード135がデータベースノード120の自身のキー空間に属する場合、データベースレコード135についてそれ自身のインメモリキャッシュ130をチェックしてよく、次いで、レコード135がそれ自身のインメモリキャッシュ130にない場合にはデータベース110に進んでよい。そのデータベースレコード135が別のデータベースノード120のキー空間に属する(例えばデータベースノード120Aに属する)場合、前のデータベースノード120(例えばデータベースノード120B)は、データベースレコードのデータベースキー320を示す情報についてチェックされ得る、確率的データ構造140を有するかどうかを判断することができる。
【0057】
最初に、データベースノード120Bは、データベースノード120Aからのいかなる確率的データ構造140も有しないことがある。データベースノード120Bは、したがって、データベースレコード135について、特定のデータベースキー320を識別するデータベースレコード要求122を発行し得る。様々な実施形態において、データベースレコードのルックアップの副次的効果として、データベースノード120Aは、データベースレコード応答124の一部として、確率的データ構造140をデータベースノード120Bに返すことができる。データベースノード120Aのインメモリキャッシュ130にデータベースレコード135が見つからない場合であっても、確率的データ構造140が返されてよい。いくつかの実施形態において、データベースノード120Bは、確率的データ構造140のために、データベースノード120Aに対して確率的データ構造固有の要求を発行することができる。データベースノード120Aは、最初に確率的データ構造140Aのみを生成していることがあり、したがって、データベースレコード要求122に対するデータベースレコード応答124の一部として、それをデータベースノード120Bに返すことができる。
【0058】
その後、データベースノード120Bは、データベースノード120Aに割り当てられたキー空間に属する別のデータベースレコード135にアクセスすることを望むことがある。いくつかの実施形態において、データベースノード120Bは、そのデータベースレコードのデータベースキー320が確率的データ構造140Aのキー範囲220内にある場合であって、そのデータベースレコード135に関連付けられるトランザクションスナップショットが、最も古いトランザクションコミット番号250によって識別され得る、確率的データ構造140Aに関連付けられる最も古いトランザクションコミットよりも早く発生する場合、(データベースノード120Bが以前に受け取った)確率的データ構造140Aをチェックする。様々な場合において、データベースノード120Bは、確率的データ構造140をチェックすべきかどうかを判断するために、1つ又は他の又は追加のパラメータをチェックしてよい。
【0059】
該当する場合、データベースノード120Bは、特定のデータベースキー320に関連付けられるデータベースレコード135がデータベースノード120Aのインメモリキャッシュ130に存在する可能性があるかどうかを判断するために、確率的データ構造140Aをチェックしてよい。可能性がある場合、次いでデータベースノード120Bは、データベースレコード要求122をデータベースノード120Aに送信してよい。いくつかの実施形態において、データベースレコード要求122は、最も新しいトランザクションコミット番号260を指定する。データベースノード120Aは、コミット番号260を使用して、データベースノード120Bがデータベースレコード要求122を最後に発行してから、いずれか新しい確率的データ構造140が作成されたかどうかを判断することができる。新しい確率的データ構造140が存在する場合(例えばデータベースノード120Aが確率的データ構造140Bを作成し得た場合)、次いで、それらの確率的データ構造140を、データベースレコード応答124を介して返すことができる。
【0060】
説明したように、データベースノード120は、データベースレコードをデータベース110にフラッシュする前に、それらのデータベースレコード135をそのインメモリキャッシュ130に最初に書き込んでよい。データベースノード120は、特定のトランザクションコミット番号又はエポックまでデータベースレコード135をフラッシュしてよい。様々な実施形態において、データベースレコード135をデータベース110にフラッシュするとき、データベースノード120は、最も新しいトランザクションコミット番号260がパージトランザクションコミット番号よりも小さい確率的データ構造140をパージしてよい。例えば確率的データ構造140Aは、トランザクション「A」にのみ関連付けられ得る。したがって、トランザクションAに関連付けられるすべてのデータベースレコード135がデータベース110にフラッシュされるとき、データベースノード120Aは、確率的データ構造140Aがもはや他のデータベースノード120に提供されないように確率的データ構造140Aをパージしてよい。いくつかの実施形態において、データベースノード120は、パージされた確率的データ構造140について他のデータベースノード120に通知し、その結果、それらの他のデータベースノード120は、それらの確率的データ構造140のコピーを以前に受け取った場合は、それらの確率的データ構造140をもはや使用しない。更に様々な実施形態において、データベースレコード135がデータベース110にフラッシュされるとき、パージトランザクションコミット番号の指示が、すべてのデータベースノード120に対してアクセス可能なカタログに書き込まれてもよい。したがって、データベースノード120はカタログから読み取って、ある特定の確率的データ構造140がパージされたときにそれらを使用しないことを決定してよく、パージするデータベースノード120は、パージされた確率的データ構造140について知らせるために他のデータベースノード120と直接通信する必要はない。データベースノード120は、古い確率的データ構造140をそのストレージから除去してよい。
【0061】
次に
図5に移ると、例示の確率的データ構造140A~140Cと対話するトランザクションエンジン310のブロック図が示されている。図示される実施形態は、図示されるものとは異なるように実装されてもよく、例えば図示されるものよりも、より多くの確率的データ構造140が存在してもよい。
【0062】
いくつかの実施形態において、データベースノード120は、長期実行トランザクションを非長期実行トランザクションとは異なるように処理する。説明したように、データベースノード120がトランザクションのためのデータベースキー320を確率的データ構造140に最初に挿入するとき、そのデータベースノード120は、確率的データ構造140のアクティブトランザクションカウント240をインクリメントすることによって、その確率的データ構造140にトランザクションを登録し得る。アクティブトランザクションカウント240が非ゼロの間、その確率的データ構造140はデータベースノード120からパージされ得ない。これは、長期実行トランザクションが、確率的データ構造140がパージされることを妨げ、データベースノード120が、新しい確率的データ構造140を作成するために割り当てられた空間が尽きるという問題を生じる可能性がある。特に、長期実行トランザクション(例えば2時間以上継続するもの)は、長期実行トランザクションがコミットしていない間にパージすることができない、複数の確率的データ構造140への書き込みをする可能性がある。いくつかの例において、例えば数千の確率的データ構造140が数時間にわたってパージされることを妨げられる複数の長期実行トランザクションが存在する可能性がある。したがって、データベースノード120は、これらの確率的データ構造140をしばらくの間パージすることができない可能性があるため、新しい確率的データ構造140を割り当てるのに十分な空間を有していない可能性がある。したがって、いくつかの実施形態において、データベースノード120は、長期実行トランザクションを、非長期実行トランザクションとは異なるように処理する。
【0063】
データベーストランザクションの処理を開始すると、データベースノード120は、データベーストランザクションのためのデータベースキー320を確率的データ構造140に最初に挿入してよい。例えば図示されるように、トランザクションエンジン310は、データベースキー320を確率的データ構造140Aに挿入する。しかしながら、データベースノード120が、データベーストランザクションを長期実行データベーストランザクションとして分類すべきであると判断する場合、次いで、データベースノード120は、事前コミットフェーズまで、そのデータベーストランザクションのためのデータベースキーの挿入を停止してよい。データベーストランザクションを長期実行トランザクションとして分類すべきかどうかを判断するために、データベースノード120は、様々な基準を使用してよい。様々な実施形態において、データベーストランザクションが、指定された時間量よりも長く続く(又は超える)場合、そのデータベーストランザクションは、長期実行トランザクションとして分類され得る。例えばデータベースノード120がデータベーストランザクションを120秒間処理していた場合、そのデータベーストランザクションは、長期実行トランザクションとして分類され得る。いくつかの実施形態において、データベーストランザクションが、指定された数の確率的データ構造140にキーを挿入した場合、そのデータベーストランザクションは、長期実行トランザクションとして分類され得る。例として、データベーストランザクションを処理する際に、データベースノード120がデータベースキー320を10個の異なる確率的データ構造140に挿入した場合、データベーストランザクションは、長期実行トランザクションとして分類され得る。
【0064】
データベースノード120は、データベーストランザクションが長期実行データベーストランザクションであると決定すると、様々な実施形態において、データベースノード120は、データベーストランザクションを、それが接触した確率的データ構造140から登録解除する。データベーストランザクションを所与の確率的データ構造140から登録解除するために、データベースノード120は、その所与の確率的データ構造140についてのアクティブトランザクションカウント240をデクリメントしてよい。これは、長期実行データベーストランザクションがコミットするのを待つよりも早く所与の確率的データ構造140がパージされることを可能にすることができる。データベーストランザクションが長期実行トランザクションであると決定した後、データベースノード120は、そのトランザクションについてデータベースノード120によって事前コミットフェーズが開始されるまで、そのトランザクションについて確率的データ構造140へのデータベースキー320の挿入を停止してよい。様々な実施形態において、トランザクションは、そのトランザクションについてすべてのデータベースレコード135をそのインメモリキャッシュ130に書き込んだ後に、データベースノード120によってコミットされ、ここで、コミットは、そのインメモリキャッシュ130に関連して行われてよい。いくつかの実施形態において、長期実行データベーストランザクションについてキー挿入を停止する代わりに、データベースノード120は、データベースキー320を単一の確率的データ構造140に書き込むことを開始してもよい。データベースノード120は、確率的データ構造140が、そうでない場合に許容されるよりも、キーの閾値数を超えることを可能にし得る、すなわち、データベースノード120は、確率的データ構造140が、新たな確率的データ構造140を作成する代わりに、オーバーフローすることを可能にし得る。
【0065】
データベースノード120が長期実行データベーストランザクションをコミットする前に、様々な実施形態において、データベースノード120は、トランザクションに関連付けられるすべてのデータベースキー320の、確率的データ構造140の新しいセットへのバルク挿入を実行する。データベースノード120は、次いで、前述のように、データベーストランザクション要求105に対する応答の一部として、確率的データ構造140の新しいセットを別のデータベースノード120に提供してよい。いくつかの実施形態において、データベースノード120は、そのデータベーストランザクションについてすべてのデータベースキー320の挿入をリスタートする代わりに、データベーストランザクションについてデータベースキー320の挿入を再開してよい。
【0066】
次に
図6に移ると、方法600のフロー図が示されている。方法600は、第2データベースノード(例えばデータベースノード120B)に確率的データ構造(例えば確率的データ構造140)を提供するために、第1データベースノード(例えばデータベースノード120A)によって実行される方法の一実施形態である。方法600は、非一時的コンピュータ読取可能媒体上に記憶されるプログラム命令のセットを実行することによって実行され得る。いくつかの実施形態において、方法600は、より多くの又はより少ないステップを含んでもよい。例として、方法600は、第1データベースノードが、そのインメモリキャッシュ(例えばインメモリキャッシュ130A)から、第1データベースノードと第2データベースノードとの間で共有される永続的ストレージ(例えばデータベース110)へ、データベースレコード(例えばデータベースレコード135)のセットのうちの1つ以上を書き込むステップを含み得る。第1データベースノードは、これらのデータベースレコードを永続的ストレージに書き込むことに応答して、1つ以上の確率的データ構造をパージするかどうかを判断し得る。
【0067】
方法600は、ステップ610において開始し、ここで、第1データベースノードが、データベースレコードのセットを第1データベースノードのインメモリキャッシュに書き込むことを伴う、データベーストランザクションを処理する。該処理は、確率的データ構造のセット内に、データベースレコードのセットに対応するデータベースキーのセット(例えばデータベースキー320)を挿入することを含んでもよい。いくつかの実施形態において、所与のデータベースキーを所与の確率的データ構造に挿入することは、ハッシュ関数(例えばハッシュ関数315)を所与のデータベースキーに適用して、所与の確率的データ構造に含まれる複数のキャッシュラインのうちの特定の1つ(例えばキャッシュライン280)に対応するハッシュ値(例えばハッシュ値330)を導出することを含む。したがって、第1データベースノードは、所与のデータベースキーを特定のキャッシュラインに挿入し得る。所与のデータベースキーを特定のキャッシュラインに挿入することは、ハッシュ関数のセット(例えばハッシュ関数315)を所与のデータベースキーに適用してハッシュ値のセットを導出することと、ハッシュ値のセットに基づいて特定のキャッシュラインのビットのセット(例えばキャッシュラインセクション285のビット)を設定することとを含んでもよい。
【0068】
第1データベースノードは、データベースキーのセットのうちのデータベースキーを確率的データ構造のセットのうちの第1確率的データ構造内に挿入してよい。いくつかの例では、第1確率的データ構造が、定義された閾値数のデータベースキー(例えば20,000個のキー)を含むことに応答して、第1データベースノードは、データベースキーのセットのうちの残りのデータベースキーを、確率的データ構造のセットのうちの第2の異なる確率的データ構造に挿入してよい。場合によっては、確率的データ構造のセットのうちの少なくとも1つの確率的データ構造は、複数の異なるトランザクションからのデータベースキーに関連付けられてよい。
【0069】
ステップ620において、第1データベースノードは、第2データベースノードが、第1データベースノードからデータベースキーに関連付けられるデータベースレコードを要求するかどうかを判断することを可能にするために、確率的データ構造のセットを第2データベースノードに送信する。確率的データ構造のセットを第2データベースノードに送信した後、第1データベースノードは、1つ以上の追加の確率的データ構造を確率的データ構造のセットに追加してよい。第1データベースノードは、次いで、第2データベースノードから、特定のデータベースキーに関連付けられるデータベースレコードの最近のバージョン(most recent version)について、データベースレコード要求(例えばデータベースレコード要求122)を受け取ることがある。第1データベースノードは、データベースレコード要求に対する応答(例えばデータベースレコード応答124)において、1つ以上の追加の確率的データ構造を含めてもよい。
【0070】
いくつかの実施形態において、所与の確率的データ構造は、該所与の確率的データ構造に対応する最新のトランザクションコミットを示すメタデータ(例えば最も新しいトランザクションコミット番号260)に関連付けられる。場合によっては、1つ以上の追加の確率的データ構造を応答に含める前に、第1データベースノードは、1つ以上の追加の確率的データ構造の各々が、データベースレコード要求で指定された特定のトランザクションコミットより後の時点に対応する、それぞれ最後の最新のトランザクションコミットに関連付けられていることに基づいて、1つ以上の追加の確率的データ構造を含めることを決定してよい。
【0071】
いくつかの実施形態において、所与の確率的データ構造は、該所定の確率的データ構造にデータベースキーが挿入されたアクティブトランザクションの数を示すメタデータ(例えばアクティブトランザクションカウント240)に関連付けられる。第1データベースノードは、アクティブトランザクションの数が、所与の確率的データ構造についてアクティブトランザクションが存在することを示すかどうかに基づいて、所与の確率的データ構造をパージすることができるかどうかを判断してよい。場合によっては、確率的データ構造のセットのうちの少なくとも2つの確率的データ構造は各々、データベーストランザクションを処理することの一部として挿入される、それぞれのデータベースキーを含み得る。したがって、インメモリキャッシュに関連してデータベーストランザクションをコミットすることに応答して、第1データベースノードは、少なくとも2つの確率的データ構造の各々について、その確率的データ構造に関連付けられるアクティブトランザクションの数をデクリメントしてよい。
【0072】
次に
図7に移ると、方法700のフロー図が示されている。方法700は、第2データベースノード(例えばデータベースノード120B)からデータベースレコード(例えばデータベースレコード135)を要求するかどうかを判断するために、第1データベースノード(例えばデータベースノード120A)によって実行される方法の一実施形態である。方法700は、非一時的コンピュータ読取可能媒体に記憶されたプログラム命令のセットを実行することによって実行され得る。いくつかの実施形態において、方法700は、より多くの又はより少ないステップを含んでもよい。例として、方法700は、第1データベースノードが、アプリケーションシステムから受け取ったトランザクション要求(例えばデータベーストランザクション要求105)を処理することの一部として、(第2データベースノードから受け取った)データベースレコードをアプリケーションシステムに提供するステップを含み得る。
【0073】
方法700は、ステップ710において開始し、ここで、第1データベースノードが、第2データベースノードから、所与のデータベースレコードが第2データベースノードのインメモリキャッシュ(例えばインメモリキャッシュ130B)内に記憶されていないかどうかを判断するために使用可能な確率的データ構造(例えば確率的データ構造140)のセットを受け取る。ステップ720において、第1データベースノードは、特定のデータベースキー(例えばデータベースキー320)を伴うデータベーストランザクションを処理する要求(例えばデータベーストランザクション要求105)を受け取る。
【0074】
ステップ730において、第1データベースノードは、確率的データ構造のセットに基づいて、第2データベースノードから、特定のデータベースキーに関連付けられるデータベースレコードの最近のバージョンを要求するかどうかを判断する。いくつかの実施形態において、所与の確率的データ構造は複数のキャッシュラインを含む。したがって、第1データベースノードは、ハッシュ関数(例えばハッシュ関数315)を特定のデータベースキーに適用してハッシュ値(例えばハッシュ値330)を導出し得る。ハッシュ値に基づいて、第1データベースノードは、所与の確率的データ構造の複数のキャッシュラインのうちの1つを選択し得る。次いで、第1データベースノードは、キャッシュラインに記憶された情報が特定のデータベースキーを示すかどうかを判断し得る。
【0075】
キャッシュラインに記憶された情報が特定のデータベースキーを示していないと判断したことに応答して、第1データベースノードは、該第1データベースノードと第2データベースノードによって共有される永続的ストレージ(例えばデータベース110)からのデータベースレコードの最近のバージョンを要求してよい。キャッシュラインに記憶された情報が特定のデータベースキーを示すと判断したことに応答して、第1データベースノードは、データベースレコードの最近のバージョンについての要求(例えばデータベースレコード要求122)を第2データベースノードに送信してよい。したがって、第1データベースノードは、第2データベースノードから応答(例えばデータベースレコード応答124)を受け取ってよい。場合によっては、第2データベースノードへの要求は、確率的データ構造のセットに関連付けられる最新のトランザクションコミットを識別し得る。したがって、応答は、要求によって識別される最新のトランザクションコミットより後に発生するトランザクションコミットに各々関連付けられる、追加の確率的データ構造のセットを含み得る。
【0076】
次に
図8に移ると、方法800のフロー図が示されている。方法800は、長期実行データベーストランザクションを処理するためにデータベースノード(例えばデータベースノード120)によって実行される方法の一実施形態である。方法800は、非一時的コンピュータ読取可能媒体に記憶されたプログラム命令のセットを実行することによって実行され得る。いくつかの実施形態において、方法800は、より多くの又はより少ないステップを含んでもよい。例として、方法800は、データベースノードが、該データベースノードから特定のデータベースキー(例えばデータベースキー320)に関連付けられるデータベースレコード(例えばデータベースレコード135)を要求するかどうかを別のデータベースノードが判断することを可能にするために、別のデータベースノードに確率的データ構造(例えば確率的データ構造140)のセットを送信するステップを含んでもよい。
【0077】
方法800は、ステップ810において開始し、ここで、データベースノードは、該データベースノードのインメモリキャッシュ(例えばインメモリキャッシュ130)にデータベースレコードのセット(例えばデータベースレコード135)を書き込むことと、データベースキーの対応するセット(例えばデータベースキー320)を確率的データ構造に挿入することとを伴う、データベーストランザクションを実行する要求(例えばデータベーストランザクション要求105)を受け取る。ステップ820において、データベースノードはデータベーストランザクションを実行する。
【0078】
ステップ822において、データベーストランザクションを実行することの一部として、データベーストランザクションのために少なくとも1つのデータベースキーが挿入される各確率的データ構造について、データベースノードは、データベーストランザクションをその確率的データ構造に登録する。様々な場合において、登録は、データベーストランザクションが登録されている間、その確率的データ構造が削除されることを防止するために行われる。いくつかの実施形態において、確率的データ構造のうちの特定の1つは、データベースキーがその特定の確率的データ構造に挿入されているアクティブトランザクションの数を指定するメタデータ(例えばアクティブトランザクションカウント240)を含む。アクティブトランザクションの数が、少なくとも1つのアクティブトランザクションが存在することを示す間、特定の確率的データ構造が削除されることが防止され得る。場合によっては、データベーストランザクションを実行することは、特定の確率的データ構造に少なくとも1つのデータベースキーを挿入することを含む。したがって、データベースノードは、特定の確率的データ構造にデータベーストランザクションを登録してよく、アクティブトランザクションの数をインクリメントするためにメタデータを更新することを含んでよい。
【0079】
ステップ824において、データベーストランザクションを実行することの一部として、データベースノードは、データベーストランザクションの持続時間が指定された時間量(例えば30秒)を超えることを決定する。いくつかの実施形態において、データベースノードは、指定された数(例えば10)の確率的データ構造が、データベーストランザクションを実行することの一部として書き込まれたと決定する。
【0080】
ステップ826において、データベーストランザクションを実行することの一部として、決定に応答して、データベースノードは、データベーストランザクションが以前に登録された各確率的データ構造から、データベーストランザクションを登録解除する。特定の確率的データ構造からデータベーストランザクションを登録解除することは、アクティブトランザクションの数をデクリメントするようにメタデータを更新することを含み得る。デクリメントすることにより、アクティブトランザクションの数がゼロになることがある。したがって、確率的データ構造からデータベーストランザクションを登録解除することにより、アクティブトランザクションが存在しないことを反映するようメタデータが更新されると決定した後、データベースノードは、特定の確率的データ構造を削除し得る。
【0081】
決定に応答して、データベースノードは、データベーストランザクションの事前コミットフェーズがデータベースノードによって開始されるまで、データベーストランザクションのためのデータベースキーの、確率的データ構造への挿入を遅らせてよい。場合によっては、データベーストランザクションのための事前コミットフェーズの開始に応答して、データベースノードは、データベーストランザクションのデータベースキーのセットの、確率的データ構造のセットへの挿入をリスタートしてよい。場合によっては、データベーストランザクションの事前コミットフェーズの開始に応答して、データベースノードは、データベーストランザクションのデータベースキーのセットの、確率的データ構造のセットへの挿入を再開してよい。データベーストランザクションをコミットする前に、データベースノードは、データベーストランザクションが登録解除された、確率的データ構造のうちの少なくとも1つを削除してもよい。いくつかの実施形態において、決定に応答して、データベースノードは、データベースキーのセットのうちの残りのデータベースキーを単一の確率的データ構造に挿入する。
【0082】
例示のコンピュータシステム
次に
図9に移ると、システム100、データベース110及び/又はデータベースノード120を実装し得る例示のコンピュータシステム900のブロック図が示されている。コンピュータシステム900は、相互接続960(例えばシステムバス)を介してシステムメモリ920及びI/Oインタフェース940に結合されるプロセッサ・サブシステム980を含む。I/Oインタフェース940は、1つ以上のI/Oデバイス950に結合される。コンピュータシステム900は、これらに限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、携帯電話や音楽プレーヤ又はパーソナルデータアシスタント(PDA)のような消費者デバイスを含む、様々なタイプのデバイスのいずれであってよい。便宜的に単一のコンピュータシステム900が
図9に示されているが、システム900はまた、一緒に動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0083】
プロセッサ・サブシステム980は、1つ以上のプロセッサ又は処理ユニットを含んでよい。コンピュータシステム900の様々な実施形態において、プロセッサ・サブシステム980の複数のインスタンスを相互接続960に結合してよい。様々な実施形態において、プロセッサ・サブシステム980(又は980内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含んでよい。
【0084】
システムメモリ920は、システム900に本明細書で説明される様々な動作を実行させるために、プロセッサ・サブシステム980によって実行可能なプログラム命令を記憶するために使用可能である。システムメモリ920は、ハードディスクストレージ、フロッピーディスクストレージ、取り外し可能ディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読取専用メモリ(PROM、EEPROM等)等のような、異なる物理的なメモリ媒体を使用して実装されてよい。コンピュータシステム900内のメモリは、メモリ920のような一次ストレージに限定されない。むしろ、コンピュータシステム900は、プロセッサ・サブシステム980内のキャッシュメモリ及びI/Oデバイス950上の二次ストレージ(例えばハードドライブ、ストレージアレイ等)のような他の形態のストレージも含んでよい。いくつかの実施形態において、これらの他の形態のストレージはまた、プロセッサ・サブシステム980によって実行可能なプログラム命令も記憶してもよい。いくつかの実施形態において、実行されると、データベース110、データベースノード120、インメモリキャッシュ130及び確率的データ構造140を実装するプログラム命令を、システムメモリ920内に含むか/記憶してよい。
【0085】
I/Oインタフェース940は、様々な実施形態に従って、他のデバイスに結合して通信するよう構成される様々なタイプのインタフェースのいずれかであってよい。一実施形態において、I/Oインタフェース940は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップ(例えばサウスブリッジ)である。I/Oインタフェース940は、1つ以上の対応するバス又は他のインタフェースを介して1つ以上のI/Oデバイス950に結合されてよい。I/Oデバイス950の例は、ストレージデバイス(ハードドライブ、光学ドライブ、取り外し可能フラッシュドライブ、ストレージアレイ、SAN又はそれらに関連するコントローラ)、(例えばローカル又はワイドエリアネットワークへの)ネットワークインタフェースデバイス又は他のデバイス(例えばグラフィクス、ユーザインタフェースデバイス等)を含む。一実施形態において、コンピュータシステム900は、ネットワークインタフェースデバイス950(例えばWi-Fi、Bluetooth(登録商標)、Ethernet(登録商標)等を介して通信するよう構成される)を介してネットワークに結合される。
【0086】
本出願の主題の実現は、以下の例1~20を含むが、これらに限定されない。
1. 第1データベースノードによって、データベースレコードのセットを第1データベースノードのインメモリキャッシュに書き込むことを伴う、データベーストランザクションを処理するステップであって、該処理するステップは、データベースレコードのセットに対応するデータベースキーのセットを確率的データ構造のセットに挿入することを含む、ステップと、
第1データベースノードからデータベースキーに関連付けられるデータベースレコードを要求するかどうかを第2データベースノードが判断することを可能にするために、第1データベースノードによって、確率的データ構造のセットを第2データベースノードに送信するステップと、
を含む、方法。
2. データベースキーのセットのうちの所与のデータベースキーを確率的データ構造のセットのうちの所与の確率的データ構造に挿入することは、
第1データベースノードによって、ハッシュ関数を所与のデータベースキーに適用して、所与の確率的データ構造に含まれる複数のキャッシュラインのうちの特定のキャッシュラインに対応するハッシュ値を導出することと、
第1データベースノードによって、所与のデータベースキーを所与の確率的データ構造の特定のキャッシュラインに挿入することと、
を含む、例1に記載の方法。
3. 所与のデータベースキーを所与の確率的データ構造の特定のキャッシュラインに挿入することは、
第1データベースノードによって、ハッシュ関数のセットを所与のデータベースキーに適用して、ハッシュ値のセットを導出することと、
第1データベースノードによって、ハッシュ値のセットに基づいて、特定のキャッシュラインのビットのセットを設定することと、
を含む、例2に記載の方法。
4. データベースキーのセットを挿入することは、
第1データベースノードによって、データベースキーのセットのうちのデータベースキーを確率的データ構造のセットのうちの第1確率的データ構造に挿入することと、
第1確率的データ構造が、定義された閾値数のデータベースキーを含んでいることに応答して、第1データベースノードが、データベースキーのセットのうちの残りのデータベースキーを確率的データ構造のセットのうちの第2の異なる確率的データ構造に挿入することと、
を含む、例1に記載の方法。
5. 確率的データ構造のセットのうちの所与の確率的データ構造は、該所与の確率的データ構造にデータベースキーが挿入されたアクティブトランザクションの数を示すメタデータに関連付けられ、方法は、
第1データベースノードによって、アクティブトランザクションの数が、所与の確率的データ構造についてアクティブトランザクションが存在することを示すかどうかに基づいて、所与の確率的データ構造をパージすることができるかどうかを判断するステップ、
を更に含む、例1に記載の方法。
6. 確率的データ構造のセットのうちの少なくとも2つの確率的データ構造は各々、データベーストランザクションを処理することの一部として挿入されるそれぞれのデータベースキーを含み、方法は、
インメモリキャッシュに関連してデータベーストランザクションをコミットすることに応答して、第1データベースノードが、少なくとも2つの確率的データ構造の各々について、その確率的データ構造に関連付けられるアクティブトランザクションの数をデクリメントするステップ、
を更に含む、例5に記載の方法。
7. 確率的データ構造のセットを第2データベースノードに送信した後に、第1データベースノードが、1つ以上の追加の確率的データ構造を確率的データ構造のセットに追加するステップと、
第1データベースノードによって、第2データベースノードから、特定のデータベースキーに関連付けられるデータベースレコードの最近のバージョンについて、データベースレコード要求を受け取るステップと、
第1データベースノードによって、データベースレコード要求に対する応答において、1つ以上の追加の確率的データ構造を含めるステップと、
を更に含む、例1に記載の方法。
8. 確率的データ構造のセットのうちの所与の確率的データ構造は、該所与の確率的データ構造に対応する最新のトランザクションコミットを示すメタデータに関連付けられ、方法は、
含めるステップの前に、1つ以上の追加の確率的データ構造の各々が、データベースレコード要求で指定される特定のトランザクションコミットより後の時点に対応する、それぞれの最新のトランザクションコミットに関連付けられていることに基づいて、第1データベースノードが、1つ以上の追加の確率的データ構造を含めると決定するステップ、
を更に含む、例7に記載の方法。
9. 第1データベースノードによって、インメモリキャッシュから、第1データベースノードと第2データベースノードとの間で共有される永続的ストレージに、データベースレコードのセットのうちの1つ以上のデータベースレコードを書き込むステップと、
書き込むステップに応答して、第1データベースノードが、確率的データ構造のセットのうちの所与の確率的データ構造をパージするかどうかを判断するステップと、
を更に含む、例1に記載の方法。
10. 確率的データ構造のセットのうちの少なくとも1つの確率的データ構造は、複数の異なるトランザクションからのデータベースキーに関連付けられる、
例1に記載の方法。
11. 第1コンピュータシステムに、
データベースレコードのセットを第1コンピュータシステムのインメモリキャッシュに書き込むことを伴う、データベーストランザクションを処理するステップであって、該処理するステップは、データベースレコードのセットに対応するデータベースキーのセットを確率的データ構造のセットに挿入することを含む、ステップと、
第1コンピュータシステムから特定のデータベースキーに関連付けられるデータベースレコードを要求するかどうかを第2コンピュータシステムが判断することを可能にするために、確率的データ構造のセットを第2コンピュータシステムに送信するステップと、
を含む動作を実行させることができるプログラム命令を有する、非一時的コンピュータ読取可能媒体。
12. データベースキーのセットのうちの所与のデータベースキーを確率的データ構造のセットのうちの所与の確率的データ構造に挿入することは、
ハッシュ関数を所与のデータベースキーに適用してハッシュ値を導出することと、
ハッシュ値に基づいて、所与の確率的データ構造の複数のキャッシュラインのうちの1つのキャッシュラインを選択することと、
所与のデータベースキーを選択されたキャッシュラインに挿入することと、
を含む、例11に記載の非一時的コンピュータ読取可能媒体。
13. データベースキーのセットを確率的データ構造のセットに挿入することは、
データベースキーのセットのうちのデータベースキーを、確率的データ構造のセットのうち、少なくとも閾値数のデータベースキーを含むことができる第1確率的データ構造に挿入することと、
第1確率的データ構造の閾値数に到達した後に、データベースキーのセットのうちの他のデータベースキーを、確率的データ構造のセットのうちの第2確率的データ構造に挿入することと、
を含む、例11に記載の非一時的コンピュータ読取可能媒体。
14. 確率的データ構造のセットのうちの特定の確率的データ構造は、該特定の確率的データ構造にデータベースキーが挿入されたアクティブトランザクションの数を示すアクティブトランザクションカウントを指定するメタデータを含み、
データベーストランザクションを処理することは、少なくとも1つのデータベースキーを特定の確率的データ構造内に挿入することを伴い、動作は、
データベーストランザクションをコミットすることに応答して、特定の確率的データ構造のアクティブトランザクションの数をデクリメントするステップ、
を更に含む、例11に記載の非一時的コンピュータ読取可能媒体。
15. 動作は、
第1コンピュータシステムのインメモリキャッシュから、第1コンピュータシステムと第2コンピュータシステムとの間で共有される永続的ストレージに、データベースレコードのセットを書き込むステップと、
永続的ストレージにデータベースレコードのセットを書き込むステップに応答して、確率的データ構造のセットのうちの1つ以上の確率的データ構造をパージするかどうかを判断するステップと、
を更に含む、例11に記載の非一時的コンピュータ読取可能媒体。
16. 第1データベースノードによって、第2データベースノードから、所与のデータベースレコードが第2データベースノードのインメモリキャッシュ内に記憶されていないかどうかを判断するために使用可能な確率的データ構造のセットを受け取るステップと、
第1データベースノードによって、特定のデータベースキーを伴うデータベーストランザクションを処理する要求を受け取るステップと、
第1データベースノードによって、確率的データ構造のセットに基づいて、第2データベースノードから、特定のデータベースキーに関連付けられるデータベースレコードの最近のバージョンを要求するかどうかを判断するステップと、
を含む、方法。
17. 確率的データ構造のセットのうちの所与の確率的データ構造は、複数のキャッシュラインを含み、判断するステップは、
第1データベースノードによって、ハッシュ関数を特定のデータベースキーに適用してハッシュ値を導出するステップと、
ハッシュ値に基づいて、第1データベースノードが、所与の確率的データ構造の複数のキャッシュラインのうちの1つのキャッシュラインを選択するステップと、
第1データベースノードによって、キャッシュラインに記憶された情報が特定のデータベースキーを示すかどうかを判断するステップと、
を含む、例16に記載の方法。
18. キャッシュラインに記憶された情報が特定のデータベースキーを示していないと判断したことに応答して、第1データベースノードが、該第1データベースノードと第2データベースノードによって共有される永続的ストレージから、データベースレコードの最近のバージョンを要求するステップ、
を更に含む、例17に記載の方法。
19. キャッシュラインに記憶された情報が特定のデータベースキーを示すと判断したことに応答して、第1データベースノードが、データベースレコードの最近のバージョンについての要求を第2データベースノードに送信するステップと、
第1データベースノードによって、第2データベースノードからの応答を受け取るステップと、
を更に含む、例17に記載の方法。
20. 要求は、確率的データ構造のセットに関連付けられる最新のトランザクションコミットを識別し、応答は、追加の確率的データ構造のセットを含み、追加の確率的データ構造の各々は、要求によって識別される最新のトランザクションコミットより後に発生する最新のトランザクションコミットに関連付けられる、
例19に記載の方法。
【0087】
特定の実施形態を上記で説明してきたが、これらの実施形態は、たとえ単一の実施形態のみが特定の特徴に関して記載されている場合であっても、本開示の範囲を限定するように意図されていない。本開示において提供される特徴の例は、特段の記載がない限り、限定的ではなく例示的であるように意図されている。上記の説明は、本開示の利益を有する当業者に明らかであるような、そのような代替、修正及び均等物を網羅するよう意図されている。
【0088】
本開示の範囲は、本明細書で対処される問題のいずれか又はすべてを緩和するか否かにかかわらず、本明細書において(明示的又は暗示的に)開示される任意の特徴又は特徴の組合せ又はその任意の一般化を含む。したがって、新たなクレームが、本出願(又はその優先権を主張する出願)の手続中にいずれかのそのような特徴の組合せに対して考案されてもよい。特に、添付の特許請求の範囲を参照すると、従属請求項の特徴は、独立請求項の特徴と組み合わされてよく、それぞれの独立請求項の特徴は、添付の特許請求の範囲に列挙された特定の組合せだけではなく、任意の適切な方法で組み合わされてよい。