(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-01
(45)【発行日】2023-02-09
(54)【発明の名称】LSMデータ構造内の効率的なレコードルックアップのためのキャッシュ
(51)【国際特許分類】
G06F 16/22 20190101AFI20230202BHJP
【FI】
G06F16/22
(21)【出願番号】P 2020562087
(86)(22)【出願日】2019-01-29
(86)【国際出願番号】 US2019015575
(87)【国際公開番号】W WO2019152371
(87)【国際公開日】2019-08-08
【審査請求日】2021-12-24
(32)【優先日】2018-01-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース ドット コム インコーポレイティッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ファンゲネル,トーマス
(72)【発明者】
【氏名】マーティン,ジャメイソン ベアー
(72)【発明者】
【氏名】ワイアット,ナサニエル
(72)【発明者】
【氏名】オンガロ,ディエゴ
(72)【発明者】
【氏名】チョン,テリー
【審査官】早川 学
(56)【参考文献】
【文献】米国特許出願公開第2014/0279881(US,A1)
【文献】米国特許第9400816(US,B1)
【文献】米国特許出願公開第2012/0072656(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
コンピュータシステムによって、
ログ構造化マージツリー(LSMツリー)と前記LSMツリー内のファイルにアクセスするためのマニフェストのセットとを維持するステップであって、前記LSMツリーは、データベースのための
前記ファイルを格納することができる複数のレベルを有
し、前記ファイルは、各々がキー及び対応するデータを有する、1つ以上のレコードを含
み、前記マニフェストのセットの各々は、対応する時点に前記LSMツリーの所与のレベルに含まれるファイルを指定する、ステップと;
前記コンピュータシステムによって、エントリが、キーについて、前記LSMツリーのファイル内の対応するレコードの位置の指示を格納する、
前記データベースのためのキャッシュを維持するステップ
であって、前記キャッシュを維持するステップは、前記キャッシュの所与のエントリにより識別されるファイルが前記マニフェストのセットのいずれにも指定されていないとき前記所与のエントリを無効にすることを含む、ステップと;
前記コンピュータシステムによって、前記LSMツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な第1キーを指定する、ステップと;
前記コンピュータシステムによって、前記第1キーを介して前記キャッシュから前記特定のレコードの位置の特定の指示を取り出すステップと;
前記特定の指示を使用して、前記コンピュータシステムが前記特定のレコードにアクセスするステップと;
を含む、方法。
【請求項2】
前記コンピュータシステムによって、前記LSMツリー内に追加のファイルを格納するステップであって、前記追加のファイルは、キーのセット及び対応するデータを含む、ステップと;
前記追加のファイルを格納するステップに続いて、前記コンピュータシステムが、前記キーのセットに含まれるキーを有する前記キャッシュ内のエントリを無効にするステップと;
を更に含む、請求項1に記載の方法。
【請求項3】
前記コンピュータシステムによって、前記LSMツリー内の第1レベルから第2レベルに特定のファイルをコピーするステップであって、該コピーするステップは、前記第1レベルのストレージ閾値に到達したことに応答して実行される、ステップと;
前記コピーするステップに続いて、
前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記LSMツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断すると、
前記コンピュータシステムが前記第1レベルから前記特定のファイルを削除するステップと;
を更に含む、請求項1又は2に記載の方法。
【請求項4】
前記LSMツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断することは:
前記特定のファイル内の位置の指示を格納しているエントリが無効にされていると判断した後、前記コンピュータシステムが、1つ以上の進行中スレッドに関連付けられる特定のマニフェストを維持することと;
前記特定のマニフェストが期限切れであることに応答して、前記コンピュータシステムが前記特定のファイルを削除することと;
を含み、前記特定のマニフェストが期限切れであることは、前記LSMツリーを読み取る進行中スレッドが、前記特定のファイルにアクセスできないことを示す、
請求項
1に記載の方法。
【請求項5】
位置の指示は、アトミックストア命令を使用して前記キャッシュのエントリに格納される、
請求項1乃至
4のいずれかに記載の方法。
【請求項6】
前記特定の指示を取り出すステップは、
前記コンピュータシステムによって、前記第1キーを使用してインデックス構造をスキャンすることにより第2キーを決定することを含み、前記特定の指示は、前記第2キーを使用して前記キャッシュ内に格納される、
請求項1乃至
5のいずれかに記載の方法。
【請求項7】
データベースシステムに、
LSMツリーとデータ構造内のファイルにアクセスするためのマニフェストのセットとを維持するステップであって、前記データ構造は、データベースのための
前記ファイルを格納する複数のレベルを有
し、前記ファイルは、各々がキー及び対応するデータを
含む、1つ以上のレコードを含
み、前記マニフェストのセットの各々は、対応する時点に前記データ構造の所与のレベルに含まれるファイルを指定する、ステップと;
エントリが、所与のキーについて、対応するレコードが配置されている前記LSMツリー内の位置を定義する情報を格納する、
前記データベースのためのキャッシュを維持するステップ
であって、前記キャッシュを維持するステップは、前記キャッシュの所与のエントリにより識別されるファイルが前記マニフェストのセットのいずれにも指定されていないとき前記所与のエントリを無効にすることを含む、ステップと;
前記LSMツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な特定のキーを指定する、ステップと;
前記特定のキーを介して前記キャッシュから、前記特定のレコードが配置されている前記LSMツリー内の位置の指示を取り出すステップと;
前記指示を使用して、前記特定のレコードにアクセスするステップと;
を含む動作を実行させる
コンピュータプログラ
ム。
【請求項8】
前記動作は、
前記LSMツリー内に格納されている追加のレコードの要求を受け取るステップと、
前記キャッシュが前記追加のレコードの位置の指示を格納していないと判断したことに応答して、
前記特定のレコードについて前記LSMツリーを検索することによって、前記LSMツリー内
で前記特定のレコードが格納されている場所を決定するステップと、
前記特定のレコードが格納されている場所を決定したことに応答して、前記LSMツリー内
で前記特定のレコードが格納されている場所を示す指示を前記キャッシュ内に格納するステップと、
を更に含む、請求項
7に記載
のコンピュータ
プログラム。
【請求項9】
前記動作は、
外部ストレージから前記LSMツリーに複数のレコードを書き込むステップと、
前記複数のレコードを前記LSMツリーに書き込んだことに応答して、前記複数のレコードに関連付けられるキーに一致するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、請求項
7又は
8に記載
のコンピュータ
プログラム。
【請求項10】
前記動作は、
前記LSMツリーの第1レベルのファイルから前記LSMツリーの第2レベルの新たなファイルに1つ以上のレコードを書き込むステップと、
前記書き込むステップに続いて、
前記ファイルに対応する情報を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記LSMツリーを読み取る進行中のスレッドが、前記ファイルにアクセスできないと判断すると、
前記第1レベルから前記ファイルを削除するステップと、
を更に含む、請求項
7乃至
9のいずれかに記載
のコンピュータ
プログラム。
【請求項11】
前記動作は、
前記キャッシュの特定のエントリ内に、前記LSMツリー内の第1レコードの位置を定義する第1指示を格納するステップであって、前記第1指示は、前記第1レコードに対応する第1のハッシュ化されたキーに基づいて格納される、ステップと、
前記キャッシュの前記特定のエントリ内
で、前記第1指示を、前記LSMツリー内の第2レコードの位置を定義する第2指示で上書きするステップであって、前記第2指示は、前記第2レコードに対応する第2のハッシュ化されたキーに基づいて格納され、前記第2のハッシュ化されたキーは、前記第1のハッシュ化されたキーに一致する、ステップと、
を更に含む、請求項
7乃至1
0のいずれかに記載
のコンピュータ
プログラム。
【請求項12】
前記動作は、
前記LSMツリー内の前記第1レコードの要求を受け取るステップであって、前記要求は、前記第1レコードに関連付けられる、あるキーを含むステップと、
前記あるキーを使用してハッシュ導出関数を実行し、前記第1のハッシュ化されたキーを導出するステップと、
前記第1のハッシュ化されたキーに基づいて、前記特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出すステップと、
前記特定の指示が、前記第2指示に対応し、前記第1レコードにアクセスするために使用可能でないと判断するステップと、
を更に含む、請求項1
1に記載
のコンピュータ
プログラム。
【請求項13】
システムであって:
1つ以上のプロセッサと;
前記1つ以上のプロセッサによって実行可能であり、当該システムに
請求項1乃至6のいずれかに記載の方法を実施させるプログラム命令を
記憶したメモリと;
を備える、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にデータシステムに関し、より具体的には、データベースシステム内のキャッシュに関する。
【背景技術】
【0002】
会社が、彼らのユーザの情報を格納したいとき、その会社は典型的に、効率的にアクセスされ得る編成方式で情報を格納するデータベース管理システムを用いる。そのようなデータベース管理システムは一般的に、情報をインデックス化し、行及び列を有するテーブルとしてデータベースに格納する編成スキーム(organization scheme)を実装する。さらに、データベース管理システムは、データベースアプリケーションを実行する複数のサーバを通して実装されてもよい。そのようなアプリケーションは、キー/インデックス値に基づいてテーブルを検索することによって、情報の要求を処理し得る。データ量が増加するにつれて、データにアクセスするために必要な時間も増加する。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、データベース及びデータベースサーバを実装するデータベースシステムの例示的要素を示すブロック図である。
【0004】
【
図2】いくつかの実施形態による、様々な関数を実行するルーチンの例示的要素を示すブロック図である。
【0005】
【
図3】いくつかの実施形態による、ログ構造化マージツリー(log-structured merge-tree)の例示的要素を示すブロック図である。
【0006】
【
図4A】いくつかの実施形態による、マージ手順の例示的要素を示すブロック図である。
【
図4B】いくつかの実施形態による、マージ手順の例示的要素を示すブロック図である。
【0007】
【
図5】いくつかの実施形態による、キャッシュの例示的要素を示すブロック図である。
【0008】
【
図6A-C】いくつかの実施形態による、マニフェストのセットの例示的要素を示すブロック図である。
【0009】
【
図7】いくつかの実施形態による、値ベースのキャッシュ不変(cache invariant)に基づくキャッシュ無効化スキームの例示的要素を示すブロック図である。
【0010】
【
図8】いくつかの実施形態による、位置ベースのキャッシュ不変に基づくキャッシュ無効化スキームの例示的要素を示すブロック図である。
【0011】
【
図9】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【
図10】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【
図11】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【0012】
【
図12】いくつかの実施形態による、例示的コンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0013】
本開示は、「一実施形態」又は「実施形態」への参照を含む。「一実施形態において」又は「実施形態において」というフレーズの登場は、必ずしも同じ実施形態を指していない。特定の特徴、構造又は特性は、本開示と一貫する任意の適切な方法で組み合わされてよい。
【0014】
本開示において、異なるエンティティ(「ユニット」、「回路」、他の構成要素等と様々に呼ばれることがある)は、1つ以上のタスク又はオペレーションを実行するように「構成される」ものとして説明又は特許請求されることがある。この定式化-すなわち[1つ以上のタスクを実行する]ように構成される[エンティティ]-は、本明細書において、構造(すなわち、電子回路のような何らかの物理的なもの)を指すために使用される。より具体的には、この定式化は、この構造が、動作中に1つ以上のタスクを実行するように構成されていることを示すために使用される。構造は、該構造が現在作動されていない場合であっても、何らかのタスクを実行する「ように構成される」と言うことができる。したがって、何らかのタスクを実行する「ように構成される」と説明又は記載されるエンティティは、そのタスクを実装するために実行可能なプログラム命令を格納しているデバイス、回路、メモリ等のような何らかの物理的なものを指す。このフレーズは、何らかの無形物を指すためには使用されない。したがって、構築する「ように構成される」は、本明細書では、アプリケーションプログラミングインタフェース(API)のようなソフトウェアエンティティを指すためには使用されない。
【0015】
「ように構成される」という用語は、「ように構成可能である」ことを意味するようには意図されていない。例えばプログラミングされていないFPGAは、なんらかの特定の関数を実行する「ように構成されてる」とは考えられないことがあるが、その関数を実行する「ように構成可能」であってよく、プログラミング後にその関数を実行する「ように構成される」ことがある。
【0016】
本明細書で使用されるとき、「第1」、「第2」等の用語は、それらが先行している名詞のラベルとして使用されており、特段の記載がない限り、いずれのタイプの順序(例えば空間、時間、論理等)を示唆するものでもない。例えば9つのレコードを格納しているデータベースシステムでは、「第1」及び「第2」ノードという用語を、9つのレコードのうちのいずれか2つを指すために使用することができる。
【0017】
本明細書で使用されるとき、「に基づいて」という用語は、決定に影響を与える1つ以上の要素を示すために使用される。この用語は、追加の要素が決定に影響を与え得る可能性を排除しない。すなわち、決定は、指定された要素のみに基づいてもよく、指定された要素だけでなく、他の指定されていない要素にも基づいてもよい。「Bに基づいてAを決定する」というフレーズを考える。このフレーズは、Bが、Aを決定するために使用される要素であること、あるいはAの決定に影響を与えることを指定する。このフレーズは、Aの決定が、Cのような何らかの他の要素にも基づいてよいことを除外しない。このフレーズは、AがBのみに基づいて決定される実施形態をカバーするようにも意図される。したがって、本明細書で使用されるとき、「に基づいて」というフレーズは、「少なくとも部分的に基づいて」というフレーズと同義である。
【0018】
詳細な説明
本開示は、ログ構造化マージツリーに格納されているレコードを探す(locate)ために使用可能なキャッシュを維持するための技術を説明する。本明細書で使用されるとき、「ログ構造化マージツリー」又は「LSMツリー」は、少なくともメモリコンポーネント及びオンディスクコンポーネントを含む組織スキームであって、この場合、データがまずメモリコンポーネントに書き込まれ、後にオンディスクコンポーネントに転送され、ここで、トップレベルから開始してオンディスクコンポーネント上のデータ構造のレベルを介して「マージ」される。マージは、データが古くなるにつれて、より低速で安価な記憶媒体に書き込まれることを可能にする。LSMツリーの他の態様は、その実装に基づいて、いったん書き込まれた後は不変であるファイル、オンディスクコンポーネント内の各レベルの異なるサイズ(例えばファイルの数)及びレコードの順序付けされたセットを含むファイルを含み得る。LSMツリーは、データの以前のバージョンの位置を特定して上書きしなければならない代わりに、そのデータをオンディスクコンポーネントのルートレベルに格納することができるので、(Bツリーのような構造に対して)改善された書き込みスピードを可能にし得る。
【0019】
以下で説明される様々な実施形態において、データベースシステムは、例えば特定のキーについて、レコードの位置をログ構造化ツリー内に格納するエントリを有するキャッシュを維持する。そのような実施形態において、データベースシステム内に含まれるデータベースサーバは、特定のレコードのついての主キーを指定する要求を受け取る。様々な実施形態において、データベースサーバは、キーに対応するエントリについてキャッシュをチェックし、そのようなエントリが存在しない場合、次いでサーバは、ログ構造化マージツリーを検索する。ログ構造化マージツリー内で特定のレコードが見つかった後、いくつかの実施形態では、データベースサーバは、キャッシュ内に、キーと関連付けて特定のレコードの位置を格納する。様々な実施形態において、データベースサーバは、主キーの代わりに二次キーを指定する要求を受け取る。そのような実施形態では、データベースサーバは、データベースサーバが対応するレコードにアクセスするために使用する、対応する主キーを探すために、二次キーを使用してインデックス構造をスキャンしてよい。
【0020】
これらの技術は、LSMツリー内のレコードに迅速かつより効率的にアクセスできるので、以前のアプローチに対して有利であり得る。すなわち、これらの技術は、LSMツリーのオンディスクコンポーネント内のダイレクトキールックアップ(direct-key lookups)が一定の償却期間内で達成されることを可能にし得る。さらに、二次キーを含むルックアップは、(二次キーを含むルックアップのコンポーネントである)ダイレクトキールックアップに関連付けられるコストが低減されるので、より効率的であり得る。
【0021】
次に
図1に移ると、データベースシステム10のブロック図が示されている。図示されている実施形態では、データベースシステム10は、データベース100及びデータベースサーバ140を含む。図示されるように、データベース100は、レベル110、120及び130を有するログ構造化マージツリー105と、マニフェスト107を含む。また、図示されるように、データベースサーバ140は、キャッシュ及びLSMツリールーチン150と、キャッシュ160を含む。図示されていないが、いくつかの実施形態では、データベースシステム10は、互いに及び複数のデータベース100と通信する、複数のデータベースサーバ140を含む。複数のデータベース100が存在する実施形態では、ツリー105の様々なレベル(例えば110、120等)が、これらのデータベースにわたって広がってもよい。図示されていないが、様々な実施形態において、アプリケーションサーバは、データベースサーバ140を介して、レコードをデータベース100にコミットし、データベース100からレコードを読み取る。いくつかの実施形態において、データベースシステム10は、図示されるものと異なるように実装され-例えばキャッシュ160が、それ自体のサーバに存在してよく-ツリー105が追加のレベルを有してもよい。
【0022】
データベース100は、様々な実施形態において、システム10のユーザについてのデータ(例えばレコード)を格納するように構成される共有ストレージである。いくつかの実施形態において、データベース100は、ネットワーク(例えばストレージ付属ネットワーク)上で一緒に接続され、データ損失を防ぐためにデータを冗長的に格納するように構成される、複数のストレージデバイスによって実装される。データベース100は、所与のテナントが、許可なしに別のテナントのデータにアクセスすることを妨げるような方法で、複数のテナント(及びそれらのユーザ)についてのデータを格納し得る。いくつかの実施形態において、データベース100は、ツリー105からデータを読み取り、ツリー105にデータを書き込むために、データベースサーバ140からのコマンド142を処理する。したがって、いくつかの実施形態において、応答144は、データベース100からの応答、データベース100からのメタデータ(例えばマニフェスト107)、レコードがデータベース100に成功裏に書き込まれたという確認応答等を含んでよい。
【0023】
ログ構造化マージツリー105は、様々な実施形態において、レベルベースのスキームを使用する組織化された方法でファイルを確認するデータ構造である。したがって、レベル110、120及び130は、データと、そのデータにアクセスするために使用可能な対応するインデックス(キー)を格納するレコードを有する一組のファイルを含んでよい。いくつかの実施形態において、ツリー105は、読み取り操作では、レコードが潜在的に存在する可能性があるいくつかの場所を考慮する必要があるので、効率の点で、読み取りよりも書き込みを優先するように設計されている。例えば読み取り操作の結果、ツリー105の様々なレベルを通過する一連の検索をすることになり得る。様々な実施形態では、レベル110、120及び130は、読み取り性能を改善するために異なる量のファイルを格納する。(図示されるように、例えばレベル110はファイル115A~115Lを含み、レベル120はファイル125A~125Tを含み、レベル130はファイル135A~135Zを含む。)各レベルにおける異なる量のファイルは、トップレベルが最も少ない量のファイルを格納し、各々後続のより低いレベルが以前のレベルよも多いファイルを含むツリー構造の外観をツリー105に与える。様々な実施形態において、新たなファイルは、コマンド142を介してレベル110(この場合、トップレベル)に書き込まれる。レベル110が特定の量のファイルを含むと、いくつかの実施形態では、データベースシステム10は、レベル110のレコードを次のレベル、すなわちレベル120にマージするかコピーする圧縮プロセスを実行する。データベースシステム10は、レベルが閾値数のファイル又はレコードを含むとき、そのレベルについて、この圧縮プロセスを実行してよい。そのようにする際に、データベースシステム10は、ツリー構造及び改善された読み取り性能を維持し得る。ログ構造化マージツリー105及びマージプロセスは、
図3及び
図4A~
図4Bに関連して以下で詳細に説明される。
【0024】
マニフェスト107は、様々な実施形態において、ツリー105及びその中に含まれるファイルを記述するメタデータを含む。様々な実施形態において、マニフェスト107は、異なる時点におけるツリー105の個々のスナップショットである。すなわち、マニフェスト107の各マニフェストは、所与の時点におけるツリー105及びそのレベルを記述するメタデータを含む。他の実施形態において、マニフェスト107は、ツリー105に対する変化が存在するときに、再書き込みされる単一の大きなマニフェストであってよい。加えて、ログのコンテキストでは、特定のマニフェスト107は、そのログの特定のセクションを参照してよい。いくつかの実施形態では、個々のマニフェスト107の作成は、トップレベルへのレコードの書き込み及び/又は圧縮/マージプロセスに起因する。
【0025】
いくつかの実施形態において、マニフェスト107は、ツリー105の各レベル内に含まれるファイル及びそれらの対応するキー範囲を指定する。(キー範囲は、
図3に関連して更に詳細に説明される。)したがって、アプリケーションサーバからのデータ要求141を処理するとき、データベースサーバ140は、どのファイルが、要求されたレコードを含み得るかを決定するために、特定のマニフェスト107を取り出し、それを読み取ってよい。すなわち、様々な実施形態において、サーバ140は、アプリケーションサーバからのデータ要求141に含まれるキーを、所与のマニフェスト107によって参照される様々なファイルのキー範囲と比較する。要求内に含まれるキーと重複するキー範囲を有するファイルが検索されてよい。マニフェスト107は、以下で
図6A~
図6Cに関連してより詳細に説明される。
【0026】
データベースサーバ140は、様々な実施形態において、データベース100を維持し、データベース100からデータを読み取り、データベース100にデータを書き込むための要求に対処する。サーバ140は、ソフトウェアルーチンのセット、ハードウェア又はその組合せを含んでよい。いくつかの実施形態において、サーバ140は、アプリケーションサーバから、レコードについてのデータ要求141を受け取り、データベース100と通信して、要求されたレコードを返す。同様に、サーバ140は、データベース100にレコードを書き込むための要求を受け取ることがある。様々な実施形態において、サーバ140は、ルーチン150を実行することによって、データベース100(よって、ツリー105)を維持する。
【0027】
キャッシュ及びLSMツリールーチン150は、様々な実施形態において、ツリー105の維持及びアプリケーションサーバからの要求141の処理を促進するソフトウェアルーチンのセットである。様々な実施形態において、ルーチン150は、ツリー105の所与のレベルからのファイルを、ツリー105の別のレベルにマージ(又はコピー)するためのソフトウェアルーチンを含む。加えて、ルーチン150は、ツリー105の別のレベルにそれらのコンテンツをコピーさせた後に残っているファイルをクリーンアップするためのルーチンを含んでもよい。ルーチン150は、レコードのバッチをツリー105に書き込み、レコードに対応するキャッシュ160内のエンティティを無効にするルーチンを更に含んでもよい。いくつかの実施形態において、ルーチン150は、ソフトウェアルーチンによって定義されるそれらのタスク(例えば読出し、書き込み、コピー、クリーニング、無効化等)を実行するスレッドを生じる。様々な実施形態において、特定のレコードを検索するとき、ルーチン150は、そのレコードに対応するキー157に基づいて、キャッシュ160を探す。場合によっては、キャッシュ160は、特定のレコードがツリー105内に置かれている場所を指定するポインタ165を提供し得る。ルーチン150は、
図2に関連して詳細に説明される。
【0028】
キャッシュ160は、様々な実施形態において、ツリー105内に格納されているレコードにアクセスするために使用可能なデータを格納することができるデータ構造である。いくつかの実施形態において、キャッシュ160は、特定のレコードにアクセスするために使用可能なデータが、そのレコードに関連付けられるキー157が提供されることに応答して返される、キーバリューストア(key-value store)を実装する。ツリー105は、様々な実施形態において、主キー157(例えば一意の行識別子)に従って編成される。主キー157を要するルックアップは、一連のO(log n)演算を含んでよい(例えばツリー105内のどのレベルが、そのキーと重複するキー範囲を有するか識別し、ツリー105の所与のレベル内のレコードにナビゲートする)。したがって、様々な実施形態において、キャッシュ160は、O(log n)コストを発生させることなく、レコードがルックアップされることを可能にする。さらに、二次キー157を要するルックアップも、キャッシュ160から利益を得ることができる。様々な実施形態において、二次キー157を要するルックアップは、1)インデックス構造(例えばB+ツリー)を検索することによって、対応する主キー157を決定し、次いで2)主キー157を使用してツリー105内でダイレクトキールックアップを実行することを含む。したがって、様々な実施形態において、キャッシュ160は、二次キールックアップに関連付けられるダイレクトキールックアップコストを発生させないよう、主キー157を使用してアクセス可能な(レコードへの)ポインタを格納する。キャッシュ160は、しかしながら、主キー157の代わりに、二次キー157を使用してアクセス可能なポインタを格納してもよい。様々な実施形態において、キャッシュ160には、所与のキーを要する(ツリー105内での)ルックアップの結果として、ポインタが追加される。
【0029】
様々な実施形態において、キャッシュ160は、所与のレコードが格納され得るデータベース100内の位置を識別するデータ(例えばポインタ)を格納する。上記で説明したように、ツリー105は常に、新たなファイルがツリーに書き込まれると、ツリー自体を再構築していることがある。したがって、ツリー105の変化する性質に対処する様々なスキームが、キャッシュ160のために実装され得る。2つの特定のスキームは、位置ベースの不変系(location-based invariant)又は値ベースの不変系(value-based invariant)として知られるものを使用する。前者のオプションでは、キャッシュ160は、特定のデータの最新バージョンを有する最新レコードを参照し、一方、後者のオプションでは、キャッシュ160は、データを格納しているレコードがもはや最新のマニフェスト107を介してアクセス可能でない場合であっても、特定のデータの最新バージョンを参照する。
【0030】
したがって、位置ベースの不変系の実施形態では、参照データを下にレベルをマージさせるマージが生じるとき、キャッシュ160内のエントリは、参照データを格納する新たなレコードを参照するように更新されてよい。したがって、キャッシュ160内のエントリは、参照データを見つけることができるツリー105内の最新の位置を反映するように更新されてよい。他方、値ベースの不変系の実施形態では、ファイルのコンテンツがツリー105内のより低いレベルにマージされるとき、元のファイルは、そのファイル内のレコードを参照するキャッシュ160のエントリが無効にされるまで維持されてよい。したがって、キャッシュ160内のエントリは、参照レコードが、ツリー105の別のレベルにマージされるたびに更新される必要はない。キャッシュ160及びこれらの2つのスキームは、
図5に関連して以下で更に詳細に説明される。
【0031】
したがって、一実装において、データベースシステム10は、各々がデータを格納する様々なレコードを含む様々なレベル(例えば115、125等)を有する、ログ構造化マージツリー105を維持する。そのような実装において、システム10は、キャッシュ及びLSMツリールーチン150と、キャッシュ160とを有するデータベースサーバ140を更に含む。そうして、ツリー105内の特定のレコードについての要求を受け取ると、サーバ140は、ツリー105のファイルを検索してレコードを突き止めてよく、キャッシュ160のエントリ内にその位置の指示を格納してよい。そのようなエントリは、主キー157又は二次キー157を使用してアクセス可能であり得る。そのレコードについての別の要求を受け取ると、サーバ140は、レコードに対応するキー157を使用して、キャッシュ160内のそのエントリを突き止め得る。そのような実装において、サーバ140は、キャッシュ160からポインタを取り出し、その後、対応するレコードにアクセスする。このアプローチは、システム10内のレコードのより迅速かつより効率的なルックアップを可能にするので有利であり得る。すなわち、ダイレクトキールックアップのコストを発生させる代わりに、サーバ140は、レコードが配置される場所を、その位置にポイントする情報をキャッシュ160から取り出すことによって迅速に識別し得る。
【0032】
上記で説明したように、ルーチン150は、様々な実施形態において、キャッシュ160を維持してアクセスすることに関連する様々なタスクを実行するために、ソフトウェアルーチンのセットを含む。これらのソフトウェアルーチンの例は次に、
図2に関連して更に詳細に説明される。
【0033】
次に
図2に移ると、ルーチン150のブロック図が示されている。上記で言及したように、ルーチン150は、ツリー105及びキャッシュ160の維持に対処し得る。図示された実施形態では、ルーチン150は、ストレージルーチン204、マージルーチン210、クリーニングルーチン220及び他のロジックルーチン230を含む、様々なルーチンを含む。いくつかの実施形態において、ルーチン150は、図示されるものと異なるように実装されてよい。例えばルーチン204、210、220又は230は全体としてハードウェアで実装されてよい。
【0034】
ストレージルーチン204は、様々な実施形態において、キャッシュ160内のエントリを投入(populate)及び/又は無効にするために実行可能なルーチンのセットである。そのようにして、エントリを追加又は無効にするとき、ルーチン210、220及び230は、キャッシュ160内のエントリを投入又は無効にするために、ストレージルーチン204を(直接又は間接的に)呼び出してよい。ストレージルーチン204は、例えばREDISのようなオープンソースプログラムであってよい。
【0035】
マージルーチン210は、様々な実施形態において、ツリー105のあるレベルからツリー105の別のレベルへレコードをマージする圧縮プロセスを実施するために実行可能なソフトウェアルーチンのセットである。いくつかの実施形態において、マージルーチン210は更に、マージによって影響を受けるレコードに関連付けられる、キャッシュ160内のエントリを無効にするために実行可能である。上記で言及したように、所与の時点において、ツリー105のレベルは、そのレベルについて望まれるよりも多くのレコードを格納してよい。したがって、いくつかの実施形態において、マージルーチン210は、レコードが取得されたレベルよりも多くのレコードを格納することができる別のレベルに、レコードをマージするために実行される。様々な実施形態において、別のレベルにレコードをマージすることは、それらのコンテンツを新たなファイルにコピーすることを含む。いくつかの実施形態において、キー範囲を使用して、どのレコードが、次のレベルにマージされるべきかを判断する。場合によって、マージすることは、新たなファイルが存在するより高いレベル及び同じレベルからのレコードを新たなファイルが含むように、既に次のレベル内にある(キー範囲と重複する)レコードを新たなファイルにコピーすることを含む。様々な実施形態では、マージルーチン210を実行した結果、元のレコードのコンテンツが別のレベルにマージされた後、元のレコードが所与のレベルに残る。したがって、いくつかの実施形態において、ルーチン150は、クリーンアッププロセスを実行して、残ったレコードを取り除く。
【0036】
クリーニングルーチン220は、様々な実施形態において、圧縮プロセスから残ったファイルの除去に対処する実行可能なソフトウェアルーチンのセットである。上記したように、ファイルは、マージされた後、キャッシュ160がこれらのファイル内のレコードを参照しなくなるまで維持され得る。したがって、様々な実施形態において、クリーニングルーチン220は、ファイルが完全に除去される前に、キャッシュ160が、そのファイルについてのいかなるエンティティも含まないことを保証するために実行可能である。したがって、クリーニングルーチン220は、除去されているファイルに関連付けられる、キャッシュ160内のエントリを無効化してよい。様々な実施形態において、ルーチン220は更に、無効化の直前に取得した情報を依然としてアクティブに処理している可能性があるスレッドが存在しないことを保証する。いくつかの実施形態において、ルーチン220は、マニフェスト107を使用する進行中スレッド(in-progress threads)が存在するかどうかを判断する。そのような実施形態では、進行中スレッドは、特定のマニフェスト107に関連付けられてよく、そのマニフェストの無効化は、進行中スレッドが存在しなくなることを示す。これは、
図7に関連して更に詳細に説明される。キャッシュ160内のいずれのエントリも特定のファイルを参照せず、進行中スレッドのいずれもそのファイルにアクセスすることができないと判断した後、様々な実施形態において、ルーチン220は、その特定のファイルを除去する。いくつかの実施形態において、ルーチン220は、除去されるべきファイルを示すクリーンアップキューを含む。ファイルは、それらが現在のマニフェスト107(例えば期限が切れていないマニフェスト107)によってもはや参照されなくなった後に、クリーンアップキューに追加されてよい。
【0037】
他のロジックルーチン230は、様々な実施形態において、アプリケーションサーバからのデータ要求の処理を促進するソフトウェアルーチンを含む。データ要求は、サーバ140のローカルのインメモリバッファにレコードを書き込み、該インメモリバッファからレコードを読み取ること、あるいは(要求されたレコードがインメモリバッファ内にない場合)ツリー105にレコードを書き込み、該ツリー105からレコードを読み取ることを含んでよい。いくつかの実施形態において、他のロジックルーチン230は、レコードのコンテンツをツリー105に書き込む前に、レコードをインメモリバッファに書き込む。すなわち、複数のレコードを蓄積した後、他のロジックルーチン230は、レコードをファイル115としてツリー105のトップレベル(例えばレベル110)に書き込んでよい。様々な実施形態において、ツリー105のトップレベルにレコードを書き込むことは、トップレベルが必要以上に多くのファイル又はレコードを含む可能性があるので、圧縮プロセスをトリガする。蓄積されたレコードをツリー105に書き込んだ後(又はそれらをツリー105に書き込む前に)、様々な実施形態では、他のロジックルーチン230は、ツリー105に書き込まれたレコードに含まれるものに対応するキーを有する、キャッシュ160内のエントリを無効にする。
【0038】
したがって、ルーチン204、210、220及び230の実行は、レコードをツリー105に書き込み、その後、ツリー105のレベルを通してそれらのレコードをマージすることによって、サーバ140がツリー105を維持することを可能にし得る。さらに、ルーチン204、210、220及び230の実行は、キャッシュ160内の有効なエントリが、ツリー105の変化する性質に関わらず存在するレコードをポイントすることを保証するように、サーバ140がキャッシュ160を維持することを可能にし得る。
【0039】
キャッシュ160を掘り下げる前に更に、
図3、
図4A及び
図4Bに伴う説明は、キャッシュ160の特定の側面についての基礎を提供する。
図3及びその説明はまず、ツリー105のレベル内に格納されるレコードを含む、ツリー105についての例示の組織スキームを詳述する。次いで、
図4A及び
図4Bに伴うテキストは、ツリー105のようなデータ構造内のあるレベルから別のレベルにレコードをマージするための例示的手順を記述する。
【0040】
次に
図3に移ると、ログ構造化マージツリー105の編成のブロック図が示されている。上記で言及したように、ツリー105は、レベルベースのスキームを使用する組織化方法でファイルを格納するデータ構造であってよい。図示される実施形態では、ツリー105は、ファイル115A~115Cを有するレベル110と、ファイル125A~125Cを有するレベル120と、ファイル135A~135Fを有するレベル130を含む。また、図示されるように、ファイル115Aは、レコード310A~310Fを含むレコード310を含む。図示される実施形態では、ファイル115、125及び135は、キー空間320を表すX軸と、時間330を表すY軸に沿って配置される。図示されていないが、あるレベルのファイルは、別のレベルのファイル内の他のレコードと、時間330において重複するレコードを含む。様々な実施形態において、ログ構造化マージツリー105は、図示されるものと異なるように実装されてよく、例えばツリー105内の各レベルは同じ数のファイルを含んでよい。
【0041】
レコード310は、様々な実施形態において、データアイテムであり、該データアイテムは各々、そのデータアイテムにアクセスするために使用可能な特定のキーに関連付けられる。例えばデータベーステーブルは、会社名、街路アドレス及び電子メールのための列を含んでよい。したがって、レコード310Aは、そのテーブル内の行を表してよく、特定の会社の名前、街路アドレス及び電子メールを含んでよい。様々な実施形態において、レコード310は各々、タイムスタンプ、キー(例えば各行に格納される一意の値)及びペイロード(例えばデータ値)を含んでよい。様々な実施形態において、所与のレコード310のキーは、そのレコードをインデックス化し、ツリー105内でそのレコードを探すために使用可能である。いくつかの実施形態において、所与のレコード310は、1つより多くのキーに関連付けられ、したがって、1つより多くのキー(例えば二次キー)を通してアクセス可能である。
【0042】
様々な実施形態において、レコード310は、該レコードがいったん書き込まれた後はレコードを修正することができないように、不変である。したがって、そのような実施形態では、所与のレコード310によって指定されたデータに対する変更により、新たなレコード310が作成されることになる。例えばユーザ名「Bob」を格納するレコード310を考える。ユーザ名が「Bill」に更新された場合、次いで、「Bob」を格納するレコードを修正する代わりに、新たなレコード310が作成される。そのようにして、レコード310は、データベーステーブル内の行に対する変更を表してよい。様々な実施形態において、レコード310は、データベース100で格納されるデータに影響を与えるデータベース操作(例えばINSERT、DELETE及びUPDATE)に関連付けられる。様々な実施形態において、レコード310は、最初に作成され、レコード310の蓄積がインメモリバッファ内で起こるまで、データベースサーバ140でインメモリバッファ内に格納される。レコード310の蓄積がバッファ内で存在すると、その後、サーバ140は、レコード310をファイル115としてツリー105に書き込んでよい。したがって、様々な実施形態において、ファイル115、125、135等は、データベースシステム10の動作中に様々な時間に書き込まれたレコード310の集合/グループである。
【0043】
キー空間320は、様々な実施形態において、ツリー105内のレコード310をインデックス化するのに使用されるすべてのキーを含むキー範囲である。上記で説明したように、個々のレコード310は、レコード310を識別する一意のキーを含んでよい。したがって、様々な実施形態において、ファイル115、125、135等は各々、それらが含む様々なレコード310によって定義されるキーの範囲に関連付けられる。レコード310が所与のファイルに書き込まれるとき、いくつかの実施形態では、それらのレコードは、そのファイル内の最初と最後のレコード310がそのファイルのキー範囲を定義するように、順序付けされたセットとして書き込まれる。図示されるように、例えばファイル135A~135Cは各々、キー範囲325A~325Cにそれぞれ関連付けられる。様々な実施形態では、レベル110を除くツリー105内の各レベル(例えばレベル120、130等)は、重複するキー範囲を含まない。加えて、そのような実施形態では、マニフェスト107は、所与のレベル内の各ファイルのキー範囲を指定する情報を含んでよい。したがって、特定のレコード310を検索するとき、データベースサーバ140はマニフェスト107を調べてよく、キー範囲が重複し得ないので、各レベル(レベル110を除く)内の1つのファイルのみを検索してよい。様々な実施形態において、圧縮プロセスが実行されると、システム10は、レベル120、130等において非重複ファイルを維持する。これは、
図4A~
図4Bに関連して更に詳細に説明される。
【0044】
時間330は、様々な実施形態において、システム10の動作に関連する時間の進行を表す。図示される実施形態では、時間330の軸を下に移動することは、時間を戻る動きを表す。すなわち、より古いレコード310がツリー105のより下のレベルで見られ得る。したがって、様々な実施形態において、データについてツリー105を検索するとき、より上位レベル内のレコード310がより新しく、したがって、そのデータについてより新しい値を含み得るので、より上位レベル(例えばレベル110)内のレコードが、より下位レベル(例えばレベル130)より前に検索され得る。様々な実施形態において、ファイル115、125、135等は各々、それらが含むレコード310によって定義される特定の時間330に関連付けられる。図示されていないが、いくつかの実施形態において、ファイル115、125、135等は、レベルにまたがって時間330で重複し得る。例えばファイル125Aは、ファイル135C内のレコード310と同じ時間に大まかに作成されたレコード310を含んでよい。
【0045】
したがって、データベースサーバ140は、ツリー105内の(レベル110を除く)各レベルが、キー空間320内で重複せず、時間330において比較的近いレコード310を含むように、ツリー105を維持してよい。このようにツリー105を維持する際に、より新しいレコード310がツリー105のトップレベルにより近く、キー範囲325はキー空間320内で重複せず、所与のレコード310について検索する必要があるのは(レベル110を除く)各レベル内の1つのファイルのみであるので、レコード310をより効率的に探すことができる。
【0046】
ツリー105は、したがって、レコードが周期的にツリーの異なるレベルに動かされるデータ構造である。次に説明される
図4A及び
図4Bは、そのような2つの異なるシナリオを示す。
【0047】
次に
図4Aに移ると、あるレベルから別のレベルにファイルのコンテンツがマージされるマージ手順のブロック図が示されている。上記で説明したように、ツリー105内の所与のレベルが、特定の量のファイルを含むと、データベースシステム10は、これらのファイル内のレコード310をツリー105の次のレベル内の新たなファイルに書き込んでよい。図示された実施形態では、ツリー105の2つのバージョン、例えばマージ410の前と後が示されている。図示されるように、(左に示されている)マージ410の前のバージョンでは、ツリー105は、ファイル125A~125Bを有するレベル120と、ファイル135A~135Dを有するレベル130を含む。図示されるように、(右に示されている)マージ410の後のバージョンでは、ツリー105は、ファイル125A~125Bのサブセットを有するレベル120と、ファイル135A及び135D~135Hを有するレベル130を含む。ファイル135E及び135Hはファイル135B及び135Cであるとみなされてもよいが、マージ410によって作成された新たなマニフェストは、ファイル135B及び135Cが有効であるキー範囲を制限することに留意されたい。
図4Aに関連して図示され、議論されるように、マージ410は、レベル120のファイル125内のレコードをレベル130の新たなファイル135にマージするために実行されてよい。様々な実施形態において、マージ手順は、
図4Bに関連して議論されるように、マージされているレベルに基づいて異なるように実装される。様々な実施形態において、マージ410は、マージルーチン210の実行の結果として実行される。
【0048】
マージ410は、様々な実施形態において、あるレベル(例えばレベル120)のレコード310を、別のレベル(例えばレベル130)のレコード310とマージするための手順である。したがって、様々な実施形態において、マージ410の結果、両レベル(例えばレベル120と130)からのレコード310を有する新たなファイルが作成されることになる。いくつかの実施形態において、マージ410は、所与のレベルのファイルの数が閾値量を超えていることに応答して実行される。他の実施形態において、マージ410は、データベースサーバ140がレコード310を周期的にマージする時間スキームに基づいて実行される。更に他の実施形態では、マージ410は、トリガ機構なしに断続的に実行される-例えばサーバ140は、レコード310が存在する限り、レコード310を断続的にマージする。様々な実施形態において、サーバ140は、マージ範囲420に基づいて、どのレコード310をマージすべきか決定する。
【0049】
マージ範囲420は、様々な実施形態において、ツリー105内の2つ以上の異なるレベル110、120、130等から、マージされるべき特定のレコード310を選択するために使用可能なキー範囲を定義する情報である。いくつかの実施形態において、範囲420内のキーの数は、システム10のユーザによって指定される。他の実施形態において、範囲420内のキーの数は、マージするレコード310の緊急度(urgency)に基づいて動的に変化(例えば増加又は減少)する。例えばデータベース100への大量の書き込みが存在する場合、より多くのレコードをマージする必要があり、したがって、範囲420は、そうでない場合よりも広い可能性がある。様々な実施形態において、範囲420は最後の範囲420が停止した場所から新たな範囲420が開始する(例えばキー空間320内の次のキーで開始する)ように、各マージ410の後にシフトされる。したがって、キー空間320内の最後のキーに到達すると、キー範囲420は、キー空間320の始めのキーに戻るようにループ/循環してよい。いくつかの実施形態において、範囲420は、マージ410が、ファイル内のすべてのレコード310を1回のマージ(one merge)でマージするように、選択されたファイルに基づいてキーの範囲を指定する。
【0050】
様々な実施形態において、マージ410は、マージ410に含まれ、かつマージ範囲420内にある2つ以上のレベルから、レコード310を選択する。例えば図示されるように、範囲420は、ファイル125A、125B、135B及び135Cからのレコードを含む。したがって、データベースサーバ140は、マージ範囲420内にある特定のレコード310を新たなファイルに書き込んでよい。いくつかの実施形態において、サーバ140は、ファイルが範囲420内にあるとき、そのファイル内に含まれる(マージされているレベルの)すべてのレコード310を書き込む。例えばファイル135Bの一部が範囲420内にあるので、ファイル135B内のすべてのレコード310が新たなファイルに書き込まれてよい。様々な実施形態において、レコード310は、それらのレコードに関連付けられたキーに基づく順序付けされたセットとして、新たなファイルに書き込まれる。様々な実施形態において、サーバ140は、ファイルが特定のサイズに到達するまでレコード310を新たなファイルに書き込み、ファイルが特定のサイズに到達した時点で、サーバ140は、残りのレコードを別の新たなファイルに書き込んでよい。すなわち、ツリー105内のファイル115、125、135等は、特定のサイズ(例えば2メガバイト)以下に保たれてよく、したがって、レコード310をマージすることにより、複数の新たなファイルが作成されることになり得る。例えば図示されるように、マージ410は、ファイル135E~135Hの作成をもたらしてよい。
【0051】
様々な実施形態において、データベースシステム10は、レコード310がツリー105内の下のレベルにマージされた元のファイル115、125、135等を維持する。したがって、いくつかの実施形態において、マージ410が行われた後、データベースサーバ140は、所与のファイル内の特定のレコード310がマージされたことを示すようにマニフェスト107を更新する。すなわち、所与のファイルについて、そのファイル内のマージされたレコード310を除くキー範囲325を指定する、新たなマニフェスト107が生成され得る。いくつかの実施形態において、サーバ140は、そのファイル内の特定のレコード310がマージされたことを反映するように-例えばマージされたレコード310に関連付けられるキー範囲を付加するように-ファイルを更新する。様々な実施形態において、マージ410は、マージされている所与のファイル内のレコード310のセットをもたらし、したがって、そのファイルが完全にマージされる前に複数回実行されてよい。ファイルが完全にマージされると、システム10は、クリーンアップキュー内のファイルを実行し、次いでそのファイルを除去するようクリーンアッププロセスを実行してよい。したがって、元のファイル115、125、135等は、限られた時間の間だけ維持され得る。
【0052】
次に
図4Bに移ると、ファイルのコンテンツが、あるレベルから別のレベルにマージされる、マージ手順のブロック図が示されている。図示される実施形態では、ツリー105の2つのバージョン、例えばマージ430の前と後が示されている。マージ430の前のバージョン(左側に図示される)で示されているように、ツリー105は、ファイル115A~115Cを有するレベル110と、ファイル125A~125Dを有するレベル120を含む。マージ410の後のバージョン(右側に図示される)で示されているように、ツリー105は、ファイル125A及び125Cのサブセットを有するレベル110と、ファイル135A及び135D~135Hを有するレベル120を含む。
図4Bに関連して図示され、議論されるように、マージ410を実行して、レベル110のファイル115内のレコードを、レベル120の新たなファイル125にマージすることができる。マージ430は、マージルーチン210の実行の結果として実行されてよい。
【0053】
様々な実施形態において、レベル110(すなわち、ツリー105のトップレベル)は、重複するキー範囲325を有するファイルを含むという点で、ツリー105内の他のレベル(例えば120、130等)に対して一意のプロパティを含む。図示されるように、例えばファイル115A~115Cは、キー空間320で重複し、一方、ファイル125A~Dは重複しない。したがって、いくつかの実施形態において、マージ430は、マージ430が、重複するファイル115を扱うという点において、マージ410と異なる。すなわち、マージ430は、ファイルが、ツリー105のトップレベル(例えばレベル110)から、ツリー105の次のレベル(例えば120)にマージされる一意のケースを表してよい。したがって、マージ430は、キー空間320内で重複する、同じレベルの複数のレコードから、レコード310を選択し、次いで、それらをツリー105の次のレベルにマージしてよい。
【0054】
したがって、マージ410及び430は、ツリー105は、レベル110、120、130等が、そのレベルに対して設定された特定のサイズを超えて成長しないことを保証し得る。そのようにする際に、マージ410及び430は、ツリー105からデータにアクセスするときに、データ取り出し回数を低く維持することができる。しかしながら、マージ410及び430の結果、レコード310は、ツリー105内のあるレベルから別のレベルにマージされることになる。
【0055】
ツリー105の構造及びツリーのあるレベルから別のレベルへのデータのマージを説明してきたが、次にツリー105の変化する性質に対処するための2つの異なる不変スキームを含むキャッシュ160を、
図5に関連して説明する。
【0056】
次に
図5に移ると、キャッシュ160のブロック図が示されている。図示される実施形態では、キャッシュ160は、キー157A~157Bと、対応するポインタ165A~165Bを含む。ポインタ165A~165Bは、ログ構造化マージツリー105のファイル内のレコード310A及び310Cを示す。図示されていないが、ポインタ165は、ツリー105内のファイル(例えばファイル115A~115B、ファイル125A~125B等)のいずれかの中のレコード310を示してよい。いくつかの実施形態において、キャッシュ160は、図示されるものと異なるように実装されてよい。例えばポインタ165は、個々のレコード310の代わりに、ファイル(例えばファイル115、125、135等)を示してよい。
【0057】
キャッシュ160は、様々な実施形態において、ツリー105内に格納されているデータ310にアクセスするために使用可能なデータを格納することができるデータ構造である。キャッシュ160は、ソフトウェアルーチン、ハードウェア又はそれらの任意の組合せを介して実装されてよい。上述のように、キャッシュ160は、キーバリューストアを実装してよい。いくつかの実施形態において、キー157は、それらが対応するレコード310を識別するために使用可能な(場合によっては一意の)識別子である。したがって、ツリー105内の特定のレコード310を検索するとき、データベースサーバ140は、その特定のレコード310が発見されるまで、提供されたキー157を、検索されるツリー105内の各レコードのキー157に対して比較してよい。特定のレコード310が発見されると、サーバ140は、ポインタ165を、そのレコード310に関連付けて格納してよい。いくつかの実施形態において、ポインタ165は各々、対応するレコード310をツリー105内で見つけることができる位置の指示を提供する。いくつかの実施形態において、ポインタ165は、対応するレコード310を見つけることができる、ファイル名(又はファイルアドレス)と、そのファイル内のオフセットを指定する。したがって、サーバ140は、ポインタ165を使用して、ツリー105を検索するよりも早くレコードを探すことができる。
【0058】
様々な実施形態において、キャッシュ160には、ツリー105を検索し、レコード310を突き止めた結果として、エントリが投入される。ツリー105内で特定のレコードを突き止めると、いくつかの実施形態では、ルーチン150は、対応するキー157について、ツリー105内でレコード310が配置される場所を示すポインタ165を格納するよう、格納要求530を作成する。したがって、レコード310の要求を受け取ると、ルーチン150は、要求内に含まれる特定のキー157をキャッシュ160に提供してよい。結果として、キャッシュ160は、対応するレコード310にポインタ165を返してよい。いくつかの実施形態において、キー157はハッシュ化されて(そして、潜在的にはキャッシュ160によってサポートされるエントリ数内の値となるように切り捨てられて)、特定のポインタ165が格納され得るインデックス値を導出する。したがって、様々な実施形態において、キャッシュ160はキー157を格納しない。これは、キャッシュ160のエントリへのアトミック更新(atomic update)を可能にし得、キャッシュ160のメモリサイズも低減し得る。様々な場合において、2つ以上のキー157は同じ特定のインデックスをハッシュ化することがある。したがって、いくつかの実施形態において、対応するキー157が、別のポインタが格納されているインデックスにハッシュする新たなポインタ165を格納するとき、新たなポインタ165は、他の古いポインタ165の代わりに格納される。すなわち、キー157がキャッシュ160内の所与のエントリについて衝突する実施形態では、その所与のエントリが新たなポインタ165で上書きされてよい。したがって、キャッシュ160からポインタ165を受け取ると、ルーチン150は、特定のレコード310をチェックして、そのキーが一致するかどうかを確かめてよい。キーが一致しない場合、次いで、ルーチン150には、キー衝突(key collision)の対象であった可能性があるポインタ165が提供された。以前に示したように、キャッシュ160は、値ベースの不変系又は位置ベースの不変系を使用して実装されてよい。これらの不変系は以下で議論されるが、キャッシュ160を実装するために他の不変系が使用されてもよい。
【0059】
様々な実施形態において、キャッシュ160は、値ベースの不変アプローチを実装する。値ベースの不変アプローチでは、ポインタ165が、特定のデータの最新バージョンを格納している現在の又は非現在のレコード310の位置を提供するか、現在の又は非現在のレコード310を示す。本明細書で使用されるとき、何らかの特定のデータに関連する「現在のレコード(current record)」は、その特定のデータを格納している、最後に作成されたレコードを指し、一方、「非現在のレコード(non-current record)」は、同じ特定のデータを格納しているが、最後に作成されたものではないレコードを指す。例えばツリー105のトップレベルに最初に書き込まれた特定のレコード310は、そのデータについての現在のレコードである。そのレコード310がツリー105の次のレベルにコピーされるとき、そのレコード310のコピーが現在のレコードになり、一方、コピーされた、トップレベル内の特定のレコード310は、非現在のレコードになる。すなわち、レコードがツリー105の次のレベルにコピーされる度に、その後、コピーが現在のレコードになる。したがって、値ベースの不変系が使用される実施形態では、キャッシュ160は、それらのレコード310が現在であるか非現在であるかに関わらず、特定のレコード310を示すポインタ165を含む。すなわち、ポイントされている特定のデータが修正されない限り、ポインタ165は、マージ410又は430の場合に現在のレコード310をポイントするように更新される必要はない。上記で言及したように、あるレベルから別のレベルにレコード310をコピーすることは、それらのコンテンツを変更しないことがある。したがって、いくつかの実施形態において、キャッシュ160のポインタ165は、レコード310がツリー105の別のレベルにマージ(又はコピー)されることに応答して、無効化されない。いくつかの実施形態において、ポインタ165は、それらがポイントするデータが更新されて、新たなレコード310として格納されていることに応答して無効化される-例えばサーバ140は、行がポインタ165によってポイントされている特定のレコード310に対応するテーブル内の行を修正するUPDATE操作を実行する。いくつかの実施形態において、ポインタ165は、それらの対応するファイルが、マニフェスト107のいずれによってもはや参照されないことに応答して徐々に無効化される。すなわち、マニフェスト107のいずれもそのファイルを参照しない場合、その後、そのファイルは、マニフェスト107を通してアクセスされ得ず、したがって、そのファイルをポイントする新たなポインタ165がキャッシュ160に追加されてよい。したがって、サーバ140は、そのファイルにポイントする新たなポインタ165が追加されることを心配する必要なく、エントリの無効化を開始してよい。いくつかの実施形態において、ポインタ165を無効化することは、エイリアス(aliases)をリサイクルする必要性に基づいて優先される。
【0060】
様々な実施形態において、エイリアスは、ファイル名の代理で使用され得る値である。いくつかの実施形態において、ポインタ165は、特定のレコードが配置され得るファイル内のオフセットとともにファイル名を指定する。しかしながら、場合によって、ファイル名は、キャッシュ160に格納するには長すぎる可能性がある。特に、様々な実施形態において、キャッシュ160は、アトミックストア命令を使用してポインタ165がそれらのエントリに格納されることを可能にするように、サイズが限られたエントリを含む。したがって、様々な実施形態において、キャッシュ160は、ファイル名の代わりにエイリアスを使用する。すなわち、エイリアスはより長さが短い-例えばエイリアスは、64ビット数とは対照的に16ビット数であってよい-ので、ポインタ165はファイル名を指定する代わりに、エイリアスを指定してよい。様々な実施形態において、システム10は、ファイル名に対するエイリアスのマップを維持する。したがって、キャッシュ160からポインタ165を取り出すことに応答して、サーバ140は、そのポインタのエイリアスをファイル名に変換してよく、関連するファイル内のレコードを取得するために使用する。様々な実施形態において、システム10は、エイリアスがキャッシュ内に存在する場合、マップ内にエントリが存在することを保証する。加えて、いくつかの実施形態において、システム10は限られた数のエイリアスを維持する。したがって、システム10は、別のファイルにエイリアスを使用するために、エイリアスをリサイクルする必要があり得る。したがって、様々な実施形態において、ファイルがマニフェスト107によって参照されなくなった後、システム10は、リサイクルされているエイリアスに関連付けられるキャッシュ160内のエントリを無効にする。キャッシュ160が、そのエイリアスに関連付けられるエントリを含まなくなった後、エイリアスと、そのエイリアスに関連付けられるファイルとの間のマッピングを除去して、エイリアスをリサイクルしてよい。
【0061】
いくつかの実施形態において、キャッシュ160は、位置ベースの不変系を実装する。位置ベースの不変系では、ポインタ165は、特定のデータの最新バージョンを格納している現在のレコード310の位置を提供するか、現在のレコード310を示す。他の不変系と同様に、ポインタ165は、同じ対応するキー157を有するレコード310が、インメモリバッファからツリー105にフラッシュ(flush)されていることに応答して無効化されてよい。そのようなフラッシュは、ポイントされたデータ(pointed-to-data)が修正されたことを示し得るからである。いくつかの実施形態において、ポインタ165は、ポイントされたデータがツリー105の別のレベルにマージ/コピーされていることに応答して無効化又は更新される。加えて、ポインタ165は、エイリアスをリサイクルする必要性に基づいて無効化されてよい。位置ベースの不変系は、
図8に関連して以下で更に詳細に説明される。
【0062】
双方の不変アプローチでは、レコードがインメモリバッファからフラッシュされて、LSMツリー105内にファイルとして書き込まれるとき、様々な実施形態では、キャッシュ160内の特定のエントリが無効化される。特に、LSMツリー105に追加されているレコードのキー157に対応するエントリが無効化される。様々な実施形態において、スレッドによるキャッシュの投入は、キャッシュ無効化の開始と、フラッシュ操作によって作成された新たなマニフェスト107が利用可能になる時間との間は妨げられる。特に、そのような実施形態では、その時間に古いマニフェスト107(すなわち、新たなマニフェスト107で置換されることになるマニフェスト107)に対して作用しているスレッドは、キャッシュ160を投入することを妨げられ、スレッドがキャッシュにレコードを投入しないことを保証する。そのようなレコードは、キャッシュ可能なレコードのセットを変更する新たなマニフェスト107の発行により、キャッシュ可能ではなくなる。
【0063】
したがって、他の不変系も可能であるが、位置ベースの不変系又は値ベースの不変系を実装する際に、キャッシュ160内の(有効である)エントリが、ツリー105内に存在するレコード310にポイントするポインタを格納することが保証され得る。以前に言及したように、値ベースの不変系では、キャッシュ160は、マージ410又は430の結果として完全にマージされたファイル内のレコード310を示すポインタ165を含んでよい。システム10は、しばらくの時間の間(完全にマージされた)特定のファイルを維持し得るが、そのファイルを除去することが望ましいことがある。したがって、いくつかの実施形態では、システム10は、クリーンアッププロセスを実行してキャッシュ160内のエントリを無効にし、所望のファイルを取り除く(例えばデータベースサーバ140は、クリーニングルーチン220を実行する)。これがどのように実行され得るかを説明する前に、
図6A~
図6Cに関連してマニフェスト107の概念を更に説明する。マニフェストは、
図7で議論される例示のクリーニング手順内の役割を果たすからである。
【0064】
次に
図6Aに移ると、マニフェスト107のセットのブロック図が示されている。図示される実施形態では、データベース100は、ファイル115A~115Cを参照するマニフェスト107A~107Cを含む。以前に言及したように、マニフェスト107は、異なる時点におけるツリー105のスナップショットを指定する個々のファイル(又は単一のファイル)であってよい。したがって、マニフェスト107Aは、ツリー105の最も早い有効な(例えばまだ使用中の)スナップショットを表してよく、一方、マニフェスト107B及び107Cは、ツリー105の漸進的に後のスナップショットを表してよい。
図6Aに更に示されるように、ファイル115Bは、ツリー105の別のレベルに部分的にマージされている(ボックスの一部について破線を有するファイル115のボックスによって示される)。したがって、
図6B及び
図6Cに示されるように、ファイル115Bは完全にマージされている(完全に破線であるファイル115Bのボックスによって示される)。
【0065】
特定のレコード310について検索するとき、いくつかの実施形態では、データベースサーバ140は、マニフェスト107を読み取って、ツリー105内でそのレコードが配置され得る、可能性のある位置を決定する。特に、様々な実施形態において、ルーチン150を実装するスレッドは、ツリー105内の特定のレコード310についての要求を受け取る。そのような実施形態では、これらのスレッドは、ライフスパン全体を通して考慮する特定のマニフェスト107に関連付けられてよい。システム10の動作中に、2つのスレッドが異なる時点で生成(spawned)される例を考える。そのような例では、2つのスレッドのうちの1つがマニフェスト107Aに関連付けられてよく、一方、他のスレッドはマニフェスト107Bに関連付けられてよい。したがって、第1スレッドが、レコード310についての要求を受け取るとき、マニフェスト107B(又は107C)の代わりにマニフェスト107Aを読み取ってよい。したがって、所与のスレッドが、特定のファイル内のレコード310へのアクセスを有するかどうかは、それがいつ生成されたかに依存し得る。なぜなら、その対応するマニフェスト107が、そのファイルでそのレコードを参照しない可能性があるからである。
【0066】
次に
図6Bに移ると、マニフェスト107のセットのブロック図が示されている。図示される実施形態において、データベース100は、マニフェスト107B~107Dを含む。図示されるように、マニフェスト107B及び107Cは、ファイル115A~115Cを参照するが、マニフェスト107Dは、ファイル115A及び115Cを参照するが、ファイル115Bは参照しない。
図6Bは、
図6Aとは対照的に、システム10の動作中のより後の時間を表している。
図6Aと
図6Bとの間の差によって示されるように、マニフェスト107Dが追加されており、マニフェスト107Aは期限切れになっている。
【0067】
様々な実施形態において、マニフェスト107は、レコード310がデータベースサーバ140のインメモリバッファからフラッシュされ、ファイル115としてツリー105に書き込まれたことに応答して作成される。様々な実施形態において、マニフェスト107は、マージ410又は430が行われたことに応答して作成される。図示された実施形態で示されるように、ファイル115Bのコンテンツは、ツリー105の別のレベルに完全にマージ/コピーされている。したがって、マニフェスト107Dは、ファイル115Bのコンテンツが完全にマージされたことに応答して作成されてよい。上記したように。ルーチン150を実装するスレッドは、特定のマニフェスト107に関連付けられてよい。したがって、特定のスレッドがマニフェスト107Dに関連付けられてよい。したがって、そのスレッドは、マニフェスト107Dを通してファイル115Bにアクセスし得ないが、そのファイルが存在し、キャッシュ160に格納されているポインタ165によって参照される限り、キャッシュ160を通してファイル115Bにアクセスしてよい。しかしながら、マニフェスト107B及び107Cに関連付けられる他のスレッドは、これらのマニフェストを通してファイル115Bにアクセスしてよい。
【0068】
次に
図6Cに移ると、マニフェスト107のセットのブロック図が示されている。図示される実施形態において、データベース100は、マニフェスト107D~107Fを含む。図示されるように、マニフェスト107D~Fは、ファイル115A及び115Cを参照するが、これらのマニフェスト107のいずれも、ファイル115Bは参照しない。
図6Cは、
図6A及び
図6Bとは対照的に、システム10の動作中のより後の時間を表している。
図6Cと、
図6A及び
図6Bの間の差によって示されるように、マニフェスト107E及び107Fが追加されており、マニフェスト107B及び107Cは期限が切れている。
【0069】
様々な実施形態において、マニフェスト107は、それが最新のマニフェスト107ではなく、いずれのスレッドもそのマニフェストを参照しないときに期限切れとなる。特に、スレッドがツリー105にアクセスする必要があるとき、スレッドは、最新のマニフェスト107への参照を取得し得る。スレッドは、ツリー105へのアクセスを終えると、その参照を開放し得る。同じスレッドが、後にツリー105にアクセスする必要がある場合、いくつかの実施形態において、スレッドは、最新であればどのようなマニフェスト107でも、マニフェスト107への新たな参照を受け取る。(スレッドは、その存在全体を通して、異なるマニフェスト107を参照してよいことに留意されたい)。いくつかの実施形態では、マニフェスト107は、(ルーチン150を実装する)関連するスレッドが存在しなくなることに基づいて期限切れとなる。すなわち、スレッドが生成されるとき、それらは、データベース100の特定のマニフェスト107に関連付けられてよい。したがって、新たなマニフェスト107が作成されるとき、続いて生成されるスレッドは、その新たなマニフェスト107に関連付けられてよい。したがって、特定の時点で、更に新しく生成されるスレッドが古いマニフェスト107に関連付けられ得ない場合があり得る。したがって、古いマニフェスト107に関連付けられるスレッドが終了すると、その後、スレッドがそのマニフェスト107を読み取ることはなくなり、よって、期限切れとなり得る(例えばアーカイブ又は削除され得る)。他の実施形態では、古いマニフェスト107は、閾値量のマニフェスト107に到達又は上回った後に期限切れとなる。更に他の実施形態では、マニフェスト107は、何らかの所定量の時間が経過したことに基づいて期限切れとなる。様々な実施形態において、マニフェスト107が所与のファイルを参照しないとき、次いで、そのファイルは、クリーンアップキューに置かれ、その後、除去され得る。例えば
図6Cに関連する時点では、いずれのマニフェスト107もファイル115Bを参照しないので、次いで、そのファイルは、クリーンアップキューに置かれ、その後、除去され得る。
【0070】
したがって、マニフェスト107は、特定のファイルにポイントする追加のポインタ165をキャッシュ160に格納することができるかどうかを判断するために使用される。以前に言及したように、キャッシュ160は、レコード310をルックアップする副産物として投入され得る。したがって、有効なマニフェスト107のいずれもが特定のファイルを参照しない場合、その後、マニフェスト107を通してそのファイルを探すことができない。(通過キャッシュ(going through cache)160のように、そのファイルにアクセスするために他の方法が潜在的に使用されてよい)。したがって、いくつかの実施形態では、その特定のファイルにポイントする新たなポインタ165は、ルックアップの副産物として追加されないことになる。マニフェスト107は、特定のスレッドが、有効なマニフェスト107では参照されないがキャッシュ160を介してアクセス可能な、特定のファイルにアクセスすることができるかどうかを判断するために更に使用されてよい。
【0071】
マニフェスト107、並びにどのようにキャッシュ160の値ベースの不変系が、(ファイルは保持されているが)コンテンツがマージされているファイル内のレコードを参照できるかについて説明してきたが、そのファイルを除去するためのクリーニングスキームについて、
図7に関連して議論する。クリーニングスキームは、除去されたファイルをポイントしないようにキャッシュ160内のエントリが適切に無効にされることを保証し得る。次いで、キャッシュ160の位置ベースの不変系のための無効化スキームが
図8に関連して議論される。
【0072】
次に
図7に移ると、キャッシュ160の値ベースの不変系に関連して使用されるクリーニングスキームのブロック図が示されている。上記で言及したように、キャッシュ160は、キャッシュ160のエントリが、特定のデータの最新のバージョンを格納している現在又は非現在のレコード310の位置を提供するか、現在又は非現在のレコード310を示す、値ベースの不変系を実装し得る。図示された実施形態では、スキーム700は、段階710、720及び730と、イベント715、724、726、734及び736を含む。図示されるように、段階710は、ファイル115と、キー157A~157C及びポインタ165A~165C(ポインタ165B及び165Cはファイル115を参照する)を含むキャッシュ160を含む。更に図示されるように、段階720は、ファイル115と、ファイル115を参照するマニフェスト107Aと、段階710と同じキー157及びポインタ165を有するキャッシュ160を含む。また、図示されるように、段階730は、ファイル115と、マニフェスト107Bと、キー157A及びポインタ165Aのみを有するキャッシュ160を含む。様々な実施形態において、スキーム700は、ルーチン204、210、220及び230の結果として実施される。いくつかの実施形態において、スキーム700は、図示されるものと異なるように-例えば
図8に関連して議論されるスキーム800のように実装されてよい。
【0073】
段階710は、様々な実施形態において、1)ファイル115内のすべてのレコードが新たなファイルに完全にマージされておらず、2)キャッシュ160のエントリが、ファイル115内で見つかり得る異なるレコード310を示すポインタ165B及び165Cを含む、システム10の動作中の時点を表す。したがって、段階710において、ルーチン150を実装するスレッドは、ポインタ165B及び165Cに結ばれるファイル115内のレコードを探すために、キャッシュ160を読み取ってよい。様々な実施形態において、段階710から段階720への移動は、イベント715の発生に起因する。いくつかの実施形態において、イベント715は、ファイル115内に含まれるすべてのレコード310を新たなファイルにマージ/コピーすること(例えばマージ410又は430の実施)を表す。
【0074】
段階720は、様々な実施形態において、ファイル115内に含まれるすべてのレコード310が、新たなファイルに完全にマージされている-例えばこれらのレコード310のすべてが、ツリー105の別のレベルの新たなファイルに書き込まれている-システム10の動作中の時点を表す。様々な実施形態において、マニフェスト107は、ファイル115が存在することを示す最新のマニフェスト107である。ファイル115は完全にマージされているが、ファイル115は、キャッシュ160を通して(特にポインタ165B及び165Cを介して)、そしてマニフェスト107A(及びより古く、ファイル115を参照する任意の他のマニフェスト107)を通してアクセスされ得る。様々な実施形態において。段階720から段階730への移動は、イベント724及び726の発生に起因する。いくつかの実施形態において、イベント724は、マニフェスト107Aの期限切れを表す-例えばマニフェスト107Aに関連付けられたスレッドが終了している。したがって、ファイル115はマニフェスト107を通してアクセスされ得ない。いくつかの実施形態において、マニフェスト107を通して特定のファイル(例えば115、125、135等)にアクセスすることができないとき、次いで、(例えばキャッシュ160は、マニフェスト107を使用する、ツリー105のルックアップの副産物として投入されるので)その特定のファイルへの新たなポインタ165をキャッシュ160内に格納することができない。したがって、イベント724が発生した後、様々な実施形態において、システム10は、キャッシュ160をウォークスルー(walking through)し、ファイル115内の位置を指定するポインタ165を含むエントリを無効化し始める。したがって、イベント726は、キャッシュ160内のエントリが無効化されていることを表し得る。いくつかの実施形態において、エントリが無効化されるレート(rate)は、ファイルに関連付けられるエイリアスがリサイクルされる必要があるかどうか(例えばエイリアスをリサイクルすることが緊急であるかどうか)に基づいてよい。
【0075】
段階730は、様々な実施形態において、ファイル115に含まれるすべてのレコード310が完全にマージされ、ファイル115を示したポインタ165を含んだキャッシュ160内のすべてのエントリが無効化されている、システム10の動作中の時点を表す。いくつかの実施形態において、マニフェスト107Bは、ファイル115にポイントしていたキャッシュ160内のすべてのエントリが無効化される前に作成された最新のマニフェスト107である。したがって、マニフェスト107Bは、キャッシュ160にアクセスしてポインタ165を取り出したスレッドに関連付けられてよい。したがって、そのようなスレッドは、それらのライフスパンの間に、取り出したポインタ165を介してファイル115にアクセスしてよい。いくつかの実施形態において、イベント734は、マニフェスト107Bの期限切れ、したがって、マニフェスト107Bに関連付けられるスレッドの終了を表す。いくつかの実施形態において、イベント736は、ファイルの削除(又は除去)を表す。すなわち、様々な実施形態において、システム10は、マニフェスト107Bが期限切れになることを待つことによって、ファイル115を読み取ることができる進行中のスレッドが存在しないことを保証する。したがって、マニフェスト107Bが期限切れになった後、ファイル115を読み取ることができるスレッドが存在するために発生するエラーなしに、システム10は、ファイル115を安全に除去し得る。したがって、スキーム700は、キャッシュ160が、除去されたファイルにポイントする有効なエントリを含まないことも保証しながら、データベース100からファイル(例えば115、125、135等)を除去するための機構として機能し得る。
【0076】
次に
図8に移ると、キャッシュ160において使用される無効化スキームのブロック図が示されている。上記で言及したように、キャッシュ160は、キャッシュ160のエントリが、特定のデータの最新バージョンを格納している現在のレコード310の位置を提供するか、現在のレコード310を示す、位置ベースの不変系を実装し得る。図示された実施形態では、スキーム800は、マージ430前後と、キー157及び対応するポインタ165を有するキャッシュ160を含む。マージ430前に示される(マージ430の上に示される)ように、ファイル115A及び115Bはレベル110に存在し、ファイル125A及び125Bはレベル120に存在する。マージ430後に示される(マージ430の下に示される)ように、ファイル115Bはレベル110に存在し、ファイル125A及び125C~125Dはレベル120に存在する。マージ430が図示されているが、様々な実施形態では、マージ430の代わりにマージ410が実行される。
【0077】
図示されるように、ポインタ165は、最初に、レベル110のファイル115A内の特定のレコード310を示してよい。ある時点で、キー範囲420が特定のレコード310に関連付けられるキーを含むマージ430が実行され得る。したがって、図示されるように、マージ430の結果、特定のレコード310のコピーを含むファイル125Cが作成されることになる。いくつかの実施形態において、サーバ140は、そのレコードが別のレベルにマージされたことに応答して、その特定のレコード310に対応するポインタを無効にする。いくつかの実施形態において、サーバは、ポインタ165を、ファイル124C内に含まれる特定のレコードにポイントする別のポインタ165に置換することによって、そのポインタ165を無効にする。
【0078】
次に
図9に移ると、方法900のフロー図が示されている。方法900は、ログ構造化マージツリー(LSMツリー)(例えばツリー105)内に格納されているデータ(例えばレコード310)を探すために使用可能なキャッシュ(例えばキャッシュ160)を維持するために、コンピュータシステム(例えばデータベースシステム10)によって実行される方法の一実施形態である。方法900は、ルーチン204、210、220及び230を実装するプログラム命令を実行することによって行われ得る。方法900において、キャッシュ160は、値ベースの不変系を実装し得る。様々な実装において、方法900は、外部ソースからのレコード(例えばレコード310)をLSMツリーに書き込むことのような追加のステップを含む。
【0079】
方法900は、コンピュータシステムが、データベース(例えばデータベース100)のためのファイル(ファイル115、125、135等)を格納することができる複数のレベル(例えばレベル110、120、130等)を有するLSMツリーを維持する、ステップ910で開始する。様々な実施形態において、ファイルは、各々がキー及び対応するデータを含む、1つ以上のレコード(例えばレコード310)を含む。様々な実施形態において、コンピュータシステムは、特定の時点におけるLSMツリーの特定のレベル内のファイルを個々に識別する複数のマニフェスト(例えばマニフェスト107)を維持する。
【0080】
ステップ920において、コンピュータシステムは、エントリが、キー(例えばキー157)について、LSMツリーのファイル内の対応するレコードの位置の指示(例えばポインタ165)を格納する、データベースのためのキャッシュを維持する。コンピュータシステムは、アトミックストア命令を実行して、指示をキャッシュのエントリに格納し得る。いくつかの実施形態において、コンピュータシステムは、キーのセット及び対応するデータを含む追加のファイルを、LSMツリーに格納する。追加のファイルを格納することに続いて、コンピュータシステムは、キーのセットに含まれるキーを有するキャッシュ内のエントリを無効にしてよい。
【0081】
ステップ930において、コンピュータシステムは、LSMツリー内に格納されている特定のレコードにアクセスする要求を受け取る。要求は、特定のレコードを探すために使用可能な第1キーを指定してよい。ステップ940において、コンピュータシステムは、キャッシュから第1キーを介して、特定のレコードの位置の特定の指示を取り出す。いくつかの実施形態において、特定の指示は、第2キーを使用してキャッシュ内に格納される。コンピュータシステムは、第1キーを使用してインデックス構造をスキャンすることによって、第2キーを決定してよい。ステップ950において、コンピュータシステムは、特定の指示を使用して特定のレコードにアクセスする。
【0082】
様々な実施形態において、コンピュータシステムは、特定のファイルをLSMツリーの第1レベルから第2レベルにコピー(例えばマージ410又は430)する。コピーは、第1レベルのストレージ閾値に到達したことに応答して実行されてよい。コピーに続いて、いくつかの実施形態では、コンピュータシステムは、特定のファイル内に位置の指示を格納しているキャッシュ内のエントリが無効にされていると判断し、LSMツリーを読み取る進行中のスレッドが特定のファイルにアクセスすることができないと判断すると、第1レベルから特定のファイルを削除する。コンピュータシステムによって維持されている複数のマニフェストのうちの1つが、特定のファイルを識別し得る。いくつかの実施形態では、複数のマニフェストのうちのいずれもが特定のファイルを識別しないことに続いて、コンピュータシステムは、特定のファイル内の位置の指示を格納しているキャッシュ内のエントリを無効にする。特定のファイル内の位置の指示を格納しているエントリが無効化されていると判断した後に、コンピュータシステムは、1つ以上の進行中のスレッドに関連付けられる特定のマニフェストを維持し得る。場合によって、その特定のマニフェストの期限切れは、LSMツリーを読み取る進行中のスレッドが特定のファイルにアクセスできないことを示し得る。
【0083】
次に
図10に移ると、方法1000のフロー図が図示されている。方法1000は、データ構造(例えばツリー105)内に格納されているデータ(例えばレコード310)を探すために使用可能なキャッシュ(例えばキャッシュ160)を維持するためにコンピュータシステム(例えばデータベースシステム10)によって実行される方法の一実施形態である。方法1000は、ルーチン204、210、220及び230を実装するプログラム命令を実行することによって実行されてよい。方法1000において、キャッシュ160は、上述の値ベースの変形を実装し得る。様々な実施形態において、方法1000は、そのようなコンピュータシステムが、アトミックストア命令を使用して、位置の指示(例えばポインタ165)をキャッシュのエントリに格納する追加のステップを含む。
【0084】
方法1000は、データベース(例えばデータベース100)のファイル(例えばファイル115、125、135等)を格納する複数のレベル(例えばレベル110、120、130等)を有するデータ構造を維持するステップ1010で開始する。ファイルは、各々がキー及び対応するデータを含む、1つ以上のレコード(例えばレコード310)を含んでよい。いくつかの実施形態において、コンピュータシステムは、データ構造の所与のレベルについて、その所与にレベルに含まれるファイルを指定する1つ以上のマニフェスト(例えばマニフェスト107)を維持する。いくつかの実施形態において、コンピュータシステムは、エイリアスをファイル(例えばファイル名)に関連付けるマップを維持する。
【0085】
ステップ1020において、コンピュータシステムは、エントリが、所与のキー(例えばキー157)について、対応するレコードが配置されているデータ構造内の位置を定義する情報(例えばポインタ165)を格納する、データベースのためのキャッシュを維持する。コンピュータシステムは、様々な実施形態において、データ構造内に格納されている特定のレコードについての要求を受け取る。そのような実施形態において、コンピュータシステムは、特定のレコードについてデータ構造を検索することによって、データ構造内で特定のレコードが格納されている位置を決定し得る。したがって、特定のレコードが格納されている位置を決定することに応答して、コンピュータシステムは、データ構造内で特定のレコードが格納されている位置を定義する、特定の情報(例えばポインタ165)を格納してよい。いくかの実施形態において、コンピュータシステムは、複数のレコードを外部ストレージからデータ構造に書き込む。複数のレコードをデータ構造に書き込んだことに応答して、コンピュータシステムは、複数のレコードに関連付けられるキーに一致するキーに関連付けられるキャッシュ内のエントリを無効にしてよい。
【0086】
ステップ1030において、コンピュータシステムは、データ構造内に格納されている特定のレコードにアクセスする要求を受け取る。要求は、特定のレコードを位置特定するために使用可能な特定のキーを指定してよい。
【0087】
ステップ1040において、コンピュータシステムは、キャッシュから、特定のキーを介して、特定のレコードが配置されているデータ構造内の位置の指示を取り出す。いくつかの実施形態において、コンピュータシステムは、キャッシュの特定のエントリ内に、データ構造内の第1レコードの位置を定義する第1指示を格納する。第1指示は、第1レコードに対応する、第1のハッシュ化されたキーに基づいて格納されてよい。いくつかの実施形態において、コンピュータシステムは、キャッシュの特定のエントリ内の第1指示を、データ構造内の第2レコードの位置を定義する第2指示で上書きする。第2指示は、第2レコードに対応する、第2のハッシュ化されたキーに基づいて格納されてよく、第2のハッシュ化されたキーは、第1のハッシュ化されたキーに一致してよい。したがって、コンピュータシステムは、データ構造内の第1レコードについての要求を受け取り得る。コンピュータシステムは、要求内で指定された特定のキーを使用してハッシュ導出関数を実行して、第1のハッシュ化されたキーを導出し得る。コンピュータシステムは、次いで、第1のハッシュ化されたキーに基づいて、特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出してよい。いくつかの実施形態において、コンピュータシステムは、特定の指示が第2指示に対応し、第1レコードにアクセスするために使用可能でないことを決定する。ステップ1050において、コンピュータシステムは、指示を使用して特定のレコードにアクセスする。
【0088】
様々な実施形態において、コンピュータシステムは、データ構造の第1レベルのファイルからデータ構造の第2レベルの新たなファイルに1つ以上のレコードを書き込む。続いて、コンピュータシステムは、ファイルに対応する情報を格納しているキャッシュ内のエントリが無効にされていると判断し、かつデータ構造を読み取る進行中のスレッドが、そのファイルにアクセスすることができないと判断すると、第1レベルからファイルを削除してよい。
【0089】
次に
図11に移ると、方法1100のフロー図が図示されている。方法1100は、ログ構造化マージツリー(LSMツリー)(例えばツリー105)内に格納されているデータ(例えばレコード310)を探すために使用可能なキャッシュ(例えばキャッシュ160)を維持するためにコンピュータシステム(例えばデータベースシステム10)によって実行される方法の一実施形態である。方法1100は、ルーチン204、210、220及び230を実装するプログラム命令を実行することによって実行されてよい。方法1100において、キャッシュ160は、上述の値ベースの変形を実装し得る。様々な実施形態において、方法1100は、そのようなコンピュータシステムが、アトミックストア命令を使用して、位置の指示(例えばポインタ165)をキャッシュのエントリに格納する追加のステップを含む。
【0090】
方法1100は、データベース(例えばデータベース100)のファイル(例えばファイル115、125、135等)を格納する複数のレベル(例えばレベル110、120、130等)を有するLSMツリーを維持するステップ1110で開始する。様々な実施形態において、ファイルは、各々がキー及び対応するデータを含む、1つ以上のレコード(例えばレコード310)を含む。
【0091】
ステップ1120において、コンピュータシステムは、エントリが、所与のキー(例えばキー157)について、対応するレコードが配置されているLSMツリー内の位置を指定する情報(例えばポインタ165)を格納する、データベースのためのキャッシュを維持する。場合によって、キャッシュは、LSMツリーの第1レベルに格納されている第1ファイルに含まれる特定のレコードの位置を指定する情報を格納している特定のエントリを含んでよい。様々な実施形態において、コンピュータシステムは、該コンピュータシステムのインメモリバッファからLSMツリーに1つ以上のレコードを書き込む。したがって、LSMツリーに1つ以上のレコードを書き込んだことに応答して、コンピュータシステムは、1つ以上のレコードに対応するキーに関連付けれられるキャッシュ内のエントリを無効にしてよい。
【0092】
ステップ1130において、コンピュータシステムは、第1ファイル内に格納されているレコードを、LSMツリーの第2レベルに含まれる第2ファイルにコピーすることによって、マージ手順(例えばマージ410又は430)を実行する。場合によって、レコードは、上述の特定のレコードを含んでもよい。
【0093】
ステップ1140において、コンピュータシステムは、第1レベル内における特定のレコードの位置を指定する、特定のエントリに格納されている情報を無効にする。いくつかの実施形態において、コンピュータシステムは、第2レベル内の特定のレコードの位置を指定するように情報を更新することによって、その情報を無効にしてよい。
【0094】
例示のコンピュータシステム
次に、
図12に移ると、データベースシステム10を実装し得る例示のコンピュータシステム1200のブロック図が図示されている。コンピュータシステム1200は、相互接続部1260(例えばシステムバス)を介してシステムメモリ1220及びI/Oインタフェース1240に結合される、プロセッササブシステム1280を含む。I/Oインタフェース1240は1つ以上のI/Oデバイス1250に結合される。コンピュータシステム1200は、これらに限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、携帯電話や音楽プレーヤ又はパーソナルデジタルアシスタント(PDA)といった消費者デバイスを含む、様々なタイプのデバイスのいずれかであってよい。
図12には便宜性のため単一のコンピュータシステム1200が示されているが、システム1200は、一緒に動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0095】
プロセッササブシステム1280は、1つ以上のプロセッサ又は処理ユニットを含んでよい。コンピュータシステム1200の様々な実装では、プロセッササブシステム1280の複数のインスタンスが、相互接続部1260に結合されてよい。様々な実装において、プロセッササブシステム1280(又は1280内の各プロセッサユニット)は、キャッシュ又は他の形式のオンボードメモリを含んでよい。
【0096】
システムメモリ1220は、本明細書で説明される様々な動作をシステム1200に実行させるために、プロセッササブシステム1280によって実行可能なプログラム命令を格納するために使用可能である。システムメモリ1220は、ハードディスクストレージ、フロッピーディスクストレージ、取り外し可能ディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読み取り専用メモリ(PROM、EEPROM等)等のような異なる物理的メモリ媒体を使用して実装されてよい。コンピュータシステム1200内のメモリは、メモリ1220のような主ストレージに限定されない。むしろ、コンピュータシステム1200は、プロセッササブシステム1280内のキャッシュメモリ及びI/Oデバイス1250上の二次ストレージ(例えばハードドライブ、ストレージアレイ等)のような他の形式のストレージも含んでよい。いくつかの実施形態において、これらの他の形式のストレージは、プロセッササブシステム1280によって実行可能なプログラム命令も格納してよい。様々な実施形態において、上述したルーチン204、210、220及び230がシステムメモリ1220内に含まれてもよい。
【0097】
I/Oインタフェース1240は、様々な実施形態に従って、他のデバイスと結合及び通信するように構成される様々なタイプのインタフェースのいずれかであってよい。一実施形態において、I/Oインタフェース1240は、前側から1つ以上の後側バスへのブリッジチップ(例えばサウスブリッジ)である。I/Oインタフェース1240は、1つ以上の対応するバス又は他のインタフェースを介して1つ以上のI/Oデバイス1250に結合されてよい。I/Oデバイス1250の例は、ストレージデバイス(ハードドライブ、光ドライブ、取り外し可能フラッシュドライブ、ストレージアレイ、SAN又はそれらの関連するコントローラ)、(例えばローカル又はワイドエリアネットワークへの)ネットワークインタフェースデバイス又は他のデバイス(例えばグラフィクス、ユーザインタフェースデバイス等)を含む。一実施形態において、コンピュータシステム1200は、(例えばWiFi、Bluetooth(登録商標)、Ethernet(登録商標)等上で通信するように構成される)ネットワークインタフェースデバイス1250を介してネットワークと結合される。
【0098】
本出願の主題の実現は、これらに限定されないが、以下の例1~20を含む。
1. コンピュータシステムによって、データベースのためのファイルを格納することができる複数のレベルを有するログ構造化マージツリー(LSMツリー)を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、1つ以上のレコードを含む、ステップと;
前記コンピュータシステムによって、エントリが、キーについて、前記LSMツリーのファイル内の対応するレコードの位置の指示を格納する、データベースのためのキャッシュを維持するステップと;
前記コンピュータシステムによって、前記LSMツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な第1キーを指定する、ステップと;
前記コンピュータシステムによって、前記第1キーを介して前記キャッシュから前記特定のレコードの位置の特定の指示を取り出すステップと;
前記特定の指示を使用して、前記コンピュータシステムが前記特定のレコードにアクセスするステップと;
を含む、方法。
2. 前記コンピュータシステムによって、前記LSMツリー内に追加のファイルを格納するステップであって、前記追加のファイルは、キーのセット及び対応するデータを含む、ステップと;
前記追加のファイルを格納するステップに続いて、前記コンピュータシステムが、前記キーのセットに含まれるキーを有する前記キャッシュ内のエントリを無効にするステップと;
を更に含む、例1の方法。
3. 前記コンピュータシステムによって、前記LSMツリー内の第1レベルから第2レベルに特定のファイルをコピーするステップであって、該コピーするステップは、前記第1レベルのストレージ閾値に到達したことに応答して実行される、ステップと;
前記コピーするステップに続いて、
前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記LSMツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断すると、
前記コンピュータシステムが前記第1レベルから前記特定のファイルを削除するステップと;
を更に含む、例1の方法。
4. 前記コンピュータシステムによって、複数のマニフェストを維持するステップであって、前記複数のマニフェストのマニフェストは、特定の時点で前記LSMツリーの特定のレベル内に含まれるファイルを識別し、前記複数のマニフェストのうちの1つが、前記特定のファイルを識別する、ステップと;
前記複数のマニフェストのうちのいずれもが前記特定のファイルを識別しないことに続いて、前記コンピュータシステムが、前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリを無効にするステップと;
を更に含む、例3の方法。
5.前記LSMツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断することは:
前記特定のファイル内の位置の指示を格納しているエントリが無効にされていると判断した後、前記コンピュータシステムが、1つ以上の進行中スレッドに関連付けられる特定のマニフェストを維持することと;
前記特定のマニフェストが期限切れであることに応答して、前記コンピュータシステムが前記特定のファイルを削除することと;
を含み、前記特定のマニフェストが期限切れであることは、前記LSMツリーを読み取る進行中スレッドが、前記特定のファイルにアクセスできないことを示す、
例4の方法。
6.位置の指示は、アトミックストア命令を使用して前記キャッシュ内のエントリに格納される、
例1の方法。
7.前記特定の指示を取り出すステップは、
前記コンピュータシステムによって、前記第1キーを使用してインデックス構造をスキャンすることにより第2キーを決定することを含み、前記特定の指示は、前記第2キーを使用して前記キャッシュ内に格納される、
例1の方法。
8. データベースシステムに、
データベースのためのファイルを格納する複数のレベルを有するデータ構造を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、1つ以上のレコードを含む、ステップと;
エントリが、所与のキーについて、対応するレコードが配置されている前記データ構造内の位置を定義する情報を格納する、データベースのためのキャッシュを維持するステップと;
前記データ構造内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な特定のキーを指定する、ステップと;
前記特定のキーを介して前記キャッシュから、前記特定のレコードが配置されている前記データ構造内の位置の指示を取り出すステップと;
前記指示を使用して、前記特定のレコードにアクセスするステップと;
を含む動作を実行させることができるプログラム命令を有する、非一時的コンピュータ読取可能媒体。
9. 前記動作は、
前記LSMツリー内に格納されている追加のレコードの要求を受け取るステップと、
前記キャッシュが前記追加のレコードの位置の指示を格納していないと判断したことに応答して、
前記特定のレコードについて前記データ構造を検索することによって、前記データ構造内の前記特定のレコードが格納されている場所を決定するステップと、
前記特定のレコードが格納されている場所を決定したことに応答して、前記データ構造内の前記特定のレコードが格納されている場所を示す指示を前記キャッシュ内に格納するステップと、
を更に含む、例8に記載の非一時的コンピュータ読取可能媒体。
10. 前記動作は、
外部ストレージから前記データ構造に複数のレコードを書き込むステップと、
前記複数のレコードを前記データ構造に書き込んだことに応答して、前記複数のレコードに関連付けられるキーに一致するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、例8の非一時的コンピュータ読取可能媒体。
11. 前記動作は、
前記データ構造の第1レベルのファイルから前記LSMツリーの第2レベルの新たなファイルに1つ以上のレコードを書き込むステップと、
前記書き込むステップに続いて、
前記ファイルに対応する情報を格納しているキャッシュ内のエントリが無効にされていると判断し、
前記データ構造を読み取る進行中のスレッドが、前記ファイルにアクセスできないと判断すると、
前記第1レベルから前記ファイルを削除するステップと、
を更に含む、例8の非一時的コンピュータ読取可能媒体。
12. 前記動作は、
前記データ構造内の所与のレベルについて、前記所与のレベルに含まれるファイルを指定する1つ以上のマニフェストを維持するステップと、
前記ファイルが第1レベルに含まれることを前記1つ以上のマニフェストが指定するかどうかを判断するステップと、
前記ファイルが前記第1レベルに含まれることを前記1つ以上のマニフェストが指定しないと判断したことに応答して、前記ファイルに対応するキャッシュ内のエントリを無効にするステップと、
を更に含む、例11の非一時的コンピュータ読取可能媒体。
13. 前記動作は、
前記キャッシュの特定のエントリ内に、前記データ構造内の第1レコードの位置を定義する第1指示を格納するステップであって、前記第1指示は、前記第1レコードに対応する第1のハッシュ化されたキーに基づいて格納される、ステップと、
前記キャッシュの前記特定のエントリ内の前記第1指示を、前記データ構造の第2レコードの位置を定義する第2指示で上書きするステップであって、前記第2指示は、前記第2レコードに対応する第2のハッシュ化されたキーに基づいて格納され、前記第2のハッシュ化されたキーは、前記第1のハッシュ化されたキーに一致する、ステップと、
を更に含む、例8の非一時的コンピュータ読取可能媒体。
14. 前記動作は、
前記データ構造内の前記第1レコードについての要求を受け取るステップであって、前記要求は、前記第1レコードに関連付けられる、あるキー(certain key)を含むステップと、
前記あるキーを使用してハッシュ導出関数を実行し、前記第1のハッシュ化されたキーを導出するステップと、
前記第1のハッシュ化されたキーに基づいて、前記特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出すステップと、
前記特定の指示が、前記第2指示に対応し、前記第1レコードにアクセスするために使用可能でないと判断するステップと、
を更に含む、例13に記載の非一時的コンピュータ読取可能媒体。
15. 方法であって:
コンピュータシステムによって、データベースのためのファイルを格納する複数のレベルを有するログ構造化マージツリー(LSMツリー)を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、1つ以上のレコードを含む、ステップと、
前記コンピュータシステムによって、エントリが、所与のキーについて、対応するレコードが配置されている前記LSMツリー内の位置を指定する情報を格納する、データベースのためのキャッシュを維持するステップであって、前記キャッシュは、前記LSMツリーの第1レベルに格納されている第1ファイルに含まれる特定のレコードの位置を指定する情報を格納している特定のエントリを含む、ステップと、
前記コンピュータシステムによって、前記第1ファイル内に格納されている複数のレコードを、前記LSMツリーの第2レベルに含まれる第2ファイルにコピーすることによって、マージ手順を実行するステップであって、前記複数のレコードは前記特定のレコードを含むステップと、
前記コンピュータシステムによって、前記第1レベル内における前記特定のレコードの位置を指定する、前記特定のエントリ内に格納されている前記情報を無効にするステップと、
を含む、方法。
16. 前記無効にするステップは、
前記第2レベル内における前記特定のレコードの位置を指定するように、前記特定のエントリ内に格納されている前記情報を更新するステップを含む、
例15の方法。
17. 前記コンピュータシステムによって、前記コンピュータシステムのインメモリバッファから前記LSMツリーに1つ以上のレコードを書き込むステップと、
前記LSMツリーに前記1つ以上のレコードを書き込んだことに応答して、前記コンピュータシステムが、前記1つ以上のレコードに対応するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、例15の方法。
18.前記特定のエントリが、前記第1レベル内の前記特定のレコードの位置を指定する情報を格納することに先行して、前記コンピュータシステムが前記特定のレコードについての要求を受け取るステップと、
前記要求を受け取った後に、前記コンピュータシステムが前記第1レベルの特定のレコードを探すステップと、
前記第1レベルの特定のレコードを探したことに応答して、前記コンピュータシステムが、前記第1レベルの前記特定のレコードの位置を指定する情報を格納するステップと、
をさらに含む、例15の方法。
19. エントリに対応する前記所与のキーは、前記エントリに位置が格納されているレコードに対応するキーに対して、ハッシュ導出関数を実行することによって導出される、
例15の方法。
20. 前記特定のレコード及び前記LSMツリー内の異なるレコードは、同じハッシュ化されたキーに関連付けられ、方法は、
前記コンピュータシステムによって、特定のレコードについての要求を受け取るステップと、
前記コンピュータシステムによって、前記特定のレコードに関連付けられるハッシュ化されたキーに基づいて、キャッシュから情報を取り出すステップと、
前記コンピュータシステムによって、前記情報が前記特定のレコードの位置を指定するか又は前記異なるレコードの位置を指定するかを判断するステップと、
前記情報が前記特定のレコードの位置を指定すると判断したことに応答して、前記コンピュータシステムが、前記情報に基づいて前記特定のレコードを返すステップと、
を更に含む、例19の方法。
【0099】
上記では具体的な実施形態が説明されているが、特定の特徴に関して単一の実施形態のみが説明されている場合であっても、これらの実施形態は、本開示の範囲を限定するように意図されていない。本開示で提供される特徴の例は、別段の記載がない限り、制限ではなく例示であるように意図される。上記の説明は、当業者に明らかであるように、本開示の利点を有する、そのような代替、修正及び均等物をカバーするように意図される。
【0100】
本開示の範囲は、本明細書で対処される問題のいずれか又はすべてを軽減するか否かに関わらず、(明示的又は暗黙的に)本明細書で開示される任意の特徴又は特徴の組合せ、あるいはその一般化を含む。したがって、新たな請求項が、本出願(又はそれの優先権を主張する出願)の審査中に、特徴の任意のそのような組合せに対して定式化されてよい。特に、添付の特許請求の範囲に関連して、従属請求項からの特徴が、独立請求項のものと組み合わされてよく、それぞれの独立請求項からの特徴は、添付の特許請求の範囲で列挙される具体的な組合せだけでなく、任意の適切な方法で組み合わされてよい。