(57)【要約】  データ管理は、個別アクセス可能なデータ単位(200)の少なくとも１つのグループを受信することであって、各データ単位がキー値で識別され、受信したデータ単位のキー値がソートされ、データ記憶システム(100)に記憶するためにデータ単位を処理することを含む。該処理は、複数のデータ・ブロック(202)を記憶し、各ブロックについて１つの項目を含む索引(114)を提供し、所与のキー値を含むデータ単位が個別アクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造(116)を生成する。該データ構造は、複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む。【選択図】図１
2013522715.tif 000002
【特許請求の範囲】
【請求項１】
データを管理するための方法であって、前記方法が、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされることと、
データ記憶システムに記憶するために前記データ単位を処理することを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連付けられた複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、方法。
【請求項２】
前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに含まれる前記データ単位のすべてが、前記ソート順序において、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに含まれる前記データ単位の前記キー値のいずれかより遅く発生するキー値を有する、請求項１に記載の方法。
【請求項３】
前記複数のスクリーニング・データ構造のそれぞれが、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項２に記載の方法。
【請求項４】
前記第１のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第２のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される、請求項１に記載の方法。
【請求項５】
前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項１に記載の方法。
【請求項６】
前記サーチが、前記所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位の前記グループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む、請求項５に記載の方法。
【請求項７】
対応するスクリーニング・データ構造に関する肯定的結果に応答して、前記対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に前記所与のキー値が入るかどうかを判断するために前記索引をサーチすることをさらに含む、請求項６に記載の方法。
【請求項８】
前記対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の前記範囲内に前記所与のキー値が入ることに応答して、前記所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために前記索引をサーチすることをさらに含む、請求項７に記載の方法。
【請求項９】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項１に記載の方法。
【請求項１０】
前記データ単位が含まれていなかった時に前記所与のキー値を含むデータ単位がおそらく含まれていたことを前記所与のスクリーニング・データ構造が決定する確率が前記データ構造の前記サイズに依存する、請求項９に記載の方法。
【請求項１１】
そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造の前記サイズを選択することをさらに含む、請求項１０に記載の方法。
【請求項１２】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する１つ又は複数のフィールドに対応する、請求項１に記載の方法。
【請求項１３】
前記データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位が受信された後に前記蓄積した特異キー値をカウントすることをさらに含む、請求項１２に記載の方法。
【請求項１４】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項１記載の方法。
【請求項１５】
前記キー値が単調に割り当てられる、請求項１４に記載の方法。
【請求項１６】
前記割り当てられたキー値がすべて特異なものである、請求項１５に記載の方法。
【請求項１７】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づくものである、請求項１記載の方法。
【請求項１８】
前記索引が、少なくとも前記索引の第１のレベルと前記索引の第２のレベルとを含む階層索引である、請求項１に記載の方法。
【請求項１９】
前記索引の前記第１のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項１８に記載の方法。
【請求項２０】
前記索引内の前記項目のうちの１つ又は複数が、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する、請求項１９に記載の方法。
【請求項２１】
前記索引内の前記項目のうちの少なくともいくつかのそれぞれが、前記対応するブロックの記憶位置を識別する、請求項２０に記載の方法。
【請求項２２】
前記索引の前記第２のレベルが、前記メモリ内に完全に収まるように十分小さい、請求項１９に記載の方法。
【請求項２３】
前記索引の前記第２のレベルが、前記複数の領域のそれぞれに関するそれぞれの項目を含む、請求項２２記載の方法。
【請求項２４】
前記索引の前記第２のレベル内の前記項目のうちの１つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第１のレベルの一領域の位置特定を可能にする、請求項２３に記載の方法。
【請求項２５】
データを管理するためのコンピュータ・プログラムを記憶するコンピュータ可読媒体であって、前記コンピュータ・プログラムが、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされることと、
データ記憶システムに記憶するために前記データ単位を処理することをコンピュータに実行させるための命令を含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、コンピュータ可読媒体。
【請求項２６】
データを管理するためのシステムであって、前記システムが、
個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するように構成された入力装置又はポートであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされる入力装置又はポートと、
データ記憶システムに記憶するために前記データ単位を処理するように構成された少なくとも１つのプロセッサとを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、システム。
【請求項２７】
データを管理するためのシステムであって、前記システムが、
個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するための手段であって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされる手段と、
データ記憶システムに記憶するために前記データ単位を処理するための手段とを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、個別にアクセス可能なデータ単位（individually accessible data unit）の記憶に関する。
【背景技術】
【０００２】
データベース・システムは、個別にアクセス可能な単位のデータ又は「レコード」を様々なフォーマットのいずれかで記憶することができる。各レコードは、クレジット・カード取引などの論理エンティティに対応することができ、典型的には、そのレコードを唯一に識別するために使用される関連１次キー（associated primary key）を有する。レコードは、レコード・フォーマットのそれぞれのフィールドに関連する複数の値を含むことができる。レコードは、１つ又は複数のファイル（例えば、フラット・ファイル又はＸＭＬファイルなどの構造化データ・ファイル）内に記憶することができる。圧縮データベース・システムでは、個々のレコード又はレコード内の値は、システムの記憶要件を低減するために、記憶される時に圧縮され、アクセスされる時に復元され（decompressed)得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
一態様では、一般に、データを管理するための方法は、入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別するキー値がソート順序において所与の第２のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされることと、データ記憶システムに記憶するためにデータ単位を処理することを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの１つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて１つの項目を含む索引を提供することであって、その項目のうちの１つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定（location）を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造（screening data structure）を生成することであって、複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【課題を解決するための手段】
【０００４】
諸態様は以下の特徴のうちの１つ又は複数を含むことができる。
【０００５】
複数のブロックのうちの１つ又は複数からなる第２のセットに含まれるデータ単位のすべては、ソート順序において、複数のブロックのうちの１つ又は複数からなる第１のセットに含まれるデータ単位のキー値のいずれかより遅く発生するキー値を有する。
【０００６】
複数のスクリーニング・データ構造のそれぞれは、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲（non-overlapping range）に対応する。
【０００７】
第１のスクリーニング・データ構造は、複数のブロックのうちの１つ又は複数からなる第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値（distinct key value）を蓄積した後に生成され、第２のスクリーニング・データ構造は、複数のブロックのうちの１つ又は複数からなる第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される。
【０００８】
この方法は、索引及び複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む。
【０００９】
このサーチは、所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位のグループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む。
【００１０】
この方法は、対応するスクリーニング・データ構造に関する肯定的結果に応答して、対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に所与のキー値が入るかどうかを判断するために索引をサーチすることをさらに含む。
【００１１】
この方法は、対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の範囲内に所与のキー値が入ることに応答して、所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために索引をサーチすることをさらに含む。
【００１２】
所与のスクリーニング・データ構造は、所与のキー値について、その所与のキー値を含むデータ単位が確かに含まれていなかったこと又はその所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する。
【００１３】
そのデータ単位が含まれていなかった時にその所与のキー値を含むデータ単位がおそらく含まれていたことを所与のスクリーニング・データ構造が決定する確率は、データ構造のサイズに依存する。
【００１４】
該方法は、そこからブロックが生成されたデータ単位を識別する特異キー値の数に基づいて、所与のスクリーニング・データ構造のサイズを選択することをさらに含む。
【００１５】
所与のデータ単位を識別するキー値は、所与のデータ単位が入力装置又はポートにより受信される前に所与のデータ単位に関連する１つ又は複数のフィールドに対応する。
【００１６】
該方法は、データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位のグループ内のデータ単位が受信された後に蓄積した特異キー値をカウントすることをさらに含む。
【００１７】
所与のデータ単位を識別するキー値は、所与のデータ単位が入力装置又はポートにより受信された後に所与のデータ単位に割り当てられる。
【００１８】
キー値は単調に（monotonically）割り当てられる。
【００１９】
割り当てられたキー値はすべて特異なものである。
【００２０】
記憶されたブロックに関連するスクリーニング・データ構造の数は、個別にアクセス可能なデータ単位のグループ内のデータ単位を識別する特異キー値の数と、スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率（target false positive probability）に基づくものである。
【００２１】
索引は、少なくとも索引の第１のレベルと索引の第２のレベルとを含む階層索引である。
【００２２】
索引の第１のレベルは、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする項目の複数の領域に分割され、それぞれの領域はデータ記憶システムに結合されたメモリ内に完全に収まるように十分小さい。
【００２３】
索引内の項目のうちの１つ又は複数は、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する。
【００２４】
索引内の項目のうちの少なくともいくつかのそれぞれは、対応するブロックの記憶位置を識別する。
【００２５】
索引の第２のレベルは、メモリ内に完全に収まるように十分小さい。
【００２６】
索引の第２のレベルは、複数の領域のそれぞれに関するそれぞれの項目を含む。
【００２７】
索引の第２のレベル内の項目のうちの１つ又は複数は、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応する項目を含む索引の第１のレベルの一領域の位置特定を可能にする。
【００２８】
他の態様では、一般に、コンピュータ可読媒体はデータを管理するためのコンピュータ・プログラムを記憶し、このコンピュータ・プログラムは、入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別するキー値が、ソート順序において、所与の第２のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされることと、データ記憶システムに記憶するためにデータ単位を処理することをコンピュータに実行させるための命令を含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの１つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて１つの項目を含む索引を提供することであって、その項目のうちの１つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【００２９】
他の態様では、一般に、データを管理するためのシステムは、個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するように構成された入力装置又はポートであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別するキー値が、ソート順序において、所与の第２のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされる入力装置又はポートと、データ記憶システムに記憶するためにデータ単位を処理するように構成された少なくとも１つのプロセッサとを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの１つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて１つの項目を含む索引を提供することであって、その項目のうちの１つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【００３０】
他の態様では、一般に、データを管理するためのシステムは、個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するための手段であって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別するキー値が、ソート順序において、所与の第２のデータ単位を識別するキー値より早く発生するように、受信したデータ単位のキー値がソートされる手段と、データ記憶システムに記憶するためにデータ単位を処理するための手段とを含む。該処理は、複数のデータ・ブロックを記憶することであって、複数のデータ単位を結合することにより、そのブロックのうちの１つ又は複数のそれぞれが生成されることと、ブロックのそれぞれについて１つの項目を含む索引を提供することであって、その項目のうちの１つ又は複数により、提供されたキー値に基づいて、提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位のグループに含まれていた可能性を判断するために、記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成することを含む。
【００３１】
諸態様は以下の利点のうちの１つ又は複数を含むことができる。
【００３２】
複数レコードからなるブロックを圧縮することにより、複数レコードを個別に圧縮するより高い圧縮度を達成することができる。索引付きブロックは、複数の圧縮レコードからなるファイルの先頭から復元する必要なしに、所与のレコードにアクセスできるようにする。ブロックのサイズは、高い圧縮度を提供するのに十分大きく、しかもブロック内の所与のレコードにアクセスするのに必要な復元の量を制限するのに十分小さくなるように選択することができる。各ブロックは、圧縮ブロック内の任意の位置から復元を開始できるようにする必要のない圧縮技法を使用して圧縮することができる。従って、高い圧縮度を提供する技法を使用することができる。
【００３３】
そこから対応するブロックが生成されたレコードに対応するキー値の範囲を識別する索引を記憶することにより、その索引は、それぞれのレコードに関する項目を有する必要がないので、小さい（例えば、比較的高速のメモリに収まるように十分小さい）状態を維持することができる。索引項目は、所望のレコードを求めてサーチすることができる１つのレコード・セットを回復するためにロードし復元することができる１つ又は複数のブロックの位置特定を可能にする。スクリーニング・データ構造（例えば、オーバラップ符号化シグネチャ（overlap encoded signature）又はその他のタイプのビットマップ）を圧縮ブロックと関連付けることは、所望のレコードが存在しないことを示すことができ、そのレコードを求めてサーチするために圧縮ブロックをロードし復元する必要性を取り除く。過剰な記憶空間を使用しない方法でスクリーニング・データ構造を漸増的に生成するために適応技法を使用することができる。多くの異なるスクリーニング・データ構造をチェックすることにより本来引き起こされると思われるフォルス・ポジティブの確率の過剰な増加を回避するために、様々な技法を使用することができる。潜在的に大きい索引をサーチする場合、索引を生成するための階層技法は、比較的低速の非ローカル記憶域にアクセスすることが要求される回数を低減することにより索引サーチを促進する。
【００３４】
その他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００３５】
【図１】レコードを記憶し取り出すためのシステムのブロック図である。
【図２Ａ】システムによって処理され、システムに記憶されるデータの概略図である。
【図２Ｂ】システムによって処理され、システムに記憶されるデータの概略図である。
【図２Ｃ】システムによって処理され、システムに記憶されるデータの概略図である。
【図２Ｄ】システムによって処理され、システムに記憶されるデータの概略図である。
【図３Ａ】異なるシグネチャ・サイズに関するフォルス・ポジティブ確率を示す表である。
【図３Ｂ】異なるシグネチャ・サイズに関するフォルス・ポジティブ確率を示す表である。
【図４Ａ】レコードをサーチするための手順のフローチャートである。
【図４Ｂ】レコードをサーチするための手順のフローチャートである。
【図５】索引付け及びサーチ・モジュールのブロック図である。
【発明を実施するための形態】
【００３６】
図１を参照すると、レコード記憶取り出しシステム１００は、ソースＡ〜ソースＣなどの１つ又は複数のソースからデータを受け入れる。データは、個別にアクセス可能な単位のデータとして表すことができる情報を含む。例えば、クレジット・カード会社は、様々な小売業者から個々の取引を表すデータを受け取ることができる。それぞれの取引は、顧客名、日付、購入額などの属性を表す値に関連付けられる。レコード処理モジュール１０２は、取引に関連するすべての値が１つのレコードに記憶されるように所定のレコード・フォーマットに応じてデータがフォーマットされることを保証する。場合によっては、これは、レコード・フォーマットに応じてソースからのデータを変換することを含む可能性がある。また、他の場合には、１つ又は複数のソースがレコード・フォーマットに応じてすでにフォーマットされたデータを提供する可能性もある。
【００３７】
レコード処理モジュール１０２は、各レコードを識別する１次キー値（例えば、単一レコードを識別するユニーク・キー又は１つのレコードの複数の更新バージョンを識別するキーのいずれか）によってレコードをソートし、１次キー値の非オーバラップ範囲に対応する複数のレコード・セットにレコードを分割する。例えば、各レコード・セットは、所定の数のレコード（例えば、１００個のレコード）に対応することができる。圧縮モジュール１０４は各レコード・セットを１つの圧縮データ・ブロックに圧縮する。これらの圧縮ブロックはレコード記憶域１０６（例えば、１つ又は複数のハード・ディスク・ドライブなどの不揮発性記憶媒体）内の圧縮レコード・ファイルに記憶される。また、システム１００は、ブロックのそれぞれについて１つの項目を含む索引１１４を提供する索引付け及びサーチ・モジュール１０８も含む。索引１１４は、以下により詳細に説明するように、所与のレコードを含むことができるブロックを位置特定するために使用される。また、索引付け及びサーチ・モジュール１０８は、以下により詳細に説明するように、所与のレコードを求めてレコード記憶域１０６をサーチすることが必要である可能性のある時期を決定するために使用されるスクリーニング・データ構造１１６も含む。索引１１４及びスクリーニング・データ構造１１６は圧縮レコード・ファイルと同じ記憶媒体に記憶することができ、或いは、実現例によっては、索引ファイルは典型的に圧縮レコード・ファイルよりかなり小さいので、索引１１４及びスクリーニング・データ構造１１６の少なくとも一部分は好ましくは、モジュール１０８によってアクセス可能な比較的より高速のローカル記憶域（例えば、ダイナミック・ランダム・アクセス・メモリなどの揮発性記憶媒体）に記憶することもできる。これらの実現例では、索引１１４及び／又はスクリーニング・データ構造１１６の残りの部分は、必要になり、モジュール１０８のローカル記憶域に移動されるまで、索引記憶域１１０（例えば、１つ又は複数のハード・ディスク・ドライブなどの不揮発性記憶媒体）に記憶することができる。レコード記憶域１０６及び索引記憶域１１０は、同じ記憶媒体上又は異なる記憶媒体上で処理することができる。
【００３８】
システム１００の代替実装例では、何らかの方法で複数レコードを結合するために（即ち、ブロックが単に連結レコード・セットにならないように）圧縮に加えて又は圧縮の代わりにその他の機能を使用して、レコード・セットを処理してブロックを生成することができる。例えば、システムによっては、１つのレコード・セットを処理して、複数の暗号化データ・ブロックを生成することができる。
【００３９】
インターフェース・モジュール１１２は、エージェントＡ〜エージェントＤなどの人間及び／又はコンピュータ・エージェントに対する記憶レコードへのアクセスを提供する。例えば、インターフェース・モジュール１１２は、クレジット・カードの顧客が自分の取引をモニターするためのオンライン・アカウント・システムを実現することができる。様々な基準を満たす取引情報に関する要求をシステム１００によって処理することができ、レコード記憶域１０６に記憶された圧縮ブロック内から対応するレコードを取り出すことができる。
【００４０】
１つ又は複数のソースから到来するレコードのストリームは、圧縮レコード・ファイルを生成するために処理される前に一時的に記憶することができる。図２Ａを参照すると、システム１００は圧縮レコード・ファイルに記憶すべき１つのレコード・セット２００を受信し、１次キーの値に応じてそのレコードをソートする。
【００４１】
１次キー値は、１つ又は複数のレコードによって表すことができるデータベース内の所与の項目を明確に識別することができる（例えば、所与の１次キー値を有する各レコードはその項目の異なる更新バージョンに対応することができる）。１次キーは、あるレコードの１つ又は複数の既存のフィールドに対応する「自然キー（natural key）」であり得る。各項目ごとに固有であることが保証されているフィールドがない場合、１次キーは、各項目ごとに固有であることがまとめて保証されているか又はそうである可能性が高い、あるレコードの複数のフィールドを含む複合キー（compound key）であり得る。或いは、１次キーは、受信された後に各レコードに割り当てることができる「合成キー（synthetic key）」であり得る。例えば、システム１００は、順次増加される整数として又は単調に進行する値の何らかの他のシーケンス（例えば、タイム・スタンプ）として固有の１次キー値を割り当てることができる。この場合、同じ項目の異なるバージョンを表すレコードは異なる合成キー値が割り当てられ得る。整数が使用される場合、可能な１次キー値の範囲（例えば、使用されるビット数によって決定される通り）は、１次キーがロールオーバする場合に所与の１次キー値が先に割り当てられた任意のレコードが圧縮レコード・ファイルからすでに除去されているように、十分大きいものにすることができる。例えば、古い取引は除去されアーカイブ又は廃棄され得る。
【００４２】
図２Ａに示されている例では、レコード２００は、アルファベット順にソートされた１次キー値、即ち、Ａ、ＡＢ、ＣＺ、・・・によって識別される。システム１００は、ブロック１と表示された対応する圧縮ブロックを生成するよう、１次キー値Ａ〜ＤＤを有するＮ個のレコードからなる第１のセットを圧縮する。次のレコード・セットは、１次キー値ＤＸ〜ＧＦを有する次のＮ個のソート済みレコードを含む。圧縮モジュール１０４は、様々な可逆的データ圧縮アルゴリズム（例えば、ラムペル−ジフ・タイプ・アルゴリズム）のいずれかを使用することができる。各連続圧縮ブロックは、圧縮レコード・ファイル２０２を形成するよう、結合される。
【００４３】
１つの圧縮ブロックを生成するために使用されるレコードの数Ｎは、圧縮効率と復元速度とのトレードオフを図るように選択することができる。圧縮は、平均して、圧縮されるデータの性質と圧縮されるデータのサイズに依存する所与の係数Ｒ分だけ、データのサイズを低減することができる（例えば、Ｒは典型的に、圧縮されるデータが多いほど小さくなる）。圧縮はまた、平均サイズＯの関連オーバヘッド（例えば、圧縮関連データ）を有し得る。それぞれがサイズＸのＭ個のレコードから生成された結果の圧縮レコード・ファイルの平均サイズは、
【数１】
2013522715.tif 000003
として表すことができ、これは、多数のブロックの場合、ＲＭＸ＋ＯＭ／Ｎとして概算することができる。従って、Ｎの値がより大きくなると、場合によっては、Ｒを低減することと、ファイルのサイズに対するオーバヘッドの貢献を低減することの両方により、より大きい圧縮が得られる可能性がある。Ｎの値が小さくなると、所与の圧縮ブロックを復元して、そのブロックに含まれている可能性のあるレコードにアクセスするために必要な時間が短縮される。
【００４４】
他の実装例では、異なる圧縮ブロックが異なる数のレコードを含むことができる。各ブロックは、所定の範囲に応じて、ある数のレコードを含むことができる。例えば、第１のブロックは１次キー値１〜１０００を有するレコードを含み、第２のブロックは１次キー値１００１〜２０００などを有するレコードを含む。すべての１次キー値が必然的に存在するわけではないので（例えば、既存の数値フィールドが自然キーとして使用される場合）、この例では、圧縮ブロック内のレコードの数はそれぞれ異なる可能性がある。
【００４５】
いくつかの実装例では、種々の圧縮ブロックは、ある場合には目標数のレコードを含むことができ、例外的な場合にはより多くのレコード又はより少ないレコードを含むことができる。例えば、あるレコード・セットの最後のレコードの１次キー値がソート後の順序で次のレコードの１次キー値とは異なる場合、これらのレコードを使用して１つの圧縮ブロックが生成される。そのレコード・セットの最後のレコードの１次キー値がソート後の順序で次のレコードの１次キー値と同じである場合、その１次キー値を有するすべての追加レコードがそのセットに追加される。このようにして、同じ１次キー値がある圧縮ブロックから次の圧縮ブロックに移行することはない。
【００４６】
索引付け及びサーチ・モジュール１０８は、圧縮ブロックのそれぞれについて索引ファイル２０４内に１つの項目（entry）を生成する。索引項目は、例えば、対応する未圧縮のレコード・セット内の第１のレコードの１次キーで各圧縮ブロックを識別するキー・フィールド２０６を含む。また、索引項目は、圧縮レコード・ファイル２０２内の識別された圧縮ブロックの記憶位置を識別する位置フィールド２０８も含む。例えば、位置フィールドは、レコード記憶域１０６内の絶対アドレスの形のポインタ又はレコード記憶域１０６内の圧縮レコード・ファイル２０２の先頭のアドレスからのオフセットの形式のポインタを含むことができる。
【００４７】
圧縮レコード・ファイル２０２内の所与のレコードをサーチするために、モジュール１０８は、キー・フィールド２０６に基づいて索引ファイル２０４のサーチ（例えば、バイナリ・サーチ）を実行することができる。提供されたキー値（例えば、エージェントの１つによって提供されたもの）について、モジュール１０８は、提供されたキー値を含むキー値の範囲に対応するレコードを含むブロックを位置特定する。提供されたキー値を有するレコードは、位置特定されたブロックを生成するために使用されたレコード・セットに含まれている場合もあれば、含まれていない場合もあり、そのレコードがレコード２００内に存在していた場合、レコード２００は１次キー値でソートされているので、そのレコードは含まれているはずである。次に、モジュール１０８は、位置特定したブロックを復元し、提供されたキー値を有するレコードをサーチする。１次キー値がレコードごとに固有のものではない場合、モジュール１０８は、圧縮ブロック内で提供されたキー値を有する複数のレコードを見つけるかも知れない。キー・フィールド２０６が１つのセット内の第１のレコードの１次キーを含むこの例では、モジュール１０８は、それぞれ提供されたキー値より前と後のキー値を有する２つの連続索引項目をサーチし、前のキー値を有する項目に対応するブロックを返す。場合によっては、提供された値はある索引項目内のあるキー値と同じである可能性があり、その場合、モジュール１０８はその項目に対応するブロックを返す。
【００４８】
異なる実装例では、そこから対応するブロックが生成される元となったレコードに対応するキー値の範囲を識別するための、索引ファイル２０４内の項目に対する異なる方法が存在する。図２Ａに示されている実装例のように、キー値の範囲は、１つのブロックを生成するために使用されたレコードの２つの極値キー値（例えば、ソート後の一連のアルファベット１次キー値の最初と最後、又はソート後の一連の数値１次キー値の最小値と最大値）の間の範囲にあることができる。索引項目は、その範囲を定義する極値のいずれか一方又は両方を含むことができる。実装例によっては、索引項目が所与のブロックに関する範囲を定義する最小キー値を含む場合、圧縮レコード・ファイル内の最後のブロックに関連付けられた最後の索引項目は、そのブロックに関する範囲を定義する最大キー値も含むことができる。そして、この最大キー値は、所与のキー値が範囲外になる時期を決定するために圧縮レコード・ファイルをサーチする時に、使用され得る。
【００４９】
代わって、キー値の範囲は、１つのブロックを生成するために使用されたレコードのキー値を超えて拡がる範囲であり得る。例えば、１〜１０００の間の数値１次キー値を有するレコードから生成されたブロックの場合、レコード内に表された最小キー値は１より大きくなり、レコード内に表された最大キー値は１０００より小さくなるであろう。索引項目は、その範囲を定義する極値１及び１０００のいずれか一方又は両方を含むことができる。
【００５０】
圧縮レコード・ファイルを生成するために初期グループのレコードが処理された後に追加レコードが到着した場合、これらのレコードはバッファに記憶され、未圧縮形式でサーチされ得る。或いは、追加のレコード・グループは、追加の索引ファイルによってアクセス可能な追加の圧縮レコード・ファイルとして、漸増的に処理され記憶され得る。場合によっては、少数の追加レコードを圧縮しても記憶サイズの大幅な低減が得られない可能性がある場合でも、レコードにアクセスするための均一な手順を維持するために追加レコードを圧縮することは依然として有利であり得る。追加レコードは、一定の時間間隔で（例えば、３０秒おき又は５分おきに）或いは所定数の追加レコードが受信された後に（例えば、１０００レコードおき又は１００００レコードおきに）繰り返し処理することができる。到来するレコードが時間間隔に基づいて処理される場合、間隔によっては、単一圧縮ブロックにすべて圧縮される着信レコードが全くないか或いは少数のレコードしかない場合もある。
【００５１】
図２Ｂを参照すると、初期圧縮レコード・ファイル２０２が生成された後でシステム１００によって追加レコードが受信された例では、複合圧縮レコード・ファイル２１１を形成するために、追加の圧縮レコード・ファイル２１０は初期圧縮レコード・ファイル２０２に付加され得る。システム１００は、圧縮レコード・ファイル２１０の圧縮ブロックを生成するため、追加レコードを１次キー値でソートし、Ｎ個のレコードからなる複数のセットを圧縮する。ブロック９１と表示されている付加ファイル２１０内の第１の圧縮ブロックは１次キー値ＢＡ〜ＦＦを有する。モジュール１０８は、付加ファイル２１０内に表された追加レコードをサーチするために使用できる項目を含む追加の索引ファイル２１２を生成する。新しい索引ファイル２１２は前の索引ファイル２０４に付加され得る。
【００５２】
任意の数の圧縮レコード・ファイルは、複合圧縮レコード・ファイルを形成するために付加され得る。索引付け及びサーチ・モジュール１０８が複合圧縮レコード・ファイル内の所与のキー値を有するレコードをサーチする場合、モジュール１０８は、対応する索引ファイルを使用して、付加された圧縮レコード・ファイルのそれぞれに含まれるそのファイルをサーチする。或いは、所与のレコードを要求するエージェントは、サーチすべき複合圧縮レコード・ファイルとともにいくつかの圧縮レコード・ファイルを指定することができる（例えば、１０個の最も最近生成されたもの又は最後の１時間に生成されたもの）。
【００５３】
所与の時間後（例えば、２４時間おき）又は所与の数の圧縮レコード・ファイルが付加された後に、システム１００は、複合圧縮レコード・ファイル及び新しい対応索引ファイルから単一圧縮レコード・ファイルを生成するために、ファイルを統合することができる。統合後、単一索引をサーチして、所与のレコードを含む可能性のある圧縮ブロックを位置特定することができ、その結果、より効率的なレコード・アクセスが可能になる。統合時に、システム１００は、対応するソート済みレコードのセットを回復するため、圧縮レコード・ファイルを復元して、そのレコードを１次キー値でソートし、新しい圧縮レコード・ファイルと索引を生成する。回復されたレコード・セットのそれぞれはすでにソートされているので、１次キー値に応じて前にソートされたリストを併合してソート済みレコードの単一セットを生成することにより、レコードを効率よくソートすることができる。
【００５４】
図２Ｃを参照すると、複合圧縮レコード・ファイル２１１は、いくつの追加レコードが到着したか並びにどのくらいの頻度でレコードが処理されたかに依存して、初期圧縮レコード・ファイル２０２と、追加の圧縮レコード・ファイル２１０と、いくつかの追加の圧縮レコード・ファイル２２０、２２１、・・・とを含む。それぞれの圧縮レコード・ファイルは、そのファイルの圧縮ブロック内で所与のレコードをサーチするために使用できる関連索引ファイルを有することができる。この例では、圧縮レコード・ファイル２２０の１つは、単一圧縮ブロック（ブロック９５）のみを有するのに十分小さく、従って、必ずしも関連索引ファイルを必要としないが、そのブロック内の１次キー値の範囲及び記憶域内のその位置を示す関連データを有することができる。統合後、異なる付加圧縮レコード・ファイルから回復されたレコードは、単一圧縮レコード・ファイル２３０を生成するために処理される。
【００５５】
単調に割り当てられた１次キーの場合、レコードは、圧縮レコード・ファイル内のみならず、あるファイルから次のファイルにも自動的にソートされ、単一索引サーチでレコードにアクセスするためにファイルを統合する必要性を取り除く。図２Ｄを参照すると、システム１００は、そのレコードの１次キーとして到着順に割り当てられた連続整数で識別されるレコードのセット２５０を受信する。従って、レコード２５０は１次キーで自動的にソートされる。初期圧縮レコード・ファイル２５２はこの例ではそれぞれが１００個のレコードを含む圧縮ブロックを含み、索引ファイル２５４は、圧縮ブロック内の第１のレコードの１次キー値用のキー・フィールド２５６と、対応する記憶位置を識別する位置フィールド２５８とを含む。初期圧縮レコード・ファイル２５２が生成された後に到着するレコードは自動的にソート後の順序でそれより後の１次キー値を有することになるので、付加圧縮レコード・ファイル２６０及び対応する索引ファイル２６２は、単一索引サーチに基づいて効率的なレコード・アクセスを可能にするために統合する必要はない。例えば、索引ファイル２６２は単純に索引ファイル２５４に付加され、圧縮レコード・ファイル２５２又は２６０のいずれかで圧縮ブロックを位置特定するため、両方の索引は（例えば、単一バイナリ・サーチで）まとめてサーチされ得る。
【００５６】
複合圧縮レコード・ファイル２６１は、圧縮レコード・ファイル２５２の末尾で挿入された可能性のある不完全ブロックを除去するために任意選択で統合され得る。このような統合では、第１のファイル２５２内の最後の圧縮ブロックのみが復元される必要があり、復元したレコード・セットを併合する代わりに、それらのレコード・セットは新しいソート済みのレコード・セットを形成し、後でもう一度、新しい圧縮レコード・ファイルを形成するために圧縮された１００個のレコードからなるセットに分割されるよう、単純に連結され（concatenated）得るであろう。
【００５７】
連続整数合成１次キー値を使用することのもう１つの利点は、その１次キー値に基づいてレコードをパーティション化する場合、キー値にギャップが全くないので、そのパーティションについて自動的にバランスを取ることができることである。
【００５８】
様々な技法のいずれかを使用して、レコードを更新し、圧縮レコード・ファイル内に存在する可能性のあるそのレコードの任意の前のバージョンを無効にすることができる。場合によっては、レコードは個別に除去又は更新する必要はない（例えば、ログ、取引、電話呼び出し）。これらの場合、古いレコードは、例えば、圧縮レコード・ファイルの先頭から、除去され廃棄されるか又は所定の数の圧縮ブロックからなるグループにアーカイブされ得る。場合によっては、圧縮レコード・ファイル全体は除去され得る。
【００５９】
場合によっては、あるレコードの１つ又は複数の値は、圧縮ブロックへの記憶のために新しい更新済みレコードを追加することにより、更新され、そのレコードの前に受信したバージョン（同じ１次キー値を有する）は、異なる圧縮ブロックに記憶したままになり得る。その場合、１つのレコードの複数のバージョンが存在する可能性があり、どれがそのレコードの有効バージョンであるかを判断するために何らかの技法が使用される。例えば、任意の圧縮レコード・ファイルに現れる最後のバージョン（最も最近受信したもの）は有効バージョンとして暗黙的又は明示的に示すことができ、他のバージョンはいずれも無効である。この場合、所与の１次キーを有するレコードを求めるサーチは、出現順にその１次キーで識別された最後のレコードを見つけることを含むことができる。或いは、あるレコードの任意の前のバージョンが有効ではないことを示す「レコードの無効化」を書き込むことにより、そのレコードの新しいバージョンを必ずしも追加せずに、レコードを無効化することができる。
【００６０】
システム１００は、異なるプロセスによって、レコード記憶域１０６に記憶された圧縮レコード・ファイルへのアクセスを仲介する。様々な同期技法のいずれかを使用して、１つ又は複数の圧縮レコード・ファイル内の圧縮ブロックへのアクセスを仲介することができる。システム１００は、（例えば、データを付加又は統合することにより）ファイルを変更するどのプロセスも相互に干渉しないことを保証する。例えば、統合が行われている間に新しいレコードが到着した場合、システム１００は、統合プロセスが終了するまで待つことができ、或いはそれを既存の圧縮レコード・ファイルに付加する前に圧縮ブロックを生成し、それを一時的に記憶することができる。圧縮レコード・ファイルから読み取るプロセスは、完全なファイルの一部分をロードすることができ、変更を被っている可能性のある不完全な部分を無視することができる。
【００６１】
システム１００は、１次キー以外のレコードの属性に基づいてレコードのサーチを可能にする追加データを記憶する。圧縮レコード・ファイルに対する２次索引は、２次キーとして指定された属性の値に基づいて１つ又は複数の１次キー値を提供する情報を含む。２次キーとして指定された各属性は、対応する２次索引に関連付けることができる。例えば、各２次索引は、関連２次キーでソートされた行を有するテーブルとして編成され得る。各行は、１つの２次キー値と、その２次キー値を含む複数レコードの１つ又は複数の１次キー値とを含む。従って、所与の２次キー値を含む任意のレコードのサーチをエージェントが開始した場合、システム１００は、そのレコード（複数もあり得る）を含む圧縮ブロック（複数もあり得る）に対する圧縮レコード・ファイルの索引をサーチするために使用するための１次キー（複数も可）を調べる。２次索引は大きいもの（例えば、レコード数程度）である可能性があり、場合によっては、圧縮レコード・ファイルを記憶する記憶媒体に記憶し得る。
【００６２】
場合によっては、２次キーとして指定された属性の値は各レコードごとに固有であり得る。このような場合、その２次キーと１次キーとの間には１対１の対応が存在し、インターフェース・モジュール１１２は、それがエージェントにとって１次キーである場合と同じようにその２次キー属性を提示することができる。
【００６３】
新しい圧縮レコード・ファイルが複合圧縮レコード・ファイルに付加されるたびに各２次索引は更新され得る。或いは、１つの２次キーは、各圧縮レコード・ファイル対する異なる２次索引に関連付けられ、複数の２次索引は、圧縮レコード・ファイルが統合された時に、単一２次索引に統合され得る。
【００６４】
スクリーニング・データ構造１１６は、所与の属性値を含むレコードがそのファイルの圧縮ブロックに含まれる可能性を判断するために、圧縮レコード・ファイルに関連付けられ得る。例えば、スクリーニング・データ構造としてオーバラップ符号化シグネチャ（ＯＥＳ）を使用して、システム１００は、所与のキー値（１次キー又は２次キー）を有するレコードが確かに存在しないと判断するか（「否定的」結果）又は所与のキー値を有するレコードが存在する可能性があるかどうかを判断することができる（「肯定的」結果）。肯定的結果の場合、システムはそのレコードを取り出す（「確定ポジティブ（confirmed positive）」結果）か又はそのレコードが存在しないと判断する（「フォルス・ポジティブ」結果）ために、適切な圧縮ブロックにアクセスする。否定的結果の場合、システムは、存在しないレコードを求めて圧縮ブロックを復元しサーチして時間を費やす必要なしに、否定的結果をエージェントに与えることができる。ＯＥＳのサイズは、どのくらい頻繁に肯定的結果がフォルス・ポジティブになるかに影響し、一般に、所与の数の特異な（即ち、固有の）可能なキー値についてＯＥＳサイズが大きくなるほどフォルス・ポジティブ結果は少なくなる。所与のＯＥＳサイズの場合、一般に、特異な可能なキー値が少なくなるほどフォルス・ポジティブは少なくなる。
【００６５】
その他のタイプのスクリーニング・データ構造も可能である。所与の１次キー又は２次キーに対するスクリーニング・データ構造は、１つの圧縮ブロック・セットを含む各圧縮レコード・ファイルに対して提供され得る。或いは、１つのキーに対するスクリーニング・データ構造は、各圧縮ブロックに対して、又は１つの圧縮レコード・ファイル内の複数の圧縮ブロック・セットのそれぞれに対して、提供され得る。
【００６６】
図３Ａ及び図３Ｂは、模範的なＯＥＳスクリーニング・データ構造の様々なサイズ（列）及び圧縮レコード・ファイルに表された特異キー値の様々な数（行）に対するあるキー値についてフォルス・ポジティブ結果を得るための確率値を提供する表を示している。ＯＥＳに関して、ＯＥＳのサイズ及び特異キー値の数に依存して、ＯＥＳの同じ部分に２つ以上のキー値の存在が示される可能性があり、潜在的に、もう一方が存在する場合には、これらのキー値の一方についてフォルス・ポジティブ結果へと導く。この模範的なＯＥＳのサイズは２１０＝１０２４ビット（図３Ａの表）から２２８＝２５６Ｍビット（図３Ｂの表）まで様々になる。特異キー値の数は１００（図３Ａの表）から１００，０００，０００（図３Ｂの表）まで様々になる。どちらの表についても、右上のブランク・セルは０％に対応し、左下のブランク・セルは１００％に対応する。フォルス・ポジティブ確率が低い（例えば、ほぼゼロ）セルの場合、スクリーニング・データ構造は妥当なスクリーニングを行うのに必要なものより大きくなる可能性がある。フォルス・ポジティブ確率がかなり大きい（例えば、＞５０％）セルの場合、スクリーニング・データ構造は妥当なスクリーニングを行うには小さすぎる可能性がある。この例は、キー値あたり４つのハッシュ・コードを使用してＯＥＳを生成するための技法に対応する。ＯＥＳスクリーニング・データ構造のその他の例では、所与の数の特異キーに対するフォルス・ポジティブ確率についての異なる表が得られる可能性がある。
【００６７】
圧縮レコード・ファイル内に表された特異キー値の数が不明ある可能性があるので、システム１００は、ファイルが生成された元となったレコードの数に基づいて、圧縮レコード・ファイルに対するスクリーニング・データ構造のサイズを選択することができる。サイズを選択する際に、フォルス・ポジティブ確率を低減することと、スクリーニング・データ構造を記憶するために必要なメモリ空間とのトレードオフが存在する。このトレードオフにおける要因の１つは、存在しないキー値をサーチする見込みである。調べるべきキー値のほとんどが復元レコード内に存在する可能性がある場合、スクリーニング・データ構造は全く必要ではない可能性がある。キー値が見つからない確率がかなり大きい場合、比較的大きいスクリーニング・データ構造のために記憶空間を割り振ると、相当な時間を節約することができる。
【００６８】
圧縮レコード・ファイルに関連付けられたスクリーニング・データ構造のサイズは、そのファイルがレコードの初期の又は統合された大きいデータベースに対応するかどうか、又はより大きいデータベースに対するより小さな更新に依存し得る。一般にそれぞれの更新にはより少ない特異キー値が存在するので、比較的小さいスクリーニング・データ構造のサイズは、定期的な更新間隔中に付加された圧縮レコード・ファイルに使用され得る。また、多くの更新後に圧縮レコード・ファイルの数が増加するので、小さいサイズは必要な記憶空間を低減することができる。スクリーニング・データ構造のサイズは、１つの更新において予想される数のレコード及び／又は特異キー値と、予想される数の更新に基づくことができる。例えば、２４時間の期間中に５分おきに更新済みファイルが付加される場合、その日の終わりには２８８個の圧縮レコード・ファイルが存在することになる。少なくとも１つのフォルス・ポジティブ結果の確率は、図３Ａ及び図３Ｂの表からの適切な値の２８８倍になるであろう（異なる更新に関する結果は独立したものになると想定する）。統合後、特異キー値の数は大幅に増加し得るので、より大きいスクリーニング・データ構造は統合された圧縮レコード・ファイルに適したものになり得る。
【００６９】
圧縮レコード・ファイルは、１次キー用及びそれぞれの２次キー用のスクリーニング・データ構造、又はこれらのキーの何らかのサブセット用のスクリーニング・データ構造を有することができる。例えば、システム１００は、１次キー用のスクリーニング・データ構造と、レコードをサーチする際に最も頻繁に使用されると予想される２次キーのみに対するスクリーニング・データ構造を提供することができる。
【００７０】
図４Ａは、所与の１次キー値を有する１つ又は複数のレコードをサーチするための手順４００のフローチャートを示している。手順４００は、４０２で第１の圧縮レコード・ファイルに関連付けられたスクリーニング・データ構造が存在するかどうかを判断する。存在する場合、手順４００は、４０４で、肯定的結果又は否定的結果のいずれか一方を得るために、スクリーニング・データ構造を処理する。所与の１次キー値がスクリーニングを通過しなかった場合（否定的結果）、手順４００は、４０６で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。所与の１次キー値がスクリーニングを通過した場合（肯定的結果）、手順４００は、４０８で所与の１次キー値を有するレコードを含む可能性のあるブロックを求めて索引をサーチする。いかなるスクリーニング・データ構造も圧縮レコード・ファイルに関連付けられていない場合、手順４００は、４０８でスクリーニングを実行せずに索引をサーチする。
【００７１】
４０８で索引をサーチした後、４１０で所与の１次キー値を含むキー値の範囲に関連付けられた圧縮ブロックが見つかった場合、手順４００は、４１２で索引項目で識別された位置でブロックを復元し、４１４で所与の１次キー値を有する１つ又は複数のレコードを求めて結果のレコードをサーチする。次に、この手順は、４１６で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。いかなる圧縮ブロックも見つからない場合（例えば、所与の１次キー値が第１のブロック内の最小キー値より小さいか又は最後のブロック内の最大キー値より大きい場合）、手順４００は、４１６で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。
【００７２】
図４Ｂは、所与の２次キー値を有する１つ又は複数のレコードをサーチするための手順４５０のフローチャートを示している。手順４５０は、４５２で第１の圧縮レコード・ファイルに関連するスクリーニング・データ構造が存在するかどうかを判断する。存在する場合、手順４５０は、肯定的結果又は否定的結果のいずれか一方を得るために、４５４でスクリーニング・データ構造を処理する。所与の２次キー値がスクリーニングを通過しなかった場合（否定的結果）、手順４５０は、４５６で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。所与の２次キー値がスクリーニングを通過した場合（肯定的結果）、手順４５０は、４５８で所与の２次キーを含むレコードに対応する１次キーを調べる。いかなるスクリーニング・データ構造も圧縮レコード・ファイルに関連付けられていない場合、手順４５０は、４５８でスクリーニングを実行せずに１次キーを調べる。
【００７３】
見つかった１次キーのそれぞれについて、手順４５０は、４６０で所与の１次キー値を有するレコードを含む可能性のあるブロックを求めて索引をサーチする。４６０で索引をサーチした後、４６２で所与の１次キー値を含むキー値の範囲に関連付けられた圧縮ブロックが見つかった場合、手順４５０は、４６４で、索引項目で識別された位置でブロックを復元し、４６６で所与の１次キー値を有する１つ又は複数のレコードを求めて結果のレコードをサーチする。次に、この手順は、４６８で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。いかなる圧縮ブロックも見つからない場合、手順４５０は、４６８で次の圧縮レコード・ファイルの有無をチェックし、存在する場合にそのファイルについて繰り返す。
【００７４】
所与の１次キー又は２次キーを有する見つかった複数のレコードは、出現順に手順４００又は手順４５０によって返され、又は、場合によっては、そのレコードの最後のバージョンのみが返される。
【００７５】
上記の通り、スクリーニング・データ構造がフォルス・ポジティブを返す確率は、スクリーニング・データ構造のサイズ（データ構造が大きいほどフォルス・ポジティブの確率が低下するであろう）と、ブロック内に記憶されたレコードのグループを識別するためにデータ構造内に表された特異キーの数（特異キーの数はスクリーニング・データ構造が使用されるブロックの数につれて増加する傾向があり、特異キーの数が増えるほどフォルス・ポジティブの確率が増加するであろう）との関数として、測定され得る。従って、スクリーニング・データ構造のサイズを制御することは、フォルス・ポジティブ結果の確率に影響を及ぼす方法の１つである。しかし、受け入れられるフォルス・ポジティブ確率を達成するために必要なものより大きいサイズを選択すると、不必要に大量の稀少記憶空間を使用する可能性がある。受け入れられる確率は、例えば、ユーザ入力に基づいて決定され得る。
【００７６】
実装例によっては、所与のグループのレコードに必要なスクリーニング・データ構造の適切なサイズを選択するために、レコードが受信されると、レコードを受信し圧縮ブロックに記憶しながら、それらのレコードに関連付けられた特異キーがメモリ内に蓄積される。この蓄積に基づいて、メモリ内の特異キーの数をカウントすることにより、フォルス・ポジティブの所定の確率Ｐを達成するために必要なスクリーニング・データ構造のサイズは決定され得る。次に、レコード処理モジュール１０２は、決定されたサイズのスクリーニング・データを生成する。そうして、グループ内のすべてのレコードが受信されるまで、スクリーニング・データ構造は作成されない。従って、スクリーニング・データ構造のサイズは、蓄積された特異キーの数に基づいて決定され、確率Ｐを達成するために不必要に大きくはならないであろう。しかしながら、キーをメモリに記憶することは、システムによっては比較的限られたシステム・リソース（例えば、揮発性メモリ）を使用する。また、より豊富な記憶域（例えば、不揮発性メモリ）にキーを記憶することもできるが、この技法は記憶されたキーにアクセスするための入出力（Ｉ／Ｏ）コストを増加することになるであろう。実装例によっては、１つ又は複数のスクリーニング・データ構造は、未決定の及び／又は多数の特異キーを蓄積するのを待つ必要なしに、しかも、すべてのレコードが受信されるのを待つ必要なしに、フォルス・ポジティブの割合を制限するよう、グループ内のレコードが受信されている間に、適応的に生成され得る。この適応技法では、ソート後の順序のレコードのキーとともに、そのグループのレコードが受信される。例えば、場合によっては、それらのレコードは、それらのキーに従ってすでにソートされている、レコード処理モジュール１０２によって受信されることが分かっている自然１次キーを有する。他の場合には、レコードはレコード処理モジュール１０２によって割り当てられる合成１次キーを有し、それらの割り当てられたキー（例えば、増加した整数、又はタイムスタンプ、又はその他の単調に増加する値であるキー）に従ってソートされるようになっている。割り当てられた合成キーも固有のものである場合、いくつの特異キーが受信されたかを判断するために特異キーをメモリに記憶する必要はなく、その代わりに、いくつの特異キーが受信されたかを判断するために受信したレコードの数のカウントが増やされ得る。
【００７７】
場合によっては、レコードのグループは、バッチ処理モードで処理すべきレコードの単一バッチに対応する。バッチ内の最後のレコードは、例えば、所定のトークン又はメッセージによって意味付けされ得る。他の場合には、レコードのグループは、区切り文字（delimiters）を繰り返すことによって分離される連続ストリームの複数の区切られたセクションの１つに対応する。上記の通り、連続する区切り文字の対の間では、そのキーに応じてそのグループのレコードがソートされる。
【００７８】
そのグループに関するスクリーニング・データ構造を生成するためにグループ内のレコードのすべてが受信されるのを待つ必要がある代わりに、レコード処理モジュール１０２は、レコードが受信される時に所定のサイズＳのスクリーニング・データ構造の生成を開始することができる。サイズが決定されると、例えば、ビットマップのビットを設定することにより、レコードが到着する時にスクリーニング・データ構造を構築することができる。スクリーニング・データ構造に関連付けられた特異キーの数が増加する（しかも、設定されるビットの数が増加する）につれて、フォルス・ポジティブの確率も高くなる。フォルス・ポジティブの確率がＰに達する前にグループの終わりに達した場合、特異キーの実際の数に基づいて、Ｐにより近いフォルス・ポジティブの確率を達成するために、必要であれば、スクリーニング・データ構造のサイズを低減することができる。（これまで特異キーの数に基づいて）フォルス・ポジティブの確率がＰに達した場合、第１のスクリーニング・データ構造を記憶することができ、サイズＳの第２のスクリーニング・データ構造を生成し始めることができる。次に受信するレコードに関連する新しい特異キーを蓄積するための場所を空けるために、メモリに記憶されている任意の特異キーを廃棄することができる。このプロセスは、グループ内の最後のレコードが受信されるまで続けることができる。所与のグループのレコードについて、１つ又は複数のスクリーニング・データ構造が存在することになり、それぞれがフォルス・ポジティブの所定の確率（例えば、Ｐに等しいか又はＰに近いもの）を達成するように選択されたサイズを有し、任意に多数の特異キーを蓄積するか又は最後のレコードが受信されるまで待つ必要なしにそれぞれが構築される。グループ内のレコードはそれぞれのキーによるソートされた順序で受信されるので、そのグループ用の各スクリーニング・データ構造（複数のスクリーニング・データ構造が存在する場合）は異なる非オーバラップ範囲のキー値に対応する。
【００７９】
サイズＳは、システム１００の特性など、様々な要因のいずれかに基づいて選択され得る。例えば、サイズＳは、そのシステム内で効率的にアクセスできる最大サイズに基づき得る。実装例によっては、所定のサイズのハッシュ値（例えば、３２ビット・ハッシュ）が１次キーから生成され、サイズＳはこの所定のハッシュ値サイズに基づいて選択され得る。
【００８０】
実装例によっては、２つ（又はそれ以上）のスクリーニング・データ構造は、並列（parallel）に構築され得る。例えば、（例えば、確率Ｐを達成する特異キーの数Ｋで）サイズＳの１つのデータ構造が構築され、（例えば、確率Ｐを達成する特異キーの数Ｋ／２で）サイズＳ／２の１つのデータ構造が構築され得る。グループ内のレコードの特異キーの実際の数に基づいて、データ構造の一方が選択され（必要であれば、適切なサイズに縮小する）、もう一方のデータ構造は廃棄され得る。例えば、特異キーの数がＫ／２以下である場合、サイズＳ／２のスクリーニング・データ構造が使用され、確率Ｐを達成するために必要であれば縮減され得る。特異キーの数がＫ〜Ｋ／２の間である場合、サイズＳのスクリーニング・データ構造が使用され、確率Ｐを達成するために必要であれば縮減され得る。特異キーの数がＫを超える場合、サイズＳのスクリーニング・データ構造は記憶され、第２のスクリーニング・データ構造が構築され得る（しかも、同じ並行技法を使用して構築することができる）。第２のデータ構造を並行して構築するコストは、特異キーの実際の数に合わせて所望の確率Ｐを達成するために必要な最適サイズにより近いものにすることにより達成される節約より少ない可能性がある。
【００８１】
実装例によっては、レコードの数（従って、特異キーの数）が少ない場合に、スクリーニング・データ構造を適応的に生成するための時間はさらに短縮することができる。スクリーニング・データ構造サイズＳ／２から始め、特異キーの数に基づいてそれを適切なサイズに縮小することは、その縮小を実行するために必要な動作の数のために、場合によっては比較的遅くなる可能性がある（例えば、「折りたたみ（fold）」演算を使用する場合、６回の折りたたみを使用して２１６ビットのサイズから２１０ビットのサイズへの縮減を達成することができる）。レコードを受信する時に複数のスクリーニング・データ構造を並行して生成する代わりに、キー・バッファがいっぱいになるまで又はグループ内にそれ以上レコードが存在しなくなるまで、キーはメモリ内キー・バッファに蓄積され得る。キー・バッファがいっぱいになった場合、バッファされたキーを使用して適切なサイズのスクリーニング・データ構造（例えば、サイズＳ）が構築され得る。その後、キー・バッファは廃棄され、グループ内のその後のレコードが受信される時に、他のスクリーニング・データ構造を生成するために、それらのすべてのレコードのキーが使用され得る。キー・バッファがいっぱいになる前にグループ内のすべてのレコードが受信された場合、バッファされたキーから適切なサイズのスクリーニング・データ構造が生成され、（特異キーの数が少ない）その場合に本来必要であると思われる縮減動作が回避される。
【００８２】
最大サイズＳが２１６ビット（又は８Ｋバイト）であるビットマップであり、想定した数の特異キーに対する所与の目標フォルス・ポジティブ確率に対応するスクリーニング・データ構造を生成する一例を以下に示す。この例では、ビットマップ内のすべてのビットをアドレス指定するために１６ビット・アドレスで十分である。到来するレコードが受信されると、それらのキーは、３２ビットのハッシュ値を生成するために、ハッシュされる。このハッシュの最下位１６ビットは、対応するキーについて設定されたビットマップ内のビットの位置を決定するために、使用される。グループ内のすべてのレコードが受信された後、例えば、特異キーの数に基づいて、最適ビットマップ・サイズが２１０ビットである場合、２１６ビットから２１０ビットにビットマップは、縮減され得る。サイズ２１６のビットマップが等しいサイズの２つの部分に分割された場合、それぞれがサイズ２１５ビットの２つのビットマップが存在する。論理「ＯＲ」演算を使用して２つのビットマップのそれぞれのビットをまとめて結合すると、サイズ２１５ビットの折りたたみビットマップが生成される。これは１回の折りたたみ動作である。（全部で６回の折りたたみ動作の場合）この折りたたみ動作をさらに５回繰り返すと、サイズ２１０ビットのビットマップが得られ、これは３２ビットのハッシュ値の最下位１０ビットを使用してアドレス指定することができる。サイズ２１０ビットのビットマップは２１６ビットのビットマップより高いフォルス・ポジティブ率を有する。しかしながら、想定した数の特異キーより少ない数の特異キーを受信したので、そのビットマップは依然として所与の目標フォルス・ポジティブ確率を達成する。
【００８３】
この適応手法を使用してスクリーニング・データ構造を生成すると、複数のスクリーニング・データ構造が存在する可能性があり、１次キーによるソート後の順序で複数ブロックのグループに記憶されたレコードのグループのうちの異なるサブセットをスクリーニングするためにそれぞれが使用される。従って、複数のスクリーニング・データ構造のそれぞれが複数ブロックのグループのうちの異なる対応サブセットに関連付けられ、また、それらのブロックに記憶されたレコードに対応するキー値の異なる範囲に関連付けられる。（例えば、単一圧縮レコード・ファイルに記憶された）グループ内のレコードのすべてに対するブロックは、所与のレコードをどのブロックに記憶できるかを判断するために、索引を使用して位置特定されサーチされ得る。「ブロック索引サーチ（block index search）」では、所与のレコードを含み得る単一ブロックを（例えば、バイナリ・サーチを使用して）見つけることができる。場合によっては、索引をサーチする時に、所与のレコードを含む可能性のある単一ブロックを位置特定する必要はないが、以下により詳細に説明するように、むしろ、スクリーニング・データ構造のうちの対応する１つによってスクリーニングされる複数のブロックにまたがるキー値の範囲内に所与のレコードのキーが入るかどうかを判断するために「ブロック範囲索引サーチ（block range index search）」を実行することだけが必要である場合もある。このブロック範囲索引サーチを容易にするために、索引付け及びサーチ・モジュール１０８は、以下により詳細に説明するように、各スクリーニング・データ構造に関連して、対応する範囲のキー値を示す指示を記憶することができる。
【００８４】
手順４００及び４５０は、そのグループのブロックに関連する複数のスクリーニング・データ構造のそれぞれをチェックし、それに続いて、少なくとも１つの肯定的結果の場合にどのブロックがそのレコードを含む可能性があるかを判断するために索引をサーチすることにより、レコードをサーチするために使用することができる。しかしながら、肯定的結果はフォルス・ポジティブになる可能性があるので、そのレコードを見つけるためにブロックを位置特定して復元する前に（これは、不必要に実行された場合にサーチ・プロセスを著しく遅くする可能性があり、行うには費用のかかるアクションである）、少なくともいくつかのフォルス・ポジティブを捕捉するために他のステップが行われ得る。例えば、ブロック範囲索引サーチは、そのレコードのキーが肯定的結果をもたらすスクリーニング・データ構造に対応するキー値の範囲内に入るかどうかを判断するために、使用され得る。キー値がその範囲内のキー値に入らない場合、肯定的結果はフォルス・ポジティブであったに違いない。キー値がその範囲内のキー値に入る場合、フォルス・ポジティブは除外されておらず、索引付け及びサーチ・モジュール１０８は、所与のキーを有するレコードを復元しサーチするための特定のブロックを見つけるために、ブロック索引サーチを実行する。
【００８５】
所与のキーを有するレコードをサーチするために複数のスクリーニング・データ構造のそれぞれをチェックした結果は、フォルス・ポジティブの確率が悪化し、サーチしたスクリーニング・データ構造の数につれて（単一スクリーニング・データ構造のフォルス・ポジティブ確率Ｐに比べて）増加することである。少数のスクリーニング・データ構造の場合、これは重大ではない可能性があるが、多数のスクリーニング・データ構造の場合、まずブロック範囲索引サーチを実行して、複数のスクリーニング・データ構造のうちのどれが所与のキーを含むキー値の範囲に対応するかを識別することにより、パフォーマンスが向上し得る。その場合、識別されたスクリーニング・データ構造についてのみ、肯定的結果の有無がチェックされ、従って、フォルス・ポジティブ確率はＰに制限される。
【００８６】
以下の例は、どのようにブロック範囲索引サーチを実行できるかを示している。対応する索引項目によってそれぞれ位置特定される圧縮ブロックに記憶されたレコードのキー値の異なる非オーバラップ範囲をスクリーニングするために、それぞれのスクリーニング・データ構造が使用される。それぞれの索引項目（最後の索引項目は除く）はその索引項目によって位置特定された圧縮データ・ブロック内の第１のレコード用のキー値を含むので、所与のスクリーニング・データ構造によってスクリーニングされたキー値の範囲は、所与のスクリーニング・データ構造に関連付けられた索引項目の範囲を識別することによって決定され得る。以下の簡略化した例では、「ビットマップ０」及び「ビットマップ１」と表示された２つのスクリーニング・データ構造が存在する。この例では、索引はアレイに記憶され、所与の索引項目は、アレイへの索引付けのための「索引項目索引（index entry index）」（ＩＥＩ）という対応して順次割り当てられた整数値を使用して取り出され得る。以下の表は、索引内の６つの索引項目のそれぞれについて、それに対応するＩＥＩ値と、その特定の索引項目によって位置特定されたブロックに記憶されたレコードをスクリーニングするためにどのビットマップが使用されるかを示している。この表は、最後の通常索引項目によって位置特定された圧縮データ・ブロック内の最後のレコード用のキー値を含む「終了索引項目（terminating index entry）」で終わる。
【表１】
2013522715.tif 000004
【００８７】
ビットマップ０は０〜２のＩＥＩ値を有する索引項目の範囲に対応し、ビットマップ１は３〜５のＩＥＩ値を有する索引項目の範囲に対応する。それぞれの索引項目は、圧縮ブロックを記憶するファイルへの記憶オフセットによって位置特定された圧縮データ・ブロック内の第１のレコード用のキー値を含む。この例では、ビットマップ０は１０（含む）〜３１０（除く）のキー値の範囲に対応し、ビットマップ１は３１０（含む）〜６１０（含む）のキー値の範囲に対応する。その範囲の第１のキー値を含む索引項目用のＩＥＩ値といった、そのビットマップに対するキー値の対応する範囲を示すためのそれぞれのビットマップに関連した単一のＩＥＩ値を記憶することで十分である。例えば、０というＩＥＩ値はビットマップ０に関連して記憶され、３というＩＥＩ値はビットマップ１に関連して記憶され得る。最後のビットマップに関する最後のキー値を示すために、終了索引項目に関する最終ＩＥＩ値も記憶され得る。この例について結果として得られるスクリーニング・データ構造と対応するＩＥＩ値のリストは以下のようになるであろう。
【表２】
2013522715.tif 000005
【００８８】
このリスト、索引、及びビットマップを使用して、５０９というキー値を有するレコードをサーチする一例は以下の通りである。
１．ブロック範囲索引サーチ：リスト内のＩＥＩ値（０、３、６）によって識別された索引項目に含まれるすべてのキー値（１０、３１０、６１０）の全域で５０９に最も近いがそれより大きくないキー値を含む索引項目に対するＩＥＩと対になっているビットマップを求めて（例えば、バイナリ・サーチを使用して）サーチを実行する。対応する索引項目は３１０というキー値を有し、３１０＜５０９＜６１０であるので、これにより、３というＩＥＩと対になっているビットマップ１が得られる。
２．スクリーニングを実行する：ブロック範囲索引サーチで識別されたスクリーニング・データ構造（ビットマップ１）に対してキー５０９がスクリーニングされる。
３ａ．スクリーニングによって肯定的結果が得られる場合：ブロック索引サーチを実行する。スクリーニング・データ構造に関連する索引項目に含まれるすべてのキー値（３１０、４１０、５１０、６１０）の全域で５０９に最も近いがそれより大きくないキー値を含む索引項目について（例えば、バイナリ・サーチを使用して）サーチを実行する。４１０＜５０９＜５１０であるので、これにより、キー値４１０を含む索引項目が得られる。これは、オフセット８０００で索引項目によって位置特定された圧縮ブロックにキー値５０９を有する一致レコードを記憶できることを意味する。圧縮ブロックを復元して一致レコードをサーチし、それが見つかった場合にそれを返す。
３ｂ．スクリーニングによって否定的結果が得られる場合：キー値５０９を有するレコードはビットマップ１に関連する３つのブロックのいずれにも記憶されないので、ブロック索引サーチを実行する必要はない。
【００８９】
図５は、索引付け及びサーチ・モジュール１０８の模範的な実現例を示しており、これは、受信レコードのグループに対する索引１１４と、上記のように適応生成されたいくつかの関連スクリーニング構造５０２、５０４、及び５０６などを含む。索引１１４は一連の項目を含み、それぞれの項目は、受信レコードのグループが記憶されている複数ブロック（例えば、ブロック５０６Ａ〜５０６Ｉ）のグループのうちの１つのブロックのアドレスと、そのブロックに記憶された第１のレコードの１次キーを識別するキー・フィールドとを含む。ブロック内のレコードは上記のように１次キーでソートされる。スクリーニング・データ構造５０２、５０４、及び５０６はそれぞれ、これらのブロックのそれぞれ異なるサブセット（例えば、ブロック・セット５０８Ａ、５０８Ｂ、又は５０８Ｃ）に関連付けられる。この例では、簡単にするために、それぞれのサブセットは３つのブロックを含むが、スクリーニング・データ構造は典型的に多数のブロックに関連付けられる。実装例によっては、複数レコードのグループに関連するスクリーニング・データ構造の数が所定のしきい値（例えば、１０又は１００というしきい値）より大きい場合、索引付け及びサーチ・モジュール１０８は、スクリーニング・データ構造のうちの１つを識別してチェックするため、ブロック範囲索引サーチを実行する。例えば、所与のキーがブロック５０６Ｄに記憶された第１のキーを示す項目５０１Ｄのキー・フィールドより大きく、ブロック５０６ｇに記憶された第１のキーを示す項目５０１Ｆのキー・フィールドより小さいとモジュール１０８が判断した場合、モジュール１０８は、ブロックのセット５０８Ｂに対応するスクリーニング・データ構造５０４をチェックする。スクリーニング・データ構造５０４によって否定的結果が得られる場合、所与のキーを有するレコードはそのレコードのグループに存在しない。スクリーニング・データ構造５０４によって肯定的結果が得られる場合、索引１１４は、そのレコードを含む可能性のあるセット５０８Ｂ内のブロックのうちの１つを見つけるために、使用され、モジュール１０８は、レコードをサーチするために、そのブロックを復元する。
【００９０】
場合によっては、索引１１４のサイズが大きくなりすぎてメモリに収まらない可能性もある。索引をサーチするための技法によっては（例えば、バイナリ・サーチ技法）、結果的にｌｏｇ２（ｔ）程度の数の索引項目を読み取ることになる。ただし、ｔは索引内の項目の総数である。（任意の所与のサーチ中に読み取られる実際の項目数は、この数量より小さい場合もあれば、大きい場合もある。）読み取られる索引項目のうちのかなりの数がその時点でたまたまメモリにロードされる索引の一部分に含まれない場合、索引をサーチするのに必要な時間は、その索引の異なる部分をメモリにロードするのに必要な時間のために、著しく増加する可能性がある。
【００９１】
実装例によっては、索引のサーチに関連付けられたアクセス時間は、階層又は「多層」索引を構築することによって短縮することができる。２つの層の索引が存在する多層索引の一例では、索引記憶域１１０（例えば、より低速及び／又は不揮発性の記憶域）に記憶された１次索引は複数レコードの圧縮ブロックを位置特定する項目を含み、ローカル・メモリ（例えば、より高速及び／又は揮発性のメモリ）に記憶された２次索引は１次索引のどの部分がローカル・メモリにロードされるかを決定するために使用される項目を含む。このような２層索引を生成するために、上記のように、圧縮ブロックに関する項目を含む初期索引が生成され、項目はキーでソートされる。この初期索引は１次索引であり、それぞれがローカル・メモリ内に完全に収まるように十分小さい項目の連続領域に分割される（例えば、それぞれの領域は「ディスク・ページ」１つ分の長さである）。各領域内の索引項目は（例えば、上記のブロックと同様のものであるが、レコードの代わりに索引項目を記憶する１つ又は複数のブロックに）任意選択で圧縮することができる。圧縮されると、その領域はさらに小さくなるが、復元された時のその領域のサイズは依然としてローカル・メモリに完全に収まるものでなければならない。その後、同じくローカル・メモリ内に完全に収まるように十分小さい２次索引が生成される。この２次索引内には、複数の領域のそれぞれについて１つの項目が作成される。それぞれの２次索引項目は、索引記憶域１１０内の領域のアドレス（例えば、その領域を記憶するディスク・ページのアドレス）を含む。また、それぞれの２次索引項目は、その領域に記憶された第１の１次索引項目の１次キーを識別するキー・フィールドも含む。
【００９２】
２次索引がローカル・メモリ内に収まるように十分小さい状態を維持している場合、アクセス・コスト（例えば、入出力（Ｉ／Ｏ）動作を実行するのに必要な時間）は低減され得る。例えば、所望のレコードを取り出すために、（ローカル・メモリ内に含まれる）２次索引内で第１のサーチを実行して、１次索引のどの領域が所望のレコードを記憶するブロックに関連する項目を含むかを判断する。（例えば、バイナリ・サーチを使用して）１次索引の適切な領域が決定されると、１次索引のその領域が索引記憶域１１０からローカル・メモリに取り出され、そのレコードを記憶するブロックを位置特定する１次索引項目を見つけるためにサーチされる。従って、この例では、ローカル・メモリ内に収まる２次索引内で第１のサーチが実行され、１回のＩ／Ｏ動作後に、同じくローカル・メモリ内に収まる１次索引の一領域内でその後のサーチが実行される。１次索引は、長さがディスク・ページ１つ分である複数の領域に分割されるので、その索引にアクセスするＩ／Ｏコストは低減され得る。２次索引が大きすぎて（又は大きくなりすぎて）ローカル・メモリ内に完全に収まらない場合、最も高い層がローカル・メモリ内に完全に収まり、それより低い各層がそれぞれローカル・メモリ内に完全に収まる複数領域に分割されるように、多層索引の第３の層（及び第４の層など）は生成され得る。最も低い層は複数レコードの圧縮ブロックを記憶する１次索引である。
【００９３】
上記のレコード記憶及び取り出し技法は、コンピュータ上で実行するためのソフトウェアを使用して実現することができる。例えば、このソフトウェアは、１つ又は複数のプログラムされた又はプログラム可能コンピュータ・システム（分散、クライアント／サーバ、又はグリッドなどの様々なアーキテクチャのものにすることができる）上で実行される１つ又は複数のコンピュータ・プログラム内の手順を形成し、それぞれのコンピュータ・システムは少なくとも１つのプロセッサと、少なくとも１つのデータ記憶システム（揮発性及び不揮発性メモリ及び／又は記憶素子を含む）と、少なくとも１つの入力装置又はポートと、少なくとも１つの出力装置又はポートを含む。このソフトウェアは、例えば、計算グラフの設計及び構成に関連するその他のサービスを提供する、より大きいプログラムの１つ又は複数のモジュールを形成することもできる。グラフのノード及び要素は、コンピュータ可読媒体に記憶されたデータ構造又はデータ・リポジトリに記憶されたデータ・モデルに適合するその他の編成済みデータとして実現することができる。
【００９４】
このソフトウェアは、汎用又は特殊用途プログラム可能コンピュータによって読み取り可能なＣＤ−ＲＯＭなどの媒体上に提供するか、それが実行されるコンピュータに対してネットワークにより配信する（搬送信号にコード化する）ことができる。すべての機能は、特殊用途コンピュータ上で又はコプロセッサなどの特殊用途ハードウェアを使用して実行することができる。このソフトウェアは、ソフトウェアによって指定された計算の異なる部分が異なるコンピュータによって実行される分散方式で実現することができる。このようなコンピュータ・プログラムのそれぞれは、好ましくは、汎用又は特殊用途プログラム可能コンピュータによって読み取り可能な記憶メディア又はデバイス（例えば、ソリッドステート・メモリ又はメディア、或いは磁気又は光メディア）に記憶されるか又はそこにダウンロードされ、本明細書に記載された手順を実行するために、その記憶メディア又はデバイスがコンピュータ・システムによって読み取られた時に、そのコンピュータを構成し操作する。また、本発明のシステムは、コンピュータ・プログラムとともに構成されたコンピュータ可読記憶媒体として実現されるものと見なすこともでき、このように構成された記憶媒体は、本明細書に記載された機能を実行するために特定の定義済みの方法でコンピュータ・システムを動作させる。
【００９５】
本発明のいくつかの実施形態について説明してきた。それにもかかわらず、本発明の精神及び範囲を逸脱せずに様々な変更が可能であることは理解されるであろう。例えば、上記のステップのいくつかは順序とは無関係である可能性があり、従って、記載されているものとは異なる順序で実行することができる。
【００９６】
上記の説明は例示のためのものであって、特許請求の範囲によって定義された本発明の範囲を制限するためのものではないことを理解されたい。例えば、上記の機能ステップのうちのいくつかは、処理全体に実質的な影響を及ぼさずに異なる順序で実行することができる。その他の諸実施形態は特許請求の範囲内である。
【図１】
2013522715.tif 000006
【図２Ａ】
2013522715.tif 000007
【図２Ｂ】
2013522715.tif 000008
【図２Ｃ】
2013522715.tif 000009
【図２Ｄ】
2013522715.tif 000010
【図３Ａ】
2013522715.tif 000011
【図３Ｂ】
2013522715.tif 000012
【図４Ａ】
2013522715.tif 000013
【図４Ｂ】
2013522715.tif 000014
【図５】
2013522715.tif 000015
【手続補正書】
【提出日】平成25年3月8日(2013.3.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを管理するための方法であって、前記方法が、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされることと、
データ記憶システムに記憶するために前記データ単位を処理することを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連付けられた複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、方法。
【請求項２】
前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに含まれる前記データ単位のすべてが、前記ソート順序において、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに含まれる前記データ単位の前記キー値のいずれかより遅く発生するキー値を有する、請求項１に記載の方法。
【請求項３】
前記複数のスクリーニング・データ構造のそれぞれが、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項２に記載の方法。
【請求項４】
前記第１のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第２のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される、請求項１に記載の方法。
【請求項５】
前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項１に記載の方法。
【請求項６】
前記サーチが、前記所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位の前記グループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む、請求項５に記載の方法。
【請求項７】
対応するスクリーニング・データ構造に関する肯定的結果に応答して、前記対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に前記所与のキー値が入るかどうかを判断するために前記索引をサーチすることをさらに含む、請求項６に記載の方法。
【請求項８】
前記対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の前記範囲内に前記所与のキー値が入ることに応答して、前記所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために前記索引をサーチすることをさらに含む、請求項７に記載の方法。
【請求項９】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項１に記載の方法。
【請求項１０】
前記データ単位が含まれていなかった時に前記所与のキー値を含むデータ単位がおそらく含まれていたことを前記所与のスクリーニング・データ構造が決定する確率が前記データ構造の前記サイズに依存する、請求項９に記載の方法。
【請求項１１】
そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造の前記サイズを選択することをさらに含む、請求項１０に記載の方法。
【請求項１２】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する１つ又は複数のフィールドに対応する、請求項１に記載の方法。
【請求項１３】
前記データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位が受信された後に前記蓄積した特異キー値をカウントすることをさらに含む、請求項１２に記載の方法。
【請求項１４】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項１記載の方法。
【請求項１５】
前記キー値が単調に割り当てられる、請求項１４に記載の方法。
【請求項１６】
前記割り当てられたキー値がすべて特異なものである、請求項１５に記載の方法。
【請求項１７】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づくものである、請求項１記載の方法。
【請求項１８】
前記索引が、少なくとも前記索引の第１のレベルと前記索引の第２のレベルとを含む階層索引である、請求項１に記載の方法。
【請求項１９】
前記索引の前記第１のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項１８に記載の方法。
【請求項２０】
前記索引内の前記項目のうちの１つ又は複数が、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する、請求項１９に記載の方法。
【請求項２１】
前記索引内の前記項目のうちの少なくともいくつかのそれぞれが、前記対応するブロックの記憶位置を識別する、請求項２０に記載の方法。
【請求項２２】
前記索引の前記第２のレベルが、前記メモリ内に完全に収まるように十分小さい、請求項１９に記載の方法。
【請求項２３】
前記索引の前記第２のレベルが、前記複数の領域のそれぞれに関するそれぞれの項目を含む、請求項２２記載の方法。
【請求項２４】
前記索引の前記第２のレベル内の前記項目のうちの１つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第１のレベルの一領域の位置特定を可能にする、請求項２３に記載の方法。
【請求項２５】
データを管理するためのコンピュータ・プログラムを記憶するコンピュータ可読媒体であって、前記コンピュータ・プログラムが、
入力装置又はポートにより個別にアクセス可能なデータ単位の少なくとも１つのグループを受信することであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされることと、
データ記憶システムに記憶するために前記データ単位を処理することをコンピュータに実行させるための命令を含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、コンピュータ可読媒体。
【請求項２６】
データを管理するためのシステムであって、前記システムが、
個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するように構成された入力装置又はポートであって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされる入力装置又はポートと、
データ記憶システムに記憶するために前記データ単位を処理するように構成された少なくとも１つのプロセッサとを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、システム。
【請求項２７】
データを管理するためのシステムであって、前記システムが、
個別にアクセス可能なデータ単位の少なくとも１つのグループを受信するための手段であって、それぞれのデータ単位が１つのキー値で識別され、所与の第２のデータ単位の前に受信される所与の第１のデータ単位を識別する前記キー値が、ソート順序において、前記所与の第２のデータ単位を識別する前記キー値より早く発生するように、前記受信したデータ単位のキー値がソートされる手段と、
データ記憶システムに記憶するために前記データ単位を処理するための手段とを含み、前記処理が、
複数のデータ・ブロックを記憶することであって、複数の前記データ単位を結合することにより、前記ブロックのうちの１つ又は複数のそれぞれが生成されることと、
前記ブロックのそれぞれについて１つの項目を含む索引を提供することであって、前記項目のうちの１つ又は複数により、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にすることと、
所与のキー値を含むデータ単位が個別にアクセス可能なデータ単位の前記グループに含まれていた可能性を判断するために、前記記憶されたブロックに関連する複数のスクリーニング・データ構造を生成することであって、前記複数のブロックのうちの１つ又は複数からなる第１のセットをスクリーニングするための第１のスクリーニング・データ構造と、前記複数のブロックのうちの１つ又は複数からなる第２のセットをスクリーニングするための第２のスクリーニング・データ構造とを含む、複数のスクリーニング・データ構造を生成すること
を含む、システム。
【請求項２８】
前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに含まれる前記データ単位のすべてが、前記ソート順序において、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに含まれる前記データ単位の前記キー値のいずれかより遅く発生するキー値を有する、請求項２５に記載のコンピュータ可読媒体。
【請求項２９】
前記複数のスクリーニング・データ構造のそれぞれが、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
前記第１のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第２のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される、請求項２５に記載のコンピュータ可読媒体。
【請求項３１】
前記処理が、前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項２５に記載のコンピュータ可読媒体。
【請求項３２】
前記サーチが、前記所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位の前記グループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む、請求項３１に記載のコンピュータ可読媒体。
【請求項３３】
前記処理が、対応するスクリーニング・データ構造に関する肯定的結果に応答して、前記対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に前記所与のキー値が入るかどうかを判断するために前記索引をサーチすることをさらに含む、請求項３２に記載のコンピュータ可読媒体。
【請求項３４】
前記処理が、前記対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の前記範囲内に前記所与のキー値が入ることに応答して、前記所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために前記索引をサーチすることをさらに含む、請求項３３に記載のコンピュータ可読媒体。
【請求項３５】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項２５に記載のコンピュータ可読媒体。
【請求項３６】
前記データ単位が含まれていなかった時に前記所与のキー値を含むデータ単位がおそらく含まれていたことを前記所与のスクリーニング・データ構造が決定する確率が前記データ構造の前記サイズに依存する、請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
前記処理が、そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造の前記サイズを選択することをさらに含む、請求項３６に記載のコンピュータ可読媒体。
【請求項３８】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する１つ又は複数のフィールドに対応する、請求項２５に記載のコンピュータ可読媒体。
【請求項３９】
前記処理が、前記データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位が受信された後に前記蓄積した特異キー値をカウントすることをさらに含む、請求項３８に記載のコンピュータ可読媒体。
【請求項４０】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項２５記載のコンピュータ可読媒体。
【請求項４１】
前記キー値が単調に割り当てられる、請求項４０に記載のコンピュータ可読媒体。
【請求項４２】
前記割り当てられたキー値がすべて特異なものである、請求項４１に記載のコンピュータ可読媒体。
【請求項４３】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づくものである、請求項２５記載のコンピュータ可読媒体。
【請求項４４】
前記索引が、少なくとも前記索引の第１のレベルと前記索引の第２のレベルとを含む階層索引である、請求項２５に記載のコンピュータ可読媒体。
【請求項４５】
前記索引の前記第１のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項４４に記載のコンピュータ可読媒体。
【請求項４６】
前記索引内の前記項目のうちの１つ又は複数が、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する、請求項４５に記載のコンピュータ可読媒体。
【請求項４７】
前記索引内の前記項目のうちの少なくともいくつかのそれぞれが、前記対応するブロックの記憶位置を識別する、請求項４６に記載のコンピュータ可読媒体。
【請求項４８】
前記索引の前記第２のレベルが、前記メモリ内に完全に収まるように十分小さい、請求項４５に記載のコンピュータ可読媒体。
【請求項４９】
前記索引の前記第２のレベルが、前記複数の領域のそれぞれに関するそれぞれの項目を含む、請求項４８記載のコンピュータ可読媒体。
【請求項５０】
前記索引の前記第２のレベル内の前記項目のうちの１つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第１のレベルの一領域の位置特定を可能にする、請求項４９に記載のコンピュータ可読媒体。
【請求項５１】
前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに含まれる前記データ単位のすべてが、前記ソート順序において、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに含まれる前記データ単位の前記キー値のいずれかより遅く発生するキー値を有する、請求項２６に記載のシステム。
【請求項５２】
前記複数のスクリーニング・データ構造のそれぞれが、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項５１に記載のシステム。
【請求項５３】
前記第１のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第２のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される、請求項２６に記載のシステム。
【請求項５４】
前記処理が、前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項２６に記載のシステム。
【請求項５５】
前記サーチが、前記所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位の前記グループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む、請求項５４に記載のシステム。
【請求項５６】
前記処理が、対応するスクリーニング・データ構造に関する肯定的結果に応答して、前記対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に前記所与のキー値が入るかどうかを判断するために前記索引をサーチすることをさらに含む、請求項５５に記載のシステム。
【請求項５７】
前記処理が、前記対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の前記範囲内に前記所与のキー値が入ることに応答して、前記所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために前記索引をサーチすることをさらに含む、請求項５６に記載のシステム。
【請求項５８】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項２６に記載のシステム。
【請求項５９】
前記データ単位が含まれていなかった時に前記所与のキー値を含むデータ単位がおそらく含まれていたことを前記所与のスクリーニング・データ構造が決定する確率が前記データ構造の前記サイズに依存する、請求項５８に記載のシステム。
【請求項６０】
前記処理が、そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造の前記サイズを選択することをさらに含む、請求項５９に記載のシステム。
【請求項６１】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する１つ又は複数のフィールドに対応する、請求項２６に記載のシステム。
【請求項６２】
前記処理が、前記データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位が受信された後に前記蓄積した特異キー値をカウントすることをさらに含む、請求項６１に記載のシステム。
【請求項６３】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項２６記載のシステム。
【請求項６４】
前記キー値が単調に割り当てられる、請求項６３に記載のシステム。
【請求項６５】
前記割り当てられたキー値がすべて特異なものである、請求項６４に記載のシステム。
【請求項６６】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づくものである、請求項２６記載のシステム。
【請求項６７】
前記索引が、少なくとも前記索引の第１のレベルと前記索引の第２のレベルとを含む階層索引である、請求項２６に記載のシステム。
【請求項６８】
前記索引の前記第１のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項６７に記載のシステム。
【請求項６９】
前記索引内の前記項目のうちの１つ又は複数が、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する、請求項６８に記載のシステム。
【請求項７０】
前記索引内の前記項目のうちの少なくともいくつかのそれぞれが、前記対応するブロックの記憶位置を識別する、請求項６９に記載のシステム。
【請求項７１】
前記索引の前記第２のレベルが、前記メモリ内に完全に収まるように十分小さい、請求項６８に記載のシステム。
【請求項７２】
前記索引の前記第２のレベルが、前記複数の領域のそれぞれに関するそれぞれの項目を含む、請求項７１記載のシステム。
【請求項７３】
前記索引の前記第２のレベル内の前記項目のうちの１つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第１のレベルの一領域の位置特定を可能にする、請求項７２に記載のシステム。
【請求項７４】
前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに含まれる前記データ単位のすべてが、前記ソート順序において、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに含まれる前記データ単位の前記キー値のいずれかより遅く発生するキー値を有する、請求項２７に記載のシステム。
【請求項７５】
前記複数のスクリーニング・データ構造のそれぞれが、１つ又は複数のブロックからなる対応するセットに記憶されたデータ単位を識別するキー値の異なる非オーバラップ範囲に対応する、請求項７４に記載のシステム。
【請求項７６】
前記第１のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第１のセットに記憶された第１のセットのデータ単位について所定の数の特異キー値を蓄積した後に生成され、前記第２のスクリーニング・データ構造が、前記複数のブロックのうちの１つ又は複数からなる前記第２のセットに記憶された第２のセットのデータ単位を受信している間に生成される、請求項２７に記載のシステム。
【請求項７７】
前記処理が、前記索引及び前記複数のスクリーニング・データ構造を使用して所与のキー値を有するデータ単位をサーチすることをさらに含む、請求項２７に記載のシステム。
【請求項７８】
前記サーチが、前記所与のキー値を有するデータ単位が個別にアクセス可能なデータ単位の前記グループにおそらく含まれることを示す肯定的結果の有無について複数のスクリーニング・データ構造のそれぞれをチェックすることを含む、請求項７７に記載のシステム。
【請求項７９】
前記処理が、対応するスクリーニング・データ構造に関する肯定的結果に応答して、前記対応するスクリーニング・データ構造によってスクリーニングされる１つ又は複数のブロックにまたがるキー値の範囲内に前記所与のキー値が入るかどうかを判断するために前記索引をサーチすることをさらに含む、請求項７８に記載のシステム。
【請求項８０】
前記処理が、前記対応するスクリーニング・データ構造によってスクリーニングされる複数のブロックにまたがるキー値の前記範囲内に前記所与のキー値が入ることに応答して、前記所与のキー値を有するデータ単位をサーチするための特定のブロックを見つけるために前記索引をサーチすることをさらに含む、請求項７９に記載のシステム。
【請求項８１】
所与のスクリーニング・データ構造が、所与のキー値について、前記所与のキー値を含むデータ単位が確かに含まれていなかったこと又は前記所与のキー値を含むデータ単位がおそらく含まれていたことのいずれかを決定する、請求項２７に記載のシステム。
【請求項８２】
前記データ単位が含まれていなかった時に前記所与のキー値を含むデータ単位がおそらく含まれていたことを前記所与のスクリーニング・データ構造が決定する確率が前記データ構造の前記サイズに依存する、請求項８１に記載のシステム。
【請求項８３】
前記処理が、そこから前記ブロックが生成された前記データ単位を識別する特異キー値の数に基づいて、前記所与のスクリーニング・データ構造の前記サイズを選択することをさらに含む、請求項８２に記載のシステム。
【請求項８４】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信される前に前記所与のデータ単位に関連する１つ又は複数のフィールドに対応する、請求項２７に記載のシステム。
【請求項８５】
前記処理が、前記データ単位が受信される時に特異キー値を蓄積することと、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位が受信された後に前記蓄積した特異キー値をカウントすることをさらに含む、請求項８４に記載のシステム。
【請求項８６】
所与のデータ単位を識別するキー値が、前記所与のデータ単位が前記入力装置又はポートにより受信された後で前記所与のデータ単位に割り当てられる、請求項２７記載のシステム。
【請求項８７】
前記キー値が単調に割り当てられる、請求項８６に記載のシステム。
【請求項８８】
前記割り当てられたキー値がすべて特異なものである、請求項８７に記載のシステム。
【請求項８９】
前記記憶されたブロックに関連するスクリーニング・データ構造の数が、個別にアクセス可能なデータ単位の前記グループ内の前記データ単位を識別する特異キー値の数と、前記スクリーニング・データ構造に関連する目標フォルス・ポジティブ確率に基づくものである、請求項２７記載のシステム。
【請求項９０】
前記索引が、少なくとも前記索引の第１のレベルと前記索引の第２のレベルとを含む階層索引である、請求項２７に記載のシステム。
【請求項９１】
前記索引の前記第１のレベルが、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応するデータ単位を含むブロックの位置特定を可能にする前記項目の複数の領域に分割され、それぞれの領域が前記データ記憶システムに結合されたメモリ内に完全に収まるように十分小さい、請求項９０に記載のシステム。
【請求項９２】
前記索引内の前記項目のうちの１つ又は複数が、そこから対応するブロックが生成されたデータ単位に対応するキー値の範囲を識別する、請求項９１に記載のシステム。
【請求項９３】
前記索引内の前記項目のうちの少なくともいくつかのそれぞれが、前記対応するブロックの記憶位置を識別する、請求項９２に記載のシステム。
【請求項９４】
前記索引の前記第２のレベルが、前記メモリ内に完全に収まるように十分小さい、請求項９１に記載のシステム。
【請求項９５】
前記索引の前記第２のレベルが、前記複数の領域のそれぞれに関するそれぞれの項目を含む、請求項９４に記載のシステム。
【請求項９６】
前記索引の前記第２のレベル内の前記項目のうちの１つ又は複数が、提供されたキー値に基づいて、前記提供されたキー値を含むキー値の範囲に対応する項目を含む前記索引の前記第１のレベルの一領域の位置特定を可能にする、請求項９５に記載のシステム。
【請求項９７】
前記複数のスクリーニング・データ構造のうちの少なくとも１つとしてオーバラップ符号化シグネチャを使用することをさらに含む、請求項１に記載の方法。
【請求項９８】
前記命令が、前記コンピュータに、さらに、前記複数のスクリーニング・データ構造のうちの少なくとも１つとしてオーバラップ符号化シグネチャを使用させる、請求項２５に記載のコンピュータ可読媒体。
【請求項９９】
前記処理が、前記複数のスクリーニング・データ構造のうちの少なくとも１つとしてオーバラップ符号化シグネチャを使用することをさらに含む、請求項２６に記載のシステム。
【請求項１００】
前記処理が、前記複数のスクリーニング・データ構造のうちの少なくとも１つとしてオーバラップ符号化シグネチャを使用する手段をさらに含む、請求項２７に記載のシステム。
【国際調査報告】
2013522715.tif 000016