本開示の全体にわたって、同様の参照番号は、同様の要素を識別するために使用されている。
関連付け及び解除データセットを含むデータのセットに対するデータベース・クエリを処理するための技術が、本明細書で提示される。一般に、本明細書で与えられる技術は、一意の整数を有するデータセットの各エンティティを割り当て、表現する。本明細書に与えられる技術によると、各エンティティが一連の関連付けセットに割り当てられ、そこで、各関連付けセットは、関連付けセットに属する可能性があるエンティティ識別子の範囲をカバーする整数空間にわたってビットマップとして表される。関連付けセットを一連のブロック又はセグメントにパーティション化するために、各関連セットに対して、ブロック構造が用いられ、そこで、各セグメントは、セグメントのエンティティの識別子が、整数空間においてどのように分散されるかに基づいて格納される。大きい数の関連エンティティを有するセグメント(すなわち、高密度セグメント)は、物理的ビットマップを用いて格納することができるが、小さい数の関連エンティティを有するセグメント(すなわち、より低密度でより少ない識別子を有するセグメント)は、他の方法で格納され得る(例えば、実際のエンティティ識別子を格納する等)。
これらの技術は、システムのデータセットの関連付けセットのエンティティをナビゲートし、取り出すよりも効率的で時間のかからない方法をもたらす。さらに、本明細書で与えられる技術は、スケーラブルな大量の関連付けセットのストレージを作成する。本明細書で与えられる技術は、従来のリンクテーブル・データベース・ストレージのものと比べて、関連付けセットを格納して取り出す、より安価な方法を提供する。さらに、本明細書で与えられる技術は、関連付けセットの迅速な取り出しを可能にする。最後に、本明細書で与えられる技術は、関連付けセット全体をロックする必要なしに、セグメントの動作(例えば、作成、削除、移動、併合、照会等)を同時に行うことを可能にし、そのことは、ストレージ・システムの処理能力、性能及び機能全体を改善する。
本発明の実施形態と共に使用される例示的なコンピューティング環境が、図1に示される。具体的には、コンピューティング環境は、1つ又は複数のサーバ・システム10、及び1つ又は複数のクライアント・システム20を含む。サーバ・システム10及びクライアント・システム20は、互いに遠隔にあり、ネットワーク30を介して通信することができる。ネットワークは、任意の数のいずれかの適切な通信媒体(例えば、広域ネットワーク(WAN)、ローカル・エリア・ネットワーク(LAN)、インターネット、イントラネット等)により実装することができる。代替的に、サーバ・システム10及びクライアント・システム20は、互いにローカルにあり、いずれかの適切なローカル通信媒体(例えば、ローカル・エリア・ネットワーク(LAN)、配線接続、無線リンク、イントラネット等)を介して通信することができる。
サーバ・システム10は、ディスプレイ若しくはモニタ、ベース(例えば、少なくとも1つのCPU若しくはプロセッサ12)、1つ又は複数のメモリ16、及び/又は内部若しくは外部ネットワーク・インターフェース、又は通信デバイス14(例えば、モデム、ネットワーク・カード等))、随意的な入力デバイス(例えば、キーボード、マウス、若しくは他の入力デバイス)、及び任意の市販のカスタム・ソフトウェア(例えば、サーバ/通信ソフトウェア、データベース管理モジュール18等)を備えることが好ましい、いずれかの従来の又は他のコンピュータ・システムにより実装することができる。
クライアント・システム20は、少なくとも1つのCPU又はプロセッサ12、1つ又は複数のメモリ16、内部若しくは外部ネットワーク・インターフェース又は通信デバイス14(例えば、送受信機、ネットワーク・カード等)、及び/又は随意的な入力若しくは出力デバイス(例えば、キーボード、マウス、若しくは他の入力デバイス、ディスプレイ等)を装備できることが好ましい。クライアント・システム20は、特定のデバイスがデバイス動作を実行するための、いずれかの市販の又はカスタム・ソフトウェア、及び/又はハードウェア・モジュール(例えば、アプリケーション、ブラウザ、通信ソフトウェア、データベース・クエリ・モジュール22等)をさらに含むことができる。クライアント・システム20は、データのセットに対するデータベース・クエリを処理するために、サーバ・システム10と通信することができる。
データベース・クエリ・モジュール22は、クライアント・システム20のユーザが、データベース17上にサーバ・システム10により格納されるデータのセットに対する要求又はクエリをサーバ・システム10にサブミットすることを可能にする。サーバ・システム10は、システムのデータセットについての関連付けセットのデータベース17を構築し、管理するためのデータベース管理モジュール18を含む。1つ又は複数のデータベース17は、種々のタイプの情報(例えば、関連付けセット、データセットの各エンティティについてのエンティティ識別又は識別子、関連付けセットのメタデータ等)を格納することができる。データベース17は、任意の従来のストレージ・ユニットにより実装することができ、サーバ・システム10及びクライアント・システム20のローカルにあっても、又はこれらから遠隔にあってもよく、任意の適切な通信媒体(例えば、ローカル・エリア・ネットワーク(LAN)、広域ネットワーク(WAN)、インターネット、配線接続、無線リンク、イントラネット等)を介して通信することができる。クライアント・システム20は、データベース・クエリをサーバ・システム10に送るために、グラフィカル・ユーザ・インターフェース(例えば、GUI等)又は他のタイプのインターフェース(例えば、コマンドライン・プロンプト、メニュー画面等)を提示することができ、関連付けセットのエンティティを含む種々のタイプの情報を提供することができる。
データベース管理モジュール18は、関連付けセット(例えば、システムのエンティティの関連付け及び解除の両方)をモデル化し、追跡するように構成される。データベース管理モジュール18は、システムの各エンティティを一意の整数に割り当てることができ、ここで、一意の整数は、識別キー、識別子、又はアイデンティティとして働く。任意のサイズの整数をデータベース管理モジュール18により用いることができる。しかしながら、本発明の1つの例示的な実施形態において、一意の64ビット整数をシステムのデータセットの各エンティティに割り当てることができる。データセットのエンティティとして、これらに限定されるものではないが、文書、人、システムのオブジェクト、及びシステムの事項を含むことができる。例えば、文書は、これらに限定されるものではないが、システムの電子メール、報告書、通知書、メモ等を含む。システムの人は、これらに限定されるものではないが、従業員、契約者、及びシステムを所有し動作させる会社のマネージャを含む。システムの事項は、これらに限定されるものではないが、システムを所有し動作させる会社の法的事項、監査、及び組織ユニットを含む。
ひとたびデータベース管理モジュール18が、識別子を有するシステムの各エンティティを割り当てると、データベース管理モジュール18は、同じタイプの関係又は関連付けを互いに共有するエンティティのグループである関連付けセットを構築する。例えば、従業員は、電子メールを受送信することができ、電子メールは、従業員と文書との間の関連付けとしてモデル化することができる。この例によると、特定の従業員と関連した文書の全てを互いにグループ化し、1つの関連付けセットとして機能させることができる。さらに、電子メールの送信者及び受信者も互いにグループ化し、別の関連付けセットとして機能させることができる。データベース管理モジュール18は、関連付けセットに属する可能性があるエンティティ識別子の範囲をカバーする整数空間にわたりビットマップとして各関連付けセットを表すことができる。例えば、システムを所有し、動作させる組織の法的事項と関連したシステムの人のセットは、法的事項識別子と人のビットマップとの間の関係として表すことができ、ここで、ビットは、法的事項と関連した各々の人について設定される。本発明の1つの実施形態において、以下にさらに示され、説明されるように、関連付けセットは、ブロック構造によりパーティション化することができ、ここで、関連付けセットは、複数のブロック又はセグメントにパーティション化又は分割される。このことは、サーバ・システム10がクライアント・システム20からデータベース・クエリを受け取るとき、サーバ・システム10のデータベース管理モジュール18により設定される各関連付けセットに対してより迅速なアクセス及びスケーラビリティ(scalability)を与える。
モジュール18、22は、以下に説明される本発明の実施形態の種々の機能を実施するための、1つ又は複数のモジュール又はユニットを含むことができる。種々のモジュール(例えば、データベース管理モジュール18、データベース・クエリ・モジュール22等)は、いずれかの量のソフトウェア及び/又はハードウェア・モジュール又はユニットのいずれかの組み合わせにより、実装することができ、プロセッサ12による実行のために、サーバ・システム10及び/又はクライアント・システム20のメモリ16内に常駐することができる。
ここで図2を参照すると、データベース17内に格納される関連付けセット100の1つの例の概略図が示される。示されるように、各関連付けセット100は、テーブルのセットを含む。示される関連付けセット100の表現は、3つのセグメント110、120、130を含む。図2に示される例示的な実施形態は、3つのセグメントを有するように示されるが、任意の数のセグメントを有するように、関連付けセット100の他の実施形態を格納することもできる。セグメント110、120、130の各々は、それぞれ、5つのエンティティ112(1)~112(5)、122(1)~122(5)、132(1)~132(5)を含む。示されるように、セグメント110は、識別子1が割り当てられた第1のエンティティ112(1)、識別子4が割り当てられた第2のエンティティ112(2)、識別子6が割り当てられた第3のエンティティ112(3)、識別子7が割り当てられた第4のエンティティ112(4)、及び識別子10が割り当てられた第5のエンティティ112(5)を含む。セグメント120は、識別子13が割り当てられた第1のエンティティ122(1)、識別子24が割り当てられた第2のエンティティ122(2)、識別子26が割り当てられた第3のエンティティ122(3)、識別子29が割り当てられた第4のエンティティ122(4)、及び識別子40が割り当てられた第5のエンティティ122(5)を含む。最後に、セグメント130は、識別子47が割り当てられた第1のエンティティ132(1)、識別子62が割り当てられた第2のエンティティ132(2)、識別子71が割り当てられた第3のエンティティ132(3)、識別子80が割り当てられた第4のエンティティ132(4)、及び識別子92が割り当てられた第5のエンティティ132(5)を含む。関連付けセット100の各セグメント110、120、130は、5つのエンティティを含むが、他の関連付けセットの他の実施形態は、5つより多い又は少ないエンティティを含むセグメントを含むことができる。
図2の関連付けセット100の例示的な実施形態は、関連付けセット100がセグメント・ヘッダ・テーブル140及びセグメント・データ・テーブル150を含むことを示す。セグメント・データ・テーブル150は、各セグメント110、120、130のコンテンツ(すなわち、各セグメントのエンティティ)を格納する。セグメント・ヘッダ・テーブル140は、セグメント110、120、130についてのメタデータを格納する。幾つかの実施形態において、セグメント・ヘッダ・テーブル140は、各セグメント110、120、130について、エンティティの開始ID、エンティティの終了ID、圧縮タイプ、濃度(cardinality)、及びセグメントの状態を含む。セグメント・ヘッダ・テーブル140において、各セグメント110、120、130は、それぞれ、異なる行114、124、134として表される。さらに、セグメント・ヘッダ・テーブル140の行114、124、134は、セグメント・データ・テーブル150のそれぞれの行116、126、136と位置合わせすることができる。セグメント・データ・テーブル150の第1の行116は、第1のセグメント110のエンティティ112(1)~112(5)の識別子を格納する。セグメント・データ・テーブル150の第2の行126は、第2のセグメント120のエンティティ122(1)~122(5)の識別子を格納し、セグメント・データ・テーブル150の第3の行136は、エンティティ132(1)~132(5)の識別子を格納する。
他の実施形態において、関連付けセット100は、参加エンティティ112(1)~112(5)、122(1)~122(5)、132(1)~132(5)の識別子に加えて、他のメタデータを含むことができ、ここで、この付加的なメタデータを格納する必要性がある。例えば、メタデータのサイズが小さい場合(すなわち、関連付けセット100に対するエンティティの関連付けの日付、エンティティが互いに関連付けられる時間)、メタデータは、ペイロードを用いて、メタデータを関連付けセットと共にインラインで格納することができる。インライン・メタデータは、ディスク上のどこかからそれらを取り出す(例えば、入力/出力)付加的なオーバーヘッドを回避するために、データと同一場所に配置される。例えば、文書がアプリケーション内のフォルダと関連付けられ、各文書がいつフォルダに関連付けられたかを記録したいとアプリケーションが望むとき、各文書がフォルダに関連付けられた日付及び/又は時間を、関連付けセット100内のペイロードに格納することができる。これにより、付加的なディスク・シークを必要としないので、関連付けの日付に対するクエリを迅速に評価することが可能になる。
反対に、付加的なメタデータが大きいとき、付加的なメタデータを、関連付けセット100の平行セグメント内にまとめて格納することができる。大きいメタデータの例は、アプリケーションが法的事項に関与し、管理者(custodian)により、法的事項と管理者との間の各関連付けと共に、コメント又は説明を格納することが可能になる場合を含む。この例において、大きいテキスト・フィールドをペイロードとして格納することは、関連付けセットをあまりにも面倒で費用のかかるものにする。従って、付加的な大きいメタデータは、別個の平行セグメントとして格納することができる。
さらに、関連付けセット100が比較的小さい場合、関連付けセット100は、関連付けられたエンティティを格納するために、別個のテーブルを必要としないことがある。従って、エンティティ及びあらゆる小さいメタデータを含むその全体の関連付けセットの両方を、単一のテーブル内に格納することができる。小量の関連付けセット100の例は、これらの関連付けセット100が一般に小さく不変であるので、各電子メールと関連付けられた送信者及び受信者とすることができる。
付加的なタイプの関連付けセット100は、同じエンティティ識別子の複数のインスタンスを単一の関連付けセット100内に格納する必要性が存在するときに生じ得る。一般的に、関連付けセット100は、別個のエンティティ112(1)~112(5)、122(1)~122(5)、132(1)~132(5)のセットを含む(すなわち、いずれのエンティティも、複数回生じない)。エンティティが関係に複数回参加し、その参加の濃度が重要なものであり、キャプチャする必要があるとき、同じエンティティ識別子の複数のインスタンスを関連付けセット100内に格納することができる。例えば、関連付けセットの1つ又は複数の文書上にホールド(hold)を配置することができ、そこで、文書は、少なくとも1つのホールド要求がそれにある場合、削除することができない。ホールド上の文書のセットを表す関連付けセット100は、それが1つより多いホールド要求内に含まれる場合、単一の文書の複数のインスタンス(すなわち、エンティティの識別子の複数のインスタンス)を有することができる。別の実施形態において、関連付けセット100内の単一の識別子の複数の発生を格納する代わりに、参照カウントを、複数のインスタンスの格納を要求する各識別子と関連付けることができる。ホールド上に配置された文書についての関連付けセット100の例において、要求され、識別子が割り当てられた特定の文書上に配置された各ホールドについて、そのホールドの関連付けセット内の識別子についての参照カウントをインクリメントすることができる。さらに、ホールドが解放された場合、参照カウントをデクリメントすることができる。参照カウントがゼロの値に達したときのみ、エンティティ識別子を除去することができる。
ここで図3及び図4を参照すると、手順フローチャート200、300が、関連付けセット100を構築又は管理するための動作(例えば、データベース管理モジュール18)を示す。関連付けセット100の各セグメント110、120、130は、関連付けセット100と関連付けられた又は解除された一連のエンティティを表すことができる。関連付けセグメントは、エンティティと関連付けられた(例えば、関連付けセットに付加された)エンティティ識別子のリストとして機能するが、解除セットは、エンティティと解除されたエンティティ識別子(すなわち、エンティティといったん関連付けられたが、次に解除されるようになったエンティティ識別子;関連付けセットから除去されるエンティティ識別子)をキャプチャする。例えば、エンティティがシステムから削除される場合、その関連の全てを同様に削除することができる(すなわち、それぞれのエンティティを関連付けセットから解除しなければならない)。関連付けセグメントは、関連付け「INSERT(挿入)」又は「NEW(新しい)」と表記できるが、解除セグメントは、解除又は「DELETE(削除)」と表記できる。従って、関連付けセット100内のいずれのセグメントも除去する必要はなく、関連付けセット100の各セグメント110、120、130は、セグメント110、120、130がどのように表記されたかに基づいて、関連付けセット100から付加又は削除されたエンティティについてのリスト又は台帳として機能する。1つの例示的な実施形態において、解除セグメントは、ビットマスク又はブルームフィルタを用いて表すことができる。別の例示的な実施形態において、以下にさらに詳細に説明するように、解除セグメントは、優先度キューを用いて実装することができ、そこで、関連付けセット100のセグメント110、120、130の優先度は、逆時間順(reverse chronology)に決定される(すなわち、関連付けセグメントであっても又は解除セグメントであってもより最近のセグメントは、セグメントの優先度がより高い)。
さらに、関連付けセット100のセグメント110、120、130は、特定量のエンティティに固定することができる。図1に示される関連付けセット100の例示的な実施形態の場合、セグメント110、120、130は、5つのエンティティに限定される。しかしながら、他の関連付けセット100は、任意の数のセット・エンティティを含むセグメントを含むことができる。さらに、セグメント110、120、130に、状態を割り当てることができる。セグメント110、120、130の状態は、これらに限定されるものではないが、「NEW(新しい)」、「DELETE(削除)」、「MERGED(併合)」、「IN PROGRESS(進行中)」及び「LOCK(ロック)」を含む。これらの状態は、以下に詳細に説明される。
図3に示されるように、ステップ210において、データベース管理モジュール18は、最初に、関連付けセットと関連付けられるエンティティのエンティティ識別子を収集し、入力する。ステップ220において、データベース管理モジュール18は、関連付けセット100についての新しいセグメントを作成し、最大量のエンティティ識別子がセグメントに付加されるまで、エンティティ識別子を新しいセグメントに付加する。さらに、データベース管理モジュール18は、エンティティ識別子をセグメントに付加する前に、関連付けセットに付加されるエンティティ識別子をソートする(すなわち、時間順に)ことができる。さらに、エンティティ識別子を付加する新しいセグメントの各々には、「NEW」状態が割り当てられる。最大量のエンティティ識別子がセグメントに付加された後、ステップ230において、データベース管理モジュール18は、ステップ210で受け取ったエンティティ識別子の全てが関連付けセットと関連付けられたかどうかを判断する。ステップ230において、データベース管理モジュール18は、ステップ210で受け取ったエンティティ識別子の全ては関連付けセットと関連付けられていないと判断した場合、データベース管理モジュール18はステップ220に戻って付加的なセグメントを作成し、残りのエンティティ識別子をセグメントに付加する。しかしながら、ステップ230において、データベース管理モジュール18が、ステップ210で受け取ったエンティティ識別子の全てが関連付けセットと関連付けられていると判断した場合、データベース管理モジュール18は、ステップ240において、エンティティ識別子を関連付けセグメントに付加し、関連付けセットへの関連付けセグメントの付加を停止する。
図4に示されるように、ステップ310において、データベース管理モジュール18は、最初に、関連付けセットと解除するエンティティのエンティティ識別子を収集し、入力する。ステップ320において、データベース管理モジュール18は、関連付けセットの新しいセグメントを作成し、最大量のエンティティ識別子がセグメントに付加されるまで、エンティティ識別子を新しいセグメントに付加する。さらに、データベース管理モジュール18は、エンティティ識別子をセグメントに付加する前に、関連付けセットに付加されるエンティティ識別子をソートする(すなわち、番号順に)ことができる。さらに、エンティティ識別子を付加する各々の新しいセグメントには、「DELETE」状態が割り当てられる。最大量のエンティティ識別子がセグメントに付加された後、ステップ330において、データベース管理モジュール18は、ステップ310で受け取ったエンティティ識別子の全てが関連付けセットと解除されたかどうかを判断する。ステップ330において、データベース管理モジュール18は、ステップ310で受け取ったエンティティ識別子の全てが関連付けセットと解除していないと判断した場合、データベース管理モジュール18は、ステップ320に戻って、新しいセグメントを作成し、残りのエンティティ識別子をセグメントに付加する。しかしながら、ステップ330において、データベース管理モジュール18が、ステップ310において受け取ったエンティティ識別子の全てが関連付けセットと解除されていると判断した場合、データベース管理モジュール18は、ステップ340において、エンティティ識別子を解除セグメントに付加し、関連付けセットへの解除セグメントの付加を停止する。
幾つかの例示的な実施形態において、システムから削除されたエンティティは、多数の関連付けの一部であった可能性があり、それにより、従来の関連付けセット構造における削除が非常に高価な動作になる(すなわち、一括削除(bulk deletion))。本発明の実施形態は、各関連付けセットから各々の削除済みエンティティ識別子を個々に要求するのではなく、削除済みエンティティ識別子をグローバル削除セットなどの単一のセットに付加することを可能にする。関連付けに照会を行うたびに又は関連付けを他の方法で取り出すたびに、結果又は出力がグローバル削除セットのエンティティにより事後フィルタリングされる(post-filtered)ので、それらは、クエリ結果から適切に除外される。これは、従来の手法よりもずっと効率的に解除のスケール変更を可能にする。
関連付けセグメント又は解除セグメントに付加されたエンティティ識別子は、時間順である必要はないが(しかし、エンティティ識別子は、関連付け又は解除セグメント内で番号順でなければならない)、関連付け又は解除セグメントは、関連付けセット100内で時間順に順序付けられる。バックグラウンド併合器スレッド(background merger thread)と呼ばれるバックグラウンド・プロセスを用いて、データベース管理モジュール18により、定期的解除セグメントを関連付けセット100に非同期的に適用することができる。バックグラウンド併合器スレッドは、ストレージ及びクエリ性能を最適化するように、関連付けセット100のセグメント110、120、130を位置合わせする。バックグラウンド併合器スレッドは、セグメント110、120、130を併合して、コストを償却し、システム性能を改善しながら、データベース管理モジュール18が、複数のタスク(すなわち、計算及びセグメント・サイズのキャッシング)を実行することを可能にする。
図5は、関連付けセットの複数のセグメントのバックグラウンド併合器プロセス400を実行するために、データベース管理モジュール18により行われるステップの手順フローチャートを示す。バックグラウンド併合器プロセス400は、「NEW」、「DELETE」及び「MERGED」の状態を有すると表記された関連付けセットのセグメントを併合する。バックグラウンド併合器プロセス400を実行するとき、以下に説明されるように、セグメントは、「IN PROGRESS」の状態を有すると表記される。バックグラウンド併合器プロセス400は、重複するエンティティ識別子を除去し、既述のように、グローバル削除セットを併合されるセグメントに適用することにより、関連付けセットのセグメントを最適化する。バックグラウンド併合器プロセス400は、ロックフリー(lock free)であり、これは、データベース管理モジュール18が関連付けセットのセグメントの全て又は一部でバックグラウンド併合器プロセス400を実行する間、依然として関連付けセットに照会を行い得ることを意味する。
図5に示されるように、ステップ405において、データベース管理モジュール18は、最初に、データベース17内に格納される関連付けセットの全てを取り出す。ステップ410において、データベース管理モジュール18は、ステップ405で受け取った関連付けセットのリスト内の次の関連付けセットを読み取る又は分析する。関連付けセットのリストを最初に読み取るとき、次の関連付けセットは、ステップ405で取り出した第1の関連付けセットである。ステップ415において、データベース管理モジュール18は、ステップ410で読み取られた関連付けセットが併合を必要とするかどうかを判断する。関連付けセットが、「NEW」又は「DELETE」の状態を有すると表記されたいずれかのセグメントを含む場合、関連付けセットは、併合を必要とし得る。
ステップ415において、データベース管理モジュール18は、関連付けセットを併合する必要があると判断する場合、ステップ420において、データベース管理モジュール18は、「NEW」、「DELETE」及び「MERGED」の状態を有すると表記された関連付けセット内のセグメントの全てを取り出す。次に、ステップ425において、データベース管理モジュール18は、関連付けセットについての新しいセグメントを作成し、新しいセグメントは、「IN PROGRESS」の状態を有すると表記される。ステップ430において、データベース管理モジュール18は、ステップ420で取り出されたセグメントからのエンティティ識別子を、ステップ425で作成された新しいIN PROGRESSセグメントに付加する。後の時点で解除セグメントが関連付けセットに付加された場合、関連付けセグメント及び解除セグメントの両方の一部であったいずれのエンティティ識別子も、IN PROGRESSセグメントに付加されない。エンティティ識別子は、IN PROGRESSセグメントがエンティティ識別子の最大数に達するまで、ステップ430においてIN PROGRESSセグメントに付加される。ステップ435において、データベース管理モジュール18が、ステップ420の併合されるセグメントから依然として残っているかどうかを判断する。ステップ435において、データベース管理モジュール18が、併合する必要があるエンティティ識別子が依然として存在すると判断した場合、データベース管理モジュール18は、ステップ425に戻って新しいIN PROGRESSセグメントを作成し、これに残りのエンティティ識別子を付加する。
しかしながら、ステップ435において、データベース管理モジュール18が、エンティティ識別子の全てが併合されたと判断した場合、次に、ステップ440において、データベース管理モジュール18は、IN PROGRESSセグメントの全ての状態を「IN PROGRESS」から「MERGED」に変更する。次に、ステップ440において、データベース管理モジュール18は、関連付けセットから、「NEW」、「DELETE」及び「MERGED」の状態を有すると以前に表記されたセグメントの全てを削除又は除去する。
次に、ステップ450において、データベース管理モジュール18が、それ以上の関連付けセットが併合されるかどうかを判断する。ステップ450において、データベース管理モジュール18が、さらなる関連付けセットを併合する必要があると判断した場合、データベース管理モジュール18は、ステップ410に戻って、取り出した関連付けセットのリスト内の次の関連付けセットを読み取る。しかしながら、ステップ450において、データベース管理モジュール18が、それ以上の関連付けセットを併合する必要はないと判断した場合、データベース管理モジュール18は、バックグラウンド併合器プロセス400を終了する。
ここで図6及び図7を参照すると、関連付けセットについてデータベースに照会を行うための、データベース管理モジュール18により行われるステップ500の手順フローチャートが示される。以前に説明され、示されるように、関連付けセット100の各セグメント110、120、130は、エンティティのエンティティ識別子として働く整数のソートされたリストである。幾つかの実施形態において、クライアント・システム20は、データベース・クエリ・モジュール22を通じて、関連付けセットについてのクエリをサーバ・システム10に送る。他の実施形態において、サーバ・システム10は、クライアント・システム20からクエリ要求を受け取ることなく、データベース17に照会を行うことができる。これらの実施形態のいずれにおいても、サーバ・システム10は、データベース管理モジュール18を介して、データベース17に照会を行う。
図6に示されるように、ステップ510において、データベース管理モジュール18は、最初に、データベース17から取り出される関連付けセットの識別子又は識別を入力する、又はクライアント・システム20から受け取る。ステップ520において、データベース管理モジュール18は、ステップ510で識別された関連付けセット内の次のエンティティ識別子を取り出す。データベース管理モジュール18が、最初に、関連付けセットのエンティティ識別子を取り出そうと試みるとき、受け取るエンティティ識別子は、関連付けセットの第1のエンティティ識別子である。しかしながら、データベース管理モジュール18により関連付けセットからエンティティ識別子を取り出そうとする後の試行は、次のエンティティ識別子を返す。ステップ530において、データベース管理モジュール18は、ステップ510において識別され、取り出された関連付けセットから、それ以上のエンティティ識別子を取り出す必要があるかどうかを判断する。データベース管理モジュール18が、より多くのエンティティ識別子を取り出す必要があると判断した場合、データベース管理モジュール18は、ステップ520に戻り、関連付けセットから次のエンティティ識別子を取り出す。しかしながら、ステップ530において、データベース管理モジュール18が、エンティティ識別子の全てが関連付けセットから取り出されたと判断する場合、次に、データベース管理モジュール18によりクエリ・ステップ500が終了する。クライアント・システム20がクエリを受け取った場合、データベース管理モジュール18は、取り出したエンティティ識別子を、クエリを発したクライアント・システムに送ることができる。
図7は、図6に示されるクエリ・プロセス500のステップ520のより詳細な手順フローチャートを示す。より具体的には、図7は、関連付けセットから次のエンティティ識別子を取り出すための手順フローチャートを示す。ステップ550において、データベース管理モジュール18は、関連付けセットのセグメント(すなわち、「NEW」、「DELETE」及び「MERGED」の状態を有すると表記されたセグメント)の全てを逆時間順に配列する。従って、既述のように、関連付けセットのセグメントは、関連付けセットに付加された最新のセグメントから、関連付けセットに付加された最も古いセグメントの順に配置される。ステップ555において、データベース管理モジュール18は、関連付けセットの各セグメントの第1のエンティティ識別子を用いて、優先度キューを実施する。より具体的には、データベース管理モジュール18は、各セグメントの第1エンティティ識別子のヒープ(heap)を構築し、ここで、時間順が優先度である。次に、ステップ560において、データベース管理モジュール18は、そのセグメントから、ヒープの先頭に配置されたエンティティ識別子を除去する。このヒープの先頭の除去されたエンティティ識別子が、「先頭の」エンティティ識別子である。ステップ565において、データベース管理モジュール18は、セグメントに対してヒープ化(heapify)プロセスを実行し、ここで、データベース管理モジュール18は、先頭のエンティティ識別子がヒープ及びその関連したセグメントから除去された後、各セグメントの第1のエンティティ識別子を用いて、ヒープを再構成する。
ステップ570において、データベース管理モジュール18は、除去された「先頭の」エンティティ識別子が、解除セグメント(すなわち、「DELETE」の状態を有すると表記されたセグメント)からのものであるかどうかを判断する。ステップ570において、データベース管理モジュール18が、「先頭の」エンティティ識別子は、削除された又は解除セグメントからのものであると判断した場合、次に、ステップ575において、データベース管理モジュール18は、そのセグメントから、ヒープ内の「次の」エンティティ識別子を除去する。この「次の」エンティティ識別子は、「先頭の」エンティティ識別子と同じセグメントからのものであることもあり、又は関連付けセットのいずれか他のセグメントからのものであることもある。ひとたび「次の」エンティティ識別子がそのセグメントから除去されると、ステップ580において、データベース管理モジュール18は、関連付けセットのセグメントに対して別のヒープ化プロセスを実行する。従って、データベース管理モジュール18は、各セグメントの第1のエンティティ識別子を用いてヒープを再構成する。ステップ585において、データベース管理モジュール18は、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しくないことを検証する。ステップ585において、データベース管理モジュール18が、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しいと判断した場合、データベース管理モジュール18は、ステップ575に戻って、ヒープから次のエンティティ識別子を除去する。これは、「先頭の」エンティティ識別子が「次の」エンティティ識別子と等しく、かつ、「先頭の」エンティティ識別子が、「次の」エンティティ識別子が付加されたセグメントよりも最近関連付けセット100に付加された解除セグメントからのものであり、その次のエンティティ識別子が表すエンティティが関連付けセットから解除されているために、発生する。従って、次のエンティティ識別子を関連付けセットから出力すべきではない。
しかしながら、データベース管理モジュール18が、ステップ585において、「次の」エンティティ識別子が「先頭の」エンティティ識別子と等しくないと判断した場合、データベース管理モジュール18は、ステップ590において、「次の」エンティティ識別子を「先頭の」エンティティ識別子として設定する。次に、データベース管理モジュール18は、ステップ570に戻って、新しい「先頭の」エンティティ識別子が解除セグメント(すなわち、「DELETE」の状態を有すると表記されたセグメント)からのものであるかどうかを判断する。
ステップ570において、データベース管理モジュール18が、「先頭の」エンティティ識別子が削除されたセグメントからのものではないと判断した場合、次に、ステップ595において、データベース管理モジュール18は、「先頭の」エンティティ識別子の値を出力する。
図を参照すると、図8~図20は、図6及び図7の手順フローチャートにより示されるような関連付けセット100についてデータベース17に照会を行うプロセスの例示的な実施形態である。例示的な実施形態において、関連付けセット600は、6つのセグメント610、620、630、640、650、660を含む。第1のセグメント610は、セグメント・ヘッダ情報612及びセグメント・データ情報614を含む。セグメント・ヘッダ情報612及びセグメント・データ情報614により与えられるように、第1のセグメント610は、関連付けセット600と関連付けられた、2、4、10、23及び30のエンティティ識別子を含む。第2のセグメント620は、セグメント・ヘッダ情報622及びセグメント・データ情報624を含む。セグメント・ヘッダ情報622及びセグメント・データ情報624により与えられるように、第2のセグメント620は、関連付けセット600と関連付けられた、1、34、及び50のエンティティ識別子を含む。第3のセグメント630は、セグメント・ヘッダ情報632及びセグメント・データ情報634を含む。セグメント・ヘッダ情報632及びセグメント・データ情報634により与えられるように、第3のセグメント630は、関連付けセット600と関連付けられた、4、11、34及び56のエンティティ識別子を含む。第4のセグメント640は、セグメント・ヘッダ情報642及びセグメント・データ情報644を含む。セグメント・ヘッダ情報642及びセグメント・データ情報644により与えられるように、第4のセグメント640は、関連付けセット600と関連付けられた、2、11及び35のエンティティ識別子を含む。第5のセグメント650は、セグメント・ヘッダ情報652及びセグメント・データ情報654を含む。しかしながら、第5のセグメント650は、いずれのエンティティ識別子も含まず、セグメント・ヘッダ情報652が、含まれるエンティティ識別子をキャプチャするので、関連付けセット600からエンティティ識別子10及び11を解除する。最後に、第6のセグメント660は、セグメント・ヘッダ情報662及びセグメント・データ情報664を含む。しかしながら、第6のセグメント660は、いずれのエンティティ識別子も含まず、セグメント・ヘッダ情報662が、含まれるエンティティ識別子をキャプチャするので、エンティティ識別子10を関連付けセット600と関連付ける。
図8~図20にさらに示されるように、第6のセグメント660は、一番最近(most recently)関連付けセット600に付加されたセグメントであり、一方、第1のセグメント610は、関連付けセット600に付加された第1のセグメントであった。さらに、各セグメント610、620、630、640、650、660は、それぞれ、先頭のエンティティ識別子618、628、638、648、658、668も含む。関連付けセット600の各セグメント610、620、630、640、650、660の先頭のエンティティ識別子618、628、638、648、658、668は、それぞれのセグメント610、620、630、640、650、660の第1のエンティティ識別子であり、ここで、エンティティ識別子の時間順は優先度である。言い換えれば、関連付けセット600の各セグメント610、620、630、640、650、660の先頭のエンティティ識別子618、628、638、648、658、668は、各セグメント610、620、630、640、650、660のエンティティ識別子の最小値である。
図9に示されるように、データベース管理モジュール18が、関連付けセット600に対して、図7に示されるようなステップ560、565、570及び595を実行すると、第2のセグメント620のエンティティ識別子「1」が、関連付けセット600の第1のエンティティ識別子として出力される670。「1」のエンティティ識別子は、セグメント610、620、630、640、650の各々の最小のエンティティ識別子であるので、「1」のエンティティ識別子は、ヒープの「先頭の」エンティティ識別子(すなわち、各セグメント610、620、630、640、650、660についての618、628、638、648、658、668の各々の先頭のエンティティ識別子の群)である。さらに、データベース管理モジュール18は、エンティティ識別子「1」は、解除又はDELETEセグメント(すなわち、セグメント640、650)からのものではないと判断し、従って、「1」のエンティティ識別子を出力する。
図10に示されるように、エンティティ識別子「1」を除去され、出力された670後、ひとたびデータベース管理モジュール18がヒープ化プロセスを実行すると、それは第2のセグメント620の次の時間順のエンティティ識別子であるので、「34」のエンティティ識別子が第2のセグメント620の先頭のエンティティ識別子628として働く。
さらに、データベース管理モジュール18がヒープの先頭におけるエンティティ識別子を除去すると、1つは第4のセグメント640からのものであり、1つは第1のセグメント610のものからのである、2つの「2」のエンティティ識別子が存在する。第4のセグメント640は、第1のセグメント610よりも最近付加されたので、第4のセグメント640からの「2」のエンティティ識別子は、第1のセグメント610からの「2」のエンティティ識別子に先行する又はこれよりも優先される。データベース管理モジュール18が第4のセグメント640からの「2」のエンティティ識別子を評価するとき、データベース管理モジュール18は、第4のセグメント640からの「2」のエンティティ識別子がDELETEセグメントからのものであると判断する(すなわち、図7のステップ570)。図7に示されるプロセスの以下のステップ575、580及び585において、データベース管理モジュール18は、次のエンティティ識別子が第1のセグメント610からの「2」のエンティティ識別子であると判断する。第1のセグメント610からの「2」のエンティティ識別子は、第4のセグメント640からの「2」のエンティティ識別子と等しく、かつ、第4のセグメント640からの「2」のエンティティ識別子は図10に示されるように、第1のセグメント610よりも最近生じたDELETEセグメント640からのものなので、データベース管理モジュール18は、「2」のエンティティ識別子を出力670しないと決定する。
しかしながら、図11に示されるように、データベース管理モジュール18が第3の反復を実行し、ヒープから次のエンティティ識別子を除去すると(図7のステップ575)、データベース管理モジュール18は、第1及び第3のセグメント610、630の両方から「4」のエンティティ識別子を出力する。図11に示されるように、第3の反復において、「4」のエンティティ識別子は、第1及び第3のセグメント610、630の先頭のエンティティ識別子618、638として働く。「4」のエンティティ識別子は第1及び第3のセグメント610、630からのものであり、かつ、第1及び第3のセグメント610、630はどちらも関連付けセグメントであるので、データベース管理モジュール18は、反復3において、「4」のエンティティ識別子を出力する670。
図12を参照すると、データベース管理モジュール18が関連付けセット600に対して図7のプロセスの第4の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、第1のセグメント610からのもの、第5のセグメント650からのもの、及び第6のセグメント660からのものである、3つの「10」のエンティティ識別子が存在する。示されるように、第5のセグメント650は、DELETEセグメントであるが、第1及び第6のセグメント610、660は、関連付けセグメント(INSERTセグメント)である。第6のセグメント660は、第1のセグメント610及び第5のセグメント650より最近付加されたので、第6のセグメント660からの「10」のエンティティ識別子は、第1のセグメント610又は第5のセグメント650のいずれかからの「10」のエンティティ識別子に先行する又はこれよりも優先される。データベース管理モジュール18が第6のセグメント660からの「10」のエンティティ識別子を評価するとき、データベース管理モジュール18は、第6のセグメント660からの「10」のエンティティ識別子がDELETEセグメントからのものではないと判断する(すなわち、図7のステップ570)。第6のセグメント660はDELETEセグメントではないので、データベース管理モジュール18は、反復4において、「10」のエンティティ識別子を出力する670。
図13に示されるように、データベース管理モジュール18が、関連付けセット600に対して図7のプロセスの第5の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、1つは第3のセグメント630からのもの、1つは第4のセグメント640からのもの、及び1つは第5のセグメント650からのものである3つの「11」のエンティティ識別子が存在する。示されるように、第4及び第5のセグメント640、650は、DELETEセグメントであるが、第3のセグメント630は、関連付けセグメントである。第5のセグメント650及び第4のセグメント640の両方とも、第3のセグメント630より最近関連付けセット600に付加されたので、第5のセグメント650からの「11」のエンティティ識別子は、第4のセグメント640又は第3のセグメント630のいずれかからの「11」のエンティティ識別子に先行する又はこれより優先される。従って、データベース管理モジュール18が第5のセグメント650からの「11」のエンティティ識別子を評価するとき、データベース管理モジュール18は、第5のセグメント650からの「11」のエンティティ識別子がDELETEセグメントからのものであると判断する(すなわち、図7のステップ570)。第5のセグメント650はDELETEセグメントであるので、反復5において、データベース管理モジュール18は、図7に示されるプロセスの以下のステップ575、580及び585において、次のエンティティ識別子は、第4及び第3のセグメント640、630からの「11」のエンティティ識別子であると判断する。第3及び第4のセグメント630、640からの「11」のエンティティ識別子は、第5のセグメント650からの「11」のエンティティ識別子と等しく、かつ、図13に示されるように、第5のセグメント650からの「11」のエンティティ識別子は、第3又は第4のセグメント630、640よりも最近生じたDELETEセグメント640であるので、データベース管理モジュール18は、「11」のエンティティ識別子を出力しない670と判断する。
データベース管理モジュール18は、該データベース管理モジュール18が、次のエンティティ識別子が第5のセグメント650からの「11」のエンティティ識別子と等しくないことを見出すまで、図7に示されるプロセスのステップ575、580及び585を反復し続ける(すなわち、ヒープから次のエンティティ識別子を除去し、ヒープ化し、「次の」エンティティ識別子を「先頭の」エンティティ識別子と比較する等)。図14に示されるように、「11」のエンティティ識別子を出力すべきではないと評価した後、及び、ヒープ化(例えば、図7のステップ580)を実行した後、データベース管理モジュール18は、図7のステップ575において、ヒープ内の次のエンティティ識別子は、第1セグメント610からの「23」のエンティティ識別子であると判断する。「23」のエンティティ識別子は、第1のセグメント610においてのみ見出され、かつ、第1のセグメント610は、DELETEセグメントからのものではないので、データベース管理モジュール18は、次に「23」のエンティティ識別子を出力する670。
図15を参照すると、データベース管理モジュール18が、関連付けセット600に対して図7のプロセスの第7の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール18は、第1のセグメント610からの「30」のエンティティ識別子を出力する670。図示され、既述したように、第1のセグメント610はDELETEセグメントではなく、従って、データベース管理モジュール18が第1のセグメント610からの「30」のエンティティ識別子を評価すると、データベース管理モジュール18は、第1のセグメント610からの「30」のエンティティ識別子が、DELETEセグメントからのものではないと判断し(すなわち、図7のステップ570)、「30」のエンティティ識別子を出力する670。
同様に、図16に示されるように、データベース管理モジュール18が、関連付けセット600に対して図7のプロセスの第8の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール18は、第2及び第3のセグメント620、630の両方とも「34」のエンティティ識別子を含むことを見出す。示されるように、第3のセグメント630は、第2のセグメント620よりも最近関連付けセット600に付加され、第2のセグメント620に先行する又はこれより優先される。さらに、第2及び第3のセグメント620、630は両方とも関連付けセグメントである。従って、データベース管理モジュール18が第3のセグメント630からの「34」のエンティティ識別子を評価するとき、データベース管理モジュール18は、第3のセグメント630からの「34」のエンティティ識別子がDELETEセグメントからのものではないと判断し(すなわち、図7のステップ570)、「34」のエンティティ識別子を出力する670。
図17を参照すると、エンティティ識別子「34」が除去され、出力された後、ひとたびデータベース管理モジュール18がヒープ化プロセスを実行すると、それぞれ、第2、第3及び第4のセグメント620、630、640からの「50」、「56」及び「35」のエンティティ識別子が、ヒープ内に残されたエンティティ識別子である。第4のセグメント640からの「35」のエンティティ識別子は、ヒープの先頭にあるので、データベース管理モジュール18は、評価するヒープから、第4のセグメント640からの「35」のエンティティ識別子を除去する。データベース管理モジュール18が第4のセグメント640からの「35」のエンティティ識別子を評価すると、データベース管理モジュール18は、第4のセグメント640からの「35」のエンティティ識別子がDELETEセグメントからのものであり(すなわち、図7のステップ570)、従って、出力670できないと判断する。
図7に示されるプロセスの以下のステップ575、580及び585において、データベース管理モジュール18は、図18に示されるように、次のエンティティ識別子が、第2のセグメント620からの「50」のエンティティ識別子であると判断する。第2のセグメント620からの「50」のエンティティ識別子は、第4のセグメント640からの「35」のエンティティ識別子と等しくないので、データベース管理モジュール18は、「先頭の」エンティティ識別子を、第2のセグメント620からの「50」のエンティティ識別子に設定する。次に、図7に示されるプロセスのステップ570において、データベース管理モジュール18は、第2のセグメント620からの「50」のエンティティ識別子がDELETEセグメントからのものであるかどうかを評価する。第2のセグメント620は関連付けセグメントであり、DELETEセグメントではないので、データベース管理モジュール18は、「50」のエンティティ識別子を出力670する。
最後に、図19に示されるように、データベース管理モジュール18が、関連付けセット600において図7のプロセスの第11の反復を実行し、ヒープの先頭にあるエンティティ識別子を除去すると、データベース管理モジュール18は、第3のセグメント630からの「56」のエンティティ識別子を出力する670。示されるように、「56」のエンティティ識別子は、評価されるように残された唯一のエンティティ識別子である。さらに、第3のセグメント630はDELETEセグメントではなく、従って、データベース管理モジュール18が第3のセグメント630からの「56」のエンティティ識別子を評価すると、データベース管理モジュール18は、第3のセグメント630からの「56」のエンティティ識別子は、DELETEセグメントからのものではないと判断し(すなわち、図7のステップ570)、「56」のエンティティ識別子を出力670する。
図20は、データベース管理モジュール18が、図8~図20に示される関連付けセット600に照会を行うときの最終出力670を示す。エンティティ識別子の出力670は、関連付けセット600に照会を行うとき、「1」、「4」、「10」、「23」、「30」、「34」、「50」及び「56」である。
クライアント・システム20は、データベース・クエリ・モジュール22を通じて、サーバ・システム10のデータベース管理モジュール18に、様々な理由でデータベース17に照会を行うよう要求する。例えば、データベース17は、法的事項についての保留となっている文書の関連付けセットを含むことができ、従って、所定の文書が保留中であるかどうかを判断するとき、関連付けセットに照会を行い、所定の文書がその中にあるかどうかを調べる。別の例において、関連付けセット照会を行い、幾つの文書が所定のケース、事項、又はプロジェクトに関連するかを判断することができる。この例において、関連付けセットについての全ての関連付け及び解除セグメントが併合された場合、セット内のエンティティの数の単純カウントは、クエリに対して答えを提供し、そこで、全セグメントの数にセグメント・サイズを乗算することにより、計算の速度が上がる。別の例において、関連付けセットに照会を行い、所定の日付より前にどの文書が所定のケースに付加されたかを判断することができる。この例において、関連付けセットが、別個のテーブルではなくペイロードとして関連テーブル内に格納される場合、クエリに迅速かつ効率的に答えることができる。クエリは、最初に、関連付けセット内の全ての文書を取り出し、次に、文書を付加した日付に基づいて、それらの文書を事後フィルタリングすることができる。さらに別の例において、関連付けセットに照会を行い、どの文書が所定の管理人のセットの1又は複数により所有されるかを判断することができる。この例において、データが、全てのその所有者(例えば、管理人)の関連付けセットを含む文書としてモデル化される場合、各文書を走査し、文書の所有者の全ての関連付けセットとクエリ内の管理人のセットとの間の関連付けセットの共通部分の動作を実行することにより、クエリを完了することができる。
関連付けセグメント及び解除セグメントの両方を有する関連付けセットを有するため、いずれの関連付けセットのセグメントも修正する必要がない。関連付けセットのセグメントの各々は不変であり、そのことにより、動作のいずれか1つについて関連付けセット全体をロックすることを必要とすることなく、セグメントの作成、削除、移動、併合、及び照会などの動作を同時に行うことが可能になる。図2に示されるセグメント・データ・テーブル150内の各行は、関連付けセット100の1つのセグメントを示すので、トランザクショナル・ロックの範囲は、多くの場合、テーブル全体ではなく、1つの行だけである。例えば、リンク・テーブル手法を用いる場合、サイズ100,000の関連付けセットは、関連付けに関与するあらゆる動作に関してリンク・テーブル全体(すなわち、100,000行)のロックを必要とする。しかしながら、本発明の実施形態を用いる場合、関連付けセットのセグメントが5,000のエンティティ識別子のみを表す場合、動作が行われるとき、1行しか(すなわち、約5,000のエンティティ識別子)ロックする必要がない。従って、他のセグメント内のエンティティ識別子の関連付けに関与する他の動作は、いずれの並行処理の問題も生じずに、同時に行うことができる。
さらに、幾つかの本発明の実施形態において、関連付けセットのセグメントを読み取る必要があるとき、それをディスクからロードし、展開し、メモリ内にキャッシュして後のアクセスの速度を上げる。弱い参照(weak reference)を用いてこれらのセグメントをメモリ内に格納するので、メモリ使用率が大きい場合、これらのセグメントを廃棄して(例えば、ガベージコレクタにより)、他のスレッドのためにメモリを空けることができる。これにより、次にセグメントを必要とするとき、(例えば、ディスクから)再ロードする必要があるが、この手法は、システムのスケーラビリティ全体を改善することができる。
本明細書で提供される技術には、多数の利点がある。一例として、この技術は、迅速かつ効率的で費用対効果の高い方法で、関連付けセットに照会を行うこと可能にする。さらに、本明細書で与えられる技術は、大量の関連付けセットをモデル化し、効率的かつ迅速な方法で追跡することができる。この新しいシステムは、リンク・テーブル関連付けセットのような他の従来の関連付けセットと関連したコストをなくす。システムはさらに、修正する際、関連付けセット全体をロックし、使用不能にすることを必要とせずに、関連付けセットのエンティティを修正することが可能である。一般的に言うと、本明細書で提供される技術は、コンピュータ技術、特にデータベース内の関連付けセットのストレージに必然的に根ざしている技術的及び経済的問題を解決する。
上述され、図に示される実施形態は、データのセット、特にデータの関連付けセットに対するデータベース・クエリを処理するために実施形態を実施する多くの方法のうちのほんの一部を表すにすぎないことが理解されるであろう。
本発明の実施形態の環境は、任意の数のコンピュータ又は他の処理システム(例えば、クライアント又はエンドユーザ・システム、サーバ・システム等)及びいずれかの所望の方式で配置されたデータベース又は他のリポジトリを含むことができ、本発明の実施形態は、任意の所望のタイプのコンピューティング環境(例えば、クラウド・コンピューティング、クライアント・サーバ、ネットワーク・コンピューティング、メインフレーム、スタンドアロン・システム等)に適用することができる。本発明の実施形態により用いられるコンピュータ又は他の処理システムは、任意の数のいずれかのパーソナル又は他のタイプのコンピュータ又は処理システム(例えば、デスクトップ、ラップトップ、PDA、モバイル・デバイス等)により実装することができ、いずれかの市販のオペレーティング・システム、及びいずれかの市販の及び特化したソフトウェア(例えば、ブラウザ・ソフトウェア、通信ソフトウェア、サーバ・ソフトウェア、データベース管理モジュール18、データベース・クエリ・モジュール22等)の任意の組み合わせを含むことができる。これらのシステムは、情報を入力及び/又は表示するための、いずれかのタイプのモニタ及び入力デバイス(例えば、キーボード、マウス、音声認識等)を含むことができる。
本発明の実施形態のソフトウェア(例えば、データベース管理モジュール18、データベース・クエリ・モジュール22等)は、任意の所望のコンピュータ言語で実装することができ、明細書内に含まれる機能記述、及び図に示されるフローチャートに基づいて、コンピュータ技術分野の当業者により開発できることを理解されたい。さらに、種々の機能を実行するソフトウェアの本明細書でのいずれの参照も、一般に、ソフトウェア制御のもとでこれらの機能を実行するコンピュータ・システム又はプロセッサを指す。本発明の実施形態のコンピュータ・システムは、代替的に、いずれかのタイプのハードウェア及び/又は他の処理回路によっても実装することができる。
コンピュータ又は他の処理システムの種々の機能は、任意の数のソフトウェア及び/又はハードウェア・モジュール又はユニット、処理又はコンピュータ・システム、及び/又は回路の間で任意の方法で分散することができ、ここで、コンピュータ又は処理システムは、互いにローカルに又は遠隔に配置することができ、いずれかの適切な通信媒体(例えば、LAN、WAN、イントラネット、インターネット、配線接続、モデム接続、無線等)を介して通信することができる。例えば、本発明の実施形態の機能は、種々のエンドユーザ/クライアント及びサーバ・システム、及び/又はいずれかの他の中間処理デバイスの間で任意の方法で分散させることができる。フローチャートにおいて上述され、示されるソフトウェア及び/又はアルゴリズムは、本明細書で説明される機能を達成する任意の方法で修正することができる。さらに、フローチャート又は説明における機能は、所望の動作を達成する任意の順序で実行することができる。
本発明の実施形態のソフトウェア(例えば、データベース管理モジュール18、データベース・クエリ・モジュール22等)は、スタンドアロン・システム又はネットワーク若しくは他の通信媒体により接続されるシステムと共に用いられる固定又は携帯可能プログラム製品装置又はデバイスの非一時コンピュータ使用可能ストレージ媒体(例えば、磁気又は光媒体、光磁気媒体、フロッピー・ディスケット、CD-ROM、DVD、メモリ・デバイス等)上で利用可能であり得る。
通信ネットワークは、任意の数の任意のタイプの通信ネットワーク(例えば、LAN、WAN、インターネット、イントラネット、VPN等)により実装することができる。本発明の実施形態のコンピュータ又は他の処理システムは、いずれかの従来の若しくは他のプロトコルを介してネットワーク上で通信するためのいずれかの従来の若しくは他の通信デバイスを含むこともできる。コンピュータ又は他の処理システムは、ネットワークにアクセスするために任意のタイプの接続(例えば、有線、無線等)を用いることができる。ローカル通信媒体は、任意の適切な通信媒体(例えば、ローカル・エリア・ネットワーク(LAN)、ハードウェア、無線リンク、イントラネット等)により実装することができる。
システムは、情報(例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等)を格納するための任意の数のいずれかの従来の若しくは他のデータベース、データストア、又はデータ構造(例えば、ファイル、データベース、データ構造、データ若しくは他のリポジトリ等)を用いることができる。データベース・システムは、情報(例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等)を格納するための任意の数のいずれかの従来の若しくは他のデータベース、データストア、又はデータ構造(例えば、ファイル、データベース、データ構造、データ若しくは他のリポジトリ等)により実装することができる。データベース・システムは、サーバ及び/又はクライアント・システム内に含ませること、又はこれに結合することができる。データベース・システム及び/又はストレージ構造は、コンピュータ又は他の処理システムから遠隔にあっても、又はこれのローカルにあってもよく、いずれかの所望のデータ(例えば、関連付けセット、関連付けセグメント、解除セグメント、エンティティ識別子、メタデータ等)を格納することができる。
本発明の実施形態は、情報(例えば、関連付けセットのエンティティ識別子、エンティティ識別子が関連付けセットに付加された日付等)を取得又は提供するための任意の数のいずれかのタイプのユーザ・インターフェース(例えば、グラフィカル・ユーザ・インターフェース(GUI)、コマンド・ライン、プロンプト等)を用いることができ、ここで、インターフェースは、任意の方法で配置されたいずれかの情報を含むことができる。インターフェースは、情報を入力/表示し、かつ、いずれかの適切な入力デバイス(例えば、マウス、キーボード、タッチスクリーン等)を介して所望のアクションを開始する、任意の数のいずれかのタイプの作動機構(例えば、ボタン、アイコン、フィールド、ボックス、リンク等)を含むことができる。インターフェース画面は、画面の間を任意の方法でナビゲートするためのいずれかの適切なアクチュエータ(例えば、リンク、タブ等)を含むことができる。
本明細書で用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈がそうでないことを明確に示していない限り、複数形も含む。用語「含む(comprise)」、「含んでいる(comprising)」、「含む(include)」、「含んでいる(including)」、「有する(has、have)」、「有している(having)」、「備えた(with)」は、本開示で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はその群の存在又は付加を除外するものではないことが、さらに理解されるであろう。
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ(ミーンズ又はステップ・プラス・ファンクション)」要素の対応する構造、材料、動作及び均等物が、明確に特許請求された他の請求要素と組み合わせて機能を実行するための任意の構造、材料、又は動作を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲及び趣旨から逸脱することなく、多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
本発明の様々な実施形態の説明は、例示の目的で提示されたものであり、網羅的であること又は開示される実施形態に限定することを意図したものではない。当業者には、説明される実施形態の範囲及び趣旨から逸脱することなく、多くの変更及び変形が明らかとなるであろう。本明細書で用いられる用語は、実施形態の原理、実際の用途、又は市場で見出だされる技術に優る技術的改善を最もよく説明するため、又は他の当業者が本明細書に開示される実施形態を理解することを可能にするために選択されたものである。
本発明は、統合の任意の可能な技術的詳細レベルにおける、システム、方法、及び/又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び、「C」プログラミング言語若しくは類似のプログラミング言語などの手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個人化することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び/又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作の態様を実施する命令を含む製品を含むようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。