(57)【要約】【課題】  データのセットに対するデータベース・クエリを処理する方法、システム及びコンピュータ・プログラムを提供する。【解決手段】  データのセットに対するデータベース・クエリを処理することが、整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々がデータ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することを含む。次に、エンティティの各セットについてディスク上に表現を生成し、各表現は、対応するセット内のエンティティの一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す。最後に、クエリを満足するデータを取り出すために、エンティティの各セットについての表現に基づいてクエリを処理し、表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの動作である関連付け及び解除動作を定数時間で提供する。【選択図】      図２
2020514899.tif 000002
【特許請求の範囲】
【請求項１】
データのセットに対するデータベース・クエリを処理する方法であって、
整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々が前記データ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することと、
エンティティの各セットについてディスク上に表現を生成することであって、各表現は、対応するセット内のエンティティの前記一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す、生成することと、
前記クエリを満足するデータを取り出すために、エンティティの各セットについての前記表現に基づいてクエリを処理することであって、前記表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの動作である関連付け及び解除動作を定数時間で提供する、処理することと、
を含む方法。
【請求項２】
エンティティの少なくとも１つのセットは、特定のエンティティと関連付けられたエンティティを含む、請求項１に記載の方法。
【請求項３】
エンティティの少なくとも１つのセットは、特定のエンティティと解除されたエンティティを含む、請求項１に記載の方法。
【請求項４】
エンティティは、人、文書、イベント及びオブジェクトの群からの１つ又は複数のインスタンスを表す、請求項１に記載の方法。
【請求項５】
前記エンティティのセットの各々は、エンティティ識別子の複数のセグメントにパーティション化され、エンティティのセットのセグメントのエンティティ識別子についてのメタデータは、ペイロードとして前記セグメントにインラインで格納される、請求項１に記載の方法。
【請求項６】
エンティティ識別子により表されるエンティティのセットを複数のセグメントにパーティション化することであって、各セグメントについてのコンテンツ及び各セグメントについてのメタデータは、別個のデータ・オブジェクト内に格納され、各セグメントは、関連付けを示すためのｉｎｓｅｒｔ（挿入）タイプ及び解除を示すためのｄｅｌｅｔｅ（削除）タイプのうちの一方であり、セグメント・サイズは、要求サイズ、圧縮タイプ、及び実行時最適化に基づき、前記複数のセグメントは、時間順に順序付けられ、セグメントを併合、挿入及び削除することにより、前記エンティティのセットのコンテンツを生成するために用いられる、パーティション化することと、
前記複数のセグメントに対する動作を同時に実行することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記クエリを処理することは、
前記複数のセグメントに対する前記クエリを評価し、前記評価したセグメントの各々からの結果を結合することをさらに含む、請求項６に記載の方法。
【請求項８】
エンティティのセットは、前記エンティティのセットの物理的表現で保存される重複するエンティティ識別子を有する非一意のエンティティを含むマルチセットを含み、前記クエリは、前記セット又はマルチセットの表現を要求する、請求項１に記載の方法。
【請求項９】
データのセットに対するデータベース・クエリを処理するためのシステムであって、
整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々が前記データ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することと、
エンティティの各セットについてディスク上に表現を生成することであって、各表現は、対応するセット内のエンティティの前記一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す、生成することと、
前記クエリを満足するデータを取り出すために、エンティティの各セットについての前記表現に基づいてクエリを処理することであって、前記表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの動作である関連付け及び解除動作を定数時間で提供する、処理することと、
を行うように構成されたプロセッサを含む、システム。
【請求項１０】
エンティティの少なくとも１つのセットは、特定のエンティティと関連付けられたエンティティを含む、請求項９に記載のシステム。
【請求項１１】
エンティティの少なくとも１つのセットは、特定のエンティティと解除されたエンティティを含む、請求項９に記載のシステム。
【請求項１２】
エンティティは、人、文書、イベント及びオブジェクトの群からの１つ又は複数のインスタンスを表す、請求項９に記載のシステム。
【請求項１３】
前記エンティティのセットの各々は、エンティティ識別子の複数のセグメントにパーティション化され、エンティティのセットのセグメントのエンティティ識別子についてのメタデータは、ペイロードとして前記セグメントにインラインで格納される、請求項９に記載のシステム。
【請求項１４】
前記プロセッサは、
エンティティ識別子により表されるエンティティのセットを複数のセグメントにパーティション化することであって、各セグメントについてのコンテンツ及び各セグメントについてのメタデータは、別個のデータ・オブジェクト内に格納され、各セグメントは、関連付けを示すためのｉｎｓｅｒｔタイプ及び解除を示すためのｄｅｌｅｔｅタイプのうちの一方であり、セグメント・サイズは、要求サイズ、圧縮タイプ、及び実行時最適化に基づき、前記複数のセグメントは、時間順に順序付けられ、セグメントを併合、挿入及び削除することにより、前記エンティティのセットのコンテンツを生成するために用いられる、パーティション化することと、
前記複数のセグメントに対する動作を同時に実行することと、
を行うようにさらに構成される、請求項９に記載のシステム。
【請求項１５】
前記クエリを処理することは、
前記複数のセグメントに対する前記クエリを評価し、前記評価したセグメントの各々からの結果を結合することをさらに含む、請求項１４に記載のシステム。
【請求項１６】
エンティティのセットは、前記エンティティのセットの物理的表現で保存される重複するエンティティ識別子を有する非一意のエンティティを含むマルチセットを含み、前記クエリは、前記セット又はマルチセットの表現を要求する、請求項９に記載のシステム。
【請求項１７】
データのセットに関するデータベース・クエリを処理するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムはプログラム命令を有し、前記プログラム命令は、プロセッサにより実行可能であり、前記プロセッサに、
整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々が前記データ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することと、
エンティティの各セットについてディスク上に表現を生成することであって、各表現は、対応するセット内のエンティティの前記一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す、生成することと、
前記クエリを満足するデータを取り出すために、エンティティの各セットについての前記表現に基づいてクエリを処理することであって、前記表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの動作である関連付け及び解除動作を定数時間で提供する、処理することと、
を行わせる、コンピュータ・プログラム。
【請求項１８】
エンティティの少なくとも１つのセットは、特定のエンティティと関連付けられたエンティティを含む、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
エンティティの少なくとも１つのセットは、特定のエンティティと解除されたエンティティを含む、請求項１７に記載のコンピュータ・プログラム。
【請求項２０】
エンティティは、人、文書、イベント及びオブジェクトの群からの１つ又は複数のインスタンスを表す、請求項１７に記載のコンピュータ・プログラム。
【請求項２１】
前記エンティティのセットの各々は、エンティティ識別子の複数のセグメントにパーティション化され、エンティティのセットのセグメントのエンティティ識別子についてのメタデータは、ペイロードとして前記セグメントにインラインで格納される、請求項１７に記載のコンピュータ・プログラム。
【請求項２２】
エンティティ識別子により表されるエンティティのセットを複数のセグメントにパーティション化することであって、各セグメントについてのコンテンツ及び各セグメントについてのメタデータは、別個のデータ・オブジェクト内に格納され、各セグメントは、関連付けを示すためのｉｎｓｅｒｔタイプ及び解除を示すためのｄｅｌｅｔｅタイプのうちの一方であり、セグメント・サイズは、要求サイズ、圧縮タイプ、及び実行時最適化に基づき、前記複数のセグメントは、時間順に順序付けられ、セグメントを併合、挿入及び削除することにより、前記エンティティのセットのコンテンツを生成するために用いられる、パーティション化することと、
前記複数のセグメントに対する動作を同時に実行することと、
をさらに含む、請求項１７に記載のコンピュータ・プログラム。
【請求項２３】
前記クエリを処理することは、
前記複数のセグメントに対する前記クエリを評価し、前記評価したセグメントの各々からの結果を結合することをさらに含む、請求項２２に記載のコンピュータ・プログラム。
【請求項２４】
エンティティのセットは、前記エンティティのセットの物理的表現で保存される重複するエンティティ識別子を有する非一意のエンティティを含むマルチセットを含み、前記クエリは、前記セット又はマルチセットの表現を要求する、請求項１７に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関連付け（association）及び解除（関連付けの解除、dissociation）データセットに関し、より具体的には、ビットマップ表現を用いる関連付け及び解除データセットの管理に関する。
【背景技術】
【０００２】
エンタープライズコンテンツ管理における一般的な問題は、大量の第１のタイプのエンティティのセットを、１又は複数の第２のタイプのエンティティと関連付けることである。例えば、法的ドメインにおいて、会社又は組織は、多くの場合、大量の文書のセット（例えば、電子メール、報告書、通知、メモ等）を、大量の人のセット（例えば、従業員、契約者、管理者等）又は１又は複数の他のエンティティ（例えば、法的事項、監査、組織ユニット等）と関連付ける必要がある。
【０００３】
関連付けセット（association set）は、２つのエンティティの間の一対多又は多対多の関係である。例えば、従業員は、従業員と文書との間の関連付けとしてモデル化することができる電子メールを受送信する。ここで、従業員と関連付けられた全文書のセットを、関連付けセットとみなすことができる。電子メールの全送信者及び受信者のセットを関連付けセットとみなすこともできる。会社が何らかの種類の訴訟に関与し、従業員（又は、訴訟に関する「利害関係人（person of interest）」）のセットと関連付けられた全文書を生成しなければならない場合、求められる文書のセットを生成するには、所望の文書の取り出しを迅速かつ正確に行う方法で関連付けをモデル化し、持続することが必要である。
【０００４】
関連付けセットは、ひとたび非常に大きくなると管理が面倒になることがあり、それは、何十万もの従業員及び何百万もの文書を有する大企業にはよくあることである。従って、大企業の場合、文書、法的事項、管理人（custodian）、通知書等の数は非常に多くなり、それらの間の関連付けの数もさらに大きくなり得る。これらの関連付けセットの格納及び照会は、現在の企業において困難な問題であり、大きな規模で正確かつ効率的に実行できる解決法が必要である。
【０００５】
典型的な解決法において、エンティティを表すために第１の識別番号を使用し、一方、他のエンティティとの関連付けの各々を追跡するために第２の識別番号を使用することができる。例えば、電子メールと従業員との間の関連付けを、電子メールのＩＤと従業員のＩＤとの間の関係としてモデル化することができる。しかしながら、これにより、非常に多数の関係がもたらされ、開示手続き（discovery）プロセスの種々の段階中に、格納し、管理し、取り出し、照会を行わなければならない極めて多数の関係オブジェクトが生じ得る。これらの大量の関係オブジェクトの管理、格納、取り出し及び照会には費用がかかり得る。何万人もの従業員及び何百万もの文書を有する大企業又は組織においては、関連付けセットのサイズが極めて大きくなる。従来の手段を用い場合、これらの大量の関連付けセットを持続すると、ストレージの膨大な量をふさぎ得る。
【０００６】
ストレージのコストに加えて、これらの関連付けの作成及び管理にかかる時間に関するコストもある。トランザクションを用いて関連付けの作成を行う場合、実体化（materialization）の際に保持する必要があるロックにより、システムが、同時に発生しなければならない他の動作（例えば、エンティティの関連付けセットへの付加又これからの除去など）に使用できなくなることがある。
【０００７】
さらに、大量の関連付けセットの格納問題に直接関連するのは、多数の他のものから関心ある関連付けを取り出す問題である。ｎ項（n-ary）の関連付けに照会を行うために、２項（binary）の関連付けセットのｎウェイの結合が必要とされ得る。これには、迅速かつ柔軟でスケーラブルな解決法が必要である。
【０００８】
従来のデータベース・ストレージは、リンク・テーブルを用いて、エンティティ間の関連付けを表し、照会を行う。この方法での関連付けの格納、索引付け及び照会は最適ではなく、特に関連付けが同時に作成され、管理される場合、関連付けに関与するユーザ・クエリに対して長い応答時間をもたらし得る。トランザクションの保証が与えられる場合、データベースの多くは、作成又は削除動作が行われている間使用不能であり、そのことは、システム全体を、何日もではないにしても何時間もの間、読み取り専用クエリでさえ、ほとんど使用不能にすることがある。
【０００９】
例えば、訴訟に直面している会社は、一般的には、ケースに関係するデータを集める必要がある。これは、多くの場合、ケースを作成すること、多数の（関連）文書を関連付けること、及びこれらの何百万になり得る文書を保留にすることを必要とする。同じトランザクションにおいて、多数の管理人をケースと関連付ける必要があることもある。エラーの場合にシステムをロールバックできる方法でこうしたトランザクションを管理することは、非常に困難であり得る。同様に、ケースを削除する必要がある場合、同じトランザクションが、ケースから多数の文書及び管理人の解除、及びあらゆる保留の解放を要することがある。トランザクションの意味論を保証しながら、それを効率的に行うのは困難である。
【００１０】
文書の存続期間が出訴期限（例えば、連邦法、州法、地方自治体法、会社のポリシー等による）を超える場合、関連付けを作成し、時間の経過とともに修正し、さらに除去することができる。従って、これらの関連付けセットの管理は、クエリ性能を著しく低下させることなく、時間の経過に伴うこうした変化を処理できることが必要である。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
データのセットに対するデータベース・クエリを処理する方法、システム及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【００１２】
本発明の一実施形態によると、データのセットに対するデータベース・クエリを処理することが、整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々がデータ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することを含む。さらに、エンティティの各セットについてディスク上に表現を生成し、各表現は、対応するセット内のエンティティの一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す。クエリを満足するデータを取り出すために、エンティティの各セットについての表現に基づいてクエリを処理し、表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの（append-only）動作である関連付け及び解除動作を定数時間で提供する。本発明の実施形態は、実質的に上述の同じ方法でデータのセットに対するデータベース・クエリを処理するためのシステム及びコンピュータ・プログラム製品をさらに含む。
【００１３】
本発明の実施形態によると、エンティティは、人、文書、イベント及びオブジェクトの群からの１つ又は複数のインスタンスを表す。本発明の実施形態のエンティティの少なくとも１つのセットは、特定のエンティティと関連付けられエンティティ、及び／又は特定のエンティティと解除されたエンティティを含むことができる。さらに、本発明の実施形態のエンティティのセットは、エンティティのセットの物理的表現で保存される重複するエンティティ識別子を有する非一意のエンティティを含むマルチセットを含む。本発明の実施形態は、エンティティのセットのセグメントのエンティティ識別子についてのメタデータは、ペイロードとしてセグメントにインラインで格納されることを提供する。
【００１４】
本発明の実施形態は、エンティティ識別子により表されるエンティティのセットを複数のセグメントにパーティション化し、各セグメントについてのコンテンツ及び各セグメントについてのメタデータは、別個のデータ・オブジェクト内に格納される。さらに、各セグメントは、関連付けを示すためのｉｎｓｅｒｔタイプ及び解除を示すためのｄｅｌｅｔｅタイプのうちの一方であり、セグメント・サイズは、要求サイズ、圧縮タイプ、及び実行時最適化に基づく。さらに、複数のセグメントを時間順に（chronologically）順序付け、これを用いて、セグメントを併合（ｍｅｒｇｅ）、挿入（ｉｎｓｅｒｔ）及び削除（ｄｅｌｅｔｅ）することにより、エンティティのセットのコンテンツを生成する。本発明の実施形態は、複数のセグメントに対する動作を同時に実行する。さらに、クエリを処理するとき、本発明の実施形態は、複数のセグメントに対するクエリを評価し、評価したセグメントの各々からの結果を結合する。
【００１５】
一般的に、種々の図における同様の参照番号は、同様の構成要素を示すために用いられる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一般的な概念を具体化できる例示的な環境を示す。
【図２】本発明の実施形態による、データの関連付けセットを表す概略図である。
【図３】本発明の実施形態による、関連付けセット内の関連したエンティティを付加する新しいセグメントの作成の手順フローチャートである。
【図４】本発明の実施形態による、関連付けセット内の解除エンティティを付加する新しいセグメントの作成の手順フローチャートである。
【図５】本発明の実施形態による、関連付けセット内の併合セグメントのためのバックグラウンド併合器関数の手順フローチャートである。
【図６】本発明の実施形態による、関連付けセットのエンティティを取り出すための取り出し又はクエリ関数の手順フローチャートである。
【図７】本発明の実施形態による、関連付けセットのエンティティを取り出すための取り出し又はクエリ関数の手順フローチャートである。
【図８】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図９】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１０】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１１】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１２】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１３】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１４】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１５】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１６】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１７】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１８】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図１９】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【図２０】本発明の実施形態による、関連付けセットの取り出しを示す一連の概略図である。
【発明を実施するための形態】
【００１７】
本開示の全体にわたって、同様の参照番号は、同様の要素を識別するために使用されている。
【００１８】
関連付け及び解除データセットを含むデータのセットに対するデータベース・クエリを処理するための技術が、本明細書で提示される。一般に、本明細書で与えられる技術は、一意の整数を有するデータセットの各エンティティを割り当て、表現する。本明細書に与えられる技術によると、各エンティティが一連の関連付けセットに割り当てられ、そこで、各関連付けセットは、関連付けセットに属する可能性があるエンティティ識別子の範囲をカバーする整数空間にわたってビットマップとして表される。関連付けセットを一連のブロック又はセグメントにパーティション化するために、各関連セットに対して、ブロック構造が用いられ、そこで、各セグメントは、セグメントのエンティティの識別子が、整数空間においてどのように分散されるかに基づいて格納される。大きい数の関連エンティティを有するセグメント（すなわち、高密度セグメント）は、物理的ビットマップを用いて格納することができるが、小さい数の関連エンティティを有するセグメント（すなわち、より低密度でより少ない識別子を有するセグメント）は、他の方法で格納され得る（例えば、実際のエンティティ識別子を格納する等）。
【００１９】
これらの技術は、システムのデータセットの関連付けセットのエンティティをナビゲートし、取り出すよりも効率的で時間のかからない方法をもたらす。さらに、本明細書で与えられる技術は、スケーラブルな大量の関連付けセットのストレージを作成する。本明細書で与えられる技術は、従来のリンクテーブル・データベース・ストレージのものと比べて、関連付けセットを格納して取り出す、より安価な方法を提供する。さらに、本明細書で与えられる技術は、関連付けセットの迅速な取り出しを可能にする。最後に、本明細書で与えられる技術は、関連付けセット全体をロックする必要なしに、セグメントの動作（例えば、作成、削除、移動、併合、照会等）を同時に行うことを可能にし、そのことは、ストレージ・システムの処理能力、性能及び機能全体を改善する。
【００２０】
本発明の実施形態と共に使用される例示的なコンピューティング環境が、図１に示される。具体的には、コンピューティング環境は、１つ又は複数のサーバ・システム１０、及び１つ又は複数のクライアント・システム２０を含む。サーバ・システム１０及びクライアント・システム２０は、互いに遠隔にあり、ネットワーク３０を介して通信することができる。ネットワークは、任意の数のいずれかの適切な通信媒体（例えば、広域ネットワーク（ＷＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、インターネット、イントラネット等）により実装することができる。代替的に、サーバ・システム１０及びクライアント・システム２０は、互いにローカルにあり、いずれかの適切なローカル通信媒体（例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、配線接続、無線リンク、イントラネット等）を介して通信することができる。
【００２１】
サーバ・システム１０は、ディスプレイ若しくはモニタ、ベース（例えば、少なくとも１つのＣＰＵ若しくはプロセッサ１２）、１つ又は複数のメモリ１６、及び／又は内部若しくは外部ネットワーク・インターフェース、又は通信デバイス１４（例えば、モデム、ネットワーク・カード等））、随意的な入力デバイス（例えば、キーボード、マウス、若しくは他の入力デバイス）、及び任意の市販のカスタム・ソフトウェア（例えば、サーバ／通信ソフトウェア、データベース管理モジュール１８等）を備えることが好ましい、いずれかの従来の又は他のコンピュータ・システムにより実装することができる。
【００２２】
クライアント・システム２０は、少なくとも１つのＣＰＵ又はプロセッサ１２、１つ又は複数のメモリ１６、内部若しくは外部ネットワーク・インターフェース又は通信デバイス１４（例えば、送受信機、ネットワーク・カード等）、及び／又は随意的な入力若しくは出力デバイス（例えば、キーボード、マウス、若しくは他の入力デバイス、ディスプレイ等）を装備できることが好ましい。クライアント・システム２０は、特定のデバイスがデバイス動作を実行するための、いずれかの市販の又はカスタム・ソフトウェア、及び／又はハードウェア・モジュール（例えば、アプリケーション、ブラウザ、通信ソフトウェア、データベース・クエリ・モジュール２２等）をさらに含むことができる。クライアント・システム２０は、データのセットに対するデータベース・クエリを処理するために、サーバ・システム１０と通信することができる。
【００２３】
データベース・クエリ・モジュール２２は、クライアント・システム２０のユーザが、データベース１７上にサーバ・システム１０により格納されるデータのセットに対する要求又はクエリをサーバ・システム１０にサブミットすることを可能にする。サーバ・システム１０は、システムのデータセットについての関連付けセットのデータベース１７を構築し、管理するためのデータベース管理モジュール１８を含む。１つ又は複数のデータベース１７は、種々のタイプの情報（例えば、関連付けセット、データセットの各エンティティについてのエンティティ識別又は識別子、関連付けセットのメタデータ等）を格納することができる。データベース１７は、任意の従来のストレージ・ユニットにより実装することができ、サーバ・システム１０及びクライアント・システム２０のローカルにあっても、又はこれらから遠隔にあってもよく、任意の適切な通信媒体（例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネット、配線接続、無線リンク、イントラネット等）を介して通信することができる。クライアント・システム２０は、データベース・クエリをサーバ・システム１０に送るために、グラフィカル・ユーザ・インターフェース（例えば、ＧＵＩ等）又は他のタイプのインターフェース（例えば、コマンドライン・プロンプト、メニュー画面等）を提示することができ、関連付けセットのエンティティを含む種々のタイプの情報を提供することができる。
【００２４】
データベース管理モジュール１８は、関連付けセット（例えば、システムのエンティティの関連付け及び解除の両方）をモデル化し、追跡するように構成される。データベース管理モジュール１８は、システムの各エンティティを一意の整数に割り当てることができ、ここで、一意の整数は、識別キー、識別子、又はアイデンティティとして働く。任意のサイズの整数をデータベース管理モジュール１８により用いることができる。しかしながら、本発明の１つの例示的な実施形態において、一意の６４ビット整数をシステムのデータセットの各エンティティに割り当てることができる。データセットのエンティティとして、これらに限定されるものではないが、文書、人、システムのオブジェクト、及びシステムの事項を含むことができる。例えば、文書は、これらに限定されるものではないが、システムの電子メール、報告書、通知書、メモ等を含む。システムの人は、これらに限定されるものではないが、従業員、契約者、及びシステムを所有し動作させる会社のマネージャを含む。システムの事項は、これらに限定されるものではないが、システムを所有し動作させる会社の法的事項、監査、及び組織ユニットを含む。
【００２５】
ひとたびデータベース管理モジュール１８が、識別子を有するシステムの各エンティティを割り当てると、データベース管理モジュール１８は、同じタイプの関係又は関連付けを互いに共有するエンティティのグループである関連付けセットを構築する。例えば、従業員は、電子メールを受送信することができ、電子メールは、従業員と文書との間の関連付けとしてモデル化することができる。この例によると、特定の従業員と関連した文書の全てを互いにグループ化し、１つの関連付けセットとして機能させることができる。さらに、電子メールの送信者及び受信者も互いにグループ化し、別の関連付けセットとして機能させることができる。データベース管理モジュール１８は、関連付けセットに属する可能性があるエンティティ識別子の範囲をカバーする整数空間にわたりビットマップとして各関連付けセットを表すことができる。例えば、システムを所有し、動作させる組織の法的事項と関連したシステムの人のセットは、法的事項識別子と人のビットマップとの間の関係として表すことができ、ここで、ビットは、法的事項と関連した各々の人について設定される。本発明の１つの実施形態において、以下にさらに示され、説明されるように、関連付けセットは、ブロック構造によりパーティション化することができ、ここで、関連付けセットは、複数のブロック又はセグメントにパーティション化又は分割される。このことは、サーバ・システム１０がクライアント・システム２０からデータベース・クエリを受け取るとき、サーバ・システム１０のデータベース管理モジュール１８により設定される各関連付けセットに対してより迅速なアクセス及びスケーラビリティ（scalability）を与える。
【００２６】
モジュール１８、２２は、以下に説明される本発明の実施形態の種々の機能を実施するための、１つ又は複数のモジュール又はユニットを含むことができる。種々のモジュール（例えば、データベース管理モジュール１８、データベース・クエリ・モジュール２２等）は、いずれかの量のソフトウェア及び／又はハードウェア・モジュール又はユニットのいずれかの組み合わせにより、実装することができ、プロセッサ１２による実行のために、サーバ・システム１０及び／又はクライアント・システム２０のメモリ１６内に常駐することができる。
【００２７】
ここで図２を参照すると、データベース１７内に格納される関連付けセット１００の１つの例の概略図が示される。示されるように、各関連付けセット１００は、テーブルのセットを含む。示される関連付けセット１００の表現は、３つのセグメント１１０、１２０、１３０を含む。図２に示される例示的な実施形態は、３つのセグメントを有するように示されるが、任意の数のセグメントを有するように、関連付けセット１００の他の実施形態を格納することもできる。セグメント１１０、１２０、１３０の各々は、それぞれ、５つのエンティティ１１２（１）〜１１２（５）、１２２（１）〜１２２（５）、１３２（１）〜１３２（５）を含む。示されるように、セグメント１１０は、識別子１が割り当てられた第１のエンティティ１１２（１）、識別子４が割り当てられた第２のエンティティ１１２（２）、識別子６が割り当てられた第３のエンティティ１１２（３）、識別子７が割り当てられた第４のエンティティ１１２（４）、及び識別子１０が割り当てられた第５のエンティティ１１２（５）を含む。セグメント１２０は、識別子１３が割り当てられた第１のエンティティ１２２（１）、識別子２４が割り当てられた第２のエンティティ１２２（２）、識別子２６が割り当てられた第３のエンティティ１２２（３）、識別子２９が割り当てられた第４のエンティティ１２２（４）、及び識別子４０が割り当てられた第５のエンティティ１２２（５）を含む。最後に、セグメント１３０は、識別子４７が割り当てられた第１のエンティティ１３２（１）、識別子６２が割り当てられた第２のエンティティ１３２（２）、識別子７１が割り当てられた第３のエンティティ１３２（３）、識別子８０が割り当てられた第４のエンティティ１３２（４）、及び識別子９２が割り当てられた第５のエンティティ１３２（５）を含む。関連付けセット１００の各セグメント１１０、１２０、１３０は、５つのエンティティを含むが、他の関連付けセットの他の実施形態は、５つより多い又は少ないエンティティを含むセグメントを含むことができる。
【００２８】
図２の関連付けセット１００の例示的な実施形態は、関連付けセット１００がセグメント・ヘッダ・テーブル１４０及びセグメント・データ・テーブル１５０を含むことを示す。セグメント・データ・テーブル１５０は、各セグメント１１０、１２０、１３０のコンテンツ（すなわち、各セグメントのエンティティ）を格納する。セグメント・ヘッダ・テーブル１４０は、セグメント１１０、１２０、１３０についてのメタデータを格納する。幾つかの実施形態において、セグメント・ヘッダ・テーブル１４０は、各セグメント１１０、１２０、１３０について、エンティティの開始ＩＤ、エンティティの終了ＩＤ、圧縮タイプ、濃度（cardinality）、及びセグメントの状態を含む。セグメント・ヘッダ・テーブル１４０において、各セグメント１１０、１２０、１３０は、それぞれ、異なる行１１４、１２４、１３４として表される。さらに、セグメント・ヘッダ・テーブル１４０の行１１４、１２４、１３４は、セグメント・データ・テーブル１５０のそれぞれの行１１６、１２６、１３６と位置合わせすることができる。セグメント・データ・テーブル１５０の第１の行１１６は、第１のセグメント１１０のエンティティ１１２（１）〜１１２（５）の識別子を格納する。セグメント・データ・テーブル１５０の第２の行１２６は、第２のセグメント１２０のエンティティ１２２（１）〜１２２（５）の識別子を格納し、セグメント・データ・テーブル１５０の第３の行１３６は、エンティティ１３２（１）〜１３２（５）の識別子を格納する。
【００２９】
他の実施形態において、関連付けセット１００は、参加エンティティ１１２（１）〜１１２（５）、１２２（１）〜１２２（５）、１３２（１）〜１３２（５）の識別子に加えて、他のメタデータを含むことができ、ここで、この付加的なメタデータを格納する必要性がある。例えば、メタデータのサイズが小さい場合（すなわち、関連付けセット１００に対するエンティティの関連付けの日付、エンティティが互いに関連付けられる時間）、メタデータは、ペイロードを用いて、メタデータを関連付けセットと共にインラインで格納することができる。インライン・メタデータは、ディスク上のどこかからそれらを取り出す（例えば、入力／出力）付加的なオーバーヘッドを回避するために、データと同一場所に配置される。例えば、文書がアプリケーション内のフォルダと関連付けられ、各文書がいつフォルダに関連付けられたかを記録したいとアプリケーションが望むとき、各文書がフォルダに関連付けられた日付及び／又は時間を、関連付けセット１００内のペイロードに格納することができる。これにより、付加的なディスク・シークを必要としないので、関連付けの日付に対するクエリを迅速に評価することが可能になる。
【００３０】
反対に、付加的なメタデータが大きいとき、付加的なメタデータを、関連付けセット１００の平行セグメント内にまとめて格納することができる。大きいメタデータの例は、アプリケーションが法的事項に関与し、管理者（custodian)により、法的事項と管理者との間の各関連付けと共に、コメント又は説明を格納することが可能になる場合を含む。この例において、大きいテキスト・フィールドをペイロードとして格納することは、関連付けセットをあまりにも面倒で費用のかかるものにする。従って、付加的な大きいメタデータは、別個の平行セグメントとして格納することができる。
【００３１】
さらに、関連付けセット１００が比較的小さい場合、関連付けセット１００は、関連付けられたエンティティを格納するために、別個のテーブルを必要としないことがある。従って、エンティティ及びあらゆる小さいメタデータを含むその全体の関連付けセットの両方を、単一のテーブル内に格納することができる。小量の関連付けセット１００の例は、これらの関連付けセット１００が一般に小さく不変であるので、各電子メールと関連付けられた送信者及び受信者とすることができる。
【００３２】
付加的なタイプの関連付けセット１００は、同じエンティティ識別子の複数のインスタンスを単一の関連付けセット１００内に格納する必要性が存在するときに生じ得る。一般的に、関連付けセット１００は、別個のエンティティ１１２（１）〜１１２（５）、１２２（１）〜１２２（５）、１３２（１）〜１３２（５）のセットを含む（すなわち、いずれのエンティティも、複数回生じない）。エンティティが関係に複数回参加し、その参加の濃度が重要なものであり、キャプチャする必要があるとき、同じエンティティ識別子の複数のインスタンスを関連付けセット１００内に格納することができる。例えば、関連付けセットの１つ又は複数の文書上にホールド（hold）を配置することができ、そこで、文書は、少なくとも１つのホールド要求がそれにある場合、削除することができない。ホールド上の文書のセットを表す関連付けセット１００は、それが１つより多いホールド要求内に含まれる場合、単一の文書の複数のインスタンス（すなわち、エンティティの識別子の複数のインスタンス）を有することができる。別の実施形態において、関連付けセット１００内の単一の識別子の複数の発生を格納する代わりに、参照カウントを、複数のインスタンスの格納を要求する各識別子と関連付けることができる。ホールド上に配置された文書についての関連付けセット１００の例において、要求され、識別子が割り当てられた特定の文書上に配置された各ホールドについて、そのホールドの関連付けセット内の識別子についての参照カウントをインクリメントすることができる。さらに、ホールドが解放された場合、参照カウントをデクリメントすることができる。参照カウントがゼロの値に達したときのみ、エンティティ識別子を除去することができる。
【００３３】
ここで図３及び図４を参照すると、手順フローチャート２００、３００が、関連付けセット１００を構築又は管理するための動作（例えば、データベース管理モジュール１８）を示す。関連付けセット１００の各セグメント１１０、１２０、１３０は、関連付けセット１００と関連付けられた又は解除された一連のエンティティを表すことができる。関連付けセグメントは、エンティティと関連付けられた（例えば、関連付けセットに付加された）エンティティ識別子のリストとして機能するが、解除セットは、エンティティと解除されたエンティティ識別子（すなわち、エンティティといったん関連付けられたが、次に解除されるようになったエンティティ識別子；関連付けセットから除去されるエンティティ識別子）をキャプチャする。例えば、エンティティがシステムから削除される場合、その関連の全てを同様に削除することができる（すなわち、それぞれのエンティティを関連付けセットから解除しなければならない）。関連付けセグメントは、関連付け「ＩＮＳＥＲＴ（挿入）」又は「ＮＥＷ（新しい）」と表記できるが、解除セグメントは、解除又は「ＤＥＬＥＴＥ（削除）」と表記できる。従って、関連付けセット１００内のいずれのセグメントも除去する必要はなく、関連付けセット１００の各セグメント１１０、１２０、１３０は、セグメント１１０、１２０、１３０がどのように表記されたかに基づいて、関連付けセット１００から付加又は削除されたエンティティについてのリスト又は台帳として機能する。１つの例示的な実施形態において、解除セグメントは、ビットマスク又はブルームフィルタを用いて表すことができる。別の例示的な実施形態において、以下にさらに詳細に説明するように、解除セグメントは、優先度キューを用いて実装することができ、そこで、関連付けセット１００のセグメント１１０、１２０、１３０の優先度は、逆時間順（reverse chronology）に決定される（すなわち、関連付けセグメントであっても又は解除セグメントであってもより最近のセグメントは、セグメントの優先度がより高い）。
【００３４】
さらに、関連付けセット１００のセグメント１１０、１２０、１３０は、特定量のエンティティに固定することができる。図１に示される関連付けセット１００の例示的な実施形態の場合、セグメント１１０、１２０、１３０は、５つのエンティティに限定される。しかしながら、他の関連付けセット１００は、任意の数のセット・エンティティを含むセグメントを含むことができる。さらに、セグメント１１０、１２０、１３０に、状態を割り当てることができる。セグメント１１０、１２０、１３０の状態は、これらに限定されるものではないが、「ＮＥＷ（新しい）」、「ＤＥＬＥＴＥ（削除）」、「ＭＥＲＧＥＤ（併合）」、「ＩＮ  ＰＲＯＧＲＥＳＳ（進行中）」及び「ＬＯＣＫ（ロック）」を含む。これらの状態は、以下に詳細に説明される。
【００３５】
図３に示されるように、ステップ２１０において、データベース管理モジュール１８は、最初に、関連付けセットと関連付けられるエンティティのエンティティ識別子を収集し、入力する。ステップ２２０において、データベース管理モジュール１８は、関連付けセット１００についての新しいセグメントを作成し、最大量のエンティティ識別子がセグメントに付加されるまで、エンティティ識別子を新しいセグメントに付加する。さらに、データベース管理モジュール１８は、エンティティ識別子をセグメントに付加する前に、関連付けセットに付加されるエンティティ識別子をソートする（すなわち、時間順に）ことができる。さらに、エンティティ識別子を付加する新しいセグメントの各々には、「ＮＥＷ」状態が割り当てられる。最大量のエンティティ識別子がセグメントに付加された後、ステップ２３０において、データベース管理モジュール１８は、ステップ２１０で受け取ったエンティティ識別子の全てが関連付けセットと関連付けられたかどうかを判断する。ステップ２３０において、データベース管理モジュール１８は、ステップ２１０で受け取ったエンティティ識別子の全ては関連付けセットと関連付けられていないと判断した場合、データベース管理モジュール１８はステップ２２０に戻って付加的なセグメントを作成し、残りのエンティティ識別子をセグメントに付加する。しかしながら、ステップ２３０において、データベース管理モジュール１８が、ステップ２１０で受け取ったエンティティ識別子の全てが関連付けセットと関連付けられていると判断した場合、データベース管理モジュール１８は、ステップ２４０において、エンティティ識別子を関連付けセグメントに付加し、関連付けセットへの関連付けセグメントの付加を停止する。
【００３６】
図４に示されるように、ステップ３１０において、データベース管理モジュール１８は、最初に、関連付けセットと解除するエンティティのエンティティ識別子を収集し、入力する。ステップ３２０において、データベース管理モジュール１８は、関連付けセットの新しいセグメントを作成し、最大量のエンティティ識別子がセグメントに付加されるまで、エンティティ識別子を新しいセグメントに付加する。さらに、データベース管理モジュール１８は、エンティティ識別子をセグメントに付加する前に、関連付けセットに付加されるエンティティ識別子をソートする（すなわち、番号順に）ことができる。さらに、エンティティ識別子を付加する各々の新しいセグメントには、「ＤＥＬＥＴＥ」状態が割り当てられる。最大量のエンティティ識別子がセグメントに付加された後、ステップ３３０において、データベース管理モジュール１８は、ステップ３１０で受け取ったエンティティ識別子の全てが関連付けセットと解除されたかどうかを判断する。ステップ３３０において、データベース管理モジュール１８は、ステップ３１０で受け取ったエンティティ識別子の全てが関連付けセットと解除していないと判断した場合、データベース管理モジュール１８は、ステップ３２０に戻って、新しいセグメントを作成し、残りのエンティティ識別子をセグメントに付加する。しかしながら、ステップ３３０において、データベース管理モジュール１８が、ステップ３１０において受け取ったエンティティ識別子の全てが関連付けセットと解除されていると判断した場合、データベース管理モジュール１８は、ステップ３４０において、エンティティ識別子を解除セグメントに付加し、関連付けセットへの解除セグメントの付加を停止する。
【００３７】
幾つかの例示的な実施形態において、システムから削除されたエンティティは、多数の関連付けの一部であった可能性があり、それにより、従来の関連付けセット構造における削除が非常に高価な動作になる（すなわち、一括削除（bulk deletion））。本発明の実施形態は、各関連付けセットから各々の削除済みエンティティ識別子を個々に要求するのではなく、削除済みエンティティ識別子をグローバル削除セットなどの単一のセットに付加することを可能にする。関連付けに照会を行うたびに又は関連付けを他の方法で取り出すたびに、結果又は出力がグローバル削除セットのエンティティにより事後フィルタリングされる（post-filtered）ので、それらは、クエリ結果から適切に除外される。これは、従来の手法よりもずっと効率的に解除のスケール変更を可能にする。
【００３８】
関連付けセグメント又は解除セグメントに付加されたエンティティ識別子は、時間順である必要はないが（しかし、エンティティ識別子は、関連付け又は解除セグメント内で番号順でなければならない）、関連付け又は解除セグメントは、関連付けセット１００内で時間順に順序付けられる。バックグラウンド併合器スレッド（background merger thread）と呼ばれるバックグラウンド・プロセスを用いて、データベース管理モジュール１８により、定期的解除セグメントを関連付けセット１００に非同期的に適用することができる。バックグラウンド併合器スレッドは、ストレージ及びクエリ性能を最適化するように、関連付けセット１００のセグメント１１０、１２０、１３０を位置合わせする。バックグラウンド併合器スレッドは、セグメント１１０、１２０、１３０を併合して、コストを償却し、システム性能を改善しながら、データベース管理モジュール１８が、複数のタスク（すなわち、計算及びセグメント・サイズのキャッシング）を実行することを可能にする。
【００３９】
図５は、関連付けセットの複数のセグメントのバックグラウンド併合器プロセス４００を実行するために、データベース管理モジュール１８により行われるステップの手順フローチャートを示す。バックグラウンド併合器プロセス４００は、「ＮＥＷ」、「ＤＥＬＥＴＥ」及び「ＭＥＲＧＥＤ」の状態を有すると表記された関連付けセットのセグメントを併合する。バックグラウンド併合器プロセス４００を実行するとき、以下に説明されるように、セグメントは、「ＩＮ  ＰＲＯＧＲＥＳＳ」の状態を有すると表記される。バックグラウンド併合器プロセス４００は、重複するエンティティ識別子を除去し、既述のように、グローバル削除セットを併合されるセグメントに適用することにより、関連付けセットのセグメントを最適化する。バックグラウンド併合器プロセス４００は、ロックフリー（lock free）であり、これは、データベース管理モジュール１８が関連付けセットのセグメントの全て又は一部でバックグラウンド併合器プロセス４００を実行する間、依然として関連付けセットに照会を行い得ることを意味する。
【００４０】
図５に示されるように、ステップ４０５において、データベース管理モジュール１８は、最初に、データベース１７内に格納される関連付けセットの全てを取り出す。ステップ４１０において、データベース管理モジュール１８は、ステップ４０５で受け取った関連付けセットのリスト内の次の関連付けセットを読み取る又は分析する。関連付けセットのリストを最初に読み取るとき、次の関連付けセットは、ステップ４０５で取り出した第１の関連付けセットである。ステップ４１５において、データベース管理モジュール１８は、ステップ４１０で読み取られた関連付けセットが併合を必要とするかどうかを判断する。関連付けセットが、「ＮＥＷ」又は「ＤＥＬＥＴＥ」の状態を有すると表記されたいずれかのセグメントを含む場合、関連付けセットは、併合を必要とし得る。
【００４１】
ステップ４１５において、データベース管理モジュール１８は、関連付けセットを併合する必要があると判断する場合、ステップ４２０において、データベース管理モジュール１８は、「ＮＥＷ」、「ＤＥＬＥＴＥ」及び「ＭＥＲＧＥＤ」の状態を有すると表記された関連付けセット内のセグメントの全てを取り出す。次に、ステップ４２５において、データベース管理モジュール１８は、関連付けセットについての新しいセグメントを作成し、新しいセグメントは、「ＩＮ  ＰＲＯＧＲＥＳＳ」の状態を有すると表記される。ステップ４３０において、データベース管理モジュール１８は、ステップ４２０で取り出されたセグメントからのエンティティ識別子を、ステップ４２５で作成された新しいＩＮ  ＰＲＯＧＲＥＳＳセグメントに付加する。後の時点で解除セグメントが関連付けセットに付加された場合、関連付けセグメント及び解除セグメントの両方の一部であったいずれのエンティティ識別子も、ＩＮ  ＰＲＯＧＲＥＳＳセグメントに付加されない。エンティティ識別子は、ＩＮ  ＰＲＯＧＲＥＳＳセグメントがエンティティ識別子の最大数に達するまで、ステップ４３０においてＩＮ  ＰＲＯＧＲＥＳＳセグメントに付加される。ステップ４３５において、データベース管理モジュール１８が、ステップ４２０の併合されるセグメントから依然として残っているかどうかを判断する。ステップ４３５において、データベース管理モジュール１８が、併合する必要があるエンティティ識別子が依然として存在すると判断した場合、データベース管理モジュール１８は、ステップ４２５に戻って新しいＩＮ  ＰＲＯＧＲＥＳＳセグメントを作成し、これに残りのエンティティ識別子を付加する。
【００４２】
しかしながら、ステップ４３５において、データベース管理モジュール１８が、エンティティ識別子の全てが併合されたと判断した場合、次に、ステップ４４０において、データベース管理モジュール１８は、ＩＮ  ＰＲＯＧＲＥＳＳセグメントの全ての状態を「ＩＮ  ＰＲＯＧＲＥＳＳ」から「ＭＥＲＧＥＤ」に変更する。次に、ステップ４４０において、データベース管理モジュール１８は、関連付けセットから、「ＮＥＷ」、「ＤＥＬＥＴＥ」及び「ＭＥＲＧＥＤ」の状態を有すると以前に表記されたセグメントの全てを削除又は除去する。
【００４３】
次に、ステップ４５０において、データベース管理モジュール１８が、それ以上の関連付けセットが併合されるかどうかを判断する。ステップ４５０において、データベース管理モジュール１８が、さらなる関連付けセットを併合する必要があると判断した場合、データベース管理モジュール１８は、ステップ４１０に戻って、取り出した関連付けセットのリスト内の次の関連付けセットを読み取る。しかしながら、ステップ４５０において、データベース管理モジュール１８が、それ以上の関連付けセットを併合する必要はないと判断した場合、データベース管理モジュール１８は、バックグラウンド併合器プロセス４００を終了する。
【００４４】
ここで図６及び図７を参照すると、関連付けセットについてデータベースに照会を行うための、データベース管理モジュール１８により行われるステップ５００の手順フローチャートが示される。以前に説明され、示されるように、関連付けセット１００の各セグメント１１０、１２０、１３０は、エンティティのエンティティ識別子として働く整数のソートされたリストである。幾つかの実施形態において、クライアント・システム２０は、データベース・クエリ・モジュール２２を通じて、関連付けセットについてのクエリをサーバ・システム１０に送る。他の実施形態において、サーバ・システム１０は、クライアント・システム２０からクエリ要求を受け取ることなく、データベース１７に照会を行うことができる。これらの実施形態のいずれにおいても、サーバ・システム１０は、データベース管理モジュール１８を介して、データベース１７に照会を行う。
【００４５】
図６に示されるように、ステップ５１０において、データベース管理モジュール１８は、最初に、データベース１７から取り出される関連付けセットの識別子又は識別を入力する、又はクライアント・システム２０から受け取る。ステップ５２０において、データベース管理モジュール１８は、ステップ５１０で識別された関連付けセット内の次のエンティティ識別子を取り出す。データベース管理モジュール１８が、最初に、関連付けセットのエンティティ識別子を取り出そうと試みるとき、受け取るエンティティ識別子は、関連付けセットの第１のエンティティ識別子である。しかしながら、データベース管理モジュール１８により関連付けセットからエンティティ識別子を取り出そうとする後の試行は、次のエンティティ識別子を返す。ステップ５３０において、データベース管理モジュール１８は、ステップ５１０において識別され、取り出された関連付けセットから、それ以上のエンティティ識別子を取り出す必要があるかどうかを判断する。データベース管理モジュール１８が、より多くのエンティティ識別子を取り出す必要があると判断した場合、データベース管理モジュール１８は、ステップ５２０に戻り、関連付けセットから次のエンティティ識別子を取り出す。しかしながら、ステップ５３０において、データベース管理モジュール１８が、エンティティ識別子の全てが関連付けセットから取り出されたと判断する場合、次に、データベース管理モジュール１８によりクエリ・ステップ５００が終了する。クライアント・システム２０がクエリを受け取った場合、データベース管理モジュール１８は、取り出したエンティティ識別子を、クエリを発したクライアント・システムに送ることができる。
【００４６】
図７は、図６に示されるクエリ・プロセス５００のステップ５２０のより詳細な手順フローチャートを示す。より具体的には、図７は、関連付けセットから次のエンティティ識別子を取り出すための手順フローチャートを示す。ステップ５５０において、データベース管理モジュール１８は、関連付けセットのセグメント（すなわち、「ＮＥＷ」、「ＤＥＬＥＴＥ」及び「ＭＥＲＧＥＤ」の状態を有すると表記されたセグメント）の全てを逆時間順に配列する。従って、既述のように、関連付けセットのセグメントは、関連付けセットに付加された最新のセグメントから、関連付けセットに付加された最も古いセグメントの順に配置される。ステップ５５５において、データベース管理モジュール１８は、関連付けセットの各セグメントの第１のエンティティ識別子を用いて、優先度キューを実施する。より具体的には、データベース管理モジュール１８は、各セグメントの第１エンティティ識別子のヒープ（heap）を構築し、ここで、時間順が優先度である。次に、ステップ５６０において、データベース管理モジュール１８は、そのセグメントから、ヒープの先頭に配置されたエンティティ識別子を除去する。このヒープの先頭の除去されたエンティティ識別子が、「先頭の」エンティティ識別子である。ステップ５６５において、データベース管理モジュール１８は、セグメントに対してヒープ化（heapify）プロセスを実行し、ここで、データベース管理モジュール１８は、先頭のエンティティ識別子がヒープ及びその関連したセグメントから除去された後、各セグメントの第１のエンティティ識別子を用いて、ヒープを再構成する。
【００４７】
ステップ５７０において、データベース管理モジュール１８は、除去された「先頭の」エンティティ識別子が、解除セグメント（すなわち、「ＤＥＬＥＴＥ」の状態を有すると表記されたセグメント）からのものであるかどうかを判断する。ステップ５７０において、データベース管理モジュール１８が、「先頭の」エンティティ識別子は、削除された又は解除セグメントからのものであると判断した場合、次に、ステップ５７５において、データベース管理モジュール１８は、そのセグメントから、ヒープ内の「次の」エンティティ識別子を除去する。この「次の」エンティティ識別子は、「先頭の」エンティティ識別子と同じセグメントからのものであることもあり、又は関連付けセットのいずれか他のセグメントからのものであることもある。ひとたび「次の」エンティティ識別子がそのセグメントから除去されると、ステップ５８０において、データベース管理モジュール１８は、関連付けセットのセグメントに対して別のヒープ化プロセスを実行する。従って、データベース管理モジュール１８は、各セグメントの第１のエンティティ識別子を用いてヒープを再構成する。ステップ５８５において、データベース管理モジュール１８は、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しくないことを検証する。ステップ５８５において、データベース管理モジュール１８が、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しいと判断した場合、データベース管理モジュール１８は、ステップ５７５に戻って、ヒープから次のエンティティ識別子を除去する。これは、「先頭の」エンティティ識別子が「次の」エンティティ識別子と等しく、かつ、「先頭の」エンティティ識別子が、「次の」エンティティ識別子が付加されたセグメントよりも最近関連付けセット１００に付加された解除セグメントからのものであり、その次のエンティティ識別子が表すエンティティが関連付けセットから解除されているために、発生する。従って、次のエンティティ識別子を関連付けセットから出力すべきではない。
【００４８】
しかしながら、データベース管理モジュール１８が、ステップ５８５において、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しくないと判断した場合、データベース管理モジュール１８は、ステップ５９０において、「次の」エンティティ識別子を「先頭の」エンティティ識別子として設定する。次に、データベース管理モジュール１８は、ステップ５７０に戻って、新しい「先頭の」エンティティ識別子が解除セグメント（すなわち、「ＤＥＬＥＴＥ」の状態を有すると表記されたセグメント）からのものであるかどうかを判断する。
【００４９】
ステップ５７０において、データベース管理モジュール１８が、「先頭の」エンティティ識別子が削除されたセグメントからのものではないと判断した場合、次に、ステップ５９５において、データベース管理モジュール１８は、「先頭の」エンティティ識別子の値を出力する。
【００５０】
図を参照すると、図８〜図２０は、図６及び図７の手順フローチャートにより示されるような関連付けセット１００についてデータベース１７に照会を行うプロセスの例示的な実施形態である。例示的な実施形態において、関連付けセット６００は、６つのセグメント６１０、６２０、６３０、６４０、６５０、６６０を含む。第１のセグメント６１０は、セグメント・ヘッダ情報６１２及びセグメント・データ情報６１４を含む。セグメント・ヘッダ情報６１２及びセグメント・データ情報６１４により与えられるように、第１のセグメント６１０は、関連付けセット６００と関連付けられた、２、４、１０、２３及び３０のエンティティ識別子を含む。第２のセグメント６２０は、セグメント・ヘッダ情報６２２及びセグメント・データ情報６２４を含む。セグメント・ヘッダ情報６２２及びセグメント・データ情報６２４により与えられるように、第２のセグメント６２０は、関連付けセット６００と関連付けられた、１、３４、及び５０のエンティティ識別子を含む。第３のセグメント６３０は、セグメント・ヘッダ情報６３２及びセグメント・データ情報６３４を含む。セグメント・ヘッダ情報６３２及びセグメント・データ情報６３４により与えられるように、第３のセグメント６３０は、関連付けセット６００と関連付けられた、４、１１、３４及び５６のエンティティ識別子を含む。第４のセグメント６４０は、セグメント・ヘッダ情報６４２及びセグメント・データ情報６４４を含む。セグメント・ヘッダ情報６４２及びセグメント・データ情報６４４により与えられるように、第４のセグメント６４０は、関連付けセット６００と関連付けられた、２、１１及び３５のエンティティ識別子を含む。第５のセグメント６５０は、セグメント・ヘッダ情報６５２及びセグメント・データ情報６５４を含む。しかしながら、第５のセグメント６５０は、いずれのエンティティ識別子も含まず、セグメント・ヘッダ情報６５２が、含まれるエンティティ識別子をキャプチャするので、関連付けセット６００からエンティティ識別子１０及び１１を解除する。最後に、第６のセグメント６６０は、セグメント・ヘッダ情報６６２及びセグメント・データ情報６６４を含む。しかしながら、第６のセグメント６６０は、いずれのエンティティ識別子も含まず、セグメント・ヘッダ情報６６２が、含まれるエンティティ識別子をキャプチャするので、エンティティ識別子１０を関連付けセット６００と関連付ける。
【００５１】
図８〜図２０にさらに示されるように、第６のセグメント６６０は、一番最近（most recently）関連付けセット６００に付加されたセグメントであり、一方、第１のセグメント６１０は、関連付けセット６００に付加された第１のセグメントであった。さらに、各セグメント６１０、６２０、６３０、６４０、６５０、６６０は、それぞれ、先頭のエンティティ識別子６１８、６２８、６３８、６４８、６５８、６６８も含む。関連付けセット６００の各セグメント６１０、６２０、６３０、６４０、６５０、６６０の先頭のエンティティ識別子６１８、６２８、６３８、６４８、６５８、６６８は、それぞれのセグメント６１０、６２０、６３０、６４０、６５０、６６０の第１のエンティティ識別子であり、ここで、エンティティ識別子の時間順は優先度である。言い換えれば、関連付けセット６００の各セグメント６１０、６２０、６３０、６４０、６５０、６６０の先頭のエンティティ識別子６１８、６２８、６３８、６４８、６５８、６６８は、各セグメント６１０、６２０、６３０、６４０、６５０、６６０のエンティティ識別子の最小値である。
【００５２】
図９に示されるように、データベース管理モジュール１８が、関連付けセット６００に対して、図７に示されるようなステップ５６０、５６５、５７０及び５９５を実行すると、第２のセグメント６２０のエンティティ識別子「１」が、関連付けセット６００の第１のエンティティ識別子として出力される６７０。「１」のエンティティ識別子は、セグメント６１０、６２０、６３０、６４０、６５０の各々の最小のエンティティ識別子であるので、「１」のエンティティ識別子は、ヒープの「先頭の」エンティティ識別子（すなわち、各セグメント６１０、６２０、６３０、６４０、６５０、６６０についての６１８、６２８、６３８、６４８、６５８、６６８の各々の先頭のエンティティ識別子の群）である。さらに、データベース管理モジュール１８は、エンティティ識別子「１」は、解除又はＤＥＬＥＴＥセグメント（すなわち、セグメント６４０、６５０）からのものではないと判断し、従って、「１」のエンティティ識別子を出力する。
【００５３】
図１０に示されるように、エンティティ識別子「１」を除去され、出力された６７０後、ひとたびデータベース管理モジュール１８がヒープ化プロセスを実行すると、それは第２のセグメント６２０の次の時間順のエンティティ識別子であるので、「３４」のエンティティ識別子が第２のセグメント６２０の先頭のエンティティ識別子６２８として働く。
【００５４】
さらに、データベース管理モジュール１８がヒープの先頭におけるエンティティ識別子を除去すると、１つは第４のセグメント６４０からのものであり、１つは第１のセグメント６１０のものからのである、２つの「２」のエンティティ識別子が存在する。第４のセグメント６４０は、第１のセグメント６１０よりも最近付加されたので、第４のセグメント６４０からの「２」のエンティティ識別子は、第１のセグメント６１０からの「２」のエンティティ識別子に先行する又はこれよりも優先される。データベース管理モジュール１８が第４のセグメント６４０からの「２」のエンティティ識別子を評価するとき、データベース管理モジュール１８は、第４のセグメント６４０からの「２」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものであると判断する（すなわち、図７のステップ５７０）。図７に示されるプロセスの以下のステップ５７５、５８０及び５８５において、データベース管理モジュール１８は、次のエンティティ識別子が第１のセグメント６１０からの「２」のエンティティ識別子であると判断する。第１のセグメント６１０からの「２」のエンティティ識別子は、第４のセグメント６４０からの「２」のエンティティ識別子と等しく、かつ、第４のセグメント６４０からの「２」のエンティティ識別子は図１０に示されるように、第１のセグメント６１０よりも最近生じたＤＥＬＥＴＥセグメント６４０からのものなので、データベース管理モジュール１８は、「２」のエンティティ識別子を出力６７０しないと決定する。
【００５５】
しかしながら、図１１に示されるように、データベース管理モジュール１８が第３の反復を実行し、ヒープから次のエンティティ識別子を除去すると（図７のステップ５７５）、データベース管理モジュール１８は、第１及び第３のセグメント６１０、６３０の両方から「４」のエンティティ識別子を出力する。図１１に示されるように、第３の反復において、「４」のエンティティ識別子は、第１及び第３のセグメント６１０、６３０の先頭のエンティティ識別子６１８、６３８として働く。「４」のエンティティ識別子は第１及び第３のセグメント６１０、６３０からのものであり、かつ、第１及び第３のセグメント６１０、６３０はどちらも関連付けセグメントであるので、データベース管理モジュール１８は、反復３において、「４」のエンティティ識別子を出力する６７０。
【００５６】
図１２を参照すると、データベース管理モジュール１８が関連付けセット６００に対して図７のプロセスの第４の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、第１のセグメント６１０からのもの、第５のセグメント６５０からのもの、及び第６のセグメント６６０からのものである、３つの「１０」のエンティティ識別子が存在する。示されるように、第５のセグメント６５０は、ＤＥＬＥＴＥセグメントであるが、第１及び第６のセグメント６１０、６６０は、関連付けセグメント（ＩＮＳＥＲＴセグメント）である。第６のセグメント６６０は、第１のセグメント６１０及び第５のセグメント６５０より最近付加されたので、第６のセグメント６６０からの「１０」のエンティティ識別子は、第１のセグメント６１０又は第５のセグメント６５０のいずれかからの「１０」のエンティティ識別子に先行する又はこれよりも優先される。データベース管理モジュール１８が第６のセグメント６６０からの「１０」のエンティティ識別子を評価するとき、データベース管理モジュール１８は、第６のセグメント６６０からの「１０」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものではないと判断する（すなわち、図７のステップ５７０）。第６のセグメント６６０はＤＥＬＥＴＥセグメントではないので、データベース管理モジュール１８は、反復４において、「１０」のエンティティ識別子を出力する６７０。
【００５７】
図１３に示されるように、データベース管理モジュール１８が、関連付けセット６００に対して図７のプロセスの第５の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、１つは第３のセグメント６３０からのもの、１つは第４のセグメント６４０からのもの、及び１つは第５のセグメント６５０からのものである３つの「１１」のエンティティ識別子が存在する。示されるように、第４及び第５のセグメント６４０、６５０は、ＤＥＬＥＴＥセグメントであるが、第３のセグメント６３０は、関連付けセグメントである。第５のセグメント６５０及び第４のセグメント６４０の両方とも、第３のセグメント６３０より最近関連付けセット６００に付加されたので、第５のセグメント６５０からの「１１」のエンティティ識別子は、第４のセグメント６４０又は第３のセグメント６３０のいずれかからの「１１」のエンティティ識別子に先行する又はこれより優先される。従って、データベース管理モジュール１８が第５のセグメント６５０からの「１１」のエンティティ識別子を評価するとき、データベース管理モジュール１８は、第５のセグメント６５０からの「１１」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものであると判断する（すなわち、図７のステップ５７０）。第５のセグメント６５０はＤＥＬＥＴＥセグメントであるので、反復５において、データベース管理モジュール１８は、図７に示されるプロセスの以下のステップ５７５、５８０及び５８５において、次のエンティティ識別子は、第４及び第３のセグメント６４０、６３０からの「１１」のエンティティ識別子であると判断する。第３及び第４のセグメント６３０、６４０からの「１１」のエンティティ識別子は、第５のセグメント６５０からの「１１」のエンティティ識別子と等しく、かつ、図１３に示されるように、第５のセグメント６５０からの「１１」のエンティティ識別子は、第３又は第４のセグメント６３０、６４０よりも最近生じたＤＥＬＥＴＥセグメント６４０であるので、データベース管理モジュール１８は、「１１」のエンティティ識別子を出力しない６７０と判断する。
【００５８】
データベース管理モジュール１８は、該データベース管理モジュール１８が、次のエンティティ識別子が第５のセグメント６５０からの「１１」のエンティティ識別子と等しくないことを見出すまで、図７に示されるプロセスのステップ５７５、５８０及び５８５を反復し続ける（すなわち、ヒープから次のエンティティ識別子を除去し、ヒープ化し、「次の」エンティティ識別子を「先頭の」エンティティ識別子と比較する等）。図１４に示されるように、「１１」のエンティティ識別子を出力すべきではないと評価した後、及び、ヒープ化（例えば、図７のステップ５８０）を実行した後、データベース管理モジュール１８は、図７のステップ５７５において、ヒープ内の次のエンティティ識別子は、第１セグメント６１０からの「２３」のエンティティ識別子であると判断する。「２３」のエンティティ識別子は、第１のセグメント６１０においてのみ見出され、かつ、第１のセグメント６１０は、ＤＥＬＥＴＥセグメントからのものではないので、データベース管理モジュール１８は、次に「２３」のエンティティ識別子を出力する６７０。
【００５９】
図１５を参照すると、データベース管理モジュール１８が、関連付けセット６００に対して図７のプロセスの第７の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール１８は、第１のセグメント６１０からの「３０」のエンティティ識別子を出力する６７０。図示され、既述したように、第１のセグメント６１０はＤＥＬＥＴＥセグメントではなく、従って、データベース管理モジュール１８が第１のセグメント６１０からの「３０」のエンティティ識別子を評価すると、データベース管理モジュール１８は、第１のセグメント６１０からの「３０」のエンティティ識別子が、ＤＥＬＥＴＥセグメントからのものではないと判断し（すなわち、図７のステップ５７０）、「３０」のエンティティ識別子を出力する６７０。
【００６０】
同様に、図１６に示されるように、データベース管理モジュール１８が、関連付けセット６００に対して図７のプロセスの第８の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール１８は、第２及び第３のセグメント６２０、６３０の両方とも「３４」のエンティティ識別子を含むことを見出す。示されるように、第３のセグメント６３０は、第２のセグメント６２０よりも最近関連付けセット６００に付加され、第２のセグメント６２０に先行する又はこれより優先される。さらに、第２及び第３のセグメント６２０、６３０は両方とも関連付けセグメントである。従って、データベース管理モジュール１８が第３のセグメント６３０からの「３４」のエンティティ識別子を評価するとき、データベース管理モジュール１８は、第３のセグメント６３０からの「３４」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものではないと判断し（すなわち、図７のステップ５７０）、「３４」のエンティティ識別子を出力する６７０。
【００６１】
図１７を参照すると、エンティティ識別子「３４」が除去され、出力された後、ひとたびデータベース管理モジュール１８がヒープ化プロセスを実行すると、それぞれ、第２、第３及び第４のセグメント６２０、６３０、６４０からの「５０」、「５６」及び「３５」のエンティティ識別子が、ヒープ内に残されたエンティティ識別子である。第４のセグメント６４０からの「３５」のエンティティ識別子は、ヒープの先頭にあるので、データベース管理モジュール１８は、評価するヒープから、第４のセグメント６４０からの「３５」のエンティティ識別子を除去する。データベース管理モジュール１８が第４のセグメント６４０からの「３５」のエンティティ識別子を評価すると、データベース管理モジュール１８は、第４のセグメント６４０からの「３５」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものであり（すなわち、図７のステップ５７０）、従って、出力６７０できないと判断する。
【００６２】
図７に示されるプロセスの以下のステップ５７５、５８０及び５８５において、データベース管理モジュール１８は、図１８に示されるように、次のエンティティ識別子が、第２のセグメント６２０からの「５０」のエンティティ識別子であると判断する。第２のセグメント６２０からの「５０」のエンティティ識別子は、第４のセグメント６４０からの「３５」のエンティティ識別子と等しくないので、データベース管理モジュール１８は、「先頭の」エンティティ識別子を、第２のセグメント６２０からの「５０」のエンティティ識別子に設定する。次に、図７に示されるプロセスのステップ５７０において、データベース管理モジュール１８は、第２のセグメント６２０からの「５０」のエンティティ識別子がＤＥＬＥＴＥセグメントからのものであるかどうかを評価する。第２のセグメント６２０は関連付けセグメントであり、ＤＥＬＥＴＥセグメントではないので、データベース管理モジュール１８は、「５０」のエンティティ識別子を出力６７０する。
【００６３】
最後に、図１９に示されるように、データベース管理モジュール１８が、関連付けセット６００において図７のプロセスの第１１の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール１８は、第３のセグメント６３０からの「５６」のエンティティ識別子を出力する６７０。示されるように、「５６」のエンティティ識別子は、評価されるように残された唯一のエンティティ識別子である。さらに、第３のセグメント６３０はＤＥＬＥＴＥセグメントではなく、従って、データベース管理モジュール１８が第３のセグメント６３０からの「５６」のエンティティ識別子を評価すると、データベース管理モジュール１８は、第３のセグメント６３０からの「５６」のエンティティ識別子は、ＤＥＬＥＴＥセグメントからのものではないと判断し（すなわち、図７のステップ５７０）、「５６」のエンティティ識別子を出力６７０する。
【００６４】
図２０は、データベース管理モジュール１８が、図８〜図２０に示される関連付けセット６００に照会を行うときの最終出力６７０を示す。エンティティ識別子の出力６７０は、関連付けセット６００に照会を行うとき、「１」、「４」、「１０」、「２３」、「３０」、「３４」、「５０」及び「５６」である。
【００６５】
クライアント・システム２０は、データベース・クエリ・モジュール２２を通じて、サーバ・システム１０のデータベース管理モジュール１８に、様々な理由でデータベース１７に照会を行うよう要求する。例えば、データベース１７は、法的事項についての保留となっている文書の関連付けセットを含むことができ、従って、所定の文書が保留中であるかどうかを判断するとき、関連付けセットに照会を行い、所定の文書がその中にあるかどうかを調べる。別の例において、関連付けセット照会を行い、幾つの文書が所定のケース、事項、又はプロジェクトに関連するかを判断することができる。この例において、関連付けセットについての全ての関連付け及び解除セグメントが併合された場合、セット内のエンティティの数の単純カウントは、クエリに対して答えを提供し、そこで、全セグメントの数にセグメント・サイズを乗算することにより、計算の速度が上がる。別の例において、関連付けセットに照会を行い、所定の日付より前にどの文書が所定のケースに付加されたかを判断することができる。この例において、関連付けセットが、別個のテーブルではなくペイロードとして関連テーブル内に格納される場合、クエリに迅速かつ効率的に答えることができる。クエリは、最初に、関連付けセット内の全ての文書を取り出し、次に、文書を付加した日付に基づいて、それらの文書を事後フィルタリングすることができる。さらに別の例において、関連付けセットに照会を行い、どの文書が所定の管理人のセットの１又は複数により所有されるかを判断することができる。この例において、データが、全てのその所有者（例えば、管理人）の関連付けセットを含む文書としてモデル化される場合、各文書を走査し、文書の所有者の全ての関連付けセットとクエリ内の管理人のセットとの間の関連付けセットの共通部分の動作を実行することにより、クエリを完了することができる。
【００６６】
関連付けセグメント及び解除セグメントの両方を有する関連付けセットを有するため、いずれの関連付けセットのセグメントも修正する必要がない。関連付けセットのセグメントの各々は不変であり、そのことにより、動作のいずれか１つについて関連付けセット全体をロックすることを必要とすることなく、セグメントの作成、削除、移動、併合、及び照会などの動作を同時に行うことが可能になる。図２に示されるセグメント・データ・テーブル１５０内の各行は、関連付けセット１００の１つのセグメントを示すので、トランザクショナル・ロックの範囲は、多くの場合、テーブル全体ではなく、１つの行だけである。例えば、リンク・テーブル手法を用いる場合、サイズ１００，０００の関連付けセットは、関連付けに関与するあらゆる動作に関してリンク・テーブル全体（すなわち、１００，０００行）のロックを必要とする。しかしながら、本発明の実施形態を用いる場合、関連付けセットのセグメントが５，０００のエンティティ識別子のみを表す場合、動作が行われるとき、１行しか（すなわち、約５，０００のエンティティ識別子）ロックする必要がない。従って、他のセグメント内のエンティティ識別子の関連付けに関与する他の動作は、いずれの並行処理の問題も生じずに、同時に行うことができる。
【００６７】
さらに、幾つかの本発明の実施形態において、関連付けセットのセグメントを読み取る必要があるとき、それをディスクからロードし、展開し、メモリ内にキャッシュして後のアクセスの速度を上げる。弱い参照（weak reference）を用いてこれらのセグメントをメモリ内に格納するので、メモリ使用率が大きい場合、これらのセグメントを廃棄して（例えば、ガベージコレクタにより）、他のスレッドのためにメモリを空けることができる。これにより、次にセグメントを必要とするとき、（例えば、ディスクから）再ロードする必要があるが、この手法は、システムのスケーラビリティ全体を改善することができる。
【００６８】
本明細書で提供される技術には、多数の利点がある。一例として、この技術は、迅速かつ効率的で費用対効果の高い方法で、関連付けセットに照会を行うこと可能にする。さらに、本明細書で与えられる技術は、大量の関連付けセットをモデル化し、効率的かつ迅速な方法で追跡することができる。この新しいシステムは、リンク・テーブル関連付けセットのような他の従来の関連付けセットと関連したコストをなくす。システムはさらに、修正する際、関連付けセット全体をロックし、使用不能にすることを必要とせずに、関連付けセットのエンティティを修正することが可能である。一般的に言うと、本明細書で提供される技術は、コンピュータ技術、特にデータベース内の関連付けセットのストレージに必然的に根ざしている技術的及び経済的問題を解決する。
【００６９】
上述され、図に示される実施形態は、データのセット、特にデータの関連付けセットに対するデータベース・クエリを処理するために実施形態を実施する多くの方法のうちのほんの一部を表すにすぎないことが理解されるであろう。
【００７０】
本発明の実施形態の環境は、任意の数のコンピュータ又は他の処理システム（例えば、クライアント又はエンドユーザ・システム、サーバ・システム等）及びいずれかの所望の方式で配置されたデータベース又は他のリポジトリを含むことができ、本発明の実施形態は、任意の所望のタイプのコンピューティング環境（例えば、クラウド・コンピューティング、クライアント・サーバ、ネットワーク・コンピューティング、メインフレーム、スタンドアロン・システム等）に適用することができる。本発明の実施形態により用いられるコンピュータ又は他の処理システムは、任意の数のいずれかのパーソナル又は他のタイプのコンピュータ又は処理システム（例えば、デスクトップ、ラップトップ、ＰＤＡ、モバイル・デバイス等）により実装することができ、いずれかの市販のオペレーティング・システム、及びいずれかの市販の及び特化したソフトウェア（例えば、ブラウザ・ソフトウェア、通信ソフトウェア、サーバ・ソフトウェア、データベース管理モジュール１８、データベース・クエリ・モジュール２２等）の任意の組み合わせを含むことができる。これらのシステムは、情報を入力及び／又は表示するための、いずれかのタイプのモニタ及び入力デバイス（例えば、キーボード、マウス、音声認識等）を含むことができる。
【００７１】
本発明の実施形態のソフトウェア（例えば、データベース管理モジュール１８、データベース・クエリ・モジュール２２等）は、任意の所望のコンピュータ言語で実装することができ、明細書内に含まれる機能記述、及び図に示されるフローチャートに基づいて、コンピュータ技術分野の当業者により開発できることを理解されたい。さらに、種々の機能を実行するソフトウェアの本明細書でのいずれの参照も、一般に、ソフトウェア制御のもとでこれらの機能を実行するコンピュータ・システム又はプロセッサを指す。本発明の実施形態のコンピュータ・システムは、代替的に、いずれかのタイプのハードウェア及び／又は他の処理回路によっても実装することができる。
【００７２】
コンピュータ又は他の処理システムの種々の機能は、任意の数のソフトウェア及び／又はハードウェア・モジュール又はユニット、処理又はコンピュータ・システム、及び／又は回路の間で任意の方法で分散することができ、ここで、コンピュータ又は処理システムは、互いにローカルに又は遠隔に配置することができ、いずれかの適切な通信媒体（例えば、ＬＡＮ、ＷＡＮ、イントラネット、インターネット、配線接続、モデム接続、無線等）を介して通信することができる。例えば、本発明の実施形態の機能は、種々のエンドユーザ／クライアント及びサーバ・システム、及び／又はいずれかの他の中間処理デバイスの間で任意の方法で分散させることができる。フローチャートにおいて上述され、示されるソフトウェア及び／又はアルゴリズムは、本明細書で説明される機能を達成する任意の方法で修正することができる。さらに、フローチャート又は説明における機能は、所望の動作を達成する任意の順序で実行することができる。
【００７３】
本発明の実施形態のソフトウェア（例えば、データベース管理モジュール１８、データベース・クエリ・モジュール２２等）は、スタンドアロン・システム又はネットワーク若しくは他の通信媒体により接続されるシステムと共に用いられる固定又は携帯可能プログラム製品装置又はデバイスの非一時コンピュータ使用可能ストレージ媒体（例えば、磁気又は光媒体、光磁気媒体、フロッピー・ディスケット、ＣＤ−ＲＯＭ、ＤＶＤ、メモリ・デバイス等）上で利用可能であり得る。
【００７４】
通信ネットワークは、任意の数の任意のタイプの通信ネットワーク（例えば、ＬＡＮ、ＷＡＮ、インターネット、イントラネット、ＶＰＮ等）により実装することができる。本発明の実施形態のコンピュータ又は他の処理システムは、いずれかの従来の若しくは他のプロトコルを介してネットワーク上で通信するためのいずれかの従来の若しくは他の通信デバイスを含むこともできる。コンピュータ又は他の処理システムは、ネットワークにアクセスするために任意のタイプの接続（例えば、有線、無線等）を用いることができる。ローカル通信媒体は、任意の適切な通信媒体（例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、ハードウェア、無線リンク、イントラネット等）により実装することができる。
【００７５】
システムは、情報（例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等）を格納するための任意の数のいずれかの従来の若しくは他のデータベース、データストア、又はデータ構造（例えば、ファイル、データベース、データ構造、データ若しくは他のリポジトリ等）を用いることができる。データベース・システムは、情報（例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等）を格納するための任意の数のいずれかの従来の若しくは他のデータベース、データストア、又はデータ構造（例えば、ファイル、データベース、データ構造、データ若しくは他のリポジトリ等）により実装することができる。データベース・システムは、サーバ及び／又はクライアント・システム内に含ませること、又はこれに結合することができる。データベース・システム及び／又はストレージ構造は、コンピュータ又は他の処理システムから遠隔にあっても、又はこれのローカルにあってもよく、いずれかの所望のデータ（例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等）を格納することができる。
【００７６】
本発明の実施形態は、情報（例えば、関連付けセットのエンティティ識別子、エンティティ識別子が関連付けセットに付加された日付等）を取得又は提供するための任意の数のいずれかのタイプのユーザ・インターフェース（例えば、グラフィカル・ユーザ・インターフェース（ＧＵＩ）、コマンド・ライン、プロンプト等）を用いることができ、ここで、インターフェースは、任意の方法で配置されたいずれかの情報を含むことができる。インターフェースは、情報を入力／表示し、かつ、いずれかの適切な入力デバイス（例えば、マウス、キーボード、タッチスクリーン等）を介して所望のアクションを開始する、任意の数のいずれかのタイプの作動機構（例えば、ボタン、アイコン、フィールド、ボックス、リンク等）を含むことができる。インターフェース画面は、画面の間を任意の方法でナビゲートするためのいずれかの適切なアクチュエータ（例えば、リンク、タブ等）を含むことができる。
【００７７】
本明細書で用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈がそうでないことを明確に示していない限り、複数形も含む。用語「含む（comprise）」、「含んでいる（comprising）」、「含む（include）」、「含んでいる（including）」、「有する（has、have）」、「有している（having）」、「備えた（with）」は、本開示で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指定するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はその群の存在又は付加を除外するものではないことが、さらに理解されるであろう。
【００７８】
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作及び均等物が、明確に特許請求された他の請求要素と組み合わせて機能を実行するための任意の構造、材料、又は動作を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲及び趣旨から逸脱することなく、多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
【００７９】
本発明の様々な実施形態の説明は、例示の目的で提示されたものであり、網羅的であること又は開示される実施形態に限定することを意図したものではない。当業者には、説明される実施形態の範囲及び趣旨から逸脱することなく、多くの変更及び変形が明らかとなるであろう。本明細書で用いられる用語は、実施形態の原理、実際の用途、又は市場で見出だされる技術に優る技術的改善を最もよく説明するため、又は他の当業者が本明細書に開示される実施形態を理解することを可能にするために選択されたものである。
【００８０】
本発明は、統合の任意の可能な技術的詳細レベルにおける、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。
【００８１】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【００８２】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
【００８３】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個人化することができる。
【００８４】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【００８５】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実施する命令を含む製品を含むようにすることもできる。
【００８６】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００８７】
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【符号の説明】
【００８８】
１０：サーバ・システム
１２：ＣＰＵ又はプロセッサ
１４：ネットワーク・インターフェース又は通信デバイス
１６：メモリ
１７：データベース
１８：データベース管理モジュール
２０：クライアント・システム
２２：データベース・クエリ・モジュール
３０：ネットワーク
１００、６００：関連付けセット
１１０、１２０、１３０、６１０、６２０、６３０、６４０、６５０、６６０：セグメント
１４０：セグメント・ヘッダ・テーブル
１５０：セグメント・データ・テーブル
４００：バックグラウンド併合器プロセス
５００：クエリ・プロセス
６１２、６２２、６３２、６４２、６５２、６６２：セグメント・ヘッダ情報
６１４、６２４、６３４、６４４、６５４、６６４：セグメント・データ情報
６７０：出力
【図１】
2020514899.tif 000003
【図２】
2020514899.tif 000004
【図３】
2020514899.tif 000005
【図４】
2020514899.tif 000006
【図５】
2020514899.tif 000007
【図６】
2020514899.tif 000008
【図７】
2020514899.tif 000009
【図８】
2020514899.tif 000010
【図９】
2020514899.tif 000011
【図１０】
2020514899.tif 000012
【図１１】
2020514899.tif 000013
【図１２】
2020514899.tif 000014
【図１３】
2020514899.tif 000015
【図１４】
2020514899.tif 000016
【図１５】
2020514899.tif 000017
【図１６】
2020514899.tif 000018
【図１７】
2020514899.tif 000019
【図１８】
2020514899.tif 000020
【図１９】
2020514899.tif 000021
【図２０】
2020514899.tif 000022
【手続補正書】
【提出日】令和1年11月12日(2019.11.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データのセットに対するデータベース・クエリを処理する方法であって、
整数空間からの一意の識別子をデータ内の各エンティティに割り当て、各々が前記データ内の対応するエンティティに関係するエンティティの１つ又は複数のセットを作成することと、
エンティティの各セットについてディスク上に表現を生成することであって、各表現は、対応するセット内のエンティティの前記一意の識別子の範囲を含みかつそれに適しており、その対応するセット内のエンティティの存在を示す、生成することと、
前記クエリを満足するデータを取り出すために、エンティティの各セットについての前記表現に基づいてクエリを処理することであって、前記表現は、クエリ時における削除されたエンティティ及び重複するエンティティの遅延した併合及び自動フィルタリングを伴う追記のみの動作である関連付け及び解除動作を定数時間で提供する、処理することと、
を含む方法。
【請求項２】
エンティティの少なくとも１つのセットは、特定のエンティティと関連付けられたエンティティを含む、請求項１に記載の方法。
【請求項３】
エンティティの少なくとも１つのセットは、特定のエンティティと解除されたエンティティを含む、請求項１に記載の方法。
【請求項４】
エンティティは、人、文書、イベント及びオブジェクトの群からの１つ又は複数のインスタンスを表す、請求項１に記載の方法。
【請求項５】
前記エンティティのセットの各々は、エンティティ識別子の複数のセグメントにパーティション化され、エンティティのセットのセグメントのエンティティ識別子についてのメタデータは、ペイロードとして前記セグメントにインラインで格納される、請求項１に記載の方法。
【請求項６】
エンティティ識別子により表されるエンティティのセットを複数のセグメントにパーティション化することであって、各セグメントについてのコンテンツ及び各セグメントについてのメタデータは、別個のデータ・オブジェクト内に格納され、各セグメントは、関連付けを示すためのｉｎｓｅｒｔ（挿入）タイプ及び解除を示すためのｄｅｌｅｔｅ（削除）タイプのうちの一方であり、セグメント・サイズは、要求サイズ、圧縮タイプ、及び実行時最適化に基づき、前記複数のセグメントは、時間順に順序付けられ、セグメントを併合、挿入及び削除することにより、前記エンティティのセットのコンテンツを生成するために用いられる、パーティション化することと、
前記複数のセグメントに対する動作を同時に実行することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記クエリを処理することは、
前記複数のセグメントに対する前記クエリを評価し、前記評価したセグメントの各々からの結果を結合することをさらに含む、請求項６に記載の方法。
【請求項８】
エンティティのセットは、前記エンティティのセットの物理的表現で保存される重複するエンティティ識別子を有する非一意のエンティティを含むマルチセットを含み、前記クエリは、前記セット又はマルチセットの表現を要求する、請求項１に記載の方法。
【請求項９】
請求項１〜８の何れか１項に記載の方法の各ステップを、コンピュータ・ハードウェアによる手段として構成した、システム。
【請求項１０】
請求項１〜８の何れか１項に記載の方法の各ステップを、コンピュータに実行させる、コンピュータ・プログラム。
【請求項１１】
請求項１０に記載の前記コンピュータ・プログラムを、コンピュータ可読ストレージ媒体に記録した、コンピュータ可読ストレージ媒体。
【国際調査報告】
2020514899.tif 000023
2020514899.tif 000024