(57)【要約】  データ構造内に格納されているデータを探すために使用可能なキャッシュを維持することに関する技術が開示される。様々な実施形態において、コンピュータシステムは、データベースのためのファイルを格納する複数のレベルを有するデータ構造を維持する。ファイルは、各々がキー及び対応するデータを有する１つ以上のレコードを含み得る。コンピュータシステムは、エントリが、キーについて、データ構造のファイル内の対応するレコードの位置の指示を格納する、データベースのためのキャッシュも維持し得る。いくつかの実施形態において、コンピュータシステムは、データ構造内に格納されている特定のレコードにアクセスする要求を受け取り、要求は、特定のレコードを探すために使用可能なキーを指定する。コンピュータシステムは、キーを介して、キャッシュから特定のレコードの位置の特定の指示を取り出してよく、特定の指示を使用して特定のレコードにアクセスし得る。
2021513176.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムによって、データベースのためのファイルを格納することができる複数のレベルを有するログ構造化マージツリー（ＬＳＭツリー）を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと；
前記コンピュータシステムによって、エントリが、キーについて、前記ＬＳＭツリーのファイル内の対応するレコードの位置の指示を格納する、データベースのためのキャッシュを維持するステップと；
前記コンピュータシステムによって、前記ＬＳＭツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な第１キーを指定する、ステップと；
前記コンピュータシステムによって、前記第１キーを介して前記キャッシュから前記特定のレコードの位置の特定の指示を取り出すステップと；
前記特定の指示を使用して、前記コンピュータシステムが前記特定のレコードにアクセスするステップと；
を含む、方法。
【請求項２】
前記コンピュータシステムによって、前記ＬＳＭツリー内に追加のファイルを格納するステップであって、前記追加のファイルは、キーのセット及び対応するデータを含む、ステップと；
前記追加のファイルを格納するステップに続いて、前記コンピュータシステムが、前記キーのセットに含まれるキーを有する前記キャッシュ内のエントリを無効にするステップと；
を更に含む、請求項１に記載の方法。
【請求項３】
前記コンピュータシステムによって、前記ＬＳＭツリー内の第１レベルから第２レベルに特定のファイルをコピーするステップであって、該コピーするステップは、前記第１レベルのストレージ閾値に到達したことに応答して実行される、ステップと；
前記コピーするステップに続いて、
前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記ＬＳＭツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断すると、
前記コンピュータシステムが前記第１レベルから前記特定のファイルを削除するステップと；
を更に含む、請求項１又は２に記載の方法。
【請求項４】
前記コンピュータシステムによって、複数のマニフェストを維持するステップであって、前記複数のマニフェストのマニフェストは、特定の時点で前記ＬＳＭツリーの特定のレベル内に含まれるファイルを識別し、前記複数のマニフェストのうちの１つが、前記特定のファイルを識別する、ステップと；
前記複数のマニフェストのうちのいずれもが前記特定のファイルを識別しないことに続いて、前記コンピュータシステムが、前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリを無効にするステップと；
を更に含む、請求項３に記載の方法。
【請求項５】
前記ＬＳＭツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断することは：
前記特定のファイル内の位置の指示を格納しているエントリが無効にされていると判断した後、前記コンピュータシステムが、１つ以上の進行中スレッドに関連付けられる特定のマニフェストを維持することと；
前記特定のマニフェストが期限切れであることに応答して、前記コンピュータシステムが前記特定のファイルを削除することと；
を含み、前記特定のマニフェストが期限切れであることは、前記ＬＳＭツリーを読み取る進行中スレッドが、前記特定のファイルにアクセスできないことを示す、
請求項４に記載の方法。
【請求項６】
位置の指示は、アトミックストア命令を使用して前記キャッシュ内のエントリに格納される、
請求項１乃至５のいずれかに記載の方法。
【請求項７】
前記特定の指示を取り出すステップは、
前記コンピュータシステムによって、前記第１キーを使用してインデックス構造をスキャンすることにより第２キーを決定することを含み、前記特定の指示は、前記第２キーを使用して前記キャッシュ内に格納される、
請求項１乃至６のいずれかに記載の方法。
【請求項８】
データベースシステムに、
データベースのためのファイルを格納する複数のレベルを有するＬＳＭツリーを維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと；
エントリが、所与のキーについて、対応するレコードが配置されている前記ＬＳＭツリー内の位置を定義する情報を格納する、データベースのためのキャッシュを維持するステップと；
前記ＬＳＭツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な特定のキーを指定する、ステップと；
前記特定のキーを介して前記キャッシュから、前記特定のレコードが配置されている前記ＬＳＭツリー内の位置の指示を取り出すステップと；
前記指示を使用して、前記特定のレコードにアクセスするステップと；
を含む動作を実行させることができるプログラム命令を有する、非一時的コンピュータ読取可能媒体。
【請求項９】
前記動作は、
前記ＬＳＭツリー内に格納されている追加のレコードの要求を受け取るステップと、
前記キャッシュが前記追加のレコードの位置の指示を格納していないと判断したことに応答して、
前記特定のレコードについて前記ＬＳＭツリーを検索することによって、前記ＬＳＭツリー内の前記特定のレコードが格納されている場所を決定するステップと、
前記特定のレコードが格納されている場所を決定したことに応答して、前記ＬＳＭツリー内の前記特定のレコードが格納されている場所を示す指示を前記キャッシュ内に格納するステップと、
を更に含む、請求項８に記載の非一時的コンピュータ読取可能媒体。
【請求項１０】
前記動作は、
外部ストレージから前記ＬＳＭツリーに複数のレコードを書き込むステップと、
前記複数のレコードを前記ＬＳＭツリーに書き込んだことに応答して、前記複数のレコードに関連付けられるキーに一致するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、請求項８又は９に記載の非一時的コンピュータ読取可能媒体。
【請求項１１】
前記動作は、
前記ＬＳＭツリーの第１レベルのファイルから前記ＬＳＭツリーの第２レベルの新たなファイルに１つ以上のレコードを書き込むステップと、
前記書き込むステップに続いて、
前記ファイルに対応する情報を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記ＬＳＭツリーを読み取る進行中のスレッドが、前記ファイルにアクセスできないと判断すると、
前記第１レベルから前記ファイルを削除するステップと、
を更に含む、請求項８乃至１０のいずれかに記載の非一時的コンピュータ読取可能媒体。
【請求項１２】
前記動作は、
前記ＬＳＭツリー内の所与のレベルについて、前記所与のレベルに含まれるファイルを指定する１つ以上のマニフェストを維持するステップと、
前記ファイルが第１レベルに含まれることを前記１つ以上のマニフェストが指定しているかどうかを判断するステップと、
前記ファイルが前記第１レベルに含まれることを前記１つ以上のマニフェストが指定していないと判断したことに応答して、前記ファイルに対応するキャッシュ内のエントリを無効にするステップと、
を更に含む、請求項１１に記載の非一時的コンピュータ読取可能媒体。
【請求項１３】
前記動作は、
前記キャッシュの特定のエントリ内に、前記ＬＳＭツリー内の第１レコードの位置を定義する第１指示を格納するステップであって、前記第１指示は、前記第１レコードに対応する第１のハッシュ化されたキーに基づいて格納される、ステップと、
前記キャッシュの前記特定のエントリ内の前記第１指示を、前記ＬＳＭツリー内の第２レコードの位置を定義する第２指示で上書きするステップであって、前記第２指示は、前記第２レコードに対応する第２のハッシュ化されたキーに基づいて格納され、前記第２のハッシュ化されたキーは、前記第１のハッシュ化されたキーに一致する、ステップと、
を更に含む、請求項８乃至１２のいずれかに記載の非一時的コンピュータ読取可能媒体。
【請求項１４】
前記動作は、
前記ＬＳＭツリー内の前記第１レコードの要求を受け取るステップであって、前記要求は、前記第１レコードに関連付けられる、あるキーを含むステップと、
前記あるキーを使用してハッシュ導出関数を実行し、前記第１のハッシュ化されたキーを導出するステップと、
前記第１のハッシュ化されたキーに基づいて、前記特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出すステップと、
前記特定の指示が、前記第２指示に対応し、前記第１レコードにアクセスするために使用可能でないと判断するステップと、
を更に含む、請求項１３に記載の非一時的コンピュータ読取可能媒体。
【請求項１５】
システムであって：
１つ以上のプロセッサと；
前記１つ以上のプロセッサによって実行可能であり、当該システムに、
データベースのためのファイルを格納する複数のレベルを有するログ構造化マージツリー（ＬＳＭツリー）を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと、
エントリが、所与のキーについて、対応するレコードが配置されている前記ＬＳＭツリー内の位置を指定する情報を格納する、データベースのためのキャッシュを維持するステップと、
前記ＬＳＭツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な特定のキーを指定する、ステップと、
前記特定のキーを介して前記キャッシュから、前記特定のレコードが配置されている前記ＬＳＭツリー内の位置の指示を取り出すステップと、
前記指示を使用して前記特定のレコードにアクセスするステップと、
を含む動作を実行させるプログラム命令を有するメモリと；
を備える、システム。
【請求項１６】
前記特定のレコードは、前記ＬＳＭツリーの第１レベルに格納される第１ファイル内に含まれ、前記動作は、
前記第１ファイル内に格納されている複数のレコードを、前記ＬＳＭツリーの第２レベルに含まれる第２ファイルにコピーすることによって、マージ手順を実行するステップであって、前記複数のレコードは前記特定のレコードを含むステップと、
前記第１レベル内における前記特定のレコードの位置を指定する前記情報を無効にするステップと、
を更に含む、請求項１５に記載のシステム。
【請求項１７】
前記無効にするステップは、
前記第２レベル内における前記特定のレコードの位置を指定するように前記情報を更新するステップ、
を含む、請求項１６に記載のシステム。
【請求項１８】
前記動作は、
当該システムのインメモリバッファから前記ＬＳＭツリーに１つ以上のレコードを書き込むステップと、
前記ＬＳＭツリーに前記１つ以上のレコードを書き込んだことに応答して、前記１つ以上のレコードに対応するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、請求項１５乃至１７のいずれかに記載のシステム。
【請求項１９】
エントリに対応する前記所与のキーは、前記エントリに位置が格納されているレコードに対応するキーに対して、ハッシュ導出関数を実行することによって導出される、
請求項１５乃至１８のいずれかに記載のシステム。
【請求項２０】
前記特定のレコード及び前記ＬＳＭツリー内の異なるレコードは、同じハッシュ化されたキーに関連付けられ、前記動作は、
前記情報が前記特定のレコードの位置を指定するか又は前記異なるレコードの位置を指定するかを判断するステップと、
前記情報が前記特定のレコードの位置を指定すると判断したことに応答して、前記特定のレコードを返すステップと、
を更に含む、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にデータシステムに関し、より具体的には、データベースシステム内のキャッシュに関する。
【背景技術】
【０００２】
会社が、彼らのユーザの情報を格納したいとき、その会社は典型的に、効率的にアクセスされ得る編成方式で情報を格納するデータベース管理システムを用いる。そのようなデータベース管理システムは一般的に、情報をインデックス化し、行及び列を有するテーブルとしてデータベースに格納する編成スキーム（ｏｒｇａｎｉｚａｔｉｏｎ  ｓｃｈｅｍｅ）を実装する。さらに、データベース管理システムは、データベースアプリケーションを実行する複数のサーバを通して実装されてもよい。そのようなアプリケーションは、キー／インデックス値に基づいてテーブルを検索することによって、情報の要求を処理し得る。データ量が増加するにつれて、データにアクセスするために必要な時間も増加する。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、データベース及びデータベースサーバを実装するデータベースシステムの例示的要素を示すブロック図である。
【０００４】
【図２】いくつかの実施形態による、様々な関数を実行するルーチンの例示的要素を示すブロック図である。
【０００５】
【図３】いくつかの実施形態による、ログ構造化マージツリー（ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ  ｍｅｒｇｅ−ｔｒｅｅ）の例示的要素を示すブロック図である。
【０００６】
【図４Ａ】いくつかの実施形態による、マージ手順の例示的要素を示すブロック図である。
【図４Ｂ】いくつかの実施形態による、マージ手順の例示的要素を示すブロック図である。
【０００７】
【図５】いくつかの実施形態による、キャッシュの例示的要素を示すブロック図である。
【０００８】
【図６Ａ−Ｃ】いくつかの実施形態による、マニフェストのセットの例示的要素を示すブロック図である。
【０００９】
【図７】いくつかの実施形態による、値ベースのキャッシュ不変（ｃａｃｈｅ  ｉｎｖａｒｉａｎｔ）に基づくキャッシュ無効化スキームの例示的要素を示すブロック図である。
【００１０】
【図８】いくつかの実施形態による、位置ベースのキャッシュ不変に基づくキャッシュ無効化スキームの例示的要素を示すブロック図である。
【００１１】
【図９】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【図１０】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【図１１】いくつかの実施形態による、キャッシュを維持することに関連する例示的方法を示すフロー図である。
【００１２】
【図１２】いくつかの実施形態による、例示的コンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００１３】
本開示は、「一実施形態」又は「実施形態」への参照を含む。「一実施形態において」又は「実施形態において」というフレーズの登場は、必ずしも同じ実施形態を指していない。特定の特徴、構造又は特性は、本開示と一貫する任意の適切な方法で組み合わされてよい。
【００１４】
本開示において、異なるエンティティ（「ユニット」、「回路」、他の構成要素等と様々に呼ばれることがある）は、１つ以上のタスク又はオペレーションを実行するように「構成される」ものとして説明又は特許請求されることがある。この定式化−すなわち［１つ以上のタスクを実行する］ように構成される［エンティティ］−は、本明細書において、構造（すなわち、電子回路のような何らかの物理的なもの）を指すために使用される。より具体的には、この定式化は、この構造が、動作中に１つ以上のタスクを実行するように構成されていることを示すために使用される。構造は、該構造が現在作動されていない場合であっても、何らかのタスクを実行する「ように構成される」と言うことができる。したがって、何らかのタスクを実行する「ように構成される」と説明又は記載されるエンティティは、そのタスクを実装するために実行可能なプログラム命令を格納しているデバイス、回路、メモリ等のような何らかの物理的なものを指す。このフレーズは、何らかの無形物を指すためには使用されない。したがって、構築する「ように構成される」は、本明細書では、アプリケーションプログラミングインタフェース（ＡＰＩ）のようなソフトウェアエンティティを指すためには使用されない。
【００１５】
「ように構成される」という用語は、「ように構成可能である」ことを意味するようには意図されていない。例えばプログラミングされていないＦＰＧＡは、なんらかの特定の関数を実行する「ように構成されてる」とは考えられないことがあるが、その関数を実行する「ように構成可能」であってよく、プログラミング後にその関数を実行する「ように構成される」ことがある。
【００１６】
本明細書で使用されるとき、「第１」、「第２」等の用語は、それらが先行している名詞のラベルとして使用されており、特段の記載がない限り、いずれのタイプの順序（例えば空間、時間、論理等）を示唆するものでもない。例えば９つのレコードを格納しているデータベースシステムでは、「第１」及び「第２」ノードという用語を、９つのレコードのうちのいずれか２つを指すために使用することができる。
【００１７】
本明細書で使用されるとき、「に基づいて」という用語は、決定に影響を与える１つ以上の要素を示すために使用される。この用語は、追加の要素が決定に影響を与え得る可能性を排除しない。すなわち、決定は、指定された要素のみに基づいてもよく、指定された要素だけでなく、他の指定されていない要素にも基づいてもよい。「Ｂに基づいてＡを決定する」というフレーズを考える。このフレーズは、Ｂが、Ａを決定するために使用される要素であること、あるいはＡの決定に影響を与えることを指定する。このフレーズは、Ａの決定が、Ｃのような何らかの他の要素にも基づいてよいことを除外しない。このフレーズは、ＡがＢのみに基づいて決定される実施形態をカバーするようにも意図される。したがって、本明細書で使用されるとき、「に基づいて」というフレーズは、「少なくとも部分的に基づいて」というフレーズと同義である。
【００１８】
詳細な説明
本開示は、ログ構造化マージツリーに格納されているレコードを探す（ｌｏｃａｔｅ）ために使用可能なキャッシュを維持するための技術を説明する。本明細書で使用されるとき、「ログ構造化マージツリー」又は「ＬＳＭツリー」は、少なくともメモリコンポーネント及びオンディスクコンポーネントを含む組織スキームであって、この場合、データがまずメモリコンポーネントに書き込まれ、後にオンディスクコンポーネントに転送され、ここで、トップレベルから開始してオンディスクコンポーネント上のデータ構造のレベルを介して「マージ」される。マージは、データが古くなるにつれて、より低速で安価な記憶媒体に書き込まれることを可能にする。ＬＳＭツリーの他の態様は、その実装に基づいて、いったん書き込まれた後は不変であるファイル、オンディスクコンポーネント内の各レベルの異なるサイズ（例えばファイルの数）及びレコードの順序付けされたセットを含むファイルを含み得る。ＬＳＭツリーは、データの以前のバージョンの位置を特定して上書きしなければならない代わりに、そのデータをオンディスクコンポーネントのルートレベルに格納することができるので、（Ｂツリーのような構造に対して）改善された書き込みスピードを可能にし得る。
【００１９】
以下で説明される様々な実施形態において、データベースシステムは、例えば特定のキーについて、レコードの位置をログ構造化ツリー内に格納するエントリを有するキャッシュを維持する。そのような実施形態において、データベースシステム内に含まれるデータベースサーバは、特定のレコードのついての主キーを指定する要求を受け取る。様々な実施形態において、データベースサーバは、キーに対応するエントリについてキャッシュをチェックし、そのようなエントリが存在しない場合、次いでサーバは、ログ構造化マージツリーを検索する。ログ構造化マージツリー内で特定のレコードが見つかった後、いくつかの実施形態では、データベースサーバは、キャッシュ内に、キーと関連付けて特定のレコードの位置を格納する。様々な実施形態において、データベースサーバは、主キーの代わりに二次キーを指定する要求を受け取る。そのような実施形態では、データベースサーバは、データベースサーバが対応するレコードにアクセスするために使用する、対応する主キーを探すために、二次キーを使用してインデックス構造をスキャンしてよい。
【００２０】
これらの技術は、ＬＳＭツリー内のレコードに迅速かつより効率的にアクセスできるので、以前のアプローチに対して有利であり得る。すなわち、これらの技術は、ＬＳＭツリーのオンディスクコンポーネント内のダイレクトキールックアップ（ｄｉｒｅｃｔ−ｋｅｙ  ｌｏｏｋｕｐｓ）が一定の償却期間内で達成されることを可能にし得る。さらに、二次キーを含むルックアップは、（二次キーを含むルックアップのコンポーネントである）ダイレクトキールックアップに関連付けられるコストが低減されるので、より効率的であり得る。
【００２１】
次に図１に移ると、データベースシステム１０のブロック図が示されている。図示されている実施形態では、データベースシステム１０は、データベース１００及びデータベースサーバ１４０を含む。図示されるように、データベース１００は、レベル１１０、１２０及び１３０を有するログ構造化マージツリー１０５と、マニフェスト１０７を含む。また、図示されるように、データベースサーバ１４０は、キャッシュ及びＬＳＭツリールーチン１５０と、キャッシュ１６０を含む。図示されていないが、いくつかの実施形態では、データベースシステム１０は、互いに及び複数のデータベース１００と通信する、複数のデータベースサーバ１４０を含む。複数のデータベース１００が存在する実施形態では、ツリー１０５の様々なレベル（例えば１１０、１２０等）が、これらのデータベースにわたって広がってもよい。図示されていないが、様々な実施形態において、アプリケーションサーバは、データベースサーバ１４０を介して、レコードをデータベース１００にコミットし、データベース１００からレコードを読み取る。いくつかの実施形態において、データベースシステム１０は、図示されるものと異なるように実装され−例えばキャッシュ１６０が、それ自体のサーバに存在してよく−ツリー１０５が追加のレベルを有してもよい。
【００２２】
データベース１００は、様々な実施形態において、システム１０のユーザについてのデータ（例えばレコード）を格納するように構成される共有ストレージである。いくつかの実施形態において、データベース１００は、ネットワーク（例えばストレージ付属ネットワーク）上で一緒に接続され、データ損失を防ぐためにデータを冗長的に格納するように構成される、複数のストレージデバイスによって実装される。データベース１００は、所与のテナントが、許可なしに別のテナントのデータにアクセスすることを妨げるような方法で、複数のテナント（及びそれらのユーザ）についてのデータを格納し得る。いくつかの実施形態において、データベース１００は、ツリー１０５からデータを読み取り、ツリー１０５にデータを書き込むために、データベースサーバ１４０からのコマンド１４２を処理する。したがって、いくつかの実施形態において、応答１４４は、データベース１００からの応答、データベース１００からのメタデータ（例えばマニフェスト１０７）、レコードがデータベース１００に成功裏に書き込まれたという確認応答等を含んでよい。
【００２３】
ログ構造化マージツリー１０５は、様々な実施形態において、レベルベースのスキームを使用する組織化された方法でファイルを確認するデータ構造である。したがって、レベル１１０、１２０及び１３０は、データと、そのデータにアクセスするために使用可能な対応するインデックス（キー）を格納するレコードを有する一組のファイルを含んでよい。いくつかの実施形態において、ツリー１０５は、読み取り操作では、レコードが潜在的に存在する可能性があるいくつかの場所を考慮する必要があるので、効率の点で、読み取りよりも書き込みを優先するように設計されている。例えば読み取り操作の結果、ツリー１０５の様々なレベルを通過する一連の検索をすることになり得る。様々な実施形態では、レベル１１０、１２０及び１３０は、読み取り性能を改善するために異なる量のファイルを格納する。（図示されるように、例えばレベル１１０はファイル１１５Ａ〜１１５Ｌを含み、レベル１２０はファイル１２５Ａ〜１２５Ｔを含み、レベル１３０はファイル１３５Ａ〜１３５Ｚを含む。）各レベルにおける異なる量のファイルは、トップレベルが最も少ない量のファイルを格納し、各々後続のより低いレベルが以前のレベルよも多いファイルを含むツリー構造の外観をツリー１０５に与える。様々な実施形態において、新たなファイルは、コマンド１４２を介してレベル１１０（この場合、トップレベル）に書き込まれる。レベル１１０が特定の量のファイルを含むと、いくつかの実施形態では、データベースシステム１０は、レベル１１０のレコードを次のレベル、すなわちレベル１２０にマージするかコピーする圧縮プロセスを実行する。データベースシステム１０は、レベルが閾値数のファイル又はレコードを含むとき、そのレベルについて、この圧縮プロセスを実行してよい。そのようにする際に、データベースシステム１０は、ツリー構造及び改善された読み取り性能を維持し得る。ログ構造化マージツリー１０５及びマージプロセスは、図３及び図４Ａ〜図４Ｂに関連して以下で詳細に説明される。
【００２４】
マニフェスト１０７は、様々な実施形態において、ツリー１０５及びその中に含まれるファイルを記述するメタデータを含む。様々な実施形態において、マニフェスト１０７は、異なる時点におけるツリー１０５の個々のスナップショットである。すなわち、マニフェスト１０７の各マニフェストは、所与の時点におけるツリー１０５及びそのレベルを記述するメタデータを含む。他の実施形態において、マニフェスト１０７は、ツリー１０５に対する変化が存在するときに、再書き込みされる単一の大きなマニフェストであってよい。加えて、ログのコンテキストでは、特定のマニフェスト１０７は、そのログの特定のセクションを参照してよい。いくつかの実施形態では、個々のマニフェスト１０７の作成は、トップレベルへのレコードの書き込み及び／又は圧縮／マージプロセスに起因する。
【００２５】
いくつかの実施形態において、マニフェスト１０７は、ツリー１０５の各レベル内に含まれるファイル及びそれらの対応するキー範囲を指定する。（キー範囲は、図３に関連して更に詳細に説明される。）したがって、アプリケーションサーバからのデータ要求１４１を処理するとき、データベースサーバ１４０は、どのファイルが、要求されたレコードを含み得るかを決定するために、特定のマニフェスト１０７を取り出し、それを読み取ってよい。すなわち、様々な実施形態において、サーバ１４０は、アプリケーションサーバからのデータ要求１４１に含まれるキーを、所与のマニフェスト１０７によって参照される様々なファイルのキー範囲と比較する。要求内に含まれるキーと重複するキー範囲を有するファイルが検索されてよい。マニフェスト１０７は、以下で図６Ａ〜図６Ｃに関連してより詳細に説明される。
【００２６】
データベースサーバ１４０は、様々な実施形態において、データベース１００を維持し、データベース１００からデータを読み取り、データベース１００にデータを書き込むための要求に対処する。サーバ１４０は、ソフトウェアルーチンのセット、ハードウェア又はその組合せを含んでよい。いくつかの実施形態において、サーバ１４０は、アプリケーションサーバから、レコードについてのデータ要求１４１を受け取り、データベース１００と通信して、要求されたレコードを返す。同様に、サーバ１４０は、データベース１００にレコードを書き込むための要求を受け取ることがある。様々な実施形態において、サーバ１４０は、ルーチン１５０を実行することによって、データベース１００（よって、ツリー１０５）を維持する。
【００２７】
キャッシュ及びＬＳＭツリールーチン１５０は、様々な実施形態において、ツリー１０５の維持及びアプリケーションサーバからの要求１４１の処理を促進するソフトウェアルーチンのセットである。様々な実施形態において、ルーチン１５０は、ツリー１０５の所与のレベルからのファイルを、ツリー１０５の別のレベルにマージ（又はコピー）するためのソフトウェアルーチンを含む。加えて、ルーチン１５０は、ツリー１０５の別のレベルにそれらのコンテンツをコピーさせた後に残っているファイルをクリーンアップするためのルーチンを含んでもよい。ルーチン１５０は、レコードのバッチをツリー１０５に書き込み、レコードに対応するキャッシュ１６０内のエンティティを無効にするルーチンを更に含んでもよい。いくつかの実施形態において、ルーチン１５０は、ソフトウェアルーチンによって定義されるそれらのタスク（例えば読出し、書き込み、コピー、クリーニング、無効化等）を実行するスレッドを生じる。様々な実施形態において、特定のレコードを検索するとき、ルーチン１５０は、そのレコードに対応するキー１５７に基づいて、キャッシュ１６０を探す。場合によっては、キャッシュ１６０は、特定のレコードがツリー１０５内に置かれている場所を指定するポインタ１６５を提供し得る。ルーチン１５０は、図２に関連して詳細に説明される。
【００２８】
キャッシュ１６０は、様々な実施形態において、ツリー１０５内に格納されているレコードにアクセスするために使用可能なデータを格納することができるデータ構造である。いくつかの実施形態において、キャッシュ１６０は、特定のレコードにアクセスするために使用可能なデータが、そのレコードに関連付けられるキー１５７が提供されることに応答して返される、キーバリューストア（ｋｅｙ−ｖａｌｕｅ  ｓｔｏｒｅ）を実装する。ツリー１０５は、様々な実施形態において、主キー１５７（例えば一意の行識別子）に従って編成される。主キー１５７を要するルックアップは、一連のＯ（ｌｏｇ  ｎ）演算を含んでよい（例えばツリー１０５内のどのレベルが、そのキーと重複するキー範囲を有するか識別し、ツリー１０５の所与のレベル内のレコードにナビゲートする）。したがって、様々な実施形態において、キャッシュ１６０は、Ｏ（ｌｏｇ  ｎ）コストを発生させることなく、レコードがルックアップされることを可能にする。さらに、二次キー１５７を要するルックアップも、キャッシュ１６０から利益を得ることができる。様々な実施形態において、二次キー１５７を要するルックアップは、１）インデックス構造（例えばＢ＋ツリー）を検索することによって、対応する主キー１５７を決定し、次いで２）主キー１５７を使用してツリー１０５内でダイレクトキールックアップを実行することを含む。したがって、様々な実施形態において、キャッシュ１６０は、二次キールックアップに関連付けられるダイレクトキールックアップコストを発生させないよう、主キー１５７を使用してアクセス可能な（レコードへの）ポインタを格納する。キャッシュ１６０は、しかしながら、主キー１５７の代わりに、二次キー１５７を使用してアクセス可能なポインタを格納してもよい。様々な実施形態において、キャッシュ１６０には、所与のキーを要する（ツリー１０５内での）ルックアップの結果として、ポインタが追加される。
【００２９】
様々な実施形態において、キャッシュ１６０は、所与のレコードが格納され得るデータベース１００内の位置を識別するデータ（例えばポインタ）を格納する。上記で説明したように、ツリー１０５は常に、新たなファイルがツリーに書き込まれると、ツリー自体を再構築していることがある。したがって、ツリー１０５の変化する性質に対処する様々なスキームが、キャッシュ１６０のために実装され得る。２つの特定のスキームは、位置ベースの不変系（ｌｏｃａｔｉｏｎ−ｂａｓｅｄ  ｉｎｖａｒｉａｎｔ）又は値ベースの不変系（ｖａｌｕｅ−ｂａｓｅｄ  ｉｎｖａｒｉａｎｔ）として知られるものを使用する。前者のオプションでは、キャッシュ１６０は、特定のデータの最新バージョンを有する最新レコードを参照し、一方、後者のオプションでは、キャッシュ１６０は、データを格納しているレコードがもはや最新のマニフェスト１０７を介してアクセス可能でない場合であっても、特定のデータの最新バージョンを参照する。
【００３０】
したがって、位置ベースの不変系の実施形態では、参照データを下にレベルをマージさせるマージが生じるとき、キャッシュ１６０内のエントリは、参照データを格納する新たなレコードを参照するように更新されてよい。したがって、キャッシュ１６０内のエントリは、参照データを見つけることができるツリー１０５内の最新の位置を反映するように更新されてよい。他方、値ベースの不変系の実施形態では、ファイルのコンテンツがツリー１０５内のより低いレベルにマージされるとき、元のファイルは、そのファイル内のレコードを参照するキャッシュ１６０のエントリが無効にされるまで維持されてよい。したがって、キャッシュ１６０内のエントリは、参照レコードが、ツリー１０５の別のレベルにマージされるたびに更新される必要はない。キャッシュ１６０及びこれらの２つのスキームは、図５に関連して以下で更に詳細に説明される。
【００３１】
したがって、一実装において、データベースシステム１０は、各々がデータを格納する様々なレコードを含む様々なレベル（例えば１１５、１２５等）を有する、ログ構造化マージツリー１０５を維持する。そのような実装において、システム１０は、キャッシュ及びＬＳＭツリールーチン１５０と、キャッシュ１６０とを有するデータベースサーバ１４０を更に含む。そうして、ツリー１０５内の特定のレコードについての要求を受け取ると、サーバ１４０は、ツリー１０５のファイルを検索してレコードを突き止めてよく、キャッシュ１６０のエントリ内にその位置の指示を格納してよい。そのようなエントリは、主キー１５７又は二次キー１５７を使用してアクセス可能であり得る。そのレコードについての別の要求を受け取ると、サーバ１４０は、レコードに対応するキー１５７を使用して、キャッシュ１６０内のそのエントリを突き止め得る。そのような実装において、サーバ１４０は、キャッシュ１６０からポインタを取り出し、その後、対応するレコードにアクセスする。このアプローチは、システム１０内のレコードのより迅速かつより効率的なルックアップを可能にするので有利であり得る。すなわち、ダイレクトキールックアップのコストを発生させる代わりに、サーバ１４０は、レコードが配置される場所を、その位置にポイントする情報をキャッシュ１６０から取り出すことによって迅速に識別し得る。
【００３２】
上記で説明したように、ルーチン１５０は、様々な実施形態において、キャッシュ１６０を維持してアクセスすることに関連する様々なタスクを実行するために、ソフトウェアルーチンのセットを含む。これらのソフトウェアルーチンの例は次に、図２に関連して更に詳細に説明される。
【００３３】
次に図２に移ると、ルーチン１５０のブロック図が示されている。上記で言及したように、ルーチン１５０は、ツリー１０５及びキャッシュ１６０の維持に対処し得る。図示された実施形態では、ルーチン１５０は、ストレージルーチン２０４、マージルーチン２１０、クリーニングルーチン２２０及び他のロジックルーチン２３０を含む、様々なルーチンを含む。いくつかの実施形態において、ルーチン１５０は、図示されるものと異なるように実装されてよい。例えばルーチン２０４、２１０、２２０又は２３０は全体としてハードウェアで実装されてよい。
【００３４】
ストレージルーチン２０４は、様々な実施形態において、キャッシュ１６０内のエントリを投入（ｐｏｐｕｌａｔｅ）及び／又は無効にするために実行可能なルーチンのセットである。そのようにして、エントリを追加又は無効にするとき、ルーチン２１０、２２０及び２３０は、キャッシュ１６０内のエントリを投入又は無効にするために、ストレージルーチン２０４を（直接又は間接的に）呼び出してよい。ストレージルーチン２０４は、例えばＲＥＤＩＳのようなオープンソースプログラムであってよい。
【００３５】
マージルーチン２１０は、様々な実施形態において、ツリー１０５のあるレベルからツリー１０５の別のレベルへレコードをマージする圧縮プロセスを実施するために実行可能なソフトウェアルーチンのセットである。いくつかの実施形態において、マージルーチン２１０は更に、マージによって影響を受けるレコードに関連付けられる、キャッシュ１６０内のエントリを無効にするために実行可能である。上記で言及したように、所与の時点において、ツリー１０５のレベルは、そのレベルについて望まれるよりも多くのレコードを格納してよい。したがって、いくつかの実施形態において、マージルーチン２１０は、レコードが取得されたレベルよりも多くのレコードを格納することができる別のレベルに、レコードをマージするために実行される。様々な実施形態において、別のレベルにレコードをマージすることは、それらのコンテンツを新たなファイルにコピーすることを含む。いくつかの実施形態において、キー範囲を使用して、どのレコードが、次のレベルにマージされるべきかを判断する。場合によって、マージすることは、新たなファイルが存在するより高いレベル及び同じレベルからのレコードを新たなファイルが含むように、既に次のレベル内にある（キー範囲と重複する）レコードを新たなファイルにコピーすることを含む。様々な実施形態では、マージルーチン２１０を実行した結果、元のレコードのコンテンツが別のレベルにマージされた後、元のレコードが所与のレベルに残る。したがって、いくつかの実施形態において、ルーチン１５０は、クリーンアッププロセスを実行して、残ったレコードを取り除く。
【００３６】
クリーニングルーチン２２０は、様々な実施形態において、圧縮プロセスから残ったファイルの除去に対処する実行可能なソフトウェアルーチンのセットである。上記したように、ファイルは、マージされた後、キャッシュ１６０がこれらのファイル内のレコードを参照しなくなるまで維持され得る。したがって、様々な実施形態において、クリーニングルーチン２２０は、ファイルが完全に除去される前に、キャッシュ１６０が、そのファイルについてのいかなるエンティティも含まないことを保証するために実行可能である。したがって、クリーニングルーチン２２０は、除去されているファイルに関連付けられる、キャッシュ１６０内のエントリを無効化してよい。様々な実施形態において、ルーチン２２０は更に、無効化の直前に取得した情報を依然としてアクティブに処理している可能性があるスレッドが存在しないことを保証する。いくつかの実施形態において、ルーチン２２０は、マニフェスト１０７を使用する進行中スレッド（ｉｎ−ｐｒｏｇｒｅｓｓ  ｔｈｒｅａｄｓ）が存在するかどうかを判断する。そのような実施形態では、進行中スレッドは、特定のマニフェスト１０７に関連付けられてよく、そのマニフェストの無効化は、進行中スレッドが存在しなくなることを示す。これは、図７に関連して更に詳細に説明される。キャッシュ１６０内のいずれのエントリも特定のファイルを参照せず、進行中スレッドのいずれもそのファイルにアクセスすることができないと判断した後、様々な実施形態において、ルーチン２２０は、その特定のファイルを除去する。いくつかの実施形態において、ルーチン２２０は、除去されるべきファイルを示すクリーンアップキューを含む。ファイルは、それらが現在のマニフェスト１０７（例えば期限が切れていないマニフェスト１０７）によってもはや参照されなくなった後に、クリーンアップキューに追加されてよい。
【００３７】
他のロジックルーチン２３０は、様々な実施形態において、アプリケーションサーバからのデータ要求の処理を促進するソフトウェアルーチンを含む。データ要求は、サーバ１４０のローカルのインメモリバッファにレコードを書き込み、該インメモリバッファからレコードを読み取ること、あるいは（要求されたレコードがインメモリバッファ内にない場合）ツリー１０５にレコードを書き込み、該ツリー１０５からレコードを読み取ることを含んでよい。いくつかの実施形態において、他のロジックルーチン２３０は、レコードのコンテンツをツリー１０５に書き込む前に、レコードをインメモリバッファに書き込む。すなわち、複数のレコードを蓄積した後、他のロジックルーチン２３０は、レコードをファイル１１５としてツリー１０５のトップレベル（例えばレベル１１０）に書き込んでよい。様々な実施形態において、ツリー１０５のトップレベルにレコードを書き込むことは、トップレベルが必要以上に多くのファイル又はレコードを含む可能性があるので、圧縮プロセスをトリガする。蓄積されたレコードをツリー１０５に書き込んだ後（又はそれらをツリー１０５に書き込む前に）、様々な実施形態では、他のロジックルーチン２３０は、ツリー１０５に書き込まれたレコードに含まれるものに対応するキーを有する、キャッシュ１６０内のエントリを無効にする。
【００３８】
したがって、ルーチン２０４、２１０、２２０及び２３０の実行は、レコードをツリー１０５に書き込み、その後、ツリー１０５のレベルを通してそれらのレコードをマージすることによって、サーバ１４０がツリー１０５を維持することを可能にし得る。さらに、ルーチン２０４、２１０、２２０及び２３０の実行は、キャッシュ１６０内の有効なエントリが、ツリー１０５の変化する性質に関わらず存在するレコードをポイントすることを保証するように、サーバ１４０がキャッシュ１６０を維持することを可能にし得る。
【００３９】
キャッシュ１６０を掘り下げる前に更に、図３、図４Ａ及び図４Ｂに伴う説明は、キャッシュ１６０の特定の側面についての基礎を提供する。図３及びその説明はまず、ツリー１０５のレベル内に格納されるレコードを含む、ツリー１０５についての例示の組織スキームを詳述する。次いで、図４Ａ及び図４Ｂに伴うテキストは、ツリー１０５のようなデータ構造内のあるレベルから別のレベルにレコードをマージするための例示的手順を記述する。
【００４０】
次に図３に移ると、ログ構造化マージツリー１０５の編成のブロック図が示されている。上記で言及したように、ツリー１０５は、レベルベースのスキームを使用する組織化方法でファイルを格納するデータ構造であってよい。図示される実施形態では、ツリー１０５は、ファイル１１５Ａ〜１１５Ｃを有するレベル１１０と、ファイル１２５Ａ〜１２５Ｃを有するレベル１２０と、ファイル１３５Ａ〜１３５Ｆを有するレベル１３０を含む。また、図示されるように、ファイル１１５Ａは、レコード３１０Ａ〜３１０Ｆを含むレコード３１０を含む。図示される実施形態では、ファイル１１５、１２５及び１３５は、キー空間３２０を表すＸ軸と、時間３３０を表すＹ軸に沿って配置される。図示されていないが、あるレベルのファイルは、別のレベルのファイル内の他のレコードと、時間３３０において重複するレコードを含む。様々な実施形態において、ログ構造化マージツリー１０５は、図示されるものと異なるように実装されてよく、例えばツリー１０５内の各レベルは同じ数のファイルを含んでよい。
【００４１】
レコード３１０は、様々な実施形態において、データアイテムであり、該データアイテムは各々、そのデータアイテムにアクセスするために使用可能な特定のキーに関連付けられる。例えばデータベーステーブルは、会社名、街路アドレス及び電子メールのための列を含んでよい。したがって、レコード３１０Ａは、そのテーブル内の行を表してよく、特定の会社の名前、街路アドレス及び電子メールを含んでよい。様々な実施形態において、レコード３１０は各々、タイムスタンプ、キー（例えば各行に格納される一意の値）及びペイロード（例えばデータ値）を含んでよい。様々な実施形態において、所与のレコード３１０のキーは、そのレコードをインデックス化し、ツリー１０５内でそのレコードを探すために使用可能である。いくつかの実施形態において、所与のレコード３１０は、１つより多くのキーに関連付けられ、したがって、１つより多くのキー（例えば二次キー）を通してアクセス可能である。
【００４２】
様々な実施形態において、レコード３１０は、該レコードがいったん書き込まれた後はレコードを修正することができないように、不変である。したがって、そのような実施形態では、所与のレコード３１０によって指定されたデータに対する変更により、新たなレコード３１０が作成されることになる。例えばユーザ名「Ｂｏｂ」を格納するレコード３１０を考える。ユーザ名が「Ｂｉｌｌ」に更新された場合、次いで、「Ｂｏｂ」を格納するレコードを修正する代わりに、新たなレコード３１０が作成される。そのようにして、レコード３１０は、データベーステーブル内の行に対する変更を表してよい。様々な実施形態において、レコード３１０は、データベース１００で格納されるデータに影響を与えるデータベース操作（例えばＩＮＳＥＲＴ、ＤＥＬＥＴＥ及びＵＰＤＡＴＥ）に関連付けられる。様々な実施形態において、レコード３１０は、最初に作成され、レコード３１０の蓄積がインメモリバッファ内で起こるまで、データベースサーバ１４０でインメモリバッファ内に格納される。レコード３１０の蓄積がバッファ内で存在すると、その後、サーバ１４０は、レコード３１０をファイル１１５としてツリー１０５に書き込んでよい。したがって、様々な実施形態において、ファイル１１５、１２５、１３５等は、データベースシステム１０の動作中に様々な時間に書き込まれたレコード３１０の集合／グループである。
【００４３】
キー空間３２０は、様々な実施形態において、ツリー１０５内のレコード３１０をインデックス化するのに使用されるすべてのキーを含むキー範囲である。上記で説明したように、個々のレコード３１０は、レコード３１０を識別する一意のキーを含んでよい。したがって、様々な実施形態において、ファイル１１５、１２５、１３５等は各々、それらが含む様々なレコード３１０によって定義されるキーの範囲に関連付けられる。レコード３１０が所与のファイルに書き込まれるとき、いくつかの実施形態では、それらのレコードは、そのファイル内の最初と最後のレコード３１０がそのファイルのキー範囲を定義するように、順序付けされたセットとして書き込まれる。図示されるように、例えばファイル１３５Ａ〜１３５Ｃは各々、キー範囲３２５Ａ〜３２５Ｃにそれぞれ関連付けられる。様々な実施形態では、レベル１１０を除くツリー１０５内の各レベル（例えばレベル１２０、１３０等）は、重複するキー範囲を含まない。加えて、そのような実施形態では、マニフェスト１０７は、所与のレベル内の各ファイルのキー範囲を指定する情報を含んでよい。したがって、特定のレコード３１０を検索するとき、データベースサーバ１４０はマニフェスト１０７を調べてよく、キー範囲が重複し得ないので、各レベル（レベル１１０を除く）内の１つのファイルのみを検索してよい。様々な実施形態において、圧縮プロセスが実行されると、システム１０は、レベル１２０、１３０等において非重複ファイルを維持する。これは、図４Ａ〜図４Ｂに関連して更に詳細に説明される。
【００４４】
時間３３０は、様々な実施形態において、システム１０の動作に関連する時間の進行を表す。図示される実施形態では、時間３３０の軸を下に移動することは、時間を戻る動きを表す。すなわち、より古いレコード３１０がツリー１０５のより下のレベルで見られ得る。したがって、様々な実施形態において、データについてツリー１０５を検索するとき、より上位レベル内のレコード３１０がより新しく、したがって、そのデータについてより新しい値を含み得るので、より上位レベル（例えばレベル１１０）内のレコードが、より下位レベル（例えばレベル１３０）より前に検索され得る。様々な実施形態において、ファイル１１５、１２５、１３５等は各々、それらが含むレコード３１０によって定義される特定の時間３３０に関連付けられる。図示されていないが、いくつかの実施形態において、ファイル１１５、１２５、１３５等は、レベルにまたがって時間３３０で重複し得る。例えばファイル１２５Ａは、ファイル１３５Ｃ内のレコード３１０と同じ時間に大まかに作成されたレコード３１０を含んでよい。
【００４５】
したがって、データベースサーバ１４０は、ツリー１０５内の（レベル１１０を除く）各レベルが、キー空間３２０内で重複せず、時間３３０において比較的近いレコード３１０を含むように、ツリー１０５を維持してよい。このようにツリー１０５を維持する際に、より新しいレコード３１０がツリー１０５のトップレベルにより近く、キー範囲３２５はキー空間３２０内で重複せず、所与のレコード３１０について検索する必要があるのは（レベル１１０を除く）各レベル内の１つのファイルのみであるので、レコード３１０をより効率的に探すことができる。
【００４６】
ツリー１０５は、したがって、レコードが周期的にツリーの異なるレベルに動かされるデータ構造である。次に説明される図４Ａ及び図４Ｂは、そのような２つの異なるシナリオを示す。
【００４７】
次に図４Ａに移ると、あるレベルから別のレベルにファイルのコンテンツがマージされるマージ手順のブロック図が示されている。上記で説明したように、ツリー１０５内の所与のレベルが、特定の量のファイルを含むと、データベースシステム１０は、これらのファイル内のレコード３１０をツリー１０５の次のレベル内の新たなファイルに書き込んでよい。図示された実施形態では、ツリー１０５の２つのバージョン、例えばマージ４１０の前と後が示されている。図示されるように、（左に示されている）マージ４１０の前のバージョンでは、ツリー１０５は、ファイル１２５Ａ〜１２５Ｂを有するレベル１２０と、ファイル１３５Ａ〜１３５Ｄを有するレベル１３０を含む。図示されるように、（右に示されている）マージ４１０の後のバージョンでは、ツリー１０５は、ファイル１２５Ａ〜１２５Ｂのサブセットを有するレベル１２０と、ファイル１３５Ａ及び１３５Ｄ〜１３５Ｈを有するレベル１３０を含む。ファイル１３５Ｅ及び１３５Ｈはファイル１３５Ｂ及び１３５Ｃであるとみなされてもよいが、マージ４１０によって作成された新たなマニフェストは、ファイル１３５Ｂ及び１３５Ｃが有効であるキー範囲を制限することに留意されたい。図４Ａに関連して図示され、議論されるように、マージ４１０は、レベル１２０のファイル１２５内のレコードをレベル１３０の新たなファイル１３５にマージするために実行されてよい。様々な実施形態において、マージ手順は、図４Ｂに関連して議論されるように、マージされているレベルに基づいて異なるように実装される。様々な実施形態において、マージ４１０は、マージルーチン２１０の実行の結果として実行される。
【００４８】
マージ４１０は、様々な実施形態において、あるレベル（例えばレベル１２０）のレコード３１０を、別のレベル（例えばレベル１３０）のレコード３１０とマージするための手順である。したがって、様々な実施形態において、マージ４１０の結果、両レベル（例えばレベル１２０と１３０）からのレコード３１０を有する新たなファイルが作成されることになる。いくつかの実施形態において、マージ４１０は、所与のレベルのファイルの数が閾値量を超えていることに応答して実行される。他の実施形態において、マージ４１０は、データベースサーバ１４０がレコード３１０を周期的にマージする時間スキームに基づいて実行される。更に他の実施形態では、マージ４１０は、トリガ機構なしに断続的に実行される−例えばサーバ１４０は、レコード３１０が存在する限り、レコード３１０を断続的にマージする。様々な実施形態において、サーバ１４０は、マージ範囲４２０に基づいて、どのレコード３１０をマージすべきか決定する。
【００４９】
マージ範囲４２０は、様々な実施形態において、ツリー１０５内の２つ以上の異なるレベル１１０、１２０、１３０等から、マージされるべき特定のレコード３１０を選択するために使用可能なキー範囲を定義する情報である。いくつかの実施形態において、範囲４２０内のキーの数は、システム１０のユーザによって指定される。他の実施形態において、範囲４２０内のキーの数は、マージするレコード３１０の緊急度（ｕｒｇｅｎｃｙ）に基づいて動的に変化（例えば増加又は減少）する。例えばデータベース１００への大量の書き込みが存在する場合、より多くのレコードをマージする必要があり、したがって、範囲４２０は、そうでない場合よりも広い可能性がある。様々な実施形態において、範囲４２０は最後の範囲４２０が停止した場所から新たな範囲４２０が開始する（例えばキー空間３２０内の次のキーで開始する）ように、各マージ４１０の後にシフトされる。したがって、キー空間３２０内の最後のキーに到達すると、キー範囲４２０は、キー空間３２０の始めのキーに戻るようにループ／循環してよい。いくつかの実施形態において、範囲４２０は、マージ４１０が、ファイル内のすべてのレコード３１０を１回のマージ（ｏｎｅ  ｍｅｒｇｅ）でマージするように、選択されたファイルに基づいてキーの範囲を指定する。
【００５０】
様々な実施形態において、マージ４１０は、マージ４１０に含まれ、かつマージ範囲４２０内にある２つ以上のレベルから、レコード３１０を選択する。例えば図示されるように、範囲４２０は、ファイル１２５Ａ、１２５Ｂ、１３５Ｂ及び１３５Ｃからのレコードを含む。したがって、データベースサーバ１４０は、マージ範囲４２０内にある特定のレコード３１０を新たなファイルに書き込んでよい。いくつかの実施形態において、サーバ１４０は、ファイルが範囲４２０内にあるとき、そのファイル内に含まれる（マージされているレベルの）すべてのレコード３１０を書き込む。例えばファイル１３５Ｂの一部が範囲４２０内にあるので、ファイル１３５Ｂ内のすべてのレコード３１０が新たなファイルに書き込まれてよい。様々な実施形態において、レコード３１０は、それらのレコードに関連付けられたキーに基づく順序付けされたセットとして、新たなファイルに書き込まれる。様々な実施形態において、サーバ１４０は、ファイルが特定のサイズに到達するまでレコード３１０を新たなファイルに書き込み、ファイルが特定のサイズに到達した時点で、サーバ１４０は、残りのレコードを別の新たなファイルに書き込んでよい。すなわち、ツリー１０５内のファイル１１５、１２５、１３５等は、特定のサイズ（例えば２メガバイト）以下に保たれてよく、したがって、レコード３１０をマージすることにより、複数の新たなファイルが作成されることになり得る。例えば図示されるように、マージ４１０は、ファイル１３５Ｅ〜１３５Ｈの作成をもたらしてよい。
【００５１】
様々な実施形態において、データベースシステム１０は、レコード３１０がツリー１０５内の下のレベルにマージされた元のファイル１１５、１２５、１３５等を維持する。したがって、いくつかの実施形態において、マージ４１０が行われた後、データベースサーバ１４０は、所与のファイル内の特定のレコード３１０がマージされたことを示すようにマニフェスト１０７を更新する。すなわち、所与のファイルについて、そのファイル内のマージされたレコード３１０を除くキー範囲３２５を指定する、新たなマニフェスト１０７が生成され得る。いくつかの実施形態において、サーバ１４０は、そのファイル内の特定のレコード３１０がマージされたことを反映するように−例えばマージされたレコード３１０に関連付けられるキー範囲を付加するように−ファイルを更新する。様々な実施形態において、マージ４１０は、マージされている所与のファイル内のレコード３１０のセットをもたらし、したがって、そのファイルが完全にマージされる前に複数回実行されてよい。ファイルが完全にマージされると、システム１０は、クリーンアップキュー内のファイルを実行し、次いでそのファイルを除去するようクリーンアッププロセスを実行してよい。したがって、元のファイル１１５、１２５、１３５等は、限られた時間の間だけ維持され得る。
【００５２】
次に図４Ｂに移ると、ファイルのコンテンツが、あるレベルから別のレベルにマージされる、マージ手順のブロック図が示されている。図示される実施形態では、ツリー１０５の２つのバージョン、例えばマージ４３０の前と後が示されている。マージ４３０の前のバージョン（左側に図示される）で示されているように、ツリー１０５は、ファイル１１５Ａ〜１１５Ｃを有するレベル１１０と、ファイル１２５Ａ〜１２５Ｄを有するレベル１２０を含む。マージ４１０の後のバージョン（右側に図示される）で示されているように、ツリー１０５は、ファイル１２５Ａ及び１２５Ｃのサブセットを有するレベル１１０と、ファイル１３５Ａ及び１３５Ｄ〜１３５Ｈを有するレベル１２０を含む。図４Ｂに関連して図示され、議論されるように、マージ４１０を実行して、レベル１１０のファイル１１５内のレコードを、レベル１２０の新たなファイル１２５にマージすることができる。マージ４３０は、マージルーチン２１０の実行の結果として実行されてよい。
【００５３】
様々な実施形態において、レベル１１０（すなわち、ツリー１０５のトップレベル）は、重複するキー範囲３２５を有するファイルを含むという点で、ツリー１０５内の他のレベル（例えば１２０、１３０等）に対して一意のプロパティを含む。図示されるように、例えばファイル１１５Ａ〜１１５Ｃは、キー空間３２０で重複し、一方、ファイル１２５Ａ〜Ｄは重複しない。したがって、いくつかの実施形態において、マージ４３０は、マージ４３０が、重複するファイル１１５を扱うという点において、マージ４１０と異なる。すなわち、マージ４３０は、ファイルが、ツリー１０５のトップレベル（例えばレベル１１０）から、ツリー１０５の次のレベル（例えば１２０）にマージされる一意のケースを表してよい。したがって、マージ４３０は、キー空間３２０内で重複する、同じレベルの複数のレコードから、レコード３１０を選択し、次いで、それらをツリー１０５の次のレベルにマージしてよい。
【００５４】
したがって、マージ４１０及び４３０は、ツリー１０５は、レベル１１０、１２０、１３０等が、そのレベルに対して設定された特定のサイズを超えて成長しないことを保証し得る。そのようにする際に、マージ４１０及び４３０は、ツリー１０５からデータにアクセスするときに、データ取り出し回数を低く維持することができる。しかしながら、マージ４１０及び４３０の結果、レコード３１０は、ツリー１０５内のあるレベルから別のレベルにマージされることになる。
【００５５】
ツリー１０５の構造及びツリーのあるレベルから別のレベルへのデータのマージを説明してきたが、次にツリー１０５の変化する性質に対処するための２つの異なる不変スキームを含むキャッシュ１６０を、図５に関連して説明する。
【００５６】
次に図５に移ると、キャッシュ１６０のブロック図が示されている。図示される実施形態では、キャッシュ１６０は、キー１５７Ａ〜１５７Ｂと、対応するポインタ１６５Ａ〜１６５Ｂを含む。ポインタ１６５Ａ〜１６５Ｂは、ログ構造化マージツリー１０５のファイル内のレコード３１０Ａ及び３１０Ｃを示す。図示されていないが、ポインタ１６５は、ツリー１０５内のファイル（例えばファイル１１５Ａ〜１１５Ｂ、ファイル１２５Ａ〜１２５Ｂ等）のいずれかの中のレコード３１０を示してよい。いくつかの実施形態において、キャッシュ１６０は、図示されるものと異なるように実装されてよい。例えばポインタ１６５は、個々のレコード３１０の代わりに、ファイル（例えばファイル１１５、１２５、１３５等）を示してよい。
【００５７】
キャッシュ１６０は、様々な実施形態において、ツリー１０５内に格納されているデータ３１０にアクセスするために使用可能なデータを格納することができるデータ構造である。キャッシュ１６０は、ソフトウェアルーチン、ハードウェア又はそれらの任意の組合せを介して実装されてよい。上述のように、キャッシュ１６０は、キーバリューストアを実装してよい。いくつかの実施形態において、キー１５７は、それらが対応するレコード３１０を識別するために使用可能な（場合によっては一意の）識別子である。したがって、ツリー１０５内の特定のレコード３１０を検索するとき、データベースサーバ１４０は、その特定のレコード３１０が発見されるまで、提供されたキー１５７を、検索されるツリー１０５内の各レコードのキー１５７に対して比較してよい。特定のレコード３１０が発見されると、サーバ１４０は、ポインタ１６５を、そのレコード３１０に関連付けて格納してよい。いくつかの実施形態において、ポインタ１６５は各々、対応するレコード３１０をツリー１０５内で見つけることができる位置の指示を提供する。いくつかの実施形態において、ポインタ１６５は、対応するレコード３１０を見つけることができる、ファイル名（又はファイルアドレス）と、そのファイル内のオフセットを指定する。したがって、サーバ１４０は、ポインタ１６５を使用して、ツリー１０５を検索するよりも早くレコードを探すことができる。
【００５８】
様々な実施形態において、キャッシュ１６０には、ツリー１０５を検索し、レコード３１０を突き止めた結果として、エントリが投入される。ツリー１０５内で特定のレコードを突き止めると、いくつかの実施形態では、ルーチン１５０は、対応するキー１５７について、ツリー１０５内でレコード３１０が配置される場所を示すポインタ１６５を格納するよう、格納要求５３０を作成する。したがって、レコード３１０の要求を受け取ると、ルーチン１５０は、要求内に含まれる特定のキー１５７をキャッシュ１６０に提供してよい。結果として、キャッシュ１６０は、対応するレコード３１０にポインタ１６５を返してよい。いくつかの実施形態において、キー１５７はハッシュ化されて（そして、潜在的にはキャッシュ１６０によってサポートされるエントリ数内の値となるように切り捨てられて）、特定のポインタ１６５が格納され得るインデックス値を導出する。したがって、様々な実施形態において、キャッシュ１６０はキー１５７を格納しない。これは、キャッシュ１６０のエントリへのアトミック更新（ａｔｏｍｉｃ  ｕｐｄａｔｅ）を可能にし得、キャッシュ１６０のメモリサイズも低減し得る。様々な場合において、２つ以上のキー１５７は同じ特定のインデックスをハッシュ化することがある。したがって、いくつかの実施形態において、対応するキー１５７が、別のポインタが格納されているインデックスにハッシュする新たなポインタ１６５を格納するとき、新たなポインタ１６５は、他の古いポインタ１６５の代わりに格納される。すなわち、キー１５７がキャッシュ１６０内の所与のエントリについて衝突する実施形態では、その所与のエントリが新たなポインタ１６５で上書きされてよい。したがって、キャッシュ１６０からポインタ１６５を受け取ると、ルーチン１５０は、特定のレコード３１０をチェックして、そのキーが一致するかどうかを確かめてよい。キーが一致しない場合、次いで、ルーチン１５０には、キー衝突（ｋｅｙ  ｃｏｌｌｉｓｉｏｎ）の対象であった可能性があるポインタ１６５が提供された。以前に示したように、キャッシュ１６０は、値ベースの不変系又は位置ベースの不変系を使用して実装されてよい。これらの不変系は以下で議論されるが、キャッシュ１６０を実装するために他の不変系が使用されてもよい。
【００５９】
様々な実施形態において、キャッシュ１６０は、値ベースの不変アプローチを実装する。値ベースの不変アプローチでは、ポインタ１６５が、特定のデータの最新バージョンを格納している現在の又は非現在のレコード３１０の位置を提供するか、現在の又は非現在のレコード３１０を示す。本明細書で使用されるとき、何らかの特定のデータに関連する「現在のレコード（ｃｕｒｒｅｎｔ  ｒｅｃｏｒｄ）」は、その特定のデータを格納している、最後に作成されたレコードを指し、一方、「非現在のレコード（ｎｏｎ−ｃｕｒｒｅｎｔ  ｒｅｃｏｒｄ）」は、同じ特定のデータを格納しているが、最後に作成されたものではないレコードを指す。例えばツリー１０５のトップレベルに最初に書き込まれた特定のレコード３１０は、そのデータについての現在のレコードである。そのレコード３１０がツリー１０５の次のレベルにコピーされるとき、そのレコード３１０のコピーが現在のレコードになり、一方、コピーされた、トップレベル内の特定のレコード３１０は、非現在のレコードになる。すなわち、レコードがツリー１０５の次のレベルにコピーされる度に、その後、コピーが現在のレコードになる。したがって、値ベースの不変系が使用される実施形態では、キャッシュ１６０は、それらのレコード３１０が現在であるか非現在であるかに関わらず、特定のレコード３１０を示すポインタ１６５を含む。すなわち、ポイントされている特定のデータが修正されない限り、ポインタ１６５は、マージ４１０又は４３０の場合に現在のレコード３１０をポイントするように更新される必要はない。上記で言及したように、あるレベルから別のレベルにレコード３１０をコピーすることは、それらのコンテンツを変更しないことがある。したがって、いくつかの実施形態において、キャッシュ１６０のポインタ１６５は、レコード３１０がツリー１０５の別のレベルにマージ（又はコピー）されることに応答して、無効化されない。いくつかの実施形態において、ポインタ１６５は、それらがポイントするデータが更新されて、新たなレコード３１０として格納されていることに応答して無効化される−例えばサーバ１４０は、行がポインタ１６５によってポイントされている特定のレコード３１０に対応するテーブル内の行を修正するＵＰＤＡＴＥ操作を実行する。いくつかの実施形態において、ポインタ１６５は、それらの対応するファイルが、マニフェスト１０７のいずれによってもはや参照されないことに応答して徐々に無効化される。すなわち、マニフェスト１０７のいずれもそのファイルを参照しない場合、その後、そのファイルは、マニフェスト１０７を通してアクセスされ得ず、したがって、そのファイルをポイントする新たなポインタ１６５がキャッシュ１６０に追加されてよい。したがって、サーバ１４０は、そのファイルにポイントする新たなポインタ１６５が追加されることを心配する必要なく、エントリの無効化を開始してよい。いくつかの実施形態において、ポインタ１６５を無効化することは、エイリアス（ａｌｉａｓｅｓ）をリサイクルする必要性に基づいて優先される。
【００６０】
様々な実施形態において、エイリアスは、ファイル名の代理で使用され得る値である。いくつかの実施形態において、ポインタ１６５は、特定のレコードが配置され得るファイル内のオフセットとともにファイル名を指定する。しかしながら、場合によって、ファイル名は、キャッシュ１６０に格納するには長すぎる可能性がある。特に、様々な実施形態において、キャッシュ１６０は、アトミックストア命令を使用してポインタ１６５がそれらのエントリに格納されることを可能にするように、サイズが限られたエントリを含む。したがって、様々な実施形態において、キャッシュ１６０は、ファイル名の代わりにエイリアスを使用する。すなわち、エイリアスはより長さが短い−例えばエイリアスは、６４ビット数とは対照的に１６ビット数であってよい−ので、ポインタ１６５はファイル名を指定する代わりに、エイリアスを指定してよい。様々な実施形態において、システム１０は、ファイル名に対するエイリアスのマップを維持する。したがって、キャッシュ１６０からポインタ１６５を取り出すことに応答して、サーバ１４０は、そのポインタのエイリアスをファイル名に変換してよく、関連するファイル内のレコードを取得するために使用する。様々な実施形態において、システム１０は、エイリアスがキャッシュ内に存在する場合、マップ内にエントリが存在することを保証する。加えて、いくつかの実施形態において、システム１０は限られた数のエイリアスを維持する。したがって、システム１０は、別のファイルにエイリアスを使用するために、エイリアスをリサイクルする必要があり得る。したがって、様々な実施形態において、ファイルがマニフェスト１０７によって参照されなくなった後、システム１０は、リサイクルされているエイリアスに関連付けられるキャッシュ１６０内のエントリを無効にする。キャッシュ１６０が、そのエイリアスに関連付けられるエントリを含まなくなった後、エイリアスと、そのエイリアスに関連付けられるファイルとの間のマッピングを除去して、エイリアスをリサイクルしてよい。
【００６１】
いくつかの実施形態において、キャッシュ１６０は、位置ベースの不変系を実装する。位置ベースの不変系では、ポインタ１６５は、特定のデータの最新バージョンを格納している現在のレコード３１０の位置を提供するか、現在のレコード３１０を示す。他の不変系と同様に、ポインタ１６５は、同じ対応するキー１５７を有するレコード３１０が、インメモリバッファからツリー１０５にフラッシュ（ｆｌｕｓｈ）されていることに応答して無効化されてよい。そのようなフラッシュは、ポイントされたデータ（ｐｏｉｎｔｅｄ−ｔｏ−ｄａｔａ）が修正されたことを示し得るからである。いくつかの実施形態において、ポインタ１６５は、ポイントされたデータがツリー１０５の別のレベルにマージ／コピーされていることに応答して無効化又は更新される。加えて、ポインタ１６５は、エイリアスをリサイクルする必要性に基づいて無効化されてよい。位置ベースの不変系は、図８に関連して以下で更に詳細に説明される。
【００６２】
双方の不変アプローチでは、レコードがインメモリバッファからフラッシュされて、ＬＳＭツリー１０５内にファイルとして書き込まれるとき、様々な実施形態では、キャッシュ１６０内の特定のエントリが無効化される。特に、ＬＳＭツリー１０５に追加されているレコードのキー１５７に対応するエントリが無効化される。様々な実施形態において、スレッドによるキャッシュの投入は、キャッシュ無効化の開始と、フラッシュ操作によって作成された新たなマニフェスト１０７が利用可能になる時間との間は妨げられる。特に、そのような実施形態では、その時間に古いマニフェスト１０７（すなわち、新たなマニフェスト１０７で置換されることになるマニフェスト１０７）に対して作用しているスレッドは、キャッシュ１６０を投入することを妨げられ、スレッドがキャッシュにレコードを投入しないことを保証する。そのようなレコードは、キャッシュ可能なレコードのセットを変更する新たなマニフェスト１０７の発行により、キャッシュ可能ではなくなる。
【００６３】
したがって、他の不変系も可能であるが、位置ベースの不変系又は値ベースの不変系を実装する際に、キャッシュ１６０内の（有効である）エントリが、ツリー１０５内に存在するレコード３１０にポイントするポインタを格納することが保証され得る。以前に言及したように、値ベースの不変系では、キャッシュ１６０は、マージ４１０又は４３０の結果として完全にマージされたファイル内のレコード３１０を示すポインタ１６５を含んでよい。システム１０は、しばらくの時間の間（完全にマージされた）特定のファイルを維持し得るが、そのファイルを除去することが望ましいことがある。したがって、いくつかの実施形態では、システム１０は、クリーンアッププロセスを実行してキャッシュ１６０内のエントリを無効にし、所望のファイルを取り除く（例えばデータベースサーバ１４０は、クリーニングルーチン２２０を実行する）。これがどのように実行され得るかを説明する前に、図６Ａ〜図６Ｃに関連してマニフェスト１０７の概念を更に説明する。マニフェストは、図７で議論される例示のクリーニング手順内の役割を果たすからである。
【００６４】
次に図６Ａに移ると、マニフェスト１０７のセットのブロック図が示されている。図示される実施形態では、データベース１００は、ファイル１１５Ａ〜１１５Ｃを参照するマニフェスト１０７Ａ〜１０７Ｃを含む。以前に言及したように、マニフェスト１０７は、異なる時点におけるツリー１０５のスナップショットを指定する個々のファイル（又は単一のファイル）であってよい。したがって、マニフェスト１０７Ａは、ツリー１０５の最も早い有効な（例えばまだ使用中の）スナップショットを表してよく、一方、マニフェスト１０７Ｂ及び１０７Ｃは、ツリー１０５の漸進的に後のスナップショットを表してよい。図６Ａに更に示されるように、ファイル１１５Ｂは、ツリー１０５の別のレベルに部分的にマージされている（ボックスの一部について破線を有するファイル１１５のボックスによって示される）。したがって、図６Ｂ及び図６Ｃに示されるように、ファイル１１５Ｂは完全にマージされている（完全に破線であるファイル１１５Ｂのボックスによって示される）。
【００６５】
特定のレコード３１０について検索するとき、いくつかの実施形態では、データベースサーバ１４０は、マニフェスト１０７を読み取って、ツリー１０５内でそのレコードが配置され得る、可能性のある位置を決定する。特に、様々な実施形態において、ルーチン１５０を実装するスレッドは、ツリー１０５内の特定のレコード３１０についての要求を受け取る。そのような実施形態では、これらのスレッドは、ライフスパン全体を通して考慮する特定のマニフェスト１０７に関連付けられてよい。システム１０の動作中に、２つのスレッドが異なる時点で生成（ｓｐａｗｎｅｄ）される例を考える。そのような例では、２つのスレッドのうちの１つがマニフェスト１０７Ａに関連付けられてよく、一方、他のスレッドはマニフェスト１０７Ｂに関連付けられてよい。したがって、第１スレッドが、レコード３１０についての要求を受け取るとき、マニフェスト１０７Ｂ（又は１０７Ｃ）の代わりにマニフェスト１０７Ａを読み取ってよい。したがって、所与のスレッドが、特定のファイル内のレコード３１０へのアクセスを有するかどうかは、それがいつ生成されたかに依存し得る。なぜなら、その対応するマニフェスト１０７が、そのファイルでそのレコードを参照しない可能性があるからである。
【００６６】
次に図６Ｂに移ると、マニフェスト１０７のセットのブロック図が示されている。図示される実施形態において、データベース１００は、マニフェスト１０７Ｂ〜１０７Ｄを含む。図示されるように、マニフェスト１０７Ｂ及び１０７Ｃは、ファイル１１５Ａ〜１１５Ｃを参照するが、マニフェスト１０７Ｄは、ファイル１１５Ａ及び１１５Ｃを参照するが、ファイル１１５Ｂは参照しない。図６Ｂは、図６Ａとは対照的に、システム１０の動作中のより後の時間を表している。図６Ａと図６Ｂとの間の差によって示されるように、マニフェスト１０７Ｄが追加されており、マニフェスト１０７Ａは期限切れになっている。
【００６７】
様々な実施形態において、マニフェスト１０７は、レコード３１０がデータベースサーバ１４０のインメモリバッファからフラッシュされ、ファイル１１５としてツリー１０５に書き込まれたことに応答して作成される。様々な実施形態において、マニフェスト１０７は、マージ４１０又は４３０が行われたことに応答して作成される。図示された実施形態で示されるように、ファイル１１５Ｂのコンテンツは、ツリー１０５の別のレベルに完全にマージ／コピーされている。したがって、マニフェスト１０７Ｄは、ファイル１１５Ｂのコンテンツが完全にマージされたことに応答して作成されてよい。上記したように。ルーチン１５０を実装するスレッドは、特定のマニフェスト１０７に関連付けられてよい。したがって、特定のスレッドがマニフェスト１０７Ｄに関連付けられてよい。したがって、そのスレッドは、マニフェスト１０７Ｄを通してファイル１１５Ｂにアクセスし得ないが、そのファイルが存在し、キャッシュ１６０に格納されているポインタ１６５によって参照される限り、キャッシュ１６０を通してファイル１１５Ｂにアクセスしてよい。しかしながら、マニフェスト１０７Ｂ及び１０７Ｃに関連付けられる他のスレッドは、これらのマニフェストを通してファイル１１５Ｂにアクセスしてよい。
【００６８】
次に図６Ｃに移ると、マニフェスト１０７のセットのブロック図が示されている。図示される実施形態において、データベース１００は、マニフェスト１０７Ｄ〜１０７Ｆを含む。図示されるように、マニフェスト１０７Ｄ〜Ｆは、ファイル１１５Ａ及び１１５Ｃを参照するが、これらのマニフェスト１０７のいずれも、ファイル１１５Ｂは参照しない。図６Ｃは、図６Ａ及び図６Ｂとは対照的に、システム１０の動作中のより後の時間を表している。図６Ｃと、図６Ａ及び図６Ｂの間の差によって示されるように、マニフェスト１０７Ｅ及び１０７Ｆが追加されており、マニフェスト１０７Ｂ及び１０７Ｃは期限が切れている。
【００６９】
様々な実施形態において、マニフェスト１０７は、それが最新のマニフェスト１０７ではなく、いずれのスレッドもそのマニフェストを参照しないときに期限切れとなる。特に、スレッドがツリー１０５にアクセスする必要があるとき、スレッドは、最新のマニフェスト１０７への参照を取得し得る。スレッドは、ツリー１０５へのアクセスを終えると、その参照を開放し得る。同じスレッドが、後にツリー１０５にアクセスする必要がある場合、いくつかの実施形態において、スレッドは、最新であればどのようなマニフェスト１０７でも、マニフェスト１０７への新たな参照を受け取る。（スレッドは、その存在全体を通して、異なるマニフェスト１０７を参照してよいことに留意されたい）。いくつかの実施形態では、マニフェスト１０７は、（ルーチン１５０を実装する）関連するスレッドが存在しなくなることに基づいて期限切れとなる。すなわち、スレッドが生成されるとき、それらは、データベース１００の特定のマニフェスト１０７に関連付けられてよい。したがって、新たなマニフェスト１０７が作成されるとき、続いて生成されるスレッドは、その新たなマニフェスト１０７に関連付けられてよい。したがって、特定の時点で、更に新しく生成されるスレッドが古いマニフェスト１０７に関連付けられ得ない場合があり得る。したがって、古いマニフェスト１０７に関連付けられるスレッドが終了すると、その後、スレッドがそのマニフェスト１０７を読み取ることはなくなり、よって、期限切れとなり得る（例えばアーカイブ又は削除され得る）。他の実施形態では、古いマニフェスト１０７は、閾値量のマニフェスト１０７に到達又は上回った後に期限切れとなる。更に他の実施形態では、マニフェスト１０７は、何らかの所定量の時間が経過したことに基づいて期限切れとなる。様々な実施形態において、マニフェスト１０７が所与のファイルを参照しないとき、次いで、そのファイルは、クリーンアップキューに置かれ、その後、除去され得る。例えば図６Ｃに関連する時点では、いずれのマニフェスト１０７もファイル１１５Ｂを参照しないので、次いで、そのファイルは、クリーンアップキューに置かれ、その後、除去され得る。
【００７０】
したがって、マニフェスト１０７は、特定のファイルにポイントする追加のポインタ１６５をキャッシュ１６０に格納することができるかどうかを判断するために使用される。以前に言及したように、キャッシュ１６０は、レコード３１０をルックアップする副産物として投入され得る。したがって、有効なマニフェスト１０７のいずれもが特定のファイルを参照しない場合、その後、マニフェスト１０７を通してそのファイルを探すことができない。（通過キャッシュ（ｇｏｉｎｇ  ｔｈｒｏｕｇｈ  ｃａｃｈｅ）１６０のように、そのファイルにアクセスするために他の方法が潜在的に使用されてよい）。したがって、いくつかの実施形態では、その特定のファイルにポイントする新たなポインタ１６５は、ルックアップの副産物として追加されないことになる。マニフェスト１０７は、特定のスレッドが、有効なマニフェスト１０７では参照されないがキャッシュ１６０を介してアクセス可能な、特定のファイルにアクセスすることができるかどうかを判断するために更に使用されてよい。
【００７１】
マニフェスト１０７、並びにどのようにキャッシュ１６０の値ベースの不変系が、（ファイルは保持されているが）コンテンツがマージされているファイル内のレコードを参照できるかについて説明してきたが、そのファイルを除去するためのクリーニングスキームについて、図７に関連して議論する。クリーニングスキームは、除去されたファイルをポイントしないようにキャッシュ１６０内のエントリが適切に無効にされることを保証し得る。次いで、キャッシュ１６０の位置ベースの不変系のための無効化スキームが図８に関連して議論される。
【００７２】
次に図７に移ると、キャッシュ１６０の値ベースの不変系に関連して使用されるクリーニングスキームのブロック図が示されている。上記で言及したように、キャッシュ１６０は、キャッシュ１６０のエントリが、特定のデータの最新のバージョンを格納している現在又は非現在のレコード３１０の位置を提供するか、現在又は非現在のレコード３１０を示す、値ベースの不変系を実装し得る。図示された実施形態では、スキーム７００は、段階７１０、７２０及び７３０と、イベント７１５、７２４、７２６、７３４及び７３６を含む。図示されるように、段階７１０は、ファイル１１５と、キー１５７Ａ〜１５７Ｃ及びポインタ１６５Ａ〜１６５Ｃ（ポインタ１６５Ｂ及び１６５Ｃはファイル１１５を参照する）を含むキャッシュ１６０を含む。更に図示されるように、段階７２０は、ファイル１１５と、ファイル１１５を参照するマニフェスト１０７Ａと、段階７１０と同じキー１５７及びポインタ１６５を有するキャッシュ１６０を含む。また、図示されるように、段階７３０は、ファイル１１５と、マニフェスト１０７Ｂと、キー１５７Ａ及びポインタ１６５Ａのみを有するキャッシュ１６０を含む。様々な実施形態において、スキーム７００は、ルーチン２０４、２１０、２２０及び２３０の結果として実施される。いくつかの実施形態において、スキーム７００は、図示されるものと異なるように−例えば図８に関連して議論されるスキーム８００のように実装されてよい。
【００７３】
段階７１０は、様々な実施形態において、１）ファイル１１５内のすべてのレコードが新たなファイルに完全にマージされておらず、２）キャッシュ１６０のエントリが、ファイル１１５内で見つかり得る異なるレコード３１０を示すポインタ１６５Ｂ及び１６５Ｃを含む、システム１０の動作中の時点を表す。したがって、段階７１０において、ルーチン１５０を実装するスレッドは、ポインタ１６５Ｂ及び１６５Ｃに結ばれるファイル１１５内のレコードを探すために、キャッシュ１６０を読み取ってよい。様々な実施形態において、段階７１０から段階７２０への移動は、イベント７１５の発生に起因する。いくつかの実施形態において、イベント７１５は、ファイル１１５内に含まれるすべてのレコード３１０を新たなファイルにマージ／コピーすること（例えばマージ４１０又は４３０の実施）を表す。
【００７４】
段階７２０は、様々な実施形態において、ファイル１１５内に含まれるすべてのレコード３１０が、新たなファイルに完全にマージされている−例えばこれらのレコード３１０のすべてが、ツリー１０５の別のレベルの新たなファイルに書き込まれている−システム１０の動作中の時点を表す。様々な実施形態において、マニフェスト１０７は、ファイル１１５が存在することを示す最新のマニフェスト１０７である。ファイル１１５は完全にマージされているが、ファイル１１５は、キャッシュ１６０を通して（特にポインタ１６５Ｂ及び１６５Ｃを介して）、そしてマニフェスト１０７Ａ（及びより古く、ファイル１１５を参照する任意の他のマニフェスト１０７）を通してアクセスされ得る。様々な実施形態において。段階７２０から段階７３０への移動は、イベント７２４及び７２６の発生に起因する。いくつかの実施形態において、イベント７２４は、マニフェスト１０７Ａの期限切れを表す−例えばマニフェスト１０７Ａに関連付けられたスレッドが終了している。したがって、ファイル１１５はマニフェスト１０７を通してアクセスされ得ない。いくつかの実施形態において、マニフェスト１０７を通して特定のファイル（例えば１１５、１２５、１３５等）にアクセスすることができないとき、次いで、（例えばキャッシュ１６０は、マニフェスト１０７を使用する、ツリー１０５のルックアップの副産物として投入されるので）その特定のファイルへの新たなポインタ１６５をキャッシュ１６０内に格納することができない。したがって、イベント７２４が発生した後、様々な実施形態において、システム１０は、キャッシュ１６０をウォークスルー（ｗａｌｋｉｎｇ  ｔｈｒｏｕｇｈ）し、ファイル１１５内の位置を指定するポインタ１６５を含むエントリを無効化し始める。したがって、イベント７２６は、キャッシュ１６０内のエントリが無効化されていることを表し得る。いくつかの実施形態において、エントリが無効化されるレート（ｒａｔｅ）は、ファイルに関連付けられるエイリアスがリサイクルされる必要があるかどうか（例えばエイリアスをリサイクルすることが緊急であるかどうか）に基づいてよい。
【００７５】
段階７３０は、様々な実施形態において、ファイル１１５に含まれるすべてのレコード３１０が完全にマージされ、ファイル１１５を示したポインタ１６５を含んだキャッシュ１６０内のすべてのエントリが無効化されている、システム１０の動作中の時点を表す。いくつかの実施形態において、マニフェスト１０７Ｂは、ファイル１１５にポイントしていたキャッシュ１６０内のすべてのエントリが無効化される前に作成された最新のマニフェスト１０７である。したがって、マニフェスト１０７Ｂは、キャッシュ１６０にアクセスしてポインタ１６５を取り出したスレッドに関連付けられてよい。したがって、そのようなスレッドは、それらのライフスパンの間に、取り出したポインタ１６５を介してファイル１１５にアクセスしてよい。いくつかの実施形態において、イベント７３４は、マニフェスト１０７Ｂの期限切れ、したがって、マニフェスト１０７Ｂに関連付けられるスレッドの終了を表す。いくつかの実施形態において、イベント７３６は、ファイルの削除（又は除去）を表す。すなわち、様々な実施形態において、システム１０は、マニフェスト１０７Ｂが期限切れになることを待つことによって、ファイル１１５を読み取ることができる進行中のスレッドが存在しないことを保証する。したがって、マニフェスト１０７Ｂが期限切れになった後、ファイル１１５を読み取ることができるスレッドが存在するために発生するエラーなしに、システム１０は、ファイル１１５を安全に除去し得る。したがって、スキーム７００は、キャッシュ１６０が、除去されたファイルにポイントする有効なエントリを含まないことも保証しながら、データベース１００からファイル（例えば１１５、１２５、１３５等）を除去するための機構として機能し得る。
【００７６】
次に図８に移ると、キャッシュ１６０において使用される無効化スキームのブロック図が示されている。上記で言及したように、キャッシュ１６０は、キャッシュ１６０のエントリが、特定のデータの最新バージョンを格納している現在のレコード３１０の位置を提供するか、現在のレコード３１０を示す、位置ベースの不変系を実装し得る。図示された実施形態では、スキーム８００は、マージ４３０前後と、キー１５７及び対応するポインタ１６５を有するキャッシュ１６０を含む。マージ４３０前に示される（マージ４３０の上に示される）ように、ファイル１１５Ａ及び１１５Ｂはレベル１１０に存在し、ファイル１２５Ａ及び１２５Ｂはレベル１２０に存在する。マージ４３０後に示される（マージ４３０の下に示される）ように、ファイル１１５Ｂはレベル１１０に存在し、ファイル１２５Ａ及び１２５Ｃ〜１２５Ｄはレベル１２０に存在する。マージ４３０が図示されているが、様々な実施形態では、マージ４３０の代わりにマージ４１０が実行される。
【００７７】
図示されるように、ポインタ１６５は、最初に、レベル１１０のファイル１１５Ａ内の特定のレコード３１０を示してよい。ある時点で、キー範囲４２０が特定のレコード３１０に関連付けられるキーを含むマージ４３０が実行され得る。したがって、図示されるように、マージ４３０の結果、特定のレコード３１０のコピーを含むファイル１２５Ｃが作成されることになる。いくつかの実施形態において、サーバ１４０は、そのレコードが別のレベルにマージされたことに応答して、その特定のレコード３１０に対応するポインタを無効にする。いくつかの実施形態において、サーバは、ポインタ１６５を、ファイル１２４Ｃ内に含まれる特定のレコードにポイントする別のポインタ１６５に置換することによって、そのポインタ１６５を無効にする。
【００７８】
次に図９に移ると、方法９００のフロー図が示されている。方法９００は、ログ構造化マージツリー（ＬＳＭツリー）（例えばツリー１０５）内に格納されているデータ（例えばレコード３１０）を探すために使用可能なキャッシュ（例えばキャッシュ１６０）を維持するために、コンピュータシステム（例えばデータベースシステム１０）によって実行される方法の一実施形態である。方法９００は、ルーチン２０４、２１０、２２０及び２３０を実装するプログラム命令を実行することによって行われ得る。方法９００において、キャッシュ１６０は、値ベースの不変系を実装し得る。様々な実装において、方法９００は、外部ソースからのレコード（例えばレコード３１０）をＬＳＭツリーに書き込むことのような追加のステップを含む。
【００７９】
方法９００は、コンピュータシステムが、データベース（例えばデータベース１００）のためのファイル（ファイル１１５、１２５、１３５等）を格納することができる複数のレベル（例えばレベル１１０、１２０、１３０等）を有するＬＳＭツリーを維持する、ステップ９１０で開始する。様々な実施形態において、ファイルは、各々がキー及び対応するデータを含む、１つ以上のレコード（例えばレコード３１０）を含む。様々な実施形態において、コンピュータシステムは、特定の時点におけるＬＳＭツリーの特定のレベル内のファイルを個々に識別する複数のマニフェスト（例えばマニフェスト１０７）を維持する。
【００８０】
ステップ９２０において、コンピュータシステムは、エントリが、キー（例えばキー１５７）について、ＬＳＭツリーのファイル内の対応するレコードの位置の指示（例えばポインタ１６５）を格納する、データベースのためのキャッシュを維持する。コンピュータシステムは、アトミックストア命令を実行して、指示をキャッシュのエントリに格納し得る。いくつかの実施形態において、コンピュータシステムは、キーのセット及び対応するデータを含む追加のファイルを、ＬＳＭツリーに格納する。追加のファイルを格納することに続いて、コンピュータシステムは、キーのセットに含まれるキーを有するキャッシュ内のエントリを無効にしてよい。
【００８１】
ステップ９３０において、コンピュータシステムは、ＬＳＭツリー内に格納されている特定のレコードにアクセスする要求を受け取る。要求は、特定のレコードを探すために使用可能な第１キーを指定してよい。ステップ９４０において、コンピュータシステムは、キャッシュから第１キーを介して、特定のレコードの位置の特定の指示を取り出す。いくつかの実施形態において、特定の指示は、第２キーを使用してキャッシュ内に格納される。コンピュータシステムは、第１キーを使用してインデックス構造をスキャンすることによって、第２キーを決定してよい。ステップ９５０において、コンピュータシステムは、特定の指示を使用して特定のレコードにアクセスする。
【００８２】
様々な実施形態において、コンピュータシステムは、特定のファイルをＬＳＭツリーの第１レベルから第２レベルにコピー（例えばマージ４１０又は４３０）する。コピーは、第１レベルのストレージ閾値に到達したことに応答して実行されてよい。コピーに続いて、いくつかの実施形態では、コンピュータシステムは、特定のファイル内に位置の指示を格納しているキャッシュ内のエントリが無効にされていると判断し、ＬＳＭツリーを読み取る進行中のスレッドが特定のファイルにアクセスすることができないと判断すると、第１レベルから特定のファイルを削除する。コンピュータシステムによって維持されている複数のマニフェストのうちの１つが、特定のファイルを識別し得る。いくつかの実施形態では、複数のマニフェストのうちのいずれもが特定のファイルを識別しないことに続いて、コンピュータシステムは、特定のファイル内の位置の指示を格納しているキャッシュ内のエントリを無効にする。特定のファイル内の位置の指示を格納しているエントリが無効化されていると判断した後に、コンピュータシステムは、１つ以上の進行中のスレッドに関連付けられる特定のマニフェストを維持し得る。場合によって、その特定のマニフェストの期限切れは、ＬＳＭツリーを読み取る進行中のスレッドが特定のファイルにアクセスできないことを示し得る。
【００８３】
次に図１０に移ると、方法１０００のフロー図が図示されている。方法１０００は、データ構造（例えばツリー１０５）内に格納されているデータ（例えばレコード３１０）を探すために使用可能なキャッシュ（例えばキャッシュ１６０）を維持するためにコンピュータシステム（例えばデータベースシステム１０）によって実行される方法の一実施形態である。方法１０００は、ルーチン２０４、２１０、２２０及び２３０を実装するプログラム命令を実行することによって実行されてよい。方法１０００において、キャッシュ１６０は、上述の値ベースの変形を実装し得る。様々な実施形態において、方法１０００は、そのようなコンピュータシステムが、アトミックストア命令を使用して、位置の指示（例えばポインタ１６５）をキャッシュのエントリに格納する追加のステップを含む。
【００８４】
方法１０００は、データベース（例えばデータベース１００）のファイル（例えばファイル１１５、１２５、１３５等）を格納する複数のレベル（例えばレベル１１０、１２０、１３０等）を有するデータ構造を維持するステップ１０１０で開始する。ファイルは、各々がキー及び対応するデータを含む、１つ以上のレコード（例えばレコード３１０）を含んでよい。いくつかの実施形態において、コンピュータシステムは、データ構造の所与のレベルについて、その所与にレベルに含まれるファイルを指定する１つ以上のマニフェスト（例えばマニフェスト１０７）を維持する。いくつかの実施形態において、コンピュータシステムは、エイリアスをファイル（例えばファイル名）に関連付けるマップを維持する。
【００８５】
ステップ１０２０において、コンピュータシステムは、エントリが、所与のキー（例えばキー１５７）について、対応するレコードが配置されているデータ構造内の位置を定義する情報（例えばポインタ１６５）を格納する、データベースのためのキャッシュを維持する。コンピュータシステムは、様々な実施形態において、データ構造内に格納されている特定のレコードについての要求を受け取る。そのような実施形態において、コンピュータシステムは、特定のレコードについてデータ構造を検索することによって、データ構造内で特定のレコードが格納されている位置を決定し得る。したがって、特定のレコードが格納されている位置を決定することに応答して、コンピュータシステムは、データ構造内で特定のレコードが格納されている位置を定義する、特定の情報（例えばポインタ１６５）を格納してよい。いくかの実施形態において、コンピュータシステムは、複数のレコードを外部ストレージからデータ構造に書き込む。複数のレコードをデータ構造に書き込んだことに応答して、コンピュータシステムは、複数のレコードに関連付けられるキーに一致するキーに関連付けられるキャッシュ内のエントリを無効にしてよい。
【００８６】
ステップ１０３０において、コンピュータシステムは、データ構造内に格納されている特定のレコードにアクセスする要求を受け取る。要求は、特定のレコードを位置特定するために使用可能な特定のキーを指定してよい。
【００８７】
ステップ１０４０において、コンピュータシステムは、キャッシュから、特定のキーを介して、特定のレコードが配置されているデータ構造内の位置の指示を取り出す。いくつかの実施形態において、コンピュータシステムは、キャッシュの特定のエントリ内に、データ構造内の第１レコードの位置を定義する第１指示を格納する。第１指示は、第１レコードに対応する、第１のハッシュ化されたキーに基づいて格納されてよい。いくつかの実施形態において、コンピュータシステムは、キャッシュの特定のエントリ内の第１指示を、データ構造内の第２レコードの位置を定義する第２指示で上書きする。第２指示は、第２レコードに対応する、第２のハッシュ化されたキーに基づいて格納されてよく、第２のハッシュ化されたキーは、第１のハッシュ化されたキーに一致してよい。したがって、コンピュータシステムは、データ構造内の第１レコードについての要求を受け取り得る。コンピュータシステムは、要求内で指定された特定のキーを使用してハッシュ導出関数を実行して、第１のハッシュ化されたキーを導出し得る。コンピュータシステムは、次いで、第１のハッシュ化されたキーに基づいて、特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出してよい。いくつかの実施形態において、コンピュータシステムは、特定の指示が第２指示に対応し、第１レコードにアクセスするために使用可能でないことを決定する。ステップ１０５０において、コンピュータシステムは、指示を使用して特定のレコードにアクセスする。
【００８８】
様々な実施形態において、コンピュータシステムは、データ構造の第１レベルのファイルからデータ構造の第２レベルの新たなファイルに１つ以上のレコードを書き込む。続いて、コンピュータシステムは、ファイルに対応する情報を格納しているキャッシュ内のエントリが無効にされていると判断し、かつデータ構造を読み取る進行中のスレッドが、そのファイルにアクセスすることができないと判断すると、第１レベルからファイルを削除してよい。
【００８９】
次に図１１に移ると、方法１１００のフロー図が図示されている。方法１１００は、ログ構造化マージツリー（ＬＳＭツリー）（例えばツリー１０５）内に格納されているデータ（例えばレコード３１０）を探すために使用可能なキャッシュ（例えばキャッシュ１６０）を維持するためにコンピュータシステム（例えばデータベースシステム１０）によって実行される方法の一実施形態である。方法１１００は、ルーチン２０４、２１０、２２０及び２３０を実装するプログラム命令を実行することによって実行されてよい。方法１１００において、キャッシュ１６０は、上述の値ベースの変形を実装し得る。様々な実施形態において、方法１１００は、そのようなコンピュータシステムが、アトミックストア命令を使用して、位置の指示（例えばポインタ１６５）をキャッシュのエントリに格納する追加のステップを含む。
【００９０】
方法１１００は、データベース（例えばデータベース１００）のファイル（例えばファイル１１５、１２５、１３５等）を格納する複数のレベル（例えばレベル１１０、１２０、１３０等）を有するＬＳＭツリーを維持するステップ１１１０で開始する。様々な実施形態において、ファイルは、各々がキー及び対応するデータを含む、１つ以上のレコード（例えばレコード３１０）を含む。
【００９１】
ステップ１１２０において、コンピュータシステムは、エントリが、所与のキー（例えばキー１５７）について、対応するレコードが配置されているＬＳＭツリー内の位置を指定する情報（例えばポインタ１６５）を格納する、データベースのためのキャッシュを維持する。場合によって、キャッシュは、ＬＳＭツリーの第１レベルに格納されている第１ファイルに含まれる特定のレコードの位置を指定する情報を格納している特定のエントリを含んでよい。様々な実施形態において、コンピュータシステムは、該コンピュータシステムのインメモリバッファからＬＳＭツリーに１つ以上のレコードを書き込む。したがって、ＬＳＭツリーに１つ以上のレコードを書き込んだことに応答して、コンピュータシステムは、１つ以上のレコードに対応するキーに関連付けれられるキャッシュ内のエントリを無効にしてよい。
【００９２】
ステップ１１３０において、コンピュータシステムは、第１ファイル内に格納されているレコードを、ＬＳＭツリーの第２レベルに含まれる第２ファイルにコピーすることによって、マージ手順（例えばマージ４１０又は４３０）を実行する。場合によって、レコードは、上述の特定のレコードを含んでもよい。
【００９３】
ステップ１１４０において、コンピュータシステムは、第１レベル内における特定のレコードの位置を指定する、特定のエントリに格納されている情報を無効にする。いくつかの実施形態において、コンピュータシステムは、第２レベル内の特定のレコードの位置を指定するように情報を更新することによって、その情報を無効にしてよい。
【００９４】
例示のコンピュータシステム
次に、図１２に移ると、データベースシステム１０を実装し得る例示のコンピュータシステム１２００のブロック図が図示されている。コンピュータシステム１２００は、相互接続部１２６０（例えばシステムバス）を介してシステムメモリ１２２０及びＩ／Ｏインタフェース１２４０に結合される、プロセッササブシステム１２８０を含む。Ｉ／Ｏインタフェース１２４０は１つ以上のＩ／Ｏデバイス１２５０に結合される。コンピュータシステム１２００は、これらに限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、携帯電話や音楽プレーヤ又はパーソナルデジタルアシスタント（ＰＤＡ）といった消費者デバイスを含む、様々なタイプのデバイスのいずれかであってよい。図１２には便宜性のため単一のコンピュータシステム１２００が示されているが、システム１２００は、一緒に動作する２つ以上のコンピュータシステムとして実装されてもよい。
【００９５】
プロセッササブシステム１２８０は、１つ以上のプロセッサ又は処理ユニットを含んでよい。コンピュータシステム１２００の様々な実装では、プロセッササブシステム１２８０の複数のインスタンスが、相互接続部１２６０に結合されてよい。様々な実装において、プロセッササブシステム１２８０（又は１２８０内の各プロセッサユニット）は、キャッシュ又は他の形式のオンボードメモリを含んでよい。
【００９６】
システムメモリ１２２０は、本明細書で説明される様々な動作をシステム１２００に実行させるために、プロセッササブシステム１２８０によって実行可能なプログラム命令を格納するために使用可能である。システムメモリ１２２０は、ハードディスクストレージ、フロッピーディスクストレージ、取り外し可能ディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ（ＲＡＭ−ＳＲＡＭ、ＥＤＯ  ＲＡＭ、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＲＡＭ等）、読み取り専用メモリ（ＰＲＯＭ、ＥＥＰＲＯＭ等）等のような異なる物理的メモリ媒体を使用して実装されてよい。コンピュータシステム１２００内のメモリは、メモリ１２２０のような主ストレージに限定されない。むしろ、コンピュータシステム１２００は、プロセッササブシステム１２８０内のキャッシュメモリ及びＩ／Ｏデバイス１２５０上の二次ストレージ（例えばハードドライブ、ストレージアレイ等）のような他の形式のストレージも含んでよい。いくつかの実施形態において、これらの他の形式のストレージは、プロセッササブシステム１２８０によって実行可能なプログラム命令も格納してよい。様々な実施形態において、上述したルーチン２０４、２１０、２２０及び２３０がシステムメモリ１２２０内に含まれてもよい。
【００９７】
Ｉ／Ｏインタフェース１２４０は、様々な実施形態に従って、他のデバイスと結合及び通信するように構成される様々なタイプのインタフェースのいずれかであってよい。一実施形態において、Ｉ／Ｏインタフェース１２４０は、前側から１つ以上の後側バスへのブリッジチップ（例えばサウスブリッジ）である。Ｉ／Ｏインタフェース１２４０は、１つ以上の対応するバス又は他のインタフェースを介して１つ以上のＩ／Ｏデバイス１２５０に結合されてよい。Ｉ／Ｏデバイス１２５０の例は、ストレージデバイス（ハードドライブ、光ドライブ、取り外し可能フラッシュドライブ、ストレージアレイ、ＳＡＮ又はそれらの関連するコントローラ）、（例えばローカル又はワイドエリアネットワークへの）ネットワークインタフェースデバイス又は他のデバイス（例えばグラフィクス、ユーザインタフェースデバイス等）を含む。一実施形態において、コンピュータシステム１２００は、（例えばＷｉＦｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）等上で通信するように構成される）ネットワークインタフェースデバイス１２５０を介してネットワークと結合される。
【００９８】
本出願の主題の実現は、これらに限定されないが、以下の例１〜２０を含む。
１．  コンピュータシステムによって、データベースのためのファイルを格納することができる複数のレベルを有するログ構造化マージツリー（ＬＳＭツリー）を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと；
前記コンピュータシステムによって、エントリが、キーについて、前記ＬＳＭツリーのファイル内の対応するレコードの位置の指示を格納する、データベースのためのキャッシュを維持するステップと；
前記コンピュータシステムによって、前記ＬＳＭツリー内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な第１キーを指定する、ステップと；
前記コンピュータシステムによって、前記第１キーを介して前記キャッシュから前記特定のレコードの位置の特定の指示を取り出すステップと；
前記特定の指示を使用して、前記コンピュータシステムが前記特定のレコードにアクセスするステップと；
を含む、方法。
２．  前記コンピュータシステムによって、前記ＬＳＭツリー内に追加のファイルを格納するステップであって、前記追加のファイルは、キーのセット及び対応するデータを含む、ステップと；
前記追加のファイルを格納するステップに続いて、前記コンピュータシステムが、前記キーのセットに含まれるキーを有する前記キャッシュ内のエントリを無効にするステップと；
を更に含む、例１の方法。
３．  前記コンピュータシステムによって、前記ＬＳＭツリー内の第１レベルから第２レベルに特定のファイルをコピーするステップであって、該コピーするステップは、前記第１レベルのストレージ閾値に到達したことに応答して実行される、ステップと；
前記コピーするステップに続いて、
前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリが無効にされていると判断し、
前記ＬＳＭツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断すると、
前記コンピュータシステムが前記第１レベルから前記特定のファイルを削除するステップと；
を更に含む、例１の方法。
４．  前記コンピュータシステムによって、複数のマニフェストを維持するステップであって、前記複数のマニフェストのマニフェストは、特定の時点で前記ＬＳＭツリーの特定のレベル内に含まれるファイルを識別し、前記複数のマニフェストのうちの１つが、前記特定のファイルを識別する、ステップと；
前記複数のマニフェストのうちのいずれもが前記特定のファイルを識別しないことに続いて、前記コンピュータシステムが、前記特定のファイル内の位置の指示を格納している前記キャッシュ内のエントリを無効にするステップと；
を更に含む、例３の方法。
５．前記ＬＳＭツリーを読み取る進行中のスレッドが、前記特定のファイルにアクセスできないと判断することは：
前記特定のファイル内の位置の指示を格納しているエントリが無効にされていると判断した後、前記コンピュータシステムが、１つ以上の進行中スレッドに関連付けられる特定のマニフェストを維持することと；
前記特定のマニフェストが期限切れであることに応答して、前記コンピュータシステムが前記特定のファイルを削除することと；
を含み、前記特定のマニフェストが期限切れであることは、前記ＬＳＭツリーを読み取る進行中スレッドが、前記特定のファイルにアクセスできないことを示す、
例４の方法。
６．位置の指示は、アトミックストア命令を使用して前記キャッシュ内のエントリに格納される、
例１の方法。
７．前記特定の指示を取り出すステップは、
前記コンピュータシステムによって、前記第１キーを使用してインデックス構造をスキャンすることにより第２キーを決定することを含み、前記特定の指示は、前記第２キーを使用して前記キャッシュ内に格納される、
例１の方法。
８．  データベースシステムに、
データベースのためのファイルを格納する複数のレベルを有するデータ構造を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと；
エントリが、所与のキーについて、対応するレコードが配置されている前記データ構造内の位置を定義する情報を格納する、データベースのためのキャッシュを維持するステップと；
前記データ構造内に格納されている特定のレコードにアクセスする要求を受け取るステップであって、前記要求は、前記特定のレコードを探すために使用可能な特定のキーを指定する、ステップと；
前記特定のキーを介して前記キャッシュから、前記特定のレコードが配置されている前記データ構造内の位置の指示を取り出すステップと；
前記指示を使用して、前記特定のレコードにアクセスするステップと；
を含む動作を実行させることができるプログラム命令を有する、非一時的コンピュータ読取可能媒体。
９．  前記動作は、
前記ＬＳＭツリー内に格納されている追加のレコードの要求を受け取るステップと、
前記キャッシュが前記追加のレコードの位置の指示を格納していないと判断したことに応答して、
前記特定のレコードについて前記データ構造を検索することによって、前記データ構造内の前記特定のレコードが格納されている場所を決定するステップと、
前記特定のレコードが格納されている場所を決定したことに応答して、前記データ構造内の前記特定のレコードが格納されている場所を示す指示を前記キャッシュ内に格納するステップと、
を更に含む、例８に記載の非一時的コンピュータ読取可能媒体。
１０．  前記動作は、
外部ストレージから前記データ構造に複数のレコードを書き込むステップと、
前記複数のレコードを前記データ構造に書き込んだことに応答して、前記複数のレコードに関連付けられるキーに一致するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、例８の非一時的コンピュータ読取可能媒体。
１１．  前記動作は、
前記データ構造の第１レベルのファイルから前記ＬＳＭツリーの第２レベルの新たなファイルに１つ以上のレコードを書き込むステップと、
前記書き込むステップに続いて、
前記ファイルに対応する情報を格納しているキャッシュ内のエントリが無効にされていると判断し、
前記データ構造を読み取る進行中のスレッドが、前記ファイルにアクセスできないと判断すると、
前記第１レベルから前記ファイルを削除するステップと、
を更に含む、例８の非一時的コンピュータ読取可能媒体。
１２．  前記動作は、
前記データ構造内の所与のレベルについて、前記所与のレベルに含まれるファイルを指定する１つ以上のマニフェストを維持するステップと、
前記ファイルが第１レベルに含まれることを前記１つ以上のマニフェストが指定するかどうかを判断するステップと、
前記ファイルが前記第１レベルに含まれることを前記１つ以上のマニフェストが指定しないと判断したことに応答して、前記ファイルに対応するキャッシュ内のエントリを無効にするステップと、
を更に含む、例１１の非一時的コンピュータ読取可能媒体。
１３．  前記動作は、
前記キャッシュの特定のエントリ内に、前記データ構造内の第１レコードの位置を定義する第１指示を格納するステップであって、前記第１指示は、前記第１レコードに対応する第１のハッシュ化されたキーに基づいて格納される、ステップと、
前記キャッシュの前記特定のエントリ内の前記第１指示を、前記データ構造の第２レコードの位置を定義する第２指示で上書きするステップであって、前記第２指示は、前記第２レコードに対応する第２のハッシュ化されたキーに基づいて格納され、前記第２のハッシュ化されたキーは、前記第１のハッシュ化されたキーに一致する、ステップと、
を更に含む、例８の非一時的コンピュータ読取可能媒体。
１４．  前記動作は、
前記データ構造内の前記第１レコードについての要求を受け取るステップであって、前記要求は、前記第１レコードに関連付けられる、あるキー（ｃｅｒｔａｉｎ  ｋｅｙ）を含むステップと、
前記あるキーを使用してハッシュ導出関数を実行し、前記第１のハッシュ化されたキーを導出するステップと、
前記第１のハッシュ化されたキーに基づいて、前記特定のエントリから、対応するレコードの位置を定義する特定の指示を取り出すステップと、
前記特定の指示が、前記第２指示に対応し、前記第１レコードにアクセスするために使用可能でないと判断するステップと、
を更に含む、例１３に記載の非一時的コンピュータ読取可能媒体。
１５．  方法であって：
コンピュータシステムによって、データベースのためのファイルを格納する複数のレベルを有するログ構造化マージツリー（ＬＳＭツリー）を維持するステップであって、前記ファイルは、各々がキー及び対応するデータを有する、１つ以上のレコードを含む、ステップと、
前記コンピュータシステムによって、エントリが、所与のキーについて、対応するレコードが配置されている前記ＬＳＭツリー内の位置を指定する情報を格納する、データベースのためのキャッシュを維持するステップであって、前記キャッシュは、前記ＬＳＭツリーの第１レベルに格納されている第１ファイルに含まれる特定のレコードの位置を指定する情報を格納している特定のエントリを含む、ステップと、
前記コンピュータシステムによって、前記第１ファイル内に格納されている複数のレコードを、前記ＬＳＭツリーの第２レベルに含まれる第２ファイルにコピーすることによって、マージ手順を実行するステップであって、前記複数のレコードは前記特定のレコードを含むステップと、
前記コンピュータシステムによって、前記第１レベル内における前記特定のレコードの位置を指定する、前記特定のエントリ内に格納されている前記情報を無効にするステップと、
を含む、方法。
１６．  前記無効にするステップは、
前記第２レベル内における前記特定のレコードの位置を指定するように、前記特定のエントリ内に格納されている前記情報を更新するステップを含む、
例１５の方法。
１７．  前記コンピュータシステムによって、前記コンピュータシステムのインメモリバッファから前記ＬＳＭツリーに１つ以上のレコードを書き込むステップと、
前記ＬＳＭツリーに前記１つ以上のレコードを書き込んだことに応答して、前記コンピュータシステムが、前記１つ以上のレコードに対応するキーに関連付けられる前記キャッシュ内のエントリを無効にするステップと、
を更に含む、例１５の方法。
１８．前記特定のエントリが、前記第１レベル内の前記特定のレコードの位置を指定する情報を格納することに先行して、前記コンピュータシステムが前記特定のレコードについての要求を受け取るステップと、
前記要求を受け取った後に、前記コンピュータシステムが前記第１レベルの特定のレコードを探すステップと、
前記第１レベルの特定のレコードを探したことに応答して、前記コンピュータシステムが、前記第１レベルの前記特定のレコードの位置を指定する情報を格納するステップと、
をさらに含む、例１５の方法。
１９．    エントリに対応する前記所与のキーは、前記エントリに位置が格納されているレコードに対応するキーに対して、ハッシュ導出関数を実行することによって導出される、
例１５の方法。
２０．  前記特定のレコード及び前記ＬＳＭツリー内の異なるレコードは、同じハッシュ化されたキーに関連付けられ、方法は、
前記コンピュータシステムによって、特定のレコードについての要求を受け取るステップと、
前記コンピュータシステムによって、前記特定のレコードに関連付けられるハッシュ化されたキーに基づいて、キャッシュから情報を取り出すステップと、
前記コンピュータシステムによって、前記情報が前記特定のレコードの位置を指定するか又は前記異なるレコードの位置を指定するかを判断するステップと、
前記情報が前記特定のレコードの位置を指定すると判断したことに応答して、前記コンピュータシステムが、前記情報に基づいて前記特定のレコードを返すステップと、
を更に含む、例１９の方法。
【００９９】
上記では具体的な実施形態が説明されているが、特定の特徴に関して単一の実施形態のみが説明されている場合であっても、これらの実施形態は、本開示の範囲を限定するように意図されていない。本開示で提供される特徴の例は、別段の記載がない限り、制限ではなく例示であるように意図される。上記の説明は、当業者に明らかであるように、本開示の利点を有する、そのような代替、修正及び均等物をカバーするように意図される。
【０１００】
本開示の範囲は、本明細書で対処される問題のいずれか又はすべてを軽減するか否かに関わらず、（明示的又は暗黙的に）本明細書で開示される任意の特徴又は特徴の組合せ、あるいはその一般化を含む。したがって、新たな請求項が、本出願（又はそれの優先権を主張する出願）の審査中に、特徴の任意のそのような組合せに対して定式化されてよい。特に、添付の特許請求の範囲に関連して、従属請求項からの特徴が、独立請求項のものと組み合わされてよく、それぞれの独立請求項からの特徴は、添付の特許請求の範囲で列挙される具体的な組合せだけでなく、任意の適切な方法で組み合わされてよい。
【図１】
2021513176.tif 000003
【図２】
2021513176.tif 000004
【図３】
2021513176.tif 000005
【図４Ａ】
2021513176.tif 000006
【図４Ｂ】
2021513176.tif 000007
【図５】
2021513176.tif 000008
【図６Ａ−Ｃ】
2021513176.tif 000009
【図７】
2021513176.tif 000010
【図８】
2021513176.tif 000011
【図９】
2021513176.tif 000012
【図１０】
2021513176.tif 000013
【図１１】
2021513176.tif 000014
【図１２】
2021513176.tif 000015
【国際調査報告】
2021513176.tif 000016
2021513176.tif 000017
2021513176.tif 000018