(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6150785
(24)【登録日】2017年6月2日
(45)【発行日】2017年6月21日
(54)【発明の名称】個別にアクセス可能なデータ単位の記憶の管理
(51)【国際特許分類】
G06F 12/00 20060101AFI20170612BHJP
G06F 17/30 20060101ALI20170612BHJP
【FI】
G06F12/00 520A
G06F17/30 414Z
【請求項の数】60
【外国語出願】
【全頁数】31
(21)【出願番号】特願2014-246683(P2014-246683)
(22)【出願日】2014年12月5日
(62)【分割の表示】特願2012-557017(P2012-557017)の分割
【原出願日】2010年3月10日
(65)【公開番号】特開2015-72711(P2015-72711A)
(43)【公開日】2015年4月16日
【審査請求日】2014年12月17日
【前置審査】
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】クルカルニ,ヴリシャル
(72)【発明者】
【氏名】シュミット,ステフェン
(72)【発明者】
【氏名】スタンフィル,クレイグ,ダブリュー.
(72)【発明者】
【氏名】ヴィシュニアック,エフラム,メリウェザー
【審査官】
漆原 孝治
(56)【参考文献】
【文献】
米国特許出願公開第2009/0287986(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
データを管理するための方法であって、前記方法が、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも1つのグループを受信することであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第2のデータ単位を識別する前記キー値より早く発生するように、受信したデータ単位のキー値が決定されることと、
データ記憶システムに記憶するために前記受信したデータ単位を少なくとも1つのプロセッサによって処理することを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記受信したデータ単位を結合することにより、前記ブロックのうちの1つ又は複数が生成されることと、
前記ブロックのそれぞれについて1つの項目を含む索引を提供することであって、前記項目のうちの1つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値に対応するデータ単位を含むブロックの位置特定を可能にすることと、
前記記憶されたブロックに関連付けられた1つ又は複数のスクリーニング・データ構造を生成することであって、前記1つ又は複数のスクリーニング・データ構造のうちの少なくとも1つは、前記ブロックに記憶されたデータ単位のセットについて所定の数の特異キー値を蓄積した後、又は、前記ブロックに記憶された前記データ単位のセットを受信している間に生成されることと、
所与のキー値に基づいて、前記所与のキー値に対応するデータ単位について前記記憶されたブロックをサーチするかどうかを判断するために、前記1つ又は複数のスクリーニング・データ構造の1つ又は複数を処理することと、
を含む、方法。
【請求項2】
前記1つ又は複数のスクリーニング・データ構造を生成することが、1つ又は複数のブロックからなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、1つ又は複数のブロックからなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む複数のスクリーニング・データ構造を生成することを含む、請求項1に記載の方法。
【請求項3】
前記複数のスクリーニング・データ構造のそれぞれが、1つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項2に記載の方法。
【請求項4】
前記第1のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第1のセットに記憶された第1のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第2のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第2のセットに記憶された第2のセットのデータ単位を受信している間に生成される、請求項2に記載の方法。
【請求項5】
前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項2に記載の方法。
【請求項6】
前記1つ又は複数のスクリーニング・データ構造を生成することが、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位の特異キーが所定の数より少ないと判断された後に前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を記憶するすべてのブロックをスクリーニングするための単一スクリーニング・データ構造を生成することを含む、請求項1に記載の方法。
【請求項7】
前記単一スクリーニング・データ構造が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位のうちの少なくともいくつかを受信している間に並行して生成される複数のスクリーニング・データ構造のうちの選択された1つから生成される、請求項6に記載の方法。
【請求項8】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項1に記載の方法。
【請求項9】
そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造のサイズを選択することをさらに含む、請求項8に記載の方法。
【請求項10】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する1つ又は複数のフィールドに対応する、請求項1に記載の方法。
【請求項11】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項1に記載の方法。
【請求項12】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づいて決定される、請求項1に記載の方法。
【請求項13】
前記索引が、少なくとも前記索引の第1のレベルと前記索引の第2のレベルとを含む階層索引である、請求項1に記載の方法。
【請求項14】
前記索引の前記第1のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項13に記載の方法。
【請求項15】
前記索引の前記第2のレベル内の前記項目のうちの1つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第1のレベルの一領域の位置特定を可能にする、請求項14に記載の方法。
【請求項16】
データを管理するためのコンピュータ・プログラムを記憶する非一時的コンピュータ可読媒体であって、前記コンピュータ・プログラムが、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも1つのグループを受信することであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第2のデータ単位を識別する前記キー値より早く発生するように、受信したデータ単位のキー値が決定されることと、
データ記憶システムに記憶するために前記受信したデータ単位を処理することをコンピュータに実行させるための命令を含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記受信したデータ単位を結合することにより、前記ブロックのうちの1つ又は複数が生成されることと、
前記ブロックのそれぞれについて1つの項目を含む索引を提供することであって、前記項目のうちの1つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値に対応するデータ単位を含むブロックの位置特定を可能にすることと、
前記記憶されたブロックに関連付けられた1つ又は複数のスクリーニング・データ構造を生成することであって、前記1つ又は複数のスクリーニング・データ構造のうちの少なくとも1つは、前記ブロックに記憶されたデータ単位のセットについて所定の数の特異キー値を蓄積した後、又は、前記ブロックに記憶された前記データ単位のセットを受信している間に生成されることと、
所与のキー値に基づいて、前記所与のキー値に対応するデータ単位について前記記憶されたブロックをサーチするかどうかを判断するために、前記1つ又は複数のスクリーニング・データ構造の1つ又は複数を処理することと、
を含む、コンピュータ可読媒体。
【請求項17】
前記1つ又は複数のスクリーニング・データ構造を生成することが、1つ又は複数のブロックからなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、1つ又は複数のブロックからなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む複数のスクリーニング・データ構造を生成することを含む、請求項16に記載のコンピュータ可読媒体。
【請求項18】
前記複数のスクリーニング・データ構造のそれぞれが、1つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項17に記載のコンピュータ可読媒体。
【請求項19】
前記第1のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第1のセットに記憶された第1のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第2のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第2のセットに記憶された第2のセットのデータ単位を受信している間に生成される、請求項17に記載のコンピュータ可読媒体。
【請求項20】
前記命令が、前記コンピュータに、さらに、前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチさせる、請求項17に記載のコンピュータ可読媒体。
【請求項21】
前記1つ又は複数のスクリーニング・データ構造を生成することが、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位の特異キーが所定の数より少ないと判断された後に前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を記憶するすべてのブロックをスクリーニングするための単一スクリーニング・データ構造を生成することを含む、請求項16に記載のコンピュータ可読媒体。
【請求項22】
前記単一スクリーニング・データ構造が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位のうちの少なくともいくつかを受信している間に並行して生成される複数のスクリーニング・データ構造のうちの選択された1つから生成される、請求項21に記載のコンピュータ可読媒体。
【請求項23】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項16に記載のコンピュータ可読媒体。
【請求項24】
前記命令が、前記コンピュータに、さらに、そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造のサイズを選択させる、請求項23に記載のコンピュータ可読媒体。
【請求項25】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する1つ又は複数のフィールドに対応する、請求項16に記載のコンピュータ可読媒体。
【請求項26】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項16に記載のコンピュータ可読媒体。
【請求項27】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づいて決定される、請求項16に記載のコンピュータ可読媒体。
【請求項28】
前記索引が、少なくとも前記索引の第1のレベルと前記索引の第2のレベルとを含む階層索引である、請求項16に記載のコンピュータ可読媒体。
【請求項29】
前記索引の前記第1のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項28に記載のコンピュータ可読媒体。
【請求項30】
前記索引の前記第2のレベル内の前記項目のうちの1つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第1のレベルの一領域の位置特定を可能にする、請求項29に記載のコンピュータ可読媒体。
【請求項31】
データを管理するためのシステムであって、前記システムが、
個別にアクセス可能なデータ単位の少なくとも1つのグループを受信するように構成された入力装置又はポートであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第2のデータ単位を識別する前記キー値より早く発生するように、受信したデータ単位のキー値が決定される入力装置又はポートと、
データ記憶システムに記憶するために前記受信したデータ単位を処理するように構成された少なくとも1つのプロセッサとを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記受信したデータ単位を結合することにより、前記ブロックのうちの1つ又は複数が生成されることと、
前記ブロックのそれぞれについて1つの項目を含む索引を提供することであって、前記項目のうちの1つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値に対応するデータ単位を含むブロックの位置特定を可能にすることと、
前記記憶されたブロックに関連付けられた1つ又は複数のスクリーニング・データ構造を生成することであって、前記1つ又は複数のスクリーニング・データ構造のうちの少なくとも1つは、前記ブロックに記憶されたデータ単位のセットについて所定の数の特異キー値を蓄積した後、又は、前記ブロックに記憶された前記データ単位のセットを受信している間に生成されることと、
所与のキー値に基づいて、前記所与のキー値に対応するデータ単位について前記記憶されたブロックをサーチするかどうかを判断するために、前記1つ又は複数のスクリーニング・データ構造の1つ又は複数を処理することと、
を含む、システム。
【請求項32】
前記1つ又は複数のスクリーニング・データ構造を生成することが、1つ又は複数のブロックからなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、1つ又は複数のブロックからなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む複数のスクリーニング・データ構造を生成することを含む、請求項31に記載のシステム。
【請求項33】
前記複数のスクリーニング・データ構造のそれぞれが、1つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項32に記載のシステム。
【請求項34】
前記第1のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第1のセットに記憶された第1のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第2のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第2のセットに記憶された第2のセットのデータ単位を受信している間に生成される、請求項32に記載のシステム。
【請求項35】
前記処理が、前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項32に記載のシステム。
【請求項36】
前記1つ又は複数のスクリーニング・データ構造を生成することが、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位の特異キーが所定の数より少ないと判断された後に前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を記憶するすべてのブロックをスクリーニングするための単一スクリーニング・データ構造を生成することを含む、請求項31に記載のシステム。
【請求項37】
前記単一スクリーニング・データ構造が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位のうちの少なくともいくつかを受信している間に並行して生成される複数のスクリーニング・データ構造のうちの選択された1つから生成される、請求項36に記載のシステム。
【請求項38】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項31に記載のシステム。
【請求項39】
前記処理が、そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造のサイズを選択することをさらに含む、請求項38に記載のシステム。
【請求項40】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する1つ又は複数のフィールドに対応する、請求項31に記載のシステム。
【請求項41】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項31に記載のシステム。
【請求項42】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づいて決定される、請求項31に記載のシステム。
【請求項43】
前記索引が、少なくとも前記索引の第1のレベルと前記索引の第2のレベルとを含む階層索引である、請求項31に記載のシステム。
【請求項44】
前記索引の前記第1のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項43に記載のシステム。
【請求項45】
前記索引の前記第2のレベル内の前記項目のうちの1つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第1のレベルの一領域の位置特定を可能にする、請求項44に記載のシステム。
【請求項46】
データを管理するための方法であって、前記方法が、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも1つのグループを受信することであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第2のデータ単位を識別する前記キー値より早く発生するように、受信したデータ単位のキー値が決定されることと、
データ記憶システムに記憶するために前記受信したデータ単位を少なくとも1つのプロセッサによって処理することを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記受信したデータ単位を結合することにより、前記ブロックのうちの1つ又は複数が生成されることと、
前記ブロックのそれぞれについて1つの項目を含む索引を提供することであって、前記項目のうちの1つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値に対応するデータ単位を含むブロックの位置特定を可能にすることと、
前記記憶されたブロックに関連付けられた1つ又は複数のスクリーニング・データ構造を生成することと、
所与のキー値に基づいて、前記1つ又は複数のスクリーニング・データ構造の1つ又は複数を処理することと、
前記処理することに肯定的結果を与えた前記1つ又は複数のスクリーニング・データ構造のうちの少なくとも1つによってスクリーニングされる前記ブロックのうちの1つ又は複数にまたがるキー値の範囲内に前記所与のキー値が入ることを判断するためにブロック範囲索引サーチを実行することに基づいて、前記所与のキー値に対応するデータ単位について前記記憶されたブロックをサーチすることと、
を含む、方法。
【請求項47】
前記1つ又は複数のスクリーニング・データ構造を生成することが、1つ又は複数のブロックからなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、1つ又は複数のブロックからなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む複数のスクリーニング・データ構造を生成することを含む、請求項46に記載の方法。
【請求項48】
前記複数のスクリーニング・データ構造のそれぞれが、1つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項47に記載の方法。
【請求項49】
前記第1のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第1のセットに記憶された第1のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第2のスクリーニング・データ構造が、前記1つ又は複数のブロックからなる前記第2のセットに記憶された第2のセットのデータ単位を受信している間に生成される、請求項47に記載の方法。
【請求項50】
前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項47に記載の方法。
【請求項51】
前記1つ又は複数のスクリーニング・データ構造を生成することが、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位の特異キーが所定の数より少ないと判断された後に前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を記憶するすべてのブロックをスクリーニングするための単一スクリーニング・データ構造を生成することを含む、請求項46に記載の方法。
【請求項52】
前記単一スクリーニング・データ構造が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位のうちの少なくともいくつかを受信している間に並行して生成される複数のスクリーニング・データ構造のうちの選択された1つから生成される、請求項51に記載の方法。
【請求項53】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項46に記載の方法。
【請求項54】
そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造のサイズを選択することをさらに含む、請求項53に記載の方法。
【請求項55】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する1つ又は複数のフィールドに対応する、請求項46に記載の方法。
【請求項56】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項46に記載の方法。
【請求項57】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、前記個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づいて決定される、請求項46に記載の方法。
【請求項58】
前記索引が、少なくとも前記索引の第1のレベルと前記索引の第2のレベルとを含む階層索引である、請求項46に記載の方法。
【請求項59】
前記索引の前記第1のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項58に記載の方法。
【請求項60】
前記索引の前記第2のレベル内の前記項目のうちの1つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第1のレベルの一領域の位置特定を可能にする、請求項59に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、個別にアクセス可能なデータ単位(individually accessible data unit)の記憶に関する。
【背景技術】
【0002】
データベース・システムは、個別にアクセス可能な単位のデータ又は「レコード」を様々なフォーマットのいずれかで記憶することができる。各レコードは、クレジット・カード取引などの論理エンティティに対応することができ、典型的には、そのレコードを唯一に識別するために使用される関連1次キー(associated primary key)を有する。レコードは、レコード・フォーマットのそれぞれのフィールドに関連する複数の値を含むことができる。レコードは、1つ又は複数のファイル(例えば、フラット・ファイル又はXMLファイルなどの構造化データ・ファイル)内に記憶することができる。圧縮データベース・システムでは、個々のレコード又はレコード内の値は、システムの記憶要件を低減するために、記憶される時に圧縮され、アクセスされる時に復元され(decompressed)得る。
【発明の概要】
【課題を解決するための手段】
【0003】
一態様では、一般に、データを管理するための方法は、入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも1つのグループを受信することであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別するキー値がソート順序において所与の第2のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされることと、データ記憶システムに記憶するためにデータ単位を処理することを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの1つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて1つの項目を含む索引を提供することであって、その項目のうちの1つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定(location)を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造(screening data structure)を生成することであって、複数のブロックのうちの1つ又は複数からなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、複数のブロックのうちの1つ又は複数からなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【0004】
諸態様は以下の特徴のうちの1つ又は複数を含むことができる。
【0005】
複数のブロックのうちの1つ又は複数からなる第2のセットに含まれるデータ単位のすべては、ソート順序において、複数のブロックのうちの1つ又は複数からなる第1のセットに含まれるデータ単位のキー値のいずれかより遅く発生するキー値を有する。
【0006】
複数のスクリーニング・データ構造のそれぞれは、1つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲(non-overlapping range)に対応する。
【0007】
第1のスクリーニング・データ構造は、複数のブロックのうちの1つ又は複数からなる第1のセットに記憶された第1のセットのデータ単位について所定の数の特異キー値(distinct key value)を蓄積した後に生成され、第2のスクリーニング・データ構造は、複数のブロックのうちの1つ又は複数からなる第2のセットに記憶された第2のセットのデータ単位を受信している間に生成される。
【0008】
この方法は、索引及び複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む。
【0009】
このサーチは、所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位のグループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む。
【0010】
この方法は、対応するスクリーニング・データ構造に関する肯定的結果に応答して、対応するスクリーニング・データ構造によってスクリーニングされる1つ又は複数のブロックにまたがるキー値の範囲内に所与のキー値が入るかどうかを判断するために索引をサーチすることをさらに含む。
【0011】
この方法は、対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の範囲内に所与のキー値が入ることに応答して、所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために索引をサーチすることをさらに含む。
【0012】
所与のスクリーニング・データ構造は、所与のキー値について、その所与のキー値を含むデータ単位が確かに含まれていなかったこと又はその所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する。
【0013】
そのデータ単位が含まれていなかった時にその所与のキー値を含むデータ単位がおそらく含まれていたことを所与のスクリーニング・データ構造が決定する確率は、データ構造のサイズに依存する。
【0014】
該方法は、そこからブロックが生成されたデータ単位を識別する特異キー値の数に基づいて、所与のスクリーニング・データ構造のサイズを選択することをさらに含む。
【0015】
所与のデータ単位を識別するキー値は、所与のデータ単位が入力装置又はポートにより受信される前に所与のデータ単位に関連する1つ又は複数のフィールドに対応する。
【0016】
該方法は、データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位のグループ内のデータ単位が受信された後に蓄積した特異キー値をカウントすることをさらに含む。
【0017】
所与のデータ単位を識別するキー値は、所与のデータ単位が入力装置又はポートにより受信された後に所与のデータ単位に割り当てられる。
【0018】
キー値は単調に(monotonically)割り当てられる。
【0019】
割り当てられたキー値はすべて特異なものである。
【0020】
記憶されたブロックに関連するスクリーニング・データ構造の数は、個別にアクセス可能なデータ単位のグループ内のデータ単位を識別する特異キー値の数と、スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率(target false positive probability)に基づくものである。
【0021】
索引は、少なくとも索引の第1のレベルと索引の第2のレベルとを含む階層索引である。
【0022】
索引の第1のレベルは、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする項目の複数の領域に分割され、それぞれの領域はデータ記憶システムに結合されたメモリ内に完全に収まるように十分小さい。
【0023】
索引内の項目のうちの1つ又は複数は、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する。
【0024】
索引内の項目のうちの少なくともいくつかのそれぞれは、対応するブロックの記憶位置を識別する。
【0025】
索引の第2のレベルは、メモリ内に完全に収まるように十分小さい。
【0026】
索引の第2のレベルは、複数の領域のそれぞれに関するそれぞれの項目を含む。
【0027】
索引の第2のレベル内の項目のうちの1つ又は複数は、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応する項目を含む索引の第1のレベルの一領域の位置特定を可能にする。
【0028】
他の態様では、一般に、コンピュータ可読媒体はデータを管理するためのコンピュータ・プログラムを記憶し、このコンピュータ・プログラムは、入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも1つのグループを受信することであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別するキー値が、ソート順序において、所与の第2のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされることと、データ記憶システムに記憶するためにデータ単位を処理することをコンピュータに実行させるための命令を含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの1つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて1つの項目を含む索引を提供することであって、その項目のうちの1つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの1つ又は複数からなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、複数のブロックのうちの1つ又は複数からなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【0029】
他の態様では、一般に、データを管理するためのシステムは、個別にアクセス可能なデータ単位の少なくとも1つのグループを受信するように構成された入力装置又はポートであって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別するキー値が、ソート順序において、所与の第2のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされる入力装置又はポートと、データ記憶システムに記憶するためにデータ単位を処理するように構成された少なくとも1つのプロセッサとを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの1つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて1つの項目を含む索引を提供することであって、その項目のうちの1つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの1つ又は複数からなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、複数のブロックのうちの1つ又は複数からなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【0030】
他の態様では、一般に、データを管理するためのシステムは、個別にアクセス可能なデータ単位の少なくとも1つのグループを受信するための手段であって、それぞれのデータ単位が1つのキー値で識別され、所与の第2のデータ単位の前に受信される所与の第1のデータ単位を識別するキー値が、ソート順序において、所与の第2のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされる手段と、データ記憶システムに記憶するためにデータ単位を処理するための手段とを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの1つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて1つの項目を含む索引を提供することであって、その項目のうちの1つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの1つ又は複数からなる第1のセットをスクリーニングするための第1のスクリーニング・データ構造と、複数のブロックのうちの1つ又は複数からなる第2のセットをスクリーニングするための第2のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【0031】
諸態様は以下の利点のうちの1つ又は複数を含むことができる。
【0032】
複数レコードからなるブロックを圧縮することにより、複数レコードを個別に圧縮するより高い圧縮度を達成することができる。索引付きブロックは、複数の圧縮レコードからなるファイルの先頭から復元する必要なしに、所与のレコードにアクセスできるようにする。ブロックのサイズは、高い圧縮度を提供するのに十分大きく、しかもブロック内の所与のレコードにアクセスするのに必要な復元の量を制限するのに十分小さくなるように選択することができる。各ブロックは、圧縮ブロック内の任意の位置から復元を開始できるようにする必要のない圧縮技法を使用して圧縮することができる。従って、高い圧縮度を提供する技法を使用することができる。
【0033】
そこから対応するブロックが生成されたレコードに対応するキー値の範囲を識別する索引を記憶することにより、その索引は、それぞれのレコードに関する項目を有する必要がないので、小さい(例えば、比較的高速のメモリに収まるように十分小さい)状態を維持することができる。索引項目は、所望のレコードを求めてサーチすることができる1つのレコード・セットを回復するためにロードし復元することができる1つ又は複数のブロックの位置特定を可能にする。スクリーニング・データ構造(例えば、オーバラップ符号化シグネチャ(overlap encoded signature)又はその他のタイプのビットマップ)を圧縮ブロックと関連付けることは、所望のレコードが存在しないことを示すことができ、そのレコードを求めてサーチするために圧縮ブロックをロードし復元する必要性を取り除く。過剰な記憶空間を使用しない方法でスクリーニング・データ構造を漸増的に生成するために適応技法を使用することができる。多くの異なるスクリーニング・データ構造をチェックすることにより本来引き起こされると思われるフォルス・ポジティブの確率の過剰な増加を回避するために、様々な技法を使用することができる。潜在的に大きい索引をサーチする場合、索引を生成するための階層技法は、比較的低速の非ローカル記憶域にアクセスすることが要求される回数を低減することにより索引サーチを促進する。
【0034】
その他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0035】
【
図1】レコードを記憶し取り出すためのシステムのブロック図である。
【
図2A】システムによって処理され、システムに記憶されるデータの概略図である。
【
図2B】システムによって処理され、システムに記憶されるデータの概略図である。
【
図2C】システムによって処理され、システムに記憶されるデータの概略図である。
【
図2D】システムによって処理され、システムに記憶されるデータの概略図である。
【
図3A】異なるシグネチャ・サイズに関するフォルス・ポジティブ確率を示す表である。
【
図3B】異なるシグネチャ・サイズに関するフォルス・ポジティブ確率を示す表である。
【
図4A】レコードをサーチするための手順のフローチャートである。
【
図4B】レコードをサーチするための手順のフローチャートである。
【
図5】索引付け及びサーチ・モジュールのブロック図である。
【発明を実施するための形態】
【0036】
図1を参照すると、レコード記憶取り出しシステム100は、ソースA〜ソースCなどの1つ又は複数のソースからデータを受け入れる。データは、個別にアクセス可能な単位のデータとして表すことができる情報を含む。例えば、クレジット・カード会社は、様々な小売業者から個々の取引を表すデータを受け取ることができる。それぞれの取引は、顧客名、日付、購入額などの属性を表す値に関連付けられる。レコード処理モジュール102は、取引に関連するすべての値が1つのレコードに記憶されるように所定のレコード・フォーマットに応じてデータがフォーマットされることを保証する。場合によっては、これは、レコード・フォーマットに応じてソースからのデータを変換することを含む可能性がある。また、他の場合には、1つ又は複数のソースがレコード・フォーマットに応じてすでにフォーマットされたデータを提供する可能性もある。
【0037】
レコード処理モジュール102は、各レコードを識別する1次キー値(例えば、単一レコードを識別するユニーク・キー又は1つのレコードの複数の更新バージョンを識別するキーのいずれか)によってレコードをソートし、1次キー値の非オーバラップ範囲に対応する複数のレコード・セットにレコードを分割する。例えば、各レコード・セットは、所定の数のレコード(例えば、100個のレコード)に対応することができる。圧縮モジュール104は各レコード・セットを1つの圧縮データ・ブロックに圧縮する。これらの圧縮ブロックはレコード記憶域106(例えば、1つ又は複数のハード・ディスク・ドライブなどの不揮発性記憶媒体)内の圧縮レコード・ファイルに記憶される。また、システム100は、ブロックのそれぞれについて1つの項目を含む索引114を提供する索引付け及びサーチ・モジュール108も含む。索引114は、以下により詳細に説明するように、所与のレコードを含むことができるブロックを位置特定するために使用される。また、索引付け及びサーチ・モジュール108は、以下により詳細に説明するように、所与のレコードを求めてレコード記憶域106をサーチすることが必要である可能性のある時期を決定するために使用されるスクリーニング・データ構造116も含む。索引114及びスクリーニング・データ構造116は圧縮レコード・ファイルと同じ記憶媒体に記憶することができ、或いは、実現例によっては、索引ファイルは典型的に圧縮レコード・ファイルよりかなり小さいので、索引114及びスクリーニング・データ構造116の少なくとも一部分は好ましくは、モジュール108によってアクセス可能な比較的より高速のローカル記憶域(例えば、ダイナミック・ランダム・アクセス・メモリなどの揮発性記憶媒体)に記憶することもできる。これらの実現例では、索引114及び/又はスクリーニング・データ構造116の残りの部分は、必要になり、モジュール108のローカル記憶域に移動されるまで、索引記憶域110(例えば、1つ又は複数のハード・ディスク・ドライブなどの不揮発性記憶媒体)に記憶することができる。レコード記憶域106及び索引記憶域110は、同じ記憶媒体上又は異なる記憶媒体上で処理することができる。
【0038】
システム100の代替実装例では、何らかの方法で複数レコードを結合するために(即ち、ブロックが単に連結レコード・セットにならないように)圧縮に加えて又は圧縮の代わりにその他の機能を使用して、レコード・セットを処理してブロックを生成することができる。例えば、システムによっては、1つのレコード・セットを処理して、複数の暗号化データ・ブロックを生成することができる。
【0039】
インターフェース・モジュール112は、エージェントA〜エージェントDなどの人間及び/又はコンピュータ・エージェントに対する記憶レコードへのアクセスを提供する。例えば、インターフェース・モジュール112は、クレジット・カードの顧客が自分の取引をモニターするためのオンライン・アカウント・システムを実現することができる。様々な基準を満たす取引情報に関する要求をシステム100によって処理することができ、レコード記憶域106に記憶された圧縮ブロック内から対応するレコードを取り出すことができる。
【0040】
1つ又は複数のソースから到来するレコードのストリームは、圧縮レコード・ファイルを生成するために処理される前に一時的に記憶することができる。
図2Aを参照すると、システム100は圧縮レコード・ファイルに記憶すべき1つのレコード・セット200を受信し、1次キーの値に応じてそのレコードをソートする。
【0041】
1次キー値は、1つ又は複数のレコードによって表すことができるデータベース内の所与の項目を明確に識別することができる(例えば、所与の1次キー値を有する各レコードはその項目の異なる更新バージョンに対応することができる)。1次キーは、あるレコードの1つ又は複数の既存のフィールドに対応する「自然キー(natural key)」であり得る。各項目ごとに固有であることが保証されているフィールドがない場合、1次キーは、各項目ごとに固有であることがまとめて保証されているか又はそうである可能性が高い、あるレコードの複数のフィールドを含む複合キー(compound key)であり得る。或いは、1次キーは、受信された後に各レコードに割り当てることができる「合成キー(synthetic key)」であり得る。例えば、システム100は、順次増加される整数として又は単調に進行する値の何らかの他のシーケンス(例えば、タイム・スタンプ)として固有の1次キー値を割り当てることができる。この場合、同じ項目の異なるバージョンを表すレコードは異なる合成キー値が割り当てられ得る。整数が使用される場合、可能な1次キー値の範囲(例えば、使用されるビット数によって決定される通り)は、1次キーがロールオーバする場合に所与の1次キー値が先に割り当てられた任意のレコードが圧縮レコード・ファイルからすでに除去されているように、十分大きいものにすることができる。例えば、古い取引は除去されアーカイブ又は廃棄され得る。
【0042】
図2Aに示されている例では、レコード200は、アルファベット順にソートされた1次キー値、即ち、A、AB、CZ、・・・によって識別される。システム100は、ブロック1と表示された対応する圧縮ブロックを生成するよう、1次キー値A〜DDを有するN個のレコードからなる第1のセットを圧縮する。次のレコード・セットは、1次キー値DX〜GFを有する次のN個のソート済みレコードを含む。圧縮モジュール104は、様々な可逆的データ圧縮アルゴリズム(例えば、ラムペル−ジフ・タイプ・アルゴリズム)のいずれかを使用することができる。各連続圧縮ブロックは、圧縮レコード・ファイル202を形成するよう、結合される。
【0043】
1つの圧縮ブロックを生成するために使用されるレコードの数Nは、圧縮効率と復元速度とのトレードオフを図るように選択することができる。圧縮は、平均して、圧縮されるデータの性質と圧縮されるデータのサイズに依存する所与の係数R分だけ、データのサイズを低減することができる(例えば、Rは典型的に、圧縮されるデータが多いほど小さくなる)。圧縮はまた、平均サイズOの関連オーバヘッド(例えば、圧縮関連データ)を有し得る。それぞれがサイズXのM個のレコードから生成された結果の圧縮レコード・ファイルの平均サイズは、
【数1】
として表すことができ、これは、多数のブロックの場合、RMX+OM/Nとして概算することができる。従って、Nの値がより大きくなると、場合によっては、Rを低減することと、ファイルのサイズに対するオーバヘッドの貢献を低減することの両方により、より大きい圧縮が得られる可能性がある。Nの値が小さくなると、所与の圧縮ブロックを復元して、そのブロックに含まれている可能性のあるレコードにアクセスするために必要な時間が短縮される。
【0044】
他の実装例では、異なる圧縮ブロックが異なる数のレコードを含むことができる。各ブロックは、所定の範囲に応じて、ある数のレコードを含むことができる。例えば、第1のブロックは1次キー値1〜1000を有するレコードを含み、第2のブロックは1次キー値1001〜2000などを有するレコードを含む。すべての1次キー値が必然的に存在するわけではないので(例えば、既存の数値フィールドが自然キーとして使用される場合)、この例では、圧縮ブロック内のレコードの数はそれぞれ異なる可能性がある。
【0045】
いくつかの実装例では、種々の圧縮ブロックは、ある場合には目標数のレコードを含むことができ、例外的な場合にはより多くのレコード又はより少ないレコードを含むことができる。例えば、あるレコード・セットの最後のレコードの1次キー値がソート後の順序で次のレコードの1次キー値とは異なる場合、これらのレコードを使用して1つの圧縮ブロックが生成される。そのレコード・セットの最後のレコードの1次キー値がソート後の順序で次のレコードの1次キー値と同じである場合、その1次キー値を有するすべての追加レコードがそのセットに追加される。このようにして、同じ1次キー値がある圧縮ブロックから次の圧縮ブロックに移行することはない。
【0046】
索引付け及びサーチ・モジュール108は、圧縮ブロックのそれぞれについて索引ファイル204内に1つの項目(entry)を生成する。索引項目は、例えば、対応する未圧縮のレコード・セット内の第1のレコードの1次キーで各圧縮ブロックを識別するキー・フィールド206を含む。また、索引項目は、圧縮レコード・ファイル202内の識別された圧縮ブロックの記憶位置を識別する位置フィールド208も含む。例えば、位置フィールドは、レコード記憶域106内の絶対アドレスの形のポインタ又はレコード記憶域106内の圧縮レコード・ファイル202の先頭のアドレスからのオフセットの形式のポインタを含むことができる。
【0047】
圧縮レコード・ファイル202内の所与のレコードをサーチするために、モジュール108は、キー・フィールド206に基づいて索引ファイル204のサーチ(例えば、バイナリ・サーチ)を実行することができる。提供されたキー値(例えば、エージェントの1つによって提供されたもの)について、モジュール108は、提供されたキー値を含むキー値の範囲に対応するレコードを含むブロックを位置特定する。提供されたキー値を有するレコードは、位置特定されたブロックを生成するために使用されたレコード・セットに含まれている場合もあれば、含まれていない場合もあり、そのレコードがレコード200内に存在していた場合、レコード200は1次キー値でソートされているので、そのレコードは含まれているはずである。次に、モジュール108は、位置特定したブロックを復元し、提供されたキー値を有するレコードをサーチする。1次キー値がレコードごとに固有のものではない場合、モジュール108は、圧縮ブロック内で提供されたキー値を有する複数のレコードを見つけるかも知れない。キー・フィールド206が1つのセット内の第1のレコードの1次キーを含むこの例では、モジュール108は、それぞれ提供されたキー値より前と後のキー値を有する2つの連続索引項目をサーチし、前のキー値を有する項目に対応するブロックを返す。場合によっては、提供された値はある索引項目内のあるキー値と同じである可能性があり、その場合、モジュール108はその項目に対応するブロックを返す。
【0048】
異なる実装例では、そこから対応するブロックが生成される元となったレコードに対応するキー値の範囲を識別するための、索引ファイル204内の項目に対する異なる方法が存在する。
図2Aに示されている実装例のように、キー値の範囲は、1つのブロックを生成するために使用されたレコードの2つの極値キー値(例えば、ソート後の一連のアルファベット1次キー値の最初と最後、又はソート後の一連の数値1次キー値の最小値と最大値)の間の範囲にあることができる。索引項目は、その範囲を定義する極値のいずれか一方又は両方を含むことができる。実装例によっては、索引項目が所与のブロックに関する範囲を定義する最小キー値を含む場合、圧縮レコード・ファイル内の最後のブロックに関連付けられた最後の索引項目は、そのブロックに関する範囲を定義する最大キー値も含むことができる。そして、この最大キー値は、所与のキー値が範囲外になる時期を決定するために圧縮レコード・ファイルをサーチする時に、使用され得る。
【0049】
代わって、キー値の範囲は、1つのブロックを生成するために使用されたレコードのキー値を超えて拡がる範囲であり得る。例えば、1〜1000の間の数値1次キー値を有するレコードから生成されたブロックの場合、レコード内に表された最小キー値は1より大きくなり、レコード内に表された最大キー値は1000より小さくなるであろう。索引項目は、その範囲を定義する極値1及び1000のいずれか一方又は両方を含むことができる。
【0050】
圧縮レコード・ファイルを生成するために初期グループのレコードが処理された後に追加レコードが到着した場合、これらのレコードはバッファに記憶され、未圧縮形式でサーチされ得る。或いは、追加のレコード・グループは、追加の索引ファイルによってアクセス可能な追加の圧縮レコード・ファイルとして、漸増的に処理され記憶され得る。場合によっては、少数の追加レコードを圧縮しても記憶サイズの大幅な低減が得られない可能性がある場合でも、レコードにアクセスするための均一な手順を維持するために追加レコードを圧縮することは依然として有利であり得る。追加レコードは、一定の時間間隔で(例えば、30秒おき又は5分おきに)或いは所定数の追加レコードが受信された後に(例えば、1000レコードおき又は10000レコードおきに)繰り返し処理することができる。到来するレコードが時間間隔に基づいて処理される場合、間隔によっては、単一圧縮ブロックにすべて圧縮される着信レコードが全くないか或いは少数のレコードしかない場合もある。
【0051】
図2Bを参照すると、初期圧縮レコード・ファイル202が生成された後でシステム100によって追加レコードが受信された例では、複合圧縮レコード・ファイル211を形成するために、追加の圧縮レコード・ファイル210は初期圧縮レコード・ファイル202に付加され得る。システム100は、圧縮レコード・ファイル210の圧縮ブロックを生成するため、追加レコードを1次キー値でソートし、N個のレコードからなる複数のセットを圧縮する。ブロック91と表示されている付加ファイル210内の第1の圧縮ブロックは1次キー値BA〜FFを有する。モジュール108は、付加ファイル210内に表された追加レコードをサーチするために使用できる項目を含む追加の索引ファイル212を生成する。新しい索引ファイル212は前の索引ファイル204に付加され得る。
【0052】
任意の数の圧縮レコード・ファイルは、複合圧縮レコード・ファイルを形成するために付加され得る。索引付け及びサーチ・モジュール108が複合圧縮レコード・ファイル内の所与のキー値を有するレコードをサーチする場合、モジュール108は、対応する索引ファイルを使用して、付加された圧縮レコード・ファイルのそれぞれに含まれるそのファイルをサーチする。或いは、所与のレコードを要求するエージェントは、サーチすべき複合圧縮レコード・ファイルとともにいくつかの圧縮レコード・ファイルを指定することができる(例えば、10個の最も最近生成されたもの又は最後の1時間に生成されたもの)。
【0053】
所与の時間後(例えば、24時間おき)又は所与の数の圧縮レコード・ファイルが付加された後に、システム100は、複合圧縮レコード・ファイル及び新しい対応索引ファイルから単一圧縮レコード・ファイルを生成するために、ファイルを統合することができる。統合後、単一索引をサーチして、所与のレコードを含む可能性のある圧縮ブロックを位置特定することができ、その結果、より効率的なレコード・アクセスが可能になる。統合時に、システム100は、対応するソート済みレコードのセットを回復するため、圧縮レコード・ファイルを復元して、そのレコードを1次キー値でソートし、新しい圧縮レコード・ファイルと索引を生成する。回復されたレコード・セットのそれぞれはすでにソートされているので、1次キー値に応じて前にソートされたリストを併合してソート済みレコードの単一セットを生成することにより、レコードを効率よくソートすることができる。
【0054】
図2Cを参照すると、複合圧縮レコード・ファイル211は、いくつの追加レコードが到着したか並びにどのくらいの頻度でレコードが処理されたかに依存して、初期圧縮レコード・ファイル202と、追加の圧縮レコード・ファイル210と、いくつかの追加の圧縮レコード・ファイル220、221、・・・とを含む。それぞれの圧縮レコード・ファイルは、そのファイルの圧縮ブロック内で所与のレコードをサーチするために使用できる関連索引ファイルを有することができる。この例では、圧縮レコード・ファイル220の1つは、単一圧縮ブロック(ブロック95)のみを有するのに十分小さく、従って、必ずしも関連索引ファイルを必要としないが、そのブロック内の1次キー値の範囲及び記憶域内のその位置を示す関連データを有することができる。統合後、異なる付加圧縮レコード・ファイルから回復されたレコードは、単一圧縮レコード・ファイル230を生成するために処理される。
【0055】
単調に割り当てられた1次キーの場合、レコードは、圧縮レコード・ファイル内のみならず、あるファイルから次のファイルにも自動的にソートされ、単一索引サーチでレコードにアクセスするためにファイルを統合する必要性を取り除く。
図2Dを参照すると、システム100は、そのレコードの1次キーとして到着順に割り当てられた連続整数で識別されるレコードのセット250を受信する。従って、レコード250は1次キーで自動的にソートされる。初期圧縮レコード・ファイル252はこの例ではそれぞれが100個のレコードを含む圧縮ブロックを含み、索引ファイル254は、圧縮ブロック内の第1のレコードの1次キー値用のキー・フィールド256と、対応する記憶位置を識別する位置フィールド258とを含む。初期圧縮レコード・ファイル252が生成された後に到着するレコードは自動的にソート後の順序でそれより後の1次キー値を有することになるので、付加圧縮レコード・ファイル260及び対応する索引ファイル262は、単一索引サーチに基づいて効率的なレコード・アクセスを可能にするために統合する必要はない。例えば、索引ファイル262は単純に索引ファイル254に付加され、圧縮レコード・ファイル252又は260のいずれかで圧縮ブロックを位置特定するため、両方の索引は(例えば、単一バイナリ・サーチで)まとめてサーチされ得る。
【0056】
複合圧縮レコード・ファイル261は、圧縮レコード・ファイル252の末尾で挿入された可能性のある不完全ブロックを除去するために任意選択で統合され得る。このような統合では、第1のファイル252内の最後の圧縮ブロックのみが復元される必要があり、復元したレコード・セットを併合する代わりに、それらのレコード・セットは新しいソート済みのレコード・セットを形成し、後でもう一度、新しい圧縮レコード・ファイルを形成するために圧縮された100個のレコードからなるセットに分割されるよう、単純に連結され(concatenated)得るであろう。
【0057】
連続整数合成1次キー値を使用することのもう1つの利点は、その1次キー値に基づいてレコードをパーティション化する場合、キー値にギャップが全くないので、そのパーティションについて自動的にバランスを取ることができることである。
【0058】
様々な技法のいずれかを使用して、レコードを更新し、圧縮レコード・ファイル内に存在する可能性のあるそのレコードの任意の前のバージョンを無効にすることができる。場合によっては、レコードは個別に除去又は更新する必要はない(例えば、ログ、取引、電話呼び出し)。これらの場合、古いレコードは、例えば、圧縮レコード・ファイルの先頭から、除去され廃棄されるか又は所定の数の圧縮ブロックからなるグループにアーカイブされ得る。場合によっては、圧縮レコード・ファイル全体は除去され得る。
【0059】
場合によっては、あるレコードの1つ又は複数の値は、圧縮ブロックへの記憶のために新しい更新済みレコードを追加することにより、更新され、そのレコードの前に受信したバージョン(同じ1次キー値を有する)は、異なる圧縮ブロックに記憶したままになり得る。その場合、1つのレコードの複数のバージョンが存在する可能性があり、どれがそのレコードの有効バージョンであるかを判断するために何らかの技法が使用される。例えば、任意の圧縮レコード・ファイルに現れる最後のバージョン(最も最近受信したもの)は有効バージョンとして暗黙的又は明示的に示すことができ、他のバージョンはいずれも無効である。この場合、所与の1次キーを有するレコードを求めるサーチは、出現順にその1次キーで識別された最後のレコードを見つけることを含むことができる。或いは、あるレコードの任意の前のバージョンが有効ではないことを示す「レコードの無効化」を書き込むことにより、そのレコードの新しいバージョンを必ずしも追加せずに、レコードを無効化することができる。
【0060】
システム100は、異なるプロセスによって、レコード記憶域106に記憶された圧縮レコード・ファイルへのアクセスを仲介する。様々な同期技法のいずれかを使用して、1つ又は複数の圧縮レコード・ファイル内の圧縮ブロックへのアクセスを仲介することができる。システム100は、(例えば、データを付加又は統合することにより)ファイルを変更するどのプロセスも相互に干渉しないことを保証する。例えば、統合が行われている間に新しいレコードが到着した場合、システム100は、統合プロセスが終了するまで待つことができ、或いはそれを既存の圧縮レコード・ファイルに付加する前に圧縮ブロックを生成し、それを一時的に記憶することができる。圧縮レコード・ファイルから読み取るプロセスは、完全なファイルの一部分をロードすることができ、変更を被っている可能性のある不完全な部分を無視することができる。
【0061】
システム100は、1次キー以外のレコードの属性に基づいてレコードのサーチを可能にする追加データを記憶する。圧縮レコード・ファイルに対する2次索引は、2次キーとして指定された属性の値に基づいて1つ又は複数の1次キー値を提供する情報を含む。2次キーとして指定された各属性は、対応する2次索引に関連付けることができる。例えば、各2次索引は、関連2次キーでソートされた行を有するテーブルとして編成され得る。各行は、1つの2次キー値と、その2次キー値を含む複数レコードの1つ又は複数の1次キー値とを含む。従って、所与の2次キー値を含む任意のレコードのサーチをエージェントが開始した場合、システム100は、そのレコード(複数もあり得る)を含む圧縮ブロック(複数もあり得る)に対する圧縮レコード・ファイルの索引をサーチするために使用するための1次キー(複数も可)を調べる。2次索引は大きいもの(例えば、レコード数程度)である可能性があり、場合によっては、圧縮レコード・ファイルを記憶する記憶媒体に記憶し得る。
【0062】
場合によっては、2次キーとして指定された属性の値は各レコードごとに固有であり得る。このような場合、その2次キーと1次キーとの間には1対1の対応が存在し、インターフェース・モジュール112は、それがエージェントにとって1次キーである場合と同じようにその2次キー属性を提示することができる。
【0063】
新しい圧縮レコード・ファイルが複合圧縮レコード・ファイルに付加されるたびに各2次索引は更新され得る。或いは、1つの2次キーは、各圧縮レコード・ファイル対する異なる2次索引に関連付けられ、複数の2次索引は、圧縮レコード・ファイルが統合された時に、単一2次索引に統合され得る。
【0064】
スクリーニング・データ構造116は、所与の属性値を含むレコードがそのファイルの圧縮ブロックに含まれる可能性を判断するために、圧縮レコード・ファイルに関連付けられ得る。例えば、スクリーニング・データ構造としてオーバラップ符号化シグネチャ(OES)を使用して、システム100は、所与のキー値(1次キー又は2次キー)を有するレコードが確かに存在しないと判断するか(「否定的」結果)又は所与のキー値を有するレコードが存在する可能性があるかどうかを判断することができる(「肯定的」結果)。肯定的結果の場合、システムはそのレコードを取り出す(「確定ポジティブ(confirmed positive)」結果)か又はそのレコードが存在しないと判断する(「フォルス・ポジティブ」結果)ために、適切な圧縮ブロックにアクセスする。否定的結果の場合、システムは、存在しないレコードを求めて圧縮ブロックを復元しサーチして時間を費やす必要なしに、否定的結果をエージェントに与えることができる。OESのサイズは、どのくらい頻繁に肯定的結果がフォルス・ポジティブになるかに影響し、一般に、所与の数の特異な(即ち、固有の)可能なキー値についてOESサイズが大きくなるほどフォルス・ポジティブ結果は少なくなる。所与のOESサイズの場合、一般に、特異な可能なキー値が少なくなるほどフォルス・ポジティブは少なくなる。
【0065】
その他のタイプのスクリーニング・データ構造も可能である。所与の1次キー又は2次キーに対するスクリーニング・データ構造は、1つの圧縮ブロック・セットを含む各圧縮レコード・ファイルに対して提供され得る。或いは、1つのキーに対するスクリーニング・データ構造は、各圧縮ブロックに対して、又は1つの圧縮レコード・ファイル内の複数の圧縮ブロック・セットのそれぞれに対して、提供され得る。
【0066】
図3A及び
図3Bは、模範的なOESスクリーニング・データ構造の様々なサイズ(列)及び圧縮レコード・ファイルに表された特異キー値の様々な数(行)に対するあるキー値についてフォルス・ポジティブ結果を得るための確率値を提供する表を示している。OESに関して、OESのサイズ及び特異キー値の数に依存して、OESの同じ部分に2つ以上のキー値の存在が示される可能性があり、潜在的に、もう一方が存在する場合には、これらのキー値の一方についてフォルス・ポジティブ結果へと導く。この模範的なOESのサイズは2
10=1024ビット(
図3Aの表)から2
28=256Mビット(
図3Bの表)まで様々になる。特異キー値の数は100(
図3Aの表)から100,000,000(
図3Bの表)まで様々になる。どちらの表についても、右上のブランク・セルは0%に対応し、左下のブランク・セルは100%に対応する。フォルス・ポジティブ確率が低い(例えば、ほぼゼロ)セルの場合、スクリーニング・データ構造は妥当なスクリーニングを行うのに必要なものより大きくなる可能性がある。フォルス・ポジティブ確率がかなり大きい(例えば、>50%)セルの場合、スクリーニング・データ構造は妥当なスクリーニングを行うには小さすぎる可能性がある。この例は、キー値あたり4つのハッシュ・コードを使用してOESを生成するための技法に対応する。OESスクリーニング・データ構造のその他の例では、所与の数の特異キーに対するフォルス・ポジティブ確率についての異なる表が得られる可能性がある。
【0067】
圧縮レコード・ファイル内に表された特異キー値の数が不明ある可能性があるので、システム100は、ファイルが生成された元となったレコードの数に基づいて、圧縮レコード・ファイルに対するスクリーニング・データ構造のサイズを選択することができる。サイズを選択する際に、フォルス・ポジティブ確率を低減することと、スクリーニング・データ構造を記憶するために必要なメモリ空間とのトレードオフが存在する。このトレードオフにおける要因の1つは、存在しないキー値をサーチする見込みである。調べるべきキー値のほとんどが復元レコード内に存在する可能性がある場合、スクリーニング・データ構造は全く必要ではない可能性がある。キー値が見つからない確率がかなり大きい場合、比較的大きいスクリーニング・データ構造のために記憶空間を割り振ると、相当な時間を節約することができる。
【0068】
圧縮レコード・ファイルに関連付けられたスクリーニング・データ構造のサイズは、そのファイルがレコードの初期の又は統合された大きいデータベースに対応するかどうか、又はより大きいデータベースに対するより小さな更新に依存し得る。一般にそれぞれの更新にはより少ない特異キー値が存在するので、比較的小さいスクリーニング・データ構造のサイズは、定期的な更新間隔中に付加された圧縮レコード・ファイルに使用され得る。また、多くの更新後に圧縮レコード・ファイルの数が増加するので、小さいサイズは必要な記憶空間を低減することができる。スクリーニング・データ構造のサイズは、1つの更新において予想される数のレコード及び/又は特異キー値と、予想される数の更新に基づくことができる。例えば、24時間の期間中に5分おきに更新済みファイルが付加される場合、その日の終わりには288個の圧縮レコード・ファイルが存在することになる。少なくとも1つのフォルス・ポジティブ結果の確率は、
図3A及び
図3Bの表からの適切な値の288倍になるであろう(異なる更新に関する結果は独立したものになると想定する)。統合後、特異キー値の数は大幅に増加し得るので、より大きいスクリーニング・データ構造は統合された圧縮レコード・ファイルに適したものになり得る。
【0069】
圧縮レコード・ファイルは、1次キー用及びそれぞれの2次キー用のスクリーニング・データ構造、又はこれらのキーの何らかのサブセット用のスクリーニング・データ構造を有することができる。例えば、システム100は、1次キー用のスクリーニング・データ構造と、レコードをサーチする際に最も頻繁に使用されると予想される2次キーのみに対するスクリーニング・データ構造を提供することができる。
【0070】
図4Aは、所与の1次キー値を有する1つ又は複数のレコードをサーチするための手順400のフローチャートを示している。手順400は、402で第1の圧縮レコード・ファイルに関連付けられたスクリーニング・データ構造が存在するかどうかを判断する。存在する場合、手順400は、404で、肯定的結果又は否定的結果のいずれか一方を得るために、スクリーニング・データ構造を処理する。所与の1次キー値がスクリーニングを通過しなかった場合(否定的結果)、手順400は、406で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。所与の1次キー値がスクリーニングを通過した場合(肯定的結果)、手順400は、408で所与の1次キー値を有するレコードを含む可能性のあるブロックを求めて索引をサーチする。いかなるスクリーニング・データ構造も圧縮レコード・ファイルに関連付けられていない場合、手順400は、408でスクリーニングを実行せずに索引をサーチする。
【0071】
408で索引をサーチした後、410で所与の1次キー値を含むキー値の範囲に関連付けられた圧縮ブロックが見つかった場合、手順400は、412で索引項目で識別された位置でブロックを復元し、414で所与の1次キー値を有する1つ又は複数のレコードを求めて結果のレコードをサーチする。次に、この手順は、416で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。いかなる圧縮ブロックも見つからない場合(例えば、所与の1次キー値が第1のブロック内の最小キー値より小さいか又は最後のブロック内の最大キー値より大きい場合)、手順400は、416で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。
【0072】
図4Bは、所与の2次キー値を有する1つ又は複数のレコードをサーチするための手順450のフローチャートを示している。手順450は、452で第1の圧縮レコード・ファイルに関連するスクリーニング・データ構造が存在するかどうかを判断する。存在する場合、手順450は、肯定的結果又は否定的結果のいずれか一方を得るために、454でスクリーニング・データ構造を処理する。所与の2次キー値がスクリーニングを通過しなかった場合(否定的結果)、手順450は、456で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。所与の2次キー値がスクリーニングを通過した場合(肯定的結果)、手順450は、458で所与の2次キーを含むレコードに対応する1次キーを調べる。いかなるスクリーニング・データ構造も圧縮レコード・ファイルに関連付けられていない場合、手順450は、458でスクリーニングを実行せずに1次キーを調べる。
【0073】
見つかった1次キーのそれぞれについて、手順450は、460で所与の1次キー値を有するレコードを含む可能性のあるブロックを求めて索引をサーチする。460で索引をサーチした後、462で所与の1次キー値を含むキー値の範囲に関連付けられた圧縮ブロックが見つかった場合、手順450は、464で、索引項目で識別された位置でブロックを復元し、466で所与の1次キー値を有する1つ又は複数のレコードを求めて結果のレコードをサーチする。次に、この手順は、468で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。いかなる圧縮ブロックも見つからない場合、手順450は、468で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。
【0074】
所与の1次キー又は2次キーを有する見つかった複数のレコードは、出現順に手順400又は手順450によって返され、又は、場合によっては、そのレコードの最後のバージョンのみが返される。
【0075】
上記の通り、スクリーニング・データ構造がフォルス・ポジティブを返す確率は、スクリーニング・データ構造のサイズ(データ構造が大きいほどフォルス・ポジティブの確率が低下するであろう)と、ブロック内に記憶されたレコードのグループを識別するためにデータ構造内に表された特異キーの数(特異キーの数はスクリーニング・データ構造が使用されるブロックの数につれて増加する傾向があり、特異キーの数が増えるほどフォルス・ポジティブの確率が増加するであろう)との関数として、測定され得る。従って、スクリーニング・データ構造のサイズを制御することは、フォルス・ポジティブ結果の確率に影響を及ぼす方法の1つである。しかし、受け入れられるフォルス・ポジティブ確率を達成するために必要なものより大きいサイズを選択すると、不必要に大量の稀少記憶空間を使用する可能性がある。受け入れられる確率は、例えば、ユーザ入力に基づいて決定され得る。
【0076】
実装例によっては、所与のグループのレコードに必要なスクリーニング・データ構造の適切なサイズを選択するために、レコードが受信されると、レコードを受信し圧縮ブロックに記憶しながら、それらのレコードに関連付けられた特異キーがメモリ内に蓄積される。この蓄積に基づいて、メモリ内の特異キーの数をカウントすることにより、フォルス・ポジティブの所定の確率Pを達成するために必要なスクリーニング・データ構造のサイズは決定され得る。次に、レコード処理モジュール102は、決定されたサイズのスクリーニング・データを生成する。そうして、グループ内のすべてのレコードが受信されるまで、スクリーニング・データ構造は作成されない。従って、スクリーニング・データ構造のサイズは、蓄積された特異キーの数に基づいて決定され、確率Pを達成するために不必要に大きくはならないであろう。しかしながら、キーをメモリに記憶することは、システムによっては比較的限られたシステム・リソース(例えば、揮発性メモリ)を使用する。また、より豊富な記憶域(例えば、不揮発性メモリ)にキーを記憶することもできるが、この技法は記憶されたキーにアクセスするための入出力(I/O)コストを増加することになるであろう。実装例によっては、1つ又は複数のスクリーニング・データ構造は、未決定の及び/又は多数の特異キーを蓄積するのを待つ必要なしに、しかも、すべてのレコードが受信されるのを待つ必要なしに、フォルス・ポジティブの割合を制限するよう、グループ内のレコードが受信されている間に、適応的に生成され得る。この適応技法では、ソート後の順序のレコードのキーとともに、そのグループのレコードが受信される。例えば、場合によっては、それらのレコードは、それらのキーに従ってすでにソートされている、レコード処理モジュール102によって受信されることが分かっている自然1次キーを有する。他の場合には、レコードはレコード処理モジュール102によって割り当てられる合成1次キーを有し、それらの割り当てられたキー(例えば、増加した整数、又はタイムスタンプ、又はその他の単調に増加する値であるキー)に従ってソートされるようになっている。割り当てられた合成キーも固有のものである場合、いくつの特異キーが受信されたかを判断するために特異キーをメモリに記憶する必要はなく、その代わりに、いくつの特異キーが受信されたかを判断するために受信したレコードの数のカウントが増やされ得る。
【0077】
場合によっては、レコードのグループは、バッチ処理モードで処理すべきレコードの単一バッチに対応する。バッチ内の最後のレコードは、例えば、所定のトークン又はメッセージによって意味付けされ得る。他の場合には、レコードのグループは、区切り文字(delimiters)を繰り返すことによって分離される連続ストリームの複数の区切られたセクションの1つに対応する。上記の通り、連続する区切り文字の対の間では、そのキーに応じてそのグループのレコードがソートされる。
【0078】
そのグループに関するスクリーニング・データ構造を生成するためにグループ内のレコードのすべてが受信されるのを待つ必要がある代わりに、レコード処理モジュール102は、レコードが受信される時に所定のサイズSのスクリーニング・データ構造の生成を開始することができる。サイズが決定されると、例えば、ビットマップのビットを設定することにより、レコードが到着する時にスクリーニング・データ構造を構築することができる。スクリーニング・データ構造に関連付けられた特異キーの数が増加する(しかも、設定されるビットの数が増加する)につれて、フォルス・ポジティブの確率も高くなる。フォルス・ポジティブの確率がPに達する前にグループの終わりに達した場合、特異キーの実際の数に基づいて、Pにより近いフォルス・ポジティブの確率を達成するために、必要であれば、スクリーニング・データ構造のサイズを低減することができる。(これまで特異キーの数に基づいて)フォルス・ポジティブの確率がPに達した場合、第1のスクリーニング・データ構造を記憶することができ、サイズSの第2のスクリーニング・データ構造を生成し始めることができる。次に受信するレコードに関連する新しい特異キーを蓄積するための場所を空けるために、メモリに記憶されている任意の特異キーを廃棄することができる。このプロセスは、グループ内の最後のレコードが受信されるまで続けることができる。所与のグループのレコードについて、1つ又は複数のスクリーニング・データ構造が存在することになり、それぞれがフォルス・ポジティブの所定の確率(例えば、Pに等しいか又はPに近いもの)を達成するように選択されたサイズを有し、任意に多数の特異キーを蓄積するか又は最後のレコードが受信されるまで待つ必要なしにそれぞれが構築される。グループ内のレコードはそれぞれのキーによるソートされた順序で受信されるので、そのグループ用の各スクリーニング・データ構造(複数のスクリーニング・データ構造が存在する場合)は異なる非オーバラップ範囲のキー値に対応する。
【0079】
サイズSは、システム100の特性など、様々な要因のいずれかに基づいて選択され得る。例えば、サイズSは、そのシステム内で効率的にアクセスできる最大サイズに基づき得る。実装例によっては、所定のサイズのハッシュ値(例えば、32ビット・ハッシュ)が1次キーから生成され、サイズSはこの所定のハッシュ値サイズに基づいて選択され得る。
【0080】
実装例によっては、2つ(又はそれ以上)のスクリーニング・データ構造は、並列(parallel)に構築され得る。例えば、(例えば、確率Pを達成する特異キーの数Kで)サイズSの1つのデータ構造が構築され、(例えば、確率Pを達成する特異キーの数K/2で)サイズS/2の1つのデータ構造が構築され得る。グループ内のレコードの特異キーの実際の数に基づいて、データ構造の一方が選択され(必要であれば、適切なサイズに縮小する)、もう一方のデータ構造は廃棄され得る。例えば、特異キーの数がK/2以下である場合、サイズS/2のスクリーニング・データ構造が使用され、確率Pを達成するために必要であれば縮減され得る。特異キーの数がK〜K/2の間である場合、サイズSのスクリーニング・データ構造が使用され、確率Pを達成するために必要であれば縮減され得る。特異キーの数がKを超える場合、サイズSのスクリーニング・データ構造は記憶され、第2のスクリーニング・データ構造が構築され得る(しかも、同じ並行技法を使用して構築することができる)。第2のデータ構造を並行して構築するコストは、特異キーの実際の数に合わせて所望の確率Pを達成するために必要な最適サイズにより近いものにすることにより達成される節約より少ない可能性がある。
【0081】
実装例によっては、レコードの数(従って、特異キーの数)が少ない場合に、スクリーニング・データ構造を適応的に生成するための時間はさらに短縮することができる。スクリーニング・データ構造サイズS/2から始め、特異キーの数に基づいてそれを適切なサイズに縮小することは、その縮小を実行するために必要な動作の数のために、場合によっては比較的遅くなる可能性がある(例えば、「折りたたみ(fold)」演算を使用する場合、6回の折りたたみを使用して2
16ビットのサイズから2
10ビットのサイズへの縮減を達成することができる)。レコードを受信する時に複数のスクリーニング・データ構造を並行して生成する代わりに、キー・バッファがいっぱいになるまで又はグループ内にそれ以上レコードが存在しなくなるまで、キーはメモリ内キー・バッファに蓄積され得る。キー・バッファがいっぱいになった場合、バッファされたキーを使用して適切なサイズのスクリーニング・データ構造(例えば、サイズS)が構築され得る。その後、キー・バッファは廃棄され、グループ内のその後のレコードが受信される時に、他のスクリーニング・データ構造を生成するために、それらのすべてのレコードのキーが使用され得る。キー・バッファがいっぱいになる前にグループ内のすべてのレコードが受信された場合、バッファされたキーから適切なサイズのスクリーニング・データ構造が生成され、(特異キーの数が少ない)その場合に本来必要であると思われる縮減動作が回避される。
【0082】
最大サイズSが2
16ビット(又は8Kバイト)であるビットマップであり、想定した数の特異キーに対する所与の目標フォルス・ポジティブ確率に対応するスクリーニング・データ構造を生成する一例を以下に示す。この例では、ビットマップ内のすべてのビットをアドレス指定するために16ビット・アドレスで十分である。到来するレコードが受信されると、それらのキーは、32ビットのハッシュ値を生成するために、ハッシュされる。このハッシュの最下位16ビットは、対応するキーについて設定されたビットマップ内のビットの位置を決定するために、使用される。グループ内のすべてのレコードが受信された後、例えば、特異キーの数に基づいて、最適ビットマップ・サイズが2
10ビットである場合、2
16ビットから2
10ビットにビットマップは、縮減され得る。サイズ2
16のビットマップが等しいサイズの2つの部分に分割された場合、それぞれがサイズ2
15ビットの2つのビットマップが存在する。論理「OR」演算を使用して2つのビットマップのそれぞれのビットをまとめて結合すると、サイズ2
15ビットの折りたたみビットマップが生成される。これは1回の折りたたみ動作である。(全部で6回の折りたたみ動作の場合)この折りたたみ動作をさらに5回繰り返すと、サイズ2
10ビットのビットマップが得られ、これは32ビットのハッシュ値の最下位10ビットを使用してアドレス指定することができる。サイズ2
10ビットのビットマップは2
16ビットのビットマップより高いフォルス・ポジティブ率を有する。しかしながら、想定した数の特異キーより少ない数の特異キーを受信したので、そのビットマップは依然として所与の目標フォルス・ポジティブ確率を達成する。
【0083】
この適応手法を使用してスクリーニング・データ構造を生成すると、複数のスクリーニング・データ構造が存在する可能性があり、1次キーによるソート後の順序で複数ブロックのグループに記憶されたレコードのグループのうちの異なるサブセットをスクリーニングするためにそれぞれが使用される。従って、複数のスクリーニング・データ構造のそれぞれが複数ブロックのグループのうちの異なる対応サブセットに関連付けられ、また、それらのブロックに記憶されたレコードに対応するキー値の異なる範囲に関連付けられる。(例えば、単一圧縮レコード・ファイルに記憶された)グループ内のレコードのすべてに対するブロックは、所与のレコードをどのブロックに記憶できるかを判断するために、索引を使用して位置特定されサーチされ得る。「ブロック索引サーチ(block index search)」では、所与のレコードを含み得る単一ブロックを(例えば、バイナリ・サーチを使用して)見つけることができる。場合によっては、索引をサーチする時に、所与のレコードを含む可能性のある単一ブロックを位置特定する必要はないが、以下により詳細に説明するように、むしろ、スクリーニング・データ構造のうちの対応する1つによってスクリーニングされる複数のブロックにまたがるキー値の範囲内に所与のレコードのキーが入るかどうかを判断するために「ブロック範囲索引サーチ(block range index search)」を実行することだけが必要である場合もある。このブロック範囲索引サーチを容易にするために、索引付け及びサーチ・モジュール108は、以下により詳細に説明するように、各スクリーニング・データ構造に関連して、対応する範囲のキー値を示す指示を記憶することができる。
【0084】
手順400及び450は、そのグループのブロックに関連する複数のスクリーニング・データ構造のそれぞれをチェックし、それに続いて、少なくとも1つの肯定的結果の場合にどのブロックがそのレコードを含む可能性があるかを判断するために索引をサーチすることにより、レコードをサーチするために使用することができる。しかしながら、肯定的結果はフォルス・ポジティブになる可能性があるので、そのレコードを見つけるためにブロックを位置特定して復元する前に(これは、不必要に実行された場合にサーチ・プロセスを著しく遅くする可能性があり、行うには費用のかかるアクションである)、少なくともいくつかのフォルス・ポジティブを捕捉するために他のステップが行われ得る。例えば、ブロック範囲索引サーチは、そのレコードのキーが肯定的結果をもたらすスクリーニング・データ構造に対応するキー値の範囲内に入るかどうかを判断するために、使用され得る。キー値がその範囲内のキー値に入らない場合、肯定的結果はフォルス・ポジティブであったに違いない。キー値がその範囲内のキー値に入る場合、フォルス・ポジティブは除外されておらず、索引付け及びサーチ・モジュール108は、所与のキーを有するレコードを復元しサーチするための特定のブロックを見つけるために、ブロック索引サーチを実行する。
【0085】
所与のキーを有するレコードをサーチするために複数のスクリーニング・データ構造のそれぞれをチェックした結果は、フォルス・ポジティブの確率が悪化し、サーチしたスクリーニング・データ構造の数につれて(単一スクリーニング・データ構造のフォルス・ポジティブ確率Pに比べて)増加することである。少数のスクリーニング・データ構造の場合、これは重大ではない可能性があるが、多数のスクリーニング・データ構造の場合、まずブロック範囲索引サーチを実行して、複数のスクリーニング・データ構造のうちのどれが所与のキーを含むキー値の範囲に対応するかを識別することにより、パフォーマンスが向上し得る。その場合、識別されたスクリーニング・データ構造についてのみ、肯定的結果の有無がチェックされ、従って、フォルス・ポジティブ確率はPに制限される。
【0086】
以下の例は、どのようにブロック範囲索引サーチを実行できるかを示している。対応する索引項目によってそれぞれ位置特定される圧縮ブロックに記憶されたレコードのキー値の異なる非オーバラップ範囲をスクリーニングするために、それぞれのスクリーニング・データ構造が使用される。それぞれの索引項目(最後の索引項目は除く)はその索引項目によって位置特定された圧縮データ・ブロック内の第1のレコード用のキー値を含むので、所与のスクリーニング・データ構造によってスクリーニングされたキー値の範囲は、所与のスクリーニング・データ構造に関連付けられた索引項目の範囲を識別することによって決定され得る。以下の簡略化した例では、「ビットマップ0」及び「ビットマップ1」と表示された2つのスクリーニング・データ構造が存在する。この例では、索引はアレイに記憶され、所与の索引項目は、アレイへの索引付けのための「索引項目索引(index entry index)」(IEI)という対応して順次割り当てられた整数値を使用して取り出され得る。以下の表は、索引内の6つの索引項目のそれぞれについて、それに対応するIEI値と、その特定の索引項目によって位置特定されたブロックに記憶されたレコードをスクリーニングするためにどのビットマップが使用されるかを示している。この表は、最後の通常索引項目によって位置特定された圧縮データ・ブロック内の最後のレコード用のキー値を含む「終了索引項目(terminating index entry)」で終わる。
【表1】
【0087】
ビットマップ0は0〜2のIEI値を有する索引項目の範囲に対応し、ビットマップ1は3〜5のIEI値を有する索引項目の範囲に対応する。それぞれの索引項目は、圧縮ブロックを記憶するファイルへの記憶オフセットによって位置特定された圧縮データ・ブロック内の第1のレコード用のキー値を含む。この例では、ビットマップ0は10(含む)〜310(除く)のキー値の範囲に対応し、ビットマップ1は310(含む)〜610(含む)のキー値の範囲に対応する。その範囲の第1のキー値を含む索引項目用のIEI値といった、そのビットマップに対するキー値の対応する範囲を示すためのそれぞれのビットマップに関連した単一のIEI値を記憶することで十分である。例えば、0というIEI値はビットマップ0に関連して記憶され、3というIEI値はビットマップ1に関連して記憶され得る。最後のビットマップに関する最後のキー値を示すために、終了索引項目に関する最終IEI値も記憶され得る。この例について結果として得られるスクリーニング・データ構造と対応するIEI値のリストは以下のようになるであろう。
【表2】
【0088】
このリスト、索引、及びビットマップを使用して、509というキー値を有するレコードをサーチする一例は以下の通りである。 1.ブロック範囲索引サーチ:リスト内のIEI値(0、3、6)によって識別された索引項目に含まれるすべてのキー値(10、310、610)の全域で509に最も近いがそれより大きくないキー値を含む索引項目に対するIEIと対になっているビットマップを求めて(例えば、バイナリ・サーチを使用して)サーチを実行する。対応する索引項目は310というキー値を有し、310<509<610であるので、これにより、3というIEIと対になっているビットマップ1が得られる。 2.スクリーニングを実行する:ブロック範囲索引サーチで識別されたスクリーニング・データ構造(ビットマップ1)に対してキー509がスクリーニングされる。 3a.スクリーニングによって肯定的結果が得られる場合:ブロック索引サーチを実行する。スクリーニング・データ構造に関連する索引項目に含まれるすべてのキー値(310、410、510、610)の全域で509に最も近いがそれより大きくないキー値を含む索引項目について(例えば、バイナリ・サーチを使用して)サーチを実行する。410<509<510であるので、これにより、キー値410を含む索引項目が得られる。これは、オフセット8000で索引項目によって位置特定された圧縮ブロックにキー値509を有する一致レコードを記憶できることを意味する。圧縮ブロックを復元して一致レコードをサーチし、それが見つかった場合にそれを返す。 3b.スクリーニングによって否定的結果が得られる場合:キー値509を有するレコードはビットマップ1に関連する3つのブロックのいずれにも記憶されないので、ブロック索引サーチを実行する必要はない。
【0089】
図5は、索引付け及びサーチ・モジュール108の模範的な実現例を示しており、これは、受信レコードのグループに対する索引114と、上記のように適応生成されたいくつかの関連スクリーニング構造502、504、及び506などを含む。索引114は一連の項目を含み、それぞれの項目は、受信レコードのグループが記憶されている複数ブロック(例えば、ブロック506A〜506I)のグループのうちの1つのブロックのアドレスと、そのブロックに記憶された第1のレコードの1次キーを識別するキー・フィールドとを含む。ブロック内のレコードは上記のように1次キーでソートされる。スクリーニング・データ構造502、504、及び506はそれぞれ、これらのブロックのそれぞれ異なるサブセット(例えば、ブロック・セット508A、508B、又は508C)に関連付けられる。この例では、簡単にするために、それぞれのサブセットは3つのブロックを含むが、スクリーニング・データ構造は典型的に多数のブロックに関連付けられる。実装例によっては、複数レコードのグループに関連するスクリーニング・データ構造の数が所定のしきい値(例えば、10又は100というしきい値)より大きい場合、索引付け及びサーチ・モジュール108は、スクリーニング・データ構造のうちの1つを識別してチェックするため、ブロック範囲索引サーチを実行する。例えば、所与のキーがブロック506Dに記憶された第1のキーを示す項目501Dのキー・フィールドより大きく、ブロック506gに記憶された第1のキーを示す項目501Fのキー・フィールドより小さいとモジュール108が判断した場合、モジュール108は、ブロックのセット508Bに対応するスクリーニング・データ構造504をチェックする。スクリーニング・データ構造504によって否定的結果が得られる場合、所与のキーを有するレコードはそのレコードのグループに存在しない。スクリーニング・データ構造504によって肯定的結果が得られる場合、索引114は、そのレコードを含む可能性のあるセット508B内のブロックのうちの1つを見つけるために、使用され、モジュール108は、レコードをサーチするために、そのブロックを復元する。
【0090】
場合によっては、索引114のサイズが大きくなりすぎてメモリに収まらない可能性もある。索引をサーチするための技法によっては(例えば、バイナリ・サーチ技法)、結果的にlog
2(t)程度の数の索引項目を読み取ることになる。ただし、tは索引内の項目の総数である。(任意の所与のサーチ中に読み取られる実際の項目数は、この数量より小さい場合もあれば、大きい場合もある。)読み取られる索引項目のうちのかなりの数がその時点でたまたまメモリにロードされる索引の一部分に含まれない場合、索引をサーチするのに必要な時間は、その索引の異なる部分をメモリにロードするのに必要な時間のために、著しく増加する可能性がある。
【0091】
実装例によっては、索引のサーチに関連付けられたアクセス時間は、階層又は「多層」索引を構築することによって短縮することができる。2つの層の索引が存在する多層索引の一例では、索引記憶域110(例えば、より低速及び/又は不揮発性の記憶域)に記憶された1次索引は複数レコードの圧縮ブロックを位置特定する項目を含み、ローカル・メモリ(例えば、より高速及び/又は揮発性のメモリ)に記憶された2次索引は1次索引のどの部分がローカル・メモリにロードされるかを決定するために使用される項目を含む。このような2層索引を生成するために、上記のように、圧縮ブロックに関する項目を含む初期索引が生成され、項目はキーでソートされる。この初期索引は1次索引であり、それぞれがローカル・メモリ内に完全に収まるように十分小さい項目の連続領域に分割される(例えば、それぞれの領域は「ディスク・ページ」1つ分の長さである)。各領域内の索引項目は(例えば、上記のブロックと同様のものであるが、レコードの代わりに索引項目を記憶する1つ又は複数のブロックに)任意選択で圧縮することができる。圧縮されると、その領域はさらに小さくなるが、復元された時のその領域のサイズは依然としてローカル・メモリに完全に収まるものでなければならない。その後、同じくローカル・メモリ内に完全に収まるように十分小さい2次索引が生成される。この2次索引内には、複数の領域のそれぞれについて1つの項目が作成される。それぞれの2次索引項目は、索引記憶域110内の領域のアドレス(例えば、その領域を記憶するディスク・ページのアドレス)を含む。また、それぞれの2次索引項目は、その領域に記憶された第1の1次索引項目の1次キーを識別するキー・フィールドも含む。
【0092】
2次索引がローカル・メモリ内に収まるように十分小さい状態を維持している場合、アクセス・コスト(例えば、入出力(I/O)動作を実行するのに必要な時間)は低減され得る。例えば、所望のレコードを取り出すために、(ローカル・メモリ内に含まれる)2次索引内で第1のサーチを実行して、1次索引のどの領域が所望のレコードを記憶するブロックに関連する項目を含むかを判断する。(例えば、バイナリ・サーチを使用して)1次索引の適切な領域が決定されると、1次索引のその領域が索引記憶域110からローカル・メモリに取り出され、そのレコードを記憶するブロックを位置特定する1次索引項目を見つけるためにサーチされる。従って、この例では、ローカル・メモリ内に収まる2次索引内で第1のサーチが実行され、1回のI/O動作後に、同じくローカル・メモリ内に収まる1次索引の一領域内でその後のサーチが実行される。1次索引は、長さがディスク・ページ1つ分である複数の領域に分割されるので、その索引にアクセスするI/Oコストは低減され得る。2次索引が大きすぎて(又は大きくなりすぎて)ローカル・メモリ内に完全に収まらない場合、最も高い層がローカル・メモリ内に完全に収まり、それより低い各層がそれぞれローカル・メモリ内に完全に収まる複数領域に分割されるように、多層索引の第3の層(及び第4の層など)は生成され得る。最も低い層は複数レコードの圧縮ブロックを記憶する1次索引である。
【0093】
上記のレコード記憶及び取り出し技法は、コンピュータ上で実行するためのソフトウェアを使用して実現することができる。例えば、このソフトウェアは、1つ又は複数のプログラムされた又はプログラム可能コンピュータ・システム(分散、クライアント/サーバ、又はグリッドなどの様々なアーキテクチャのものにすることができる)上で実行される1つ又は複数のコンピュータ・プログラム内の手順を形成し、それぞれのコンピュータ・システムは少なくとも1つのプロセッサと、少なくとも1つのデータ記憶システム(揮発性及び不揮発性メモリ及び/又は記憶素子を含む)と、少なくとも1つの入力装置又はポートと、少なくとも1つの出力装置又はポートを含む。このソフトウェアは、例えば、計算グラフの設計及び構成に関連するその他のサービスを提供する、より大きいプログラムの1つ又は複数のモジュールを形成することもできる。グラフのノード及び要素は、コンピュータ可読媒体に記憶されたデータ構造又はデータ・リポジトリに記憶されたデータ・モデルに適合するその他の編成済みデータとして実現することができる。
【0094】
このソフトウェアは、汎用又は特殊用途プログラム可能コンピュータによって読み取り可能なCD−ROMなどの媒体上に提供するか、それが実行されるコンピュータに対してネットワークにより配信する(搬送信号にコード化する)ことができる。すべての機能は、特殊用途コンピュータ上で又はコプロセッサなどの特殊用途ハードウェアを使用して実行することができる。このソフトウェアは、ソフトウェアによって指定された計算の異なる部分が異なるコンピュータによって実行される分散方式で実現することができる。このようなコンピュータ・プログラムのそれぞれは、好ましくは、汎用又は特殊用途プログラム可能コンピュータによって読み取り可能な記憶メディア又はデバイス(例えば、ソリッドステート・メモリ又はメディア、或いは磁気又は光メディア)に記憶されるか又はそこにダウンロードされ、本明細書に記載された手順を実行するために、その記憶メディア又はデバイスがコンピュータ・システムによって読み取られた時に、そのコンピュータを構成し操作する。また、本発明のシステムは、コンピュータ・プログラムとともに構成されたコンピュータ可読記憶媒体として実現されるものと見なすこともでき、このように構成された記憶媒体は、本明細書に記載された機能を実行するために特定の定義済みの方法でコンピュータ・システムを動作させる。
【0095】
本発明のいくつかの実施形態について説明してきた。それにもかかわらず、本発明の精神及び範囲を逸脱せずに様々な変更が可能であることは理解されるであろう。例えば、上記のステップのいくつかは順序とは無関係である可能性があり、従って、記載されているものとは異なる順序で実行することができる。
【0096】
上記の説明は例示のためのものであって、特許請求の範囲によって定義された本発明の範囲を制限するためのものではないことを理解されたい。例えば、上記の機能ステップのうちのいくつかは、処理全体に実質的な影響を及ぼさずに異なる順序で実行することができる。その他の諸実施形態は特許請求の範囲内である。