(57)【特許請求の範囲】
【請求項１】
少なくとも1つのプロセッサと、
少なくとも1つのメモリであって、
エッジによって接続されたノードのデータグラフ、
複数の保存されたクエリであって、各クエリが、前記クエリに関するクエリ結果内のメンバーシップのために満たされるべき1つまたは複数の制約によって定義され、各制約が、前記エッジのうちの少なくとも1つの指定する、複数の保存されたクエリ、ならびに
前記少なくとも1つのプロセッサによって実行されるときにシステムに
ソースノード、更新のエッジ、およびターゲットノードによって前記データグラフを更新する動作に応答してターゲットの制約を特定することであって、前記ターゲットの制約が、前記更新のエッジを含む経路を指定し、前記ターゲットの制約が、第1の保存されたクエリに属する、特定すること、
前記ターゲットの制約の前記経路を通って前記グラフを横断することによって、メンバーノードに関して前記ターゲットの制約を評価して、前記ターゲットの制約に関する状態を決定すること、
前記状態に基づく前記第1の保存されたクエリに関する縮約された定義が、前記メンバーノードが前記第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定すること、ならびに
前記縮約された定義が前記メンバーノードが応答するのかまたは応答しないのかを示すとき、前記縮約された定義にしたがって前記メンバーノードによって前記第1の保存されたクエリの保存されたクエリ結果を更新することを行わせる命令を記憶する、少なくとも1つのメモリとを含むコンピュータシステム。
【請求項２】
前記メモリが、エッジ毎の前記制約のインデックスをさらに記憶し、前記インデックスが、前記ターゲットの制約を特定するために使用される請求項1に記載のシステム。
【請求項３】
前記ターゲットの制約が、第1のターゲットの制約であり、前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
前記第1の保存されたクエリに属する第2のターゲットの制約を特定することであって、前記第2のターゲットの制約が、前記更新のエッジを含む経路を指定し、前記第2のターゲットの制約が、前記第1のターゲットの制約の経路長よりも長い経路長を有する、特定すること、および
前記第2のターゲットの制約に関する状態を前記第2のターゲットの制約が解かれていないことを示す状態に設定することを行わせる命令をさらに記憶する請求項1または2に記載のシステム。
【請求項４】
前記状態が、第1の状態であり、前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
前記第1の状態に基づく前記第1の保存されたクエリに関する縮約された定義が、前記メンバーノードが前記第1の保存されたクエリに応答するのかまたは応答しないのかを示さないと判定すること、
前記第2のターゲットの制約の前記経路を通って前記グラフを横断することによって、前記メンバーノードに関して前記第2のターゲットの制約を評価して、前記第2のターゲットの制約に関する第2の状態を決定すること、ならびに
前記第1の状態および前記第2の状態に基づく前記第1のクエリに関する前記縮約された定義が、前記メンバーノードが前記第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定すること、ならびに
前記縮約された定義が前記メンバーノードが応答するのかまたは応答しないのかを示すとき、前記縮約された定義にしたがって前記メンバーノードによって前記第1の保存されたクエリの前記保存されたクエリ結果を更新することを行わせる命令をさらに記憶する請求項3に記載のシステム。
【請求項５】
前記ターゲットの制約が、第1のターゲットの制約であり、前記状態が、第1の状態であり、前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
前記メモリに前記グラフの前記横断の結果を記憶すること、
前記第1のクエリに関する第2のターゲットの制約を特定することであって、前記第2のターゲットの制約が、前記第1のターゲットの制約の前記経路を含む経路を有する、特定すること、
前記第2のターゲットの制約を評価する際に前記横断の記憶された結果を用いて、前記第2のターゲットの制約に関する第2の状態を決定すること、
前記第1の状態および前記第2の状態に基づく前記第1の保存されたクエリに関する前記縮約された定義が、前記メンバーノードが前記第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定すること、ならびに
前記縮約された定義が前記メンバーノードが応答するのかまたは応答しないのかを示すとき、前記縮約された定義にしたがって前記メンバーノードによって前記第1の保存されたクエリの前記保存されたクエリ結果を更新することを行わせる命令をさらに記憶する請求項1から4のいずれか一項に記載のシステム。
【請求項６】
前記更新が、第1の更新であり、前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
前記データグラフの前記横断の結果を記憶すること、および
前記データグラフに対するその後の更新が前記第1の更新のソースノードとは異なるソースノードを含むとき、前記記憶された結果を削除することを行わせる命令をさらに記憶する請求項1から5のいずれか一項に記載のシステム。
【請求項７】
前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
前記データグラフの前記横断の結果を記憶すること、および
前記記憶された結果を用いて、前記ターゲットの制約の前記経路を含む経路を指定する第2のターゲットの制約を評価することを行わせる命令をさらに記憶する請求項1から6のいずれか一項に記載のシステム。
【請求項８】
前記ターゲットの制約が、第1のターゲットの制約であり、前記メモリが、前記少なくとも1つのプロセッサによって実行されるときに前記システムに
複数のターゲットの制約を特定することであって、前記第1のターゲットの制約が、前記複数のターゲットの制約のうちの1つであり、前記複数のターゲットの制約が、少なくとも2つのクエリに関するものであり、前記第1の保存されたクエリが、前記少なくとも2つのクエリのうちの1つである、特定すること、および
前記複数のターゲットの制約をインテリジェントに評価して、より長い経路長を有するターゲットの制約に関する横断を遅らせることを行わせる命令をさらに記憶する請求項1から7のいずれか一項に記載のシステム。
【請求項９】
少なくとも1つのプロセッサを使用してターゲットの制約を特定するステップであって、前記ターゲットの制約が、データグラフに対する更新内で指定されたエッジを含む前記データグラフ内の経路を指定し、特定するステップが、前記更新によってトリガされる、特定するステップと、
前記少なくとも1つのプロセッサを使用して、前記経路を通って前記グラフを横断することによって前記ターゲットの制約に関する状態を決定するステップと、
前記状態に基づいて、前記制約を含む第1のクエリに関する縮約された定義がメンバーノードが前記第1のクエリに応答することを示すと判定するステップと、
前記縮約された定義にしたがって、前記横断中に特定された前記メンバーノードを使用して前記第1のクエリに関する保存されたクエリ結果を更新するステップとを含む方法。
【請求項１０】
前記ターゲットの制約が、複数の制約のインデックスを使用して特定され、前記インデックスが、エッジ毎に編成される請求項9に記載の方法。
【請求項１１】
前記更新が、ソースノードとターゲットノードとの間の前記更新のエッジの追加を含み、前記縮約された定義にしたがって前記保存されたクエリ結果を更新するステップが、前記保存されたクエリ結果に前記メンバーノードを追加することを含む請求項9または10に記載の方法。
【請求項１２】
前記更新が、ソースノードとターゲットノードとの間の前記更新のエッジの削除を含み、前記縮約された定義にしたがって前記保存されたクエリ結果を更新するステップが、前記保存されたクエリ結果を維持することを含む請求項9または10に記載の方法。
【請求項１３】
前記ターゲットの制約が、第1のターゲットの制約を含み、前記方法が、
前記第1のクエリに属する第2のターゲットの制約を特定するステップであって、前記第2のターゲットの制約が、前記更新のエッジを含む経路を指定し、前記第2のターゲットの制約が、前記第1のターゲットの制約の経路長よりも長い経路長を有する、特定するステップと、
前記第2のターゲットの制約に関する状態を前記第2のターゲットの制約が解かれていないこと示す状態に設定するステップとをさらに含む請求項9から12のいずれか一項に記載の方法。
【請求項１４】
前記状態が、第1の状態を含み、前記方法が、
前記第1の状態に基づく前記第1のクエリに関する縮約された定義が、前記メンバーノードが前記第1のクエリに応答するのかまたは応答しないのかを示さないと判定するステップと、
前記第2のターゲットの制約の前記経路を通って前記グラフを横断することによって、前記メンバーノードに関して前記第2のターゲットの制約を評価して、前記第2のターゲットの制約に関する第2の状態を決定するステップと、
前記第1の状態および前記第2の状態に基づく前記第1のクエリに関する前記縮約された定義が、前記メンバーノードが前記第1のクエリに応答することを示すと判定するステップと、
前記縮約された定義にしたがって前記メンバーノードによって前記第1のクエリの前記保存されたクエリ結果を更新するステップとさらに含む請求項13に記載の方法。
【請求項１５】
前記ターゲットの制約が、第1のターゲットの制約であり、前記状態が、第1の状態であり、前記方法が、
前記グラフの前記横断の結果を記憶するステップと、
前記第1のクエリに関する第2のターゲットの制約を特定するステップであって、前記第2のターゲットの制約が、前記第1のターゲットの制約の前記経路を含む経路を有する、特定するステップと、
前記第2のターゲットの制約を評価する際に前記横断の前記記憶された結果を用いて、前記第2のターゲットの制約に関する第2の状態を決定するステップとをさらに含み、
前記第1のクエリに関する前記縮約された定義が前記メンバーノードが前記第1のクエリに応答することを示すと判定するステップが、前記第1の状態および前記第2の状態に基づく請求項9から14のいずれか一項に記載の方法。
【請求項１６】
前記更新が、第1の更新であり、前記方法が、
前記データグラフの前記横断の結果を記憶するステップと、
前記データグラフに対するその後の更新が前記第1の更新のソースノードとは異なるソースノードを含むとき、前記記憶された結果を削除するステップとをさらに含む請求項9から15のいずれか一項に記載の方法。
【請求項１７】
前記データグラフの前記横断の結果を記憶するステップと、
前記記憶された結果を用いて、前記ターゲットの制約の前記経路を含む経路を指定する第2のターゲットの制約を評価するステップとをさらに含む請求項9から16のいずれか一項に記載の方法。
【請求項１８】
ソースノード毎に前記データグラフに対する複数の更新をグループ化するステップをさらに含み、前記複数の更新が、互いに5分以内に発生し、前記データグラフに対する前記更新が、前記複数の更新のうちの1つであり、前記ターゲットの制約を特定するステップが、前記グループ化するステップの後にリアルタイムで行われる請求項9から17のいずれか一項に記載の方法。
【請求項１９】
ソースノード、更新のエッジ、およびターゲットノードによってデータグラフを更新する動作に応答して、少なくとも1つのプロセッサを使用してターゲットの制約を特定するステップであって、前記ターゲットの制約が、前記更新のエッジを含む前記データグラフ内の経路を指定する、特定するステップと、
前記少なくとも1つのプロセッサを使用して、前記経路を通って前記グラフを横断することによって前記ターゲットの制約に関する状態を決定するステップと、
前記制約を含む第1のクエリに関する、前記状態に基づく縮約された定義がメンバーノードが前記第1のクエリに応答しないことを示すと判定するステップと、
前記縮約された定義にしたがって、前記横断中に特定された前記メンバーノードを使用して前記第1のクエリに関する保存されたクエリ結果を更新するステップとを含む方法。
【請求項２０】
前記更新が、前記ソースノードと前記ターゲットノードの間の前記更新のエッジの削除であり、前記縮約された定義にしたがって前記保存されたクエリ結果を更新するステップが、前記保存されたクエリ結果から前記メンバーノードを削除することを含む請求項19に記載の方法。
【請求項２１】
前記更新が、前記ソースノードと前記ターゲットノードとの間の前記更新のエッジの追加を含み、前記縮約された定義にしたがって前記保存されたクエリ結果を更新するステップが、前記保存されたクエリ結果を維持することを含む請求項19に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、参照によりその全体が本明細書に組み込まれている、「REAL-TIME SAVED-QUERY UPDATES FOR A LARGE GRAPH」と題した、2014年6月17日に出願した米国非仮特許出願第14/306,969号の優先権を主張するものである。
【背景技術】
【０００２】
大規模なグラフに基づくナレッジベースは、世界についての事実情報(factual information)を表す。たとえば、データグラフにおいては、人、場所、語句、語、クラス(class)、事実、物、概念などのエンティティ(entity)が、ノードとして記憶される可能性があり、ノードの間のエッジが、エンティティの間の関係を示す可能性がある。そのようなデータグラフの基本単位は、2つのノードまたはエンティティおよびエッジのラベルを含むトリプル(triple)である可能性がある。第1のノードは、ソースまたは主語(subject)ノードと呼ばれることがあり、第2のノードは、ターゲットまたは目的語(object)ノードと呼ばれることがある。もちろん、トリプルは、主語、述語(predicate)、および目的語を特定することに加えて、エンティティおよび/または関係についてのメタデータなどのさらなる情報を含む可能性がある。
【０００３】
ユーザは、グラフに関するクエリまたはコレクション(collection)を定義することができる。コレクションまたはクエリは、ノードがクエリに応答するノードの組のメンバーであるために満たさなければならない制約を定義する。制約は、通常、ノードがクエリ結果のメンバー、たとえば、コレクションのメンバーであるためにどの関係を持っていなくてはならないかまたは持っていてはならないかを指定する。そのようなクエリ(すなわち、コレクション)は、検索、データマイニング、広告ターゲティング、推薦システムなどにおいて大々的に使用され、メンバーシップ(membership)は、大規模なグラフにおいてはメンバーシップを計算することが高価である可能性があるため記憶されることが多い。しかし、ノードおよび関係がグラフから追加または削除されるので、保存されたメンバーは、特に、頻繁に更新される大規模なグラフにおいては古くなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一部の実装は、エッジが更新されるとき、たとえば、トリプルがグラフに基づくデータストアに追加されるかまたはグラフに基づくデータストアから削除されるときにシステムが保存されたクエリ結果をリアルタイムで更新することを可能にする。リアルタイムは、システムがトリプルのソースノード毎に更新をグループ化することを可能にするための短い遅延(たとえば、1分未満)を含む可能性がある。クエリは、保存されたクエリに関する結果として適格であるためにノードがグラフ内で有していなくてはならない(または有してはならない)特性または関係を特定する制約によって定義され得る。保存されたクエリは、論理演算によってつなげられた一連の制約、言い換えれば、制約のブール式である制約式によって定義され得る。システムは、エッジ毎にインデックス付けされる制約のインデックスを含む可能性がある。システムは、インデックスを用いて、どの制約が更新されるエッジからのエッジに合致するのかを判定し、そのトリプルに関するターゲットの制約(target constraint)を特定し得る。システムは、ターゲットの制約を用いて、どの記憶されたクエリ結果が更新によって影響を受けるのか、および更新が結果に対する変更をもたらすのかどうかを効率的に判定する。対象毎に更新をグループ化することによって、システムは、更新によって影響を受けるクエリ結果を特定し、評価する際に仕事、たとえば、グラフ内の順方向および逆方向のウォーク(walk)を再利用し得る。
【０００５】
開示の一態様は、少なくとも1つのプロセッサおよび1つまたは複数のメモリを含むシステムに具現化され得る。1つまたは複数のメモリは、エッジによって接続されたノードを含むデータグラフと、複数の保存されたクエリであって、各クエリが、クエリに関するクエリ結果内のメンバーシップのために満たされるべき1つまたは複数の制約によって定義され、各制約が、エッジのうちの少なくとも1つの指定する、複数の保存されたクエリとを記憶する可能性がある。1つまたは複数のメモリは、少なくとも1つのプロセッサによって実行されるときにコンピュータシステムに動作を実行させる命令も記憶する可能性がある。動作は、ソースノード、更新のエッジ(update edge)、およびターゲットノードによってデータグラフを更新する動作に応答してターゲットの制約を特定することであって、ターゲットの制約が、更新のエッジを含む経路を指定し、ターゲットの制約が、複数の保存されたクエリのうちの第1の保存されたクエリに属する、特定することを含み得る。動作は、ターゲットの制約の経路を通ってグラフを横断する(traverse)ことによって、メンバーノード(member node)に関してターゲットの制約を評価して、ターゲットの制約に関する状態を決定することと、状態に基づく第1の保存されたクエリに関する縮約(collapse)された定義が、メンバーノードが第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定することと、縮約された定義がメンバーノードが応答するのかまたは応答しないのかを示すとき、縮約された定義にしたがってメンバーノードによって第1の保存されたクエリの保存されたクエリ結果を更新することとをさらに含み得る。
【０００６】
システムは、以下の特徴のうちの1つまたは複数を含み得る。たとえば、ターゲットの制約は、第1のターゲットの制約である可能性があり、動作は、第1の保存されたクエリに属する第2のターゲットの制約を特定することであって、第2のターゲットの制約が、更新のエッジを含む経路を指定し、第2のターゲットの制約が、第1のターゲットの制約の経路長よりも長い経路長を有する、特定することと、第2のターゲットの制約に関する状態を第2のターゲットの制約が解かれていないこと示す状態に設定することとをさらに含み得る。さらに、状態は、第1の状態である可能性があり、動作は、第1の状態に基づく第1の保存されたクエリに関する縮約された定義が、メンバーノードが第1の保存されたクエリに応答するのかまたは応答しないのかを示さないと判定することと、第2のターゲットの制約の経路を通ってグラフを横断することによって、メンバーノードに関して第2のターゲットの制約を評価して、第2のターゲットの制約に関する第2の状態を決定することと、第1の状態および第2の状態に基づく第1のクエリに関する縮約された定義が、メンバーノードが第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定することと、縮約された定義がメンバーノードが応答するのかまたは応答しないのかを示すとき、縮約された定義にしたがってメンバーノードによって第1の保存されたクエリの保存されたクエリ結果を更新することとをさらに含み得る。
【０００７】
別の例として、1つまたは複数のメモリは、エッジ毎の制約のインデックスも記憶する可能性があり、インデックスは、ターゲットの制約を特定するために使用される。別の例として、動作は、データグラフの横断の結果を記憶することと、記憶された結果を用いて、ターゲットの制約の経路を含む経路を指定する第2のターゲットの制約を評価することとをさらに含み得る。別の例として、更新は、第1の更新である可能性があり、動作は、データグラフの横断の結果を記憶することと、データグラフに対するその後の更新が第1の更新のソースノードとは異なるソースノードを含むとき、記憶された結果を削除することとを含み得る。
【０００８】
別の例として、ターゲットの制約は、第1のターゲットの制約である可能性があり、状態は、第1の状態である可能性があり、動作は、メモリにグラフの横断の結果を記憶することと、第1のクエリに関する第2のターゲットの制約を特定することであって、第2のターゲットの制約が、第1のターゲットの制約の経路を含む経路を有する、特定することと、第2のターゲットの制約を評価する際に横断の記憶された結果を用いて、第2のターゲットの制約に関する第2の状態を決定することとを含み得る。動作は、第1の状態および第2の状態に基づく第1の保存されたクエリに関する縮約された定義が、メンバーノードが第1の保存されたクエリに応答するのかまたは応答しないのかを示すかどうかを判定することと、縮約された定義がメンバーノードが応答するのかまたは応答しないのかを示すとき、縮約された定義にしたがってメンバーノードによって第1の保存されたクエリの保存されたクエリ結果を更新することとをさらに含み得る。
【０００９】
別の例として、ターゲットの制約は、第1のターゲットの制約である可能性があり、動作は、複数のターゲットの制約を特定することであって、第1のターゲットの制約が、複数のターゲットの制約のうちの1つであり、複数のターゲットの制約が、少なくとも2つのクエリに関するものであり、第1の保存されたクエリが、少なくとも2つのクエリのうちの1つである、特定することをさらに含み得る。動作は、複数のターゲットの制約をインテリジェントに評価して、より長い経路長を有するターゲットの制約に関する横断を遅らせることをさらに含み得る。
【００１０】
別の態様においては、コンピュータによって実施される方法が、少なくとも1つのプロセッサを使用してターゲットの制約を特定するステップであって、ターゲットの制約が、データグラフに対する更新内で指定されたエッジを含むデータグラフ内の経路を指定し、特定するステップが、更新によってトリガされる、特定するステップと、少なくとも1つのプロセッサを使用して、経路を通ってグラフを横断することによってターゲットの制約に関する状態を決定するステップとを含む。方法は、状態に基づいて、制約を含む第1のクエリに関する縮約された定義がメンバーノードが第1のクエリに応答することを示すと判定するステップと、縮約された定義にしたがって、横断中に特定されたメンバーノードを使用して第1のクエリに関する保存されたクエリ結果を更新するステップとをさらに含む。一部の実装において、ターゲットの制約は、複数の制約のインデックスを使用して特定され、インデックスは、エッジ毎に編成される。更新が、ソースノードとターゲットノードとの間の更新のエッジの追加を含むとき、縮約された定義にしたがって保存されたクエリ結果を更新するステップは、保存されたクエリ結果にメンバーノードを追加することを含む。更新が、ソースノードとターゲットノードとの間の更新のエッジの削除を含むとき、縮約された定義にしたがって保存されたクエリ結果を更新するステップは、保存されたクエリ結果を維持することを含む。
【００１１】
方法は、以下の特徴のうちの1つまたは複数を含み得る。たとえば、ターゲットの制約は、第1のターゲットの制約である可能性があり、方法は、第1のクエリに属する第2のターゲットの制約を特定するステップであって、第2のターゲットの制約が、更新のエッジを含む経路を指定し、第2のターゲットの制約が、第1のターゲットの制約の経路長よりも長い経路長を有する、特定するステップと、第2のターゲットの制約に関する状態を第2のターゲットの制約が解かれていないこと示す状態に設定するステップとをさらに含む。一部の実装において、状態は、第1の状態である可能性があり、方法は、第1の状態に基づく第1のクエリに関する縮約された定義が、メンバーノードが第1のクエリに応答するのかまたは応答しないのかを示さないと判定するステップと、第2のターゲットの制約の経路を通ってグラフを横断することによって、メンバーノードに関して第2のターゲットの制約を評価して、第2のターゲットの制約に関する第2の状態を決定するステップと、第1の状態および第2の状態に基づく第1のクエリに関する縮約された定義が、メンバーノードが第1のクエリに応答することを示すと判定するステップと、縮約された定義にしたがってメンバーノードによって第1のクエリの保存されたクエリ結果を更新するステップとをさらに含む。
【００１２】
別の例として、ターゲットの制約は、第1のターゲットの制約である可能性があり、状態は、第1の状態である可能性があり、方法は、グラフの横断の結果を記憶するステップと、第1のクエリに関する第2のターゲットの制約を特定するステップであって、第2のターゲットの制約が、第1のターゲットの制約の経路を含む経路を有する、特定するステップと、第2のターゲットの制約を評価する際に横断の記憶された結果を用いて、第2のターゲットの制約に関する第2の状態を決定するステップとをさらに含む。そのような実装において、第1のクエリに関する縮約された定義がメンバーノードが第1のクエリに応答することを示すと判定するステップは、第1の状態および第2の状態に基づく。
【００１３】
別の例として、方法は、ソースノード毎にデータグラフに対する複数の更新をグループ化するステップをさらに含み、複数の更新が、互いに5分以内に発生し、データグラフに対する更新が、複数の更新のうちの1つであり、ターゲットの制約を特定するステップが、グループ化するステップの後にリアルタイムで行われる。
【００１４】
別の態様においては、方法が、ソースノード、更新のエッジ、およびターゲットノードによってデータグラフを更新する動作に応答して、少なくとも1つのプロセッサを使用してターゲットの制約を特定するステップであって、ターゲットの制約が、更新のエッジを含むデータグラフ内の経路を指定する、特定するステップを含む。方法は、少なくとも1つのプロセッサを使用して、経路を通ってグラフを横断することによってターゲットの制約に関する状態を決定するステップと、制約を含む第1のクエリに関する、状態に基づく縮約された定義がメンバーノードが第1のクエリに応答しないことを示すと判定するステップと、縮約された定義にしたがって、横断中に特定されたメンバーノードを使用して第1のクエリに関する保存されたクエリ結果を更新するステップとをさらに含む。
【００１５】
一部の実装において、更新は、ソースノードとターゲットノードとの間の更新のエッジの削除であり、縮約された定義にしたがって保存されたクエリ結果を更新するステップは、保存されたクエリ結果からメンバーノードを削除することを含む。一部の実装において、更新は、ソースノードとターゲットノードとの間の更新のエッジの追加を含み、縮約された定義にしたがって保存されたクエリ結果を更新するステップは、保存されたクエリ結果を維持することを含む。
【００１６】
別の総合的な態様においては、非一時的コンピュータ可読ストレージデバイス上に具現化されたコンピュータプログラム製品が、基板内に形成された少なくとも1つのプロセッサによって実行されるときにコンピューティングデバイスに開示された方法、動作、またはプロセスのいずれかを実行させる命令を含む。別の総合的な態様は、実質的に図のうちの少なくとも1つに示されおよび/または図のうちの少なくとも1つに関連して説明されるように、ならびに請求項により完全に記載されるように、保存されたクエリ結果をリアルタイムで更新するためのシステムおよび/または方法を含む。
【００１７】
本明細書において説明される対象の実装のうちの1つまたは複数は、以下の利点のうちの1つまたは複数を実現するように実装され得る。一例として、システムは、保存されたクエリ結果をリアルタイムで更新する可能性があり、つまり、保存されたクエリ結果を更新するプロセスが、更新の数分以内に始まり、メンバーシップを更新するための周期的なオフラインバッチプロセスを待つのではなく更新によってトリガされる。実装は、ターゲットの制約を迅速で効率的に評価することができ、保存されたクエリ結果に対するリアルタイムの更新を可能にする。言い換えれば、システムは、グラフの更新内の情報を使用して、評価すべき影響を受けるクエリ内の最少数の追加の制約を特定し、以前の仕事の結果を再利用するためにグラフの更新をまとめてグループ化することによって、保存されたクエリの正しい結果を維持するために必要とされる追加の探索の量を最小化する。その他の特徴は、説明および図面から、ならびに請求項から明らかになるであろう。
【図面の簡単な説明】
【００１８】
【図１】一部の実装による例示的なシステムを示す図である。
【図２】エンティティをノードとし、関係をノードの間のエッジとする例示的なデータグラフの表現を示す図である。
【図３】開示される実装に合致する保存されたクエリおよびクエリエッジインデックス(query edge index)の例を示す図である。
【図４】開示される実装に合致する、クエリのメンバーシップをリアルタイムで効率的に更新するための例示的なプロセスの流れ図である。
【図５】開示される実装に合致する、エッジがグラフに追加された後に制約をインテリジェントに評価するための例示的なプロセスの流れ図である。
【図６】開示される実装に合致する、エッジがグラフから削除された後に制約をインテリジェントに評価するための例示的なプロセスの流れ図である。
【図７】図2のデータグラフ内のエッジを削除した後にクエリのメンバーシップをリアルタイムで更新する例を示す図である。
【図８】図2のデータグラフ内のエッジを追加した後にクエリのメンバーシップをリアルタイムで更新する例を示す図である。
【図９】説明される技術を実装するために使用され得るコンピュータデバイスの例を示す図である。
【図１０】説明される技術を実装するために使用され得る分散型のコンピュータデバイスの例を示す図である。
【発明を実施するための形態】
【００１９】
様々な図面における同様の参照符号は、同様の要素を示す。
【００２０】
図1は、例示的な実装によるシステム100のブロック図である。システム100は、データグラフにおけるエッジの更新に応答して、保存されたクエリ結果をリアルタイムで更新する。図1のシステムは、1つの例示的な実装であり、その他の構成およびアプリケーションが、使用され得る。システム100は、任意のデータグラフにおいて記憶されたクエリ結果を新しく保つために使用され得るが、大規模なグラフにおいてクエリ結果を決定するための処理時間が法外にコストがかかり、法外に時間がかかるのでそのようなグラフに特に有用である。
【００２１】
システム100は、1つのコンピューティングデバイス、またはいくつかの異なるデバイスの形態をとる複数のコンピューティングデバイスである可能性がある。たとえば、システム100は、標準的なサーバ、そのようなサーバのグループ、クライアント-サーバシステム、またはラックサーバシステムである可能性がある。加えて、システム100は、パーソナルコンピュータに実装される可能性がある。システム100は、図9に示されるコンピュータデバイス900または図10に示されるコンピュータデバイス1000の例である可能性がある。
【００２２】
システム100は、グラフエンジン110および保存されたクエリエンジン150を含む可能性がある。一部の実装において、グラフエンジン110および保存されたクエリエンジン150は、それぞれ、別々のコンピューティングデバイスである可能性があり、またはプロセッサおよびメモリなどの構成要素を共有する可能性がある。たとえば、グラフエンジン110および保存されたクエリエンジン150は、パーソナルコンピュータ、サーバ、コンピュータの1つまたは複数の論理パーティションなどに実装される可能性がある。一部の実装において、グラフエンジン110および保存されたクエリエンジン150のうちの1つまたは複数は、図10に示されるコンピュータデバイス1000などの、サーバのグループなどの一連のコンピューティングデバイスに実装された分散型のシステムである可能性がある。
【００２３】
システム100は、グラフに基づくデータストア190を含む可能性がある。グラフに基づくデータストアは、ノードがエッジによって接続されるようにして、ノードおよびエッジの形態で情報を記憶するデータグラフである。データグラフのノードは、人、場所、品物、語、語句、考え、話題、抽象的な概念、具体的な要素、その他の好適な物、もしくはこれらの任意の組合せなどのエンティティ、またはエンティティの特性を表す可能性がある。したがって、ノードは、エンティティと呼ばれる可能性があり、その逆である可能性がある。グラフ内のエンティティは、エンティティの間の関係を表す可能性があるエッジによって互いに関連付けられ得る。たとえば、データグラフは、Abraham Lincolnに対応するエンティティを有する可能性があり、Abraham LincolnエンティティとPresidentエンティティとの間のoccupationの関係およびAbraham LincolnエンティティとLawyerエンティティとの間の別のそのような関係を有する可能性がある。インデックス付けエンジンは、検索エンジンがデータグラフを検索すること、たとえば、グラフ内の1つまたは複数の関係または経路によってその他のエンティティに関連付けられたエンティティを見つけることを可能にするためにグラフに基づくデータストア190を維持し得る。一部の実装において、インデックス付けエンジンおよび/または検索エンジンは、グラフエンジン110に含まれる可能性がある。グラフに基づくデータストア190は、データストアのデータを検索し、取り出すためのインデックスまたは何らかのその他の方法を含み得る。
【００２４】
グラフに基づくデータストア190は、図2に示されるグラフ200などのグラフが生成され得る情報を含む可能性がある。本明細書において使用されるとき、データグラフの参照は、データグラフのためのインデックスの参照と考えられる可能性があり、その逆である可能性がある。データグラフのノードは、エンティティと呼ばれる可能性があり、エッジは、2つのエンティティの間の関係と呼ばれる可能性がある。本明細書において使用されるとき、エンティティは、人、場所、もしくは物の物理的な実施形態、または物理的なエンティティの表現、たとえば、テキスト、もしくはエンティティを指すその他の情報を指す可能性がある。たとえば、エンティティは、フランスの物理的な場所、またはフランスを指す抽象的な概念である可能性がある。グラフエンジン110は、ユーザが、たとえば、クライアント170のユーザがグラフに基づくデータストア190内の情報を検索し、更新し、それ以外の方法で維持することを可能にするユーザインターフェースを含む可能性がある。グラフエンジン110は、グラフに基づくデータストア190を更新するバッチまたはオフラインプロセスを含む可能性もある。グラフエンジン110は、独自のハードウェアプロセッサ113およびメモリ114を有する別個のコンピューティングデバイスである可能性があり、またはシステム100のその他の構成要素と1つまたは複数のハードウェアプロセッサおよびメモリを共有する可能性がある。
【００２５】
システム100は、保存されたクエリ140も含み得る。クエリは、1つの制約または制約のブール式である可能性がある制約式によって定義される。制約式は、クエリを定義し、したがって、クエリまたはコレクションの定義と呼ばれる可能性がある。制約式は、グラフに基づくデータストア190内のエンティティがクエリに応答すると考えられ、クエリ結果に、つまり、クエリ結果のメンバーとして含められるために満たさなければならない条件を表す。この意味で、クエリは、コレクション、およびコレクションのクエリメンバー(query member)に応答するエンティティと考えられ得る。したがって、保存されたクエリ140は、保存されたコレクションメンバーシップと呼ばれる可能性がある。
【００２６】
制約は、グラフの経路に関連付けられる。経路は、長さが1であることが多いが、それよりも長い可能性がある。制約は、イコール(==)、ノットイコール(!=)などの論理演算子を含む可能性があり、ターゲットノードを指定する可能性があり、または指定しない可能性がある。経路長1の制約の例は、ノードがparentエッジによって別のノードに接続されなければならないことを意味するparent != NULL、ノードがsiblingエッジを持ってはならないことを意味するsibling == NULL、およびノードがparentエッジによってJohn Doeノードに接続されなければならないことを意味するparent == ”John Doe”である。制約は、alumni.parent.occupation == "President"などのより長い経路を含み得る。この制約を満たすノードは、alumni関係によって第1のターゲットノードに接続されたノードであり、第1のターゲットノードは、parent関係によって第2のターゲットノードに接続されており、第2のターゲットノードは、occupation関係によってPresidentノードに接続されている。制約は、積(&&)、和(||)などのその他の論理演算子を用いて制約式に組み合わされ得る。
【００２７】
システム100は、任意で、クエリエッジインデックス145を含む可能性がある。クエリエッジインデックス145は、エッジ毎に保存されたクエリ140の制約をインデックス付けする。クエリエッジインデックス145は、どの保存されたクエリがグラフに基づくデータストア190に対する更新によって潜在的に影響を受けるかを判定する際の処理時間を改善する可能性があるが、システム100は、どの保存されたクエリが潜在的に影響を受けるかを判定するために保存されたクエリ140から制約を読むだけである可能性もある。
【００２８】
図3は、開示される実装に合致する保存されたクエリ140およびクエリエッジインデックス145に記憶される可能性がある情報の例を示す。保存されたクエリ340は、クエリに関する名前を含み得るクエリ識別子305を含む可能性がある。各クエリは、論理演算子を用いて制約式315に組み合わされ得る1つまたは複数の制約310によって定義される可能性がある。制約310は、経路長1、たとえば、occupation == "President"を表す可能性があり、またはより長い経路長、たとえば、alumni.parent.birthyear.chinese_zodiac == "ox"を表す可能性がある。エンティティがクエリに応答すると考えられるためには、制約式315が、エンティティに関してTRUEであると評価されなければならない。
【００２９】
5つの保存されたクエリの例が、保存されたクエリ340に示される。クエリQ1は、ターゲットノードを指定しない制約を示す。たとえば、制約deathyear == NULLは、この制約を満たすノードがdeathyearエッジを持たないことを示す。他方、保存されたクエリが亡くなった大統領に関するものであったならば、制約は、deathyear != NULLである可能性があり、つまり、この制約を満たすノードは、別のノードとdeathyear関係を持っていなければならないが、ノードは何であってもよい。クエリQ5は、制約式に1つの制約のみを有する保存されたクエリを示す。
【００３０】
図3は、例示的なクエリエッジインデックス345も示す。クエリエッジインデックス345は、任意であり、実装は、クエリエッジインデックス345を含まない可能性がある。クエリエッジインデックス345は、エッジ毎にそれぞれの保存されたクエリに関する制約を記憶する。したがって、たとえば、クエリエッジインデックス345内にoccupationエントリが存在する。occupationエントリに関する各制約は、制約に関するクエリ識別子および制約自体を含む。経路長1の制約は、もちろん、経路に関連付けられるエッジエントリに関連付けられる。したがって、クエリQ1からのoccupation == "President"制約が、職業エッジに関するエントリに含まれる。職業エッジがより長い経路長を有する制約に現れる場合、その制約も、エッジエントリによって含められる。したがって、たとえば、クエリQ3からの制約alumni.spouse.occupation == "President"も職業エントリの下に含まれる。この制約は、alumniエッジおよびspouseエッジに関するエントリにも含まれる。したがって、エッジがグラフに基づくデータストア内で更新される(たとえば、追加されるまたは削除される)とき、システムは、クエリエッジインデックス345を用いて、更新によって潜在的に影響を受ける保存されたクエリからのすべての保存されたクエリおよびターゲットの制約を迅速に特定し得る。当然ながら、クエリエッジインデックス345のない実装において、システムは、同じ情報を得るために保存されたクエリ340を調べる可能性がある。
【００３１】
図1に戻ると、システム100は、保存されたクエリ結果160も含む。保存されたクエリ結果160は、保存されたクエリ140内で特定されるクエリに応答するグラフに基づくデータストア190内のエントリを特定する。それぞれの保存されたクエリが保存されたクエリ結果160内に対応するメンバーを有する必要はないが、大規模なデータグラフ内のすべてのノードに関するクエリ結果を決定するための処理時間の長さが原因で、保存されたクエリ140内のすべてではないにしても多くが、保存されたクエリ結果160に保存された関連する結果を有する。したがって、システムは、グラフに基づくデータストア190全体を用いてクエリ結果のメンバーシップを一度決定し、グラフに基づくデータストア190への更新が起こるときにメンバーシップを更新する可能性がある。保存されたクエリ結果160は、様々なフォーマットを有する可能性がある。一例として、それぞれの保存されたクエリは、グラフに基づくデータストア190内のノードとして表される可能性があり、保存されたクエリに応答するエンティティは、保存されたクエリに関するノードとエッジを共有する可能性がある。したがって、一部の実装において、保存されたクエリ結果160は、グラフに基づくデータストア190のサブセットである可能性がある。そのような実装が、図2のグラフ200において、First Familiesノードおよびそのノードをグラフ200内のその他のノードに接続するエッジとして示される。別の例として、保存されたクエリ結果160は、クエリ識別子をクエリに応答するノードの識別子(たとえば、保存されたクエリ結果)に関連付けるファイルまたはデータベースである可能性がある。
【００３２】
グラフに基づくデータストア190、保存されたクエリ結果160、保存されたクエリ140、およびクエリエッジインデックス145は、有形のコンピュータ可読ストレージデバイス、たとえば、データを準永続的なまたは非一時的な形態で記憶するように構成されたディスク、フラッシュ、キャッシュメモリ、またはこれらの組合せに記憶される。一部の実装において、グラフに基づくデータストア190、保存されたクエリ結果160、保存されたクエリ140、およびクエリエッジインデックス145は、様々なメモリの組合せに記憶される可能性があり、ならびに/または複数の物理的もしくは論理的なコンピューティングデバイスに分散されるようにして記憶される可能性がある。
【００３３】
システム100は、保存されたクエリエンジン150を含む可能性がある。保存されたクエリエンジン150は、保存されたクエリ140を受信し、グラフに基づくデータストア190が更新されるときに、保存されたクエリ結果160を更新するために、1つまたは複数の機械が実行可能な命令またはソフトウェア、ファームウェア、もしくはこれらの組合せを実行するように構成された1つまたは複数のハードウェアプロセッサ153を含む可能性がある。保存されたクエリエンジン150は、独自のプロセッサおよびメモリを有する可能性があり、またはシステム100のその他の構成要素と1つまたは複数のプロセッサおよびメモリを共有する可能性がある。保存されたクエリエンジン150は、グラフに基づくデータストア190に対する更新を収集し、更新を用いて、更新によって影響を与えられる保存されたクエリを特定し、必要に応じて、影響を与えられるクエリの保存された結果(たとえば、メンバーシップ)を修正し得る。グラフに基づくデータストア190に対する更新を効率的に処理するために、保存されたクエリエンジン150は、グラフの探索の結果を記憶し、再利用し得る。保存されたクエリエンジン150は、以前のグラフの探索の結果を一時的探索結果147に記憶する可能性がある。一部の実装において、以前の探索は、ソースノード、たとえば、探索が始まったノードによって記憶される可能性がある。グラフの探索は、ソースノードから始まり、探索の基準を満たすすべてのあり得る経路をたどるグラフ内の順方向または逆方向のウォークである。グラフ内のウォークは時間がかかる可能性があるので、再利用するために更新されるエッジに関連するウォークを省くことは、保存されたクエリエンジン160に対する更新を判定する際の保存されたクエリエンジン150の性能を大幅に改善し得る。一部の実装において、一時的探索結果147は、更新に関するソースノードが変わるときに削除され得る。したがって、システムがソースノード毎に更新をグループ化する実装においては、以前の探索が、更新をまたがって使用され得る。一部の実装において、保存されたクエリエンジン150は、たとえば、クライアント170からクエリの定義を受信する保存されたクエリユーザインターフェース(UI)を含む可能性がある。保存されたクエリエンジン150は、グラフに
基づくデータストア190を用いて、新しく入力された保存されたクエリに関する保存されたクエリ結果をオフラインで決定し得る。
【００３４】
システム100は、簡潔にするために示されていないその他の構成要素も含む可能性がある。たとえば、システム100は、グラフに基づくデータストア190を生成し、維持するためのインデックス付けエンジンを含む可能性がある。インデックス付けエンジンは、たとえば、1つまたは複数のサーバからコンテンツを取得し、コンテンツを用いてグラフに基づくデータストア190を維持する可能性がある。一部の実装において、サーバは、ウェブサーバ、プライベートネットワーク上のサーバ、またはインデックス付けエンジンによってアクセスされ得るその他のソースである可能性がある。インデックス付けエンジンは、1つまたは複数の別個のコンピューティングデバイスである可能性があり、一部の実装においては、グラフエンジン110が、グラフに基づくデータストア190のためのインデックス付けエンジンを含む可能性がある。システム100は、グラフに基づくデータストア190を用いて、通常のまたはその他の情報検索技術を使用してクエリに関する検索結果を決定する検索エンジンも含み得る。一部の実装において、検索エンジンは、保存されたクエリ結果160を用いて検索結果を決定する可能性もある。
【００３５】
システム100は、ネットワーク180を介してクライアント170と通信する可能性がある。ネットワーク180は、たとえば、インターネットである可能性があり、またはたとえばゲートウェイデバイス、ブリッジ、スイッチなどを使用して実装された有線もしくはワイヤレスローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)などである可能性がある。ネットワーク180を介して、グラフエンジン110および/または保存されたクエリエンジン150は、クライアント170と通信し、クライアント170に/からデータを送信し得る。
【００３６】
図4は、開示される実装に合致する、保存されたクエリ結果をリアルタイムで効率的に更新するための例示的なプロセス400の流れ図を示す。プロセス400は、図1のシステム100などのシステムによって実行され得る。システムは、周期的なバッチまたはオフライン更新プロセスを待つのではなく、グラフに基づくデータストアに対して更新が行われるときに、プロセス400を用いて保存されたクエリ結果をリアルタイムで更新し得る。これは、システムが記憶されたクエリのメンバーシップの古さを避けることを可能にする。一部の実装において、プロセス400は、保存されたクエリエンジンによって実行される実行され得る。
【００３７】
プロセス400は、システムがソースノード、エッジ、およびターゲットノードを特定するグラフの更新を受信することから始まる可能性がある(405)。一部の実装において、システムは、いくつかのグラフの更新を受信し、同じソースノードを含むすべての更新が一緒にグループ化されるように、ソースノード毎に更新をグループ化する可能性がある。たとえば、グラフに対する更新が行われた後直ちに実行されるのではなく、システムは、更新を収集するべき、たとえば、最大1分の短い遅延を有する可能性がある。このようにして、システムは、同じソースノードを含むいくつかの更新を利用することができる。システムは、処理するためにグループ化された更新の中の更新のうちの1つまたは複数を選択する可能性がある。たとえば、同じソースノードを含む更新に関して、システムは、プロセス400を並列に実行する可能性がある。そして、システムは、ターゲットの制約とも呼ばれる、更新によって潜在的に影響を受ける制約を特定し得る(410)。ターゲットの制約は、更新されるトリプル内で特定されるエッジを含む経路を指定する制約である。
【００３８】
システムは、ターゲットの制約(たとえば、グラフに対する更新のエッジを特定する制約)を特定すると、ターゲットの制約の各々に関する状態を決定し得る(415)。制約の状態は、TRUE、FALSE、およびUNKNOWNである。状態TRUEは、グラフに基づくデータストア内に制約を満たす少なくとも1つの方法が存在することを示す。たとえば、グラフに基づくデータストア内のノードが追加されたエッジを使用して制約を満たすか、またはエッジが削除された後でさえも制約を満たす場合、制約は満たされる。別の例として、制約が否定である場合、追加されたエッジにもかかわらず部分グラフが存在しないことが、制約を満たす可能性がある。逆方向探索(backward lookup)をともなう制約の場合(たとえば、追加されるエッジのソースノードが制約の中間ノードである場合)、逆方向探索は、制約が2つ以上のノードに関してTRUEの状態を有することを意味する可能性がある。これは、図7および図8に関連してより詳細に説明される。エッジに関する状態FALSEは、更新されるエッジが制約を満たさないことを意味する。UNKNOWN状態は、さらなる探索が必要とされることを示す。システムは、たとえば、制約がOR演算子によって接続された一連の制約のうちの1つであり、その他の制約がより短い経路または保存された探索結果を有する場合、効率的にするために、複数のホップを有する制約に関するグラフの探索を延期する可能性がある。マルチホップグラフの探索は非常に高価であるため、より長い経路の制約がより短い経路の制約と選言的に組み合わされるときにそのより長い経路の制約におけるより長いグラフの探索を延期することは、処理時間を節約する可能性がある。たとえば、クエリQ2は、(たとえば、OR演算子によって)選言的に組み合わされた3つの制約を含む。最初の2つの制約は、経路長2を含み、一方、最後の制約は、経路長3を含む。追加されるエッジのソースノードが第1の制約をTRUEにする場合、より長い経路の探索は必要とされない。したがって、システムは、より長い経路による制約の状態をUNKNOWNに設定し、グラフの探索が最初の2つの制約のうちの1つに合致しない場合にのみ探索を実行する可能性がある。一部の実装において、システムは、図5のプロセス500または図6のプロセス600
などのインテリジェントな選択プロセスを使用する可能性がある。
【００３９】
ターゲットの制約が評価され、状態を割り振られると、システムは、ターゲットの制約のうちの少なくとも1つに関する保存されたクエリのためのクエリの定義を探索し、クエリに関する制約式を縮約する可能性がある(420)。たとえば、図3のクエリQ2は、そのクエリの制約式内に3つの制約を有する。parent.occupation == "President"制約がJack Doeノードに関してTRUEの状態を有するターゲットの制約である場合、システムは、制約式内の第1の制約に第1の制約の状態を代入し、制約式が解かれ得るかどうかを判定する。たとえば、上の例を使用してC2のクエリの定義を縮約することは、(TRUE || spouse.occupation == "President" || parent.parent.occupation== "President")のように見える。C2の縮約されたクエリの定義は、制約の選言の中の1つの制約がTRUEであるのでTRUEになる。
【００４０】
システムは、縮約された制約式がTRUEになるのかまたはFALSEになるのかを判定する可能性がある(425)。上で示されたように、これは、一連の選言的制約の中の1つの制約がTRUEであるときに起こり得る。この場合、システムは、制約式をTRUEにするのにTRUEの状態を有する1つの制約で十分であるのでその他の制約を評価する必要がない。同様に、一連の選言的制約の中の1つの制約がFALSEである場合、システムは、その他の制約を評価する必要がない。制約式がTRUEにもFALSEにもならない場合(425、No)、システムは、制約式の中の解かれていない制約のうちの1つまたは複数を選択し、解かれていない制約に関する状態を決定する可能性がある(440)。一部の実装において、システムは、図5のプロセス500または図6のプロセス600などのインテリジェントな選択プロセスを使用する可能性がある。そして、システムは、制約のうちの1つまたは複数に関して決定された状態を使用して制約式を縮約し得る(420)。したがって、ステップ420から440までは、どのノードがグラフの更新によって影響を受けるクエリ結果のメンバーである可能性があるかを判定するための制約の反復的評価、グラフの探索、および制約式の縮約を表す。そのような反復的プロセスは、システムがグラフ内の最小限の探索を実行することを可能にし、どの保存されたクエリ結果がグラフの更新によって影響を受けるのかを判定するのに費やされる処理時間を減らす。
【００４１】
制約式がTRUEかまたはFALSEになる場合(425、Yes)、システムは、クエリに関する記憶されたメンバーシップを更新し得る(430)。制約式がTRUEになる場合に追加されるエッジに関するメンバーシップを更新するために、システムは、ソースノードがクエリに関する保存された結果内にまだない場合、保存されたクエリ結果に適切なソースノードを追加し得る。制約式がFALSEになる場合に削除されるエッジに関するメンバーシップを更新するために、システムは、適切なソースノードが保存されたクエリ結果内に存在する場合、保存されたクエリ結果からそれらのソースノードを削除し得る。それ以外の場合、結果は更新されるトリプルによって影響を受けないので、システムは、クエリ結果を維持する、または言い換えればクエリ結果をそのままにしておく可能性がある。
【００４２】
ターゲットの制約を有するその他のクエリが存在する場合(435、Yes)、システムは、残りのターゲットの制約のうちの1つまたは複数に関する別のクエリを選択し、そのクエリに関してステップ420から440までを繰り返す可能性がある。そうでない場合、プロセス400は終了し、システムが、グラフに対する更新に応答して、更新された影響を受けた保存されたクエリ結果を有する。
【００４３】
図5は、開示される実装に合致する、エッジがグラフに追加された後に制約をインテリジェントに選択し、評価するための例示的なプロセス500の流れ図を示す。プロセス500は、図4のステップ415または440の一部としてシステムの保存されたクエリエンジンによって実行される可能性がある。システムは、プロセス500を用いて、評価するために制約をインテリジェントに選択し、グラフに基づくデータストアに対する更新の後に保存されたクエリ結果への変更をより効率的に判定するために、その他の制約に関して実行されたグラフの横断を再利用し得る。システムは、少なくとも1つのターゲットの制約を有するクエリに関する制約式の中の制約のためにプロセス500を実行し得る。プロセス500は、更新のエッジが制約内の唯一のエッジであるかどうかを判定することによって始まる可能性がある(505)。言い換えれば、グラフの更新のエッジが制約内の唯一のエッジに合致する場合(505、Yes)、システムは、いかなるグラフの探索も実行する必要がなく、メンバーノードを更新のソースノードに設定し、メンバーターゲットノード(member target node)を更新の目的語ノードに設定する可能性がある(510)。メンバーノードは、評価されている制約を含むクエリ結果内のノードの組の潜在的なメンバーであるノードである。メンバーターゲットノードは、制約内で指定された経路を通ってメンバーノードから到達されるノードである。単一エッジを有する制約においては、更新されるトリプルのエッジを通って更新されるトリプルのソースノードから到達されるいかなるその他のノードも更新によって影響を受けないので、更新されるトリプルのソースノードがメンバーノードであり、更新されるトリプルのターゲットノードがメンバーターゲットノードである。言い換えれば、メンバーシップが変わらず、システムがこのメンバーシップを再検証する必要はない。同様に、更新のエッジが2以上の経路長を有する制約の第1のエッジである場合、いずれのグラフの探索も更新のソースノードからのグラフ内の順方向のウォークのみを含むので、更新のソースノードが、やはり唯一の潜在的なメンバーノードである。この状況では、更新されるトリプルのターゲットノードは、メンバーターゲットノードではない。この状況におけるメンバーターゲッ
トノードは、制約内で指定された経路を通って目的語ノードから1つまたは複数のターゲットメンバーノード(target member node)までグラフを横断することによって特定される。システムが制約内で指定された経路をたどって少なくとも1つのメンバーターゲットノードに到達することができない場合、メンバーノードに関するメンバーターゲットノードはNULLであり、つまり、グラフはメンバーノードから制約内の経路に合致するいずれかのその他のノードまでの経路を含まない。
【００４４】
メンバーノードは、いつも追加されるトリプルのソースノードであるとは限らない。たとえば、追加されるトリプルのエッジが制約の経路の中の第1のエッジでないとき、グラフの探索は、更新されるトリプルのソースノードからの逆方向のウォークを含み、メンバーノードは、逆方向のウォークで到達される1つまたは複数のノードである。そのような状況におけるメンバーターゲットノードは、以下でより詳細に説明されるように、追加されるトリプルを通ってメンバーノードから到達されるノードである。
【００４５】
システムは、横断に基づいて各メンバーノードに関する制約の状態を設定する可能性がある(550)。メンバーノードが制約を満たすか否かは、メンバーノードに関して特定された1つのメンバーターゲットノード(または複数のメンバーターゲットノード)に依存する。たとえば、メンバーノードが制約を満たす少なくとも1つのメンバーターゲットノードに関連付けられる場合、制約の状態はそのメンバーノードに関してTRUEであり、そうでない場合、その状態はFALSEである。設計により、メンバーターゲットノードは、グラフの更新(たとえば、グラフの更新のソース、エッジ、およびターゲットノード)によってメンバーノードから到達されるノードである。これは、システムがメンバーノード毎に0個、1つ、または複数のメンバーターゲットノードまで横断する結果を生じる可能性がある。1つのメンバーターゲットノードが制約条件に合致する限り、メンバーノードに関する制約の状態はTRUEである。システムが制約の状態を設定すると、プロセス500は、その制約に関して終了する。
【００４６】
更新のエッジが制約内の唯一のエッジでない場合(505、No)、システムは、制約が単一エッジの探索を含むかどうかを判定する可能性がある(515)。単一エッジは、更新のエッジが経路長2の制約の一部である場合、制約を含む。たとえば、グラフの更新が<Jack Doe, parent, Jane Doe>であり、制約がalumni.parent == "Jane Doe"である場合、システムは、alumniエッジのみがメンバーノードを見つけるために逆方向に横断される必要があるので、これを単一エッジの探索と考え得る。そのような例において、メンバーターゲットノードは「Jane Doe」であり、順方向の横断は必要とされない。同様に、制約がparent.occupation == "President"である場合、システムは、メンバーノードがJack Doeであり、occupationエッジを通るJane Doeからの順方向探索のみがメンバーターゲットノードを特定するために必要とされるので、これを単一エッジの探索と考え得る。occupationエッジがJane Doeに関して存在しない場合、システムは、メンバーターゲットノードをNULLに設定し得る。加えて、グラフの更新のエッジが経路長3の制約の中間のエッジである場合、システムは、これを単一エッジ、たとえば、単一の逆方向エッジおよび単一の順方向エッジと考え得る。たとえば、制約がalumni.parent.occupation == "President"であり、追加されるトリプルが<Jack Doe, parent, Jane Doe>である場合、追加されるトリプルは、制約内の中間のエッジを満たし、システムは、occupationエッジを通ってJane Doeから1つのエッジを横断して潜在的なターゲットメンバーノードを決定し、alumniエッジを通ってJack Doeからグラフを横断してメンバーノードを決定し得る。したがって、制約が単一エッジの探索である場合(515、Yes)、システムは、今述べたように、グラフを横断してメンバーノードおよびターゲットメンバーノードを特定する可能性がある(520)。一部の実装において、システムは、一時的探索テーブルに探索の結果を保存する可能性がある(545)。これは、システムがその他の制約の将来の評価の際に探索の結果を再利用することを可能にする。
【００４７】
システムは、横断に基づいて各メンバーノードに関する制約の状態を設定する可能性がある(550)。たとえば、メンバーノードから始まるグラフの横断がエッジがメンバーノードに関して存在しないことを示し、制約が==NULL条件を含む場合、システムは、メンバーノードに関して状態をTRUEに設定し得る。制約が!=NULL条件を含む場合、システムは、そのメンバーノードに関して状態をFALSEに設定し得る。制約が特定のノードをターゲットノードとして指定し、メンバーターゲットノードが制約内で指定されたノードと合致しない場合、システムは、メンバーノードに関する状態をFALSEに設定し、そうでない場合、TRUEに設定する。たとえば、制約が== "President"条件を含み、ターゲットメンバーノードがPresidentノードを含まない場合、システムは、状態をFALSEに設定し得る。ターゲットメンバーノードがPresidentノードを確かに含む場合、システムは、状態をTRUEに設定し得る。システムは、どのメンバーノードが制約を満たすのかをそのシステムが追跡し得るように、メンバーノードを適切な状態とペアにする可能性がある。それから、プロセス500は、制約に関して終了する。
【００４８】
制約が単一の探索を含まない場合(515、No)、システムは、制約が記憶された探索結果を有する経路を含むかどうかを判定する可能性がある(525)。たとえば、システムは、以前のグラフの探索からの結果を、たとえば、図1の一時的探索結果147などのデータストアに一時的に記憶する可能性がある。これは、システムが以前の制約に関して実行された仕事を再利用することを可能にする。これは、保存された探索がグラフに対する複数の更新にまたがって使用され得るようにシステムがソースノード毎に更新をグループ化するときに特に効率的である。保存された探索は、ソースノード、たどられた経路、および経路を通ってたどり着かれたすべてのターゲットノードを含む可能性がある。
【００４９】
制約が対応する保存された探索結果を有する経路を含む場合(525、Yes)、システムは、保存された探索結果を用いて制約に関するメンバーノードおよびメンバーターゲットノードを決定し得る(530)。上で示されたように、メンバーノードは、潜在的に制約を満たすことができ、したがって、潜在的にクエリに応答するノード(たとえば、保存されたクエリ結果内のノードの組のメンバー)であるノードである。それぞれの保存された探索結果は、ソースノードと、ソースノードから保存された経路を通って到達されたすべてのターゲットノードとを含み得る。保存された探索内のソースノードは、制約に応じて、メンバーノードである可能性があるか、またはメンバーノードを決定するために使用される可能性がある。たとえば、グラフの更新が<Bill Clinton, occupation, President>であり、評価される制約がalumni.parent.occupation == "President"であり、保存された探索がparentエッジを通るBill Clintonからの逆方向の探索を含む場合、Chelsea Clintonが、一時的探索結果に保存されたターゲットノードである可能性がある。したがって、制約alumni.parent.occupationを評価するとき、システムは、alumniを通るChelsea Clintonからの経路を評価して、図2の例示的なグラフを使用してメンバーノード、たとえば、ColumbiaおよびStanfordを決定しさえすればよい可能性がある。一方、評価される制約がparent.occupationである場合、Bill Clinton->parentに関する保存された探索内にあるターゲットノードChelsea Clintonはメンバーノードである。グラフを横断するとき、システムは、ステップ515において単一エッジの探索に関連して上で説明されたように、順方向および逆方向のウォークを実行する必要がある可能性がある。順方向および逆方向のウォークは、それら自体が2つ以上の探索を含む可能性がある。場合によっては、制約は、保存される逆方向のウォークおよび保存されない順方向のウォーク、またはその逆を含む可能性がある。したがって、以前のグラフのウォークからの保存された探索結果を使用することは、どのウォークが保存されるかに応じて、メンバーノードかまたはメンバーターゲットノードかのどちらかを決定するためのさらなるグラフの探索を含む可能性がある。システムは、上述のように、横断に基づいて、特定された各メンバーノードに関して制約の状態を設定し得る(550)。
【００５０】
制約が保存された探索を含まない場合(525、No)、システムは、制約がクエリの定義に関する最も短い解かれていない経路の長さを有するかどうかを判定する可能性がある(535)。たとえば、図3のクエリQ4は、経路長5を有する2つの制約と、経路長3を有する1つの制約を含む。一部の実装において、システムは、制約式の構造を用いて、制約が制約式の特定の部分に関する最も短い解かれていない経路の長さを有するかどうかを判定し得る。したがって、たとえば、式が選言的な一連の制約である場合、システムは、制約が一連の制約内の制約の最も短い経路の長さを有するかどうかを判定し得る。プロセス500がターゲットの制約のみを評価するときに呼び出される場合(たとえば、図4のステップ415)、システムは、制約が完全なクエリの定義ではなく保存されたクエリに関するターゲットの制約の最も短い経路の長さであるかどうかを判定し得る。システムは、制約が最も短い経路の長さを有すると判定する場合(535、Yes)、グラフを横断して、もしあれば、メンバーノードおよびそれらのメンバーノードのそれぞれのメンバーターゲットノードを特定し得る。上述のように、これは、グラフ内の順方向のウォークと逆方向のウォークとの両方を含む可能性がある。システムは、結果が再利用され得るように、横断中になされた探索の結果を保存し得る(545)。システムは、上述のように、各メンバーノードに関する制約の状態を設定する可能性がある(550)。
【００５１】
システムは、制約が最も短い経路を持たないと判定する場合(535、No)、制約の状態をUNKNOWNに設定し得る(555)。これは、システムが、制約を評価することが必要とされる場合に後でそのような評価をするのを待つことを意味する。このようにして、システムは、より複雑な横断が保存されたクエリに対する特定のメンバーノードの応答性(responsiveness)を解決するために必要でない場合、そのような横断を先送りし得る。
【００５２】
図5に示されたプロセス500は、制約をインテリジェントに評価する一例である。もちろん、一部の実装において、システムは、各制約に直面したときにその制約を完全に評価し、必要に応じて任意のグラフの横断の結果を保存する可能性がある。そのような実装において、システムは、利用可能な場合、保存された探索を使用し(たとえば、ステップ525および530)、そうでない場合、グラフを横断し(たとえば、ステップ540)、横断の結果を保存し(545)、状態をUNKNOWNに設定する可能性がある。加えて、たとえば、ステップ515の一部として単一の探索の代わりに長さ2の探索を常に実行するなど、その他の変更形態が、制約の評価を最適化する際に使用される可能性があることは、本開示から明らかであろう。さらに、一部の実装においては、メンバーノードに関する制約のステータスを設定すること(ステップ550)が、メンバーノードおよび/またはメンバーターゲットノードを特定することの一部として実行される可能性があることが理解される。したがって、図5に示されたステップの順序は例示的であるに過ぎず、実装は示された順序に限定されない。
【００５３】
図6は、開示される実装に合致する、エッジがグラフから削除された後に制約をインテリジェントに選択し、評価するための例示的なプロセス600の流れ図を示す。プロセス600は、図4のステップ415または440の一部としてシステムの保存されたクエリエンジンによって実行される可能性がある。システムは、プロセス600を用いて、評価するために制約をインテリジェントに選択し、グラフに基づくデータストアに対する更新の後に保存されたクエリ結果への変更をより効率的に判定するために、その他の制約に関して実行されたグラフの横断を再利用し得る。システムは、少なくとも1つのターゲットの制約を有する保存されたクエリの制約式の中の制約のためにプロセス600を実行し得る。プロセス600は、削除されるエッジが制約内の唯一のエッジであるかどうかを判定することによって始まる可能性がある(605)。言い換えれば、グラフの更新のエッジが制約内の唯一のエッジに合致する場合(605、Yes)、システムは、メンバーノードを削除されるエッジのソースノードに設定し、メンバーターゲットノードを探す可能性がある(610)。追加されるトリプルとは異なり、削除されるトリプルのターゲットノードは、エッジがグラフ内にもはや存在しないので有効なメンバーターゲットノードではない。したがって、システムは、メンバーノード(たとえば、削除されるトリプルのソースノード)からグラフを横断して、そのメンバーノードが制約のエッジに合致するエッジによって別のノードに接続されているかどうかを判定する可能性がある。たとえば、削除されるトリプルが<Jack Doe, parent, John Doe>であり、制約がparent != NULLである場合、システムは、Jack DoeからJohn Doe以外のノードへの別のparentエッジが存在するかどうかを判定する可能性がある。存在する場合、その他のノードがメンバーターゲットノードである。システムは、横断に基づいてメンバーノードに関する制約の状態を設定する可能性がある(650)。グラフへの追加と同様に、メンバーノードが制約を満たすか否かは、特定された1つのメンバーターゲットノード(もしくは複数のメンバーターゲットノード)、またはメンバーノードに関してメンバーターゲットノードを特定できないことに依存する。上の
例について続けると、メンバーノードが親関係によって少なくとも1つのその他のノードと関連付けられない場合、メンバーターゲットノードはNULLであり、制約parent != NULLは満たされず、FALSEの状態を受け取る。システムが制約の状態を設定すると、プロセス600は、その制約に関して終了する。
【００５４】
更新のエッジが制約内の唯一のエッジでない場合(605、No)、システムは、制約が単一エッジの探索を含むかどうかを判定する可能性がある(615)。追加されるトリプルのように、削除されるトリプルに関する単一エッジは、削除されるトリプルのエッジが経路長2の制約の一部である場合、制約を含む。しかし、追加されるトリプルとは異なり、削除されるトリプルのエッジが制約の中間のエッジである場合の制約は、単一エッジの探索ではない。これは、削除されるトリプルが中間のエッジの要件をもはや満足しないからである。その代わりに、システムは、すべての潜在的なメンバーノードを(もしあれば)特定するために逆方向の探索を実行し、すべてのあり得るメンバーターゲットノードを決定するために順方向の探索を行い、3つのエッジによって規定された経路をたどる必要がある。したがって、少なくとも3つのエッジの順方向の探索が必要とされ、そのような制約は単一エッジの探索を満たし得ない。制約が単一エッジの探索である場合(615、Yes)、システムは、今述べたように、グラフを横断してメンバーノードおよびターゲットメンバーノードを特定する可能性がある(620)。一部の実装において、システムは、一時的探索テーブルに探索の結果を保存する可能性がある(645)。これは、システムがその他の制約の将来の評価の際に探索の結果を再利用することを可能にする。システムは、横断および特定されたメンバーターゲットノードに基づいて各メンバーノードに関する制約の状態を設定する可能性がある(650)。システムは、どのメンバーノードが制約を満たすのかをそのシステムが追跡し得るように、メンバーノードを適切な状態とペアにする可能性がある。それから、プロセス600は、制約に関して終了する。
【００５５】
制約が単一の探索を含まない場合(615、No)、システムは、制約が記憶された探索結果を有する経路を含むかどうかを判定する可能性がある(625)。たとえば、システムは、以前のグラフの探索からの結果を、たとえば、図1の一時的探索結果147などのデータストアに一時的に記憶する可能性がある。これは、以前の制約に関して実行された仕事を再利用することを可能にし、保存された探索がグラフに対する複数の更新にまたがって使用され得るようにシステムがソースノード毎に更新をグループ化するときに特に効率的である。保存された探索は、ソースノード、たどられた経路、および経路を通ってたどり着かれたすべてのターゲットノードを含む可能性がある。システムは、グラフの更新のソースノードが変わるときにすべての保存された探索を削除する可能性がある。
【００５６】
制約が保存された探索を含む場合(625、Yes)、システムは、削除されるエッジがグラフを横断するために使用され得ないことを除いて、図5に関連して上で説明されたように、保存された探索のターゲットノードを用いて制約に関するメンバーノードおよびメンバーターゲットノードを決定し得る(630)。システムは、上述のように、横断に基づいて、特定された各メンバーノードおよびメンバーターゲットノードに関して制約の状態を設定し得る(650)。
【００５７】
制約が保存された探索を含まない場合(625、No)、システムは、図5に関連して上で説明されたように、制約がクエリの定義に関する最も短い解かれていない経路の長さを有するかどうかを判定する可能性がある(635)。システムは、制約が最も短い経路の長さを有すると判定する場合(635、Yes)、横断が任意の逆方向のウォークを最初に行ってメンバーノードを特定し、制約内で指定された経路を用いて各メンバーモードからの順方向のウォークを行って潜在的なメンバーターゲットノードを特定することを除いて、図5に関連して上で説明されたように、グラフを横断して、メンバーノードおよびメンバーターゲットノードを適切に特定し得る。もちろん、制約に関して2つ以上のメンバーノードが存在するときは、制約が1つのメンバーノードに関してはTRUEの状態を有し、別のメンバーノードに関してはFALSEの状態を有することがあり得る。システムは、結果が再利用され得るように、横断中になされた逆方向および順方向の探索の結果を保存し得る(645)。システムは、上述のように、各メンバーノードに関する制約の状態を設定する可能性がある(650)。
【００５８】
システムは、制約が最も短い経路を持たないと判定する場合(635、No)、制約の状態をUNKNOWNに設定し得る(655)。これは、システムが、制約を評価することが必要とされる場合に後でそのような評価をするのを待つことを意味する。このようにして、システムは、より複雑な横断が保存されたクエリに対する特定のメンバーノードの応答性を解決するために必要でない場合、そのような横断を先送りし得る。
【００５９】
プロセス500と同様に、図6に示されたプロセス600は、一例であり、実装は、ステップを組み合わせる可能性、ステップの順序を変える可能性、一部のステップのみを実行する可能性などがあり、示された順序またはステップに限定されない。
【００６０】
図7および図8は、図2のデータグラフおよび図3の例示的な保存されたクエリ340を用いてクエリのメンバーシップをリアルタイムで更新する例を示す。図7の例においては、図2のトリプル<Duke, alumni, Jack Doe>がグラフ200から削除される。したがって、更新されるトリプルは<Duke, alumni, Jack Doe>である。一部の実装において、システムは、更新に応答して削除によって影響を受ける保存されたクエリ結果を更新する可能性があり、一部の実装において、システムは、たとえば、5分未満の短い期間内に起こる更新をグループ化し、それから、更新のグループに基づいて保存されたクエリ結果を更新する可能性がある。グループ化は、更新されるトリプルのソースノード毎に行われる可能性がある。いずれの実装においても、更新が、保存された探索結果を更新するプロセスをトリガする。したがって、保存されたクエリ結果は、リアルタイムで発生する。
【００６１】
削除されるトリプルを受信した後、システムは、ターゲットの制約を特定し得る。上で示されたように、ターゲットの制約は、削除されるトリプルによって特定されたエッジを含む制約である。一部の実装において、システムは、図3のクエリエッジインデックス345などのインデックスを用いてターゲットの制約を特定する可能性がある。たとえば、インデックス345を用いて、システムは、インデックス内のalumniエッジに関するエントリを見つけ、alumniエッジに関するエントリをターゲットの制約として特定する可能性がある。一部の実装において、システムは、保存されたクエリ340を読み、alumniエッジを含む制約を探す可能性がある。図2のグラフ200と、保存されたクエリ340と、任意で、クエリエッジインデックス345とに基づいて、システムは、ターゲットの制約705を特定し得る。それから、システムは、ターゲットの制約を評価し得る。一部の実装において、システムは、制約をインテリジェントに評価し得る。たとえば、クエリQ3に関する2つの制約はそれぞれが経路長3を有し--それらの制約はそれぞれクエリQ3のターゲットの制約に関する最も短い経路の長さであり、システムはグラフを横断してメンバーノードおよび各メンバーノードに関する制約の状態を決定し得る。削除されるトリプルのエッジがalumniであり、alumniがクエリQ3内のそれぞれのターゲットの制約の最初のエッジであるので、メンバーノードは、削除されるトリプルのソースノード、Dukeである。したがって、これらの制約に関してグラフを横断することは、Dukeノードからのグラフ内の順方向のウォークを含む。
【００６２】
図2のグラフを使用すると、Dukeノードは、今や<Duke, alumni, Jack Doe>エッジが削除されるので1つのalumniエッジのみを含む。したがって、最初の制約を評価する際、システムは、John Doeノードまでalumniをたどる。John Doeは、Jack Doeノードとのparent関係を有するが、Jack Doeノードは、occupationエッジを持たない。したがって、システムは、メンバーターゲットノードをNULLに割り振る。制約alumni.parent.occupation == "President"はメンバーシップの条件がメンバーターゲットノードPresidentであることを示すので、NULLのメンバーターゲットノードは制約を満たすことができず、したがって、システムはDukeメンバーノードに関して制約の状態をFALSEに設定する。図2のグラフは無向グラフであることを理解されたい。一部の実装において、グラフは、有向である可能性があり、たとえば、parentエッジは、子ノードから親ノードに向かってのみ(たとえば、Jack DoeからJohn Doeに向かってのみ)通じている可能性がある。そのようなグラフにおいて、システムは、Jack Doeノードから出て行くparent関係を見ず、これは、この制約に関してNULLのメンバーターゲットノードおよびFALSEの状態をやはりもたらす。
【００６３】
そして、システムは、クエリQ3に関する2番目の制約を評価する可能性がある。Dukeノードは、John Doeノードとのalumni関係を有し、John Doeノードは、Jane DoeノードとSpouse関係を有する。Jane Doeノードは、Presidentノードとのoccupation関係を有し、メンバーノードDukeに関してメンバーターゲットノードをPresidentにする。メンバーターゲットノードPresidentが制約内の条件に合致するので、システムは、Dukeメンバーノードに関して制約alumni.spouse.occupation == "President"の状態をTRUEに設定する。
【００６４】
また、システムは、クエリQ4に関するターゲットの制約を評価し得る。ターゲットの制約は、経路長5の2つの制約と経路長2の1つの制約とを含む。システムは、評価するためにalumni.alumni != NULL制約を選択し、残りの2つのターゲットの制約の経路長がより長いのでそれらの残りの2つのターゲットの制約の状態をUNKNOWNに設定し得る。alumni関係が制約alumni.alumni != NULLの経路内の最初の関係であるので、システムは、メンバーノードを削除されるトリプルのソースノード、Dukeに設定し得る。システムは、グラフをウォークし、Dukeノードが別のノード--John Doeノードとのalumni関係を有すると判定し得る。一部の実装において、システムは、保存されたグラフの探索を用いてこの関係が存在すると判定し得る。John Doeノードは、Michiganノードとのalumni関係を有する。したがって、メンバーターゲットノードはMichiganである。メンバーターゲットノードがNULLでないので、制約は満たされ、システムはDukeノードに関する制約の状態をTRUEに設定する。
【００６５】
最後に、システムは、クエリQ5に関するターゲットの制約を評価する可能性がある。この制約は、1つのエッジだけを有し、したがって、システムは、alumniエッジを通ってDukeノードからJohn Doeまでグラフを横断し得る。これは、経路の終わりであり、したがって、John Doeノードはメンバーターゲットノードである。メンバーターゲットノードが制約によって指定された「Jack Doe」でないので、システムは、Dukeメンバーノードに関してこの制約に関する状態をFALSEに設定する。
【００６６】
システムは、クエリの定義内の制約に制約の状態を代入することによって様々なクエリの定義を縮約し得る。これは、図7の縮約された定義710をもたらす。システムは、縮約された定義を評価して、制約式がTRUEになるのかもしくはFALSEになるのか、またはさらなる探索が必要とされるかどうかを判定することができる。図7に示されるように、クエリQ3に関する制約式は、Dukeに関してTRUEとなり、クエリQ5に関する制約式は、Dukeに関してFALSEになる。クエリQ4に関する制約式は、さらなる探索が必要とされるのでまだ解けない。alumni.alumni != NULL制約がFALSEになっていたならば、C4に関する縮約された制約式がFALSEになるのでさらなる探索が必要とされなかったことに留意されたい。
【００６７】
システムは、715において、解かれたクエリに関する保存されたクエリ結果を更新し得る。クエリQ5がFALSEになり、これがトリプルの削除であるので、Dukeノードは、Q5クエリから削除されるべきである。クエリQ3はTRUEになり、これがトリプルの削除であるので、変更は必要とされず(たとえば、削除がメンバーシップに影響を与えなかった)、システムはクエリQ3の保存された結果に関するメンバーシップを維持する可能性がある。図7は異なる保存されたクエリ内の制約のグループに作用する評価、縮約、および更新ステップを示すが、一部の実装において、システムは、一度に1つのクエリずつメンバーシップを評価、縮約、および更新する可能性があることが理解される。たとえば、システムは、Q4の制約の評価、Q4のクエリ定義の縮約などを行う前に、クエリQ3に関する制約を評価し、Q3に関するクエリの定義を縮約し、それから、Q3のメンバーシップを更新する可能性がある。したがって、実装は、図7に示された順番に限定されない。
【００６８】
クエリQ4はまだ解かれていないので、システムは、UNKNOWN状態の制約またはクエリ内のターゲットの制約ではなかった制約を評価する可能性がある。図7の例においては、同じ経路長をそれぞれ有する、評価されるべき2つの制約が存在する。したがって、システムは、alumni.parent.birthyear.chinese_zodiac == "ox"制約内で特定される経路をたどってDukeからグラフ内のウォークを開始する可能性がある。削除によって図2のグラフ内にそのような経路が存在しないので、メンバーターゲットノードはNULLであり、これは制約を満たさず、システムはDukeメンバーノードに関して制約の状態をFALSEに設定する。システムは、たとえば、そのような経路が存在しないことを示す探索の結果を保存した可能性があり、それらの結果を用いて、alumni.parent.birthyear.chinese_zodiac == "dog"制約もDukeノードに関して満たされないと判定する可能性がある。したがって、システムは、Dukeノードに関してこの制約の状態をやはりFALSEに設定する可能性がある。そして、システムは、クエリの定義を縮約し、そのクエリの定義がFALSEになると判定する可能性がある。そのクエリの定義がFALSEになり、更新が削除されるトリプルであるので、システムは、Q4の保存されたクエリ結果からDukeノードを削除し得る。システムは、今や、トリプルの削除によって影響を受ける保存されたクエリ結果を更新済みであり、グループ内の次のトリプルを処理することに取りかかる可能性があり、またはデータグラフに対する別の更新を待つ可能性がある。
【００６９】
図8の例において、トリプル<Jack Doe, parent, Jane Doe>は、図2のグラフ200に追加済みである。したがって、更新されるトリプルは、<Jack Doe, parent, Jane Doe>である。一部の実装において、システムは、更新に応答して追加によって影響を受ける保存されたクエリ結果を更新する可能性があり、一部の実装において、システムは、たとえば、5分未満の短い期間内に起こる更新をグループ化し、それから、更新のグループに基づいて保存されたクエリ結果を更新する可能性がある。グループ化は、更新されるトリプルのソースノード毎に行われる可能性がある。図8の例は、図7に関連して検討された削除のない、図2に示されたグラフ200を用いる。したがって、図8の例は、図7の例とは独立している。しかし、図8に示されるイベントの前に削除が確かに起こった場合、Dukeノードは、そのノードのJack Doeとのalumni関係がもはや存在しないので有効なメンバーノードではない。
【００７０】
追加されるトリプルを受信した後、システムは、ターゲットの制約を特定し得る。上で示されたように、ターゲットの制約は、追加されるトリプルによって特定されたエッジを含む制約である。一部の実装において、システムは、図3のクエリエッジインデックス345などのインデックスを用いてターゲットの制約を特定する可能性がある。たとえば、クエリエッジインデックス345を用いて、システムは、インデックス内のparentエッジに関するエントリを見つけ、parentエッジに関するエントリをターゲットの制約として特定する可能性がある。一部の実装において、システムは、保存されたクエリ340を読み、parentエッジを含む制約を探す可能性がある。図2のグラフ200と、保存されたクエリ340と、任意で、クエリエッジインデックス345とに基づいて、システムは、ターゲットの制約805を特定し得る。それから、システムは、ターゲットの制約を評価し得る。一部の実装において、システムは、制約をインテリジェントに評価し得る。言い換えれば、システムは、より短い探索経路を有する制約、または評価のために保存された仕事を再利用し得る制約を選択し得る。たとえば、クエリQ2に関する一方のターゲットの制約は経路長2を有し、他方のターゲットの制約は経路長3を有する。システムは、より短い経路長を有する制約を選択する可能性があり、またはparent.occupation == "President"制約が単一エッジの探索を含む(追加されるトリプルが経路内の最初のエッジを満たす)のでそのparent.occupation == "President"制約を選択する可能性がある。システムは、クエリQ2のparent.parent.occupation== "President"制約を評価するまで待つことを選択し、さしあたりこの制約に関する状態をUNKNOWNに設定する可能性がある。parent.occupation == "President"制約を評価するために、システムは、Jack Doeノードをメンバーノードとして設定し、Jane Doeへの新しく追加されたparentエッジをたどる可能性がある。制約内の次のエッジは、Presidentノードに至るoccupationエッジである。これは、ターゲットメンバーノードであり、制約の条件を満たし、したがって、システムは、Jack Doeノードに関してparent.occupation == "President"制約の状態をTRUEに設定する。一部の実装において、システムは、parent.occupation経路に関するメンバーノード(たとえば、Jack Doe)およびメンバーターゲットノード(たとえば、President)を一時的探索結果に保存する可能性がある。
【００７１】
また、システムは、クエリQ3に関するターゲットの制約を評価し得る。クエリQ3に関するターゲットの制約は、たとえば、alumniエッジを通るJack Doeからのグラフ内の単一エッジの逆方向のウォークと、parent.occupationを介した順方向のウォークとを含む。一部の実装において、システムは、クエリQ2に関するターゲットの制約からのparent.occupationのウォークを再利用して、メンバーターゲットノードをPresidentとして特定することができる可能性がある。したがって、システムは、逆方向のウォークを実行するだけで、この制約に関するメンバーノードを決定する可能性がある。例として図2のグラフ200を使用すると、システムは、Jack DoeノードからDukeノートとColumbiaノードとの両方までalumniエッジをたどる可能性がある。したがって、システムは、2つのメンバーノード、すなわち、DukeおよびColumbiaを特定する可能性がある。メンバーターゲットノードPresidentが制約を満たすので、システムは、メンバーノードDukeおよびメンバーノードColumbiaに関してTRUEのステータスを設定し得る。一部の実装において、システムは、alumniエッジを通るJack DoeからDukeおよびColumbiaまでの逆方向のウォークを一時的探索結果に保存する可能性がある。
【００７２】
また、システムは、クエリQ4に関するターゲットの制約を評価し得る。2つのターゲットの制約の経路長は等しく、クエリに関して最短であり、したがって、システムは、それぞれの制約を評価し得る。追加されるエッジparentは制約の経路内の最初のエッジでないので、システムは、alumniエッジを使用して逆方向のウォークを実行する。一部の実装において、システムは、たとえば、システムがクエリQ3に関するターゲットの制約を評価する際にこのウォークを実行したので、一時的探索結果を用いて、逆方向のウォークに関してDukeおよびColumbiaメンバーノードを特定し得る。システムは、alumni,parent.birthyear.chinese_zodiac == "dog"に関してJane Doeから順方向のウォークを開始し、1961ノードまでbirthyearエッジをたどり、oxノードまでchinese_zodiacエッジをたどる可能性がある。これは制約内の経路の終わりであるので、oxノードは、メンバーノードDukeおよびColumbiaに関するメンバーターゲットノードである。システムは、たとえば、alumni.parent.birthyear.chinese_zodiac経路に関するメンバーターゲットノードoxとともにメンバーノードDukeおよびColumbiaを一時的探索結果に保存する可能性がある。ターゲットメンバーノードoxはこの制約を満たさないので、システムは、メンバーノードColumbiaおよびメンバーノードDukeに関して状態FALSEを設定し得る。
【００７３】
そして、システムは、Q4クエリに関する2番目の制約を評価する可能性がある。一部の実装において、システムは、たとえば、一時的探索結果からの以前の探索の結果を用いて、メンバーノードColumbiaおよびDukeならびにメンバーターゲットノードoxを特定する可能性がある。したがって、システムは、alumni,parent.birthyear.chinese_zodiac == "ox"制約を評価するためにグラフ内のいかなるさらなるウォークも実際に実行する必要がなく、メンバーターゲットノードoxが制約を確かに満たすので、保存された探索を用いてDukeおよびColumbiaメンバーノードに関してこの制約の状態をTRUEに設定し得る。システムは、探索を保存しない場合、上述のようにグラフをウォークしてメンバーノードおよびメンバーターゲットノードを特定し得る。
【００７４】
システムは、ターゲットの制約に関して決定された状態を用いてクエリの定義を縮約し得る。図8の縮約された定義810によって示されるように、クエリQ2およびQ3は、さらなる探索なしにTRUEに縮約される。したがって、メンバーノードがそれぞれのクエリの保存された結果内にまだないと仮定して、システムは、メンバーノードJack Doeを追加するためにクエリQ2のメンバーシップを更新し、メンバーノードColumbiaおよびDukeを追加するためにクエリQ3のメンバーシップを更新し得る。
【００７５】
クエリQ4に関する縮約されたクエリの定義は、TRUEまたはFALSEにならず、制約alumni.alumni != NULLになる。したがって、システムは、クエリの定義内のその他の制約に関して状態TRUEを有するメンバーノードであるメンバーノードColumbiaおよびDukeに関してalumni.alumni != NULL制約を評価する可能性がある。例として図2のグラフ200を使用すると、システムは、Columbiaノードから始め、Jack Doeノードまでalumniエッジをたどり、Jack DoeからDukeまでalumniエッジをたどる可能性がある。したがって、システムは、メンバーノードColumbiaに関して、メンバーターゲットノードがDukeであると決定し得る。これは制約!= NULLを満たすので、システムは、Columbiaメンバーノードに関して状態TRUEを設定し得る。また、システムは、Dukeノードからalumniエッジを通ってJack Doeノードまでウォークし、Jack Doeノードから別のalumniエッジを通ってColumbiaノードまでウォークし得る。したがって、Dukeメンバーノードに関して、メンバーターゲットノードはColumbiaである。これは制約を満たすので、システムは、Dukeメンバーノードに関して制約の状態をTRUEに設定し得る。システムは、Dukeノードからalumniエッジを通ってJohn Doeノードまで、およびJohn Doeから別のalumniエッジを通ってMichiganノードまでの経路をたどっていた可能性がある。しかし、制約の状態がTRUEになると、システムは、あらゆるあり得る経路をウォークしなくてもよい。
【００７６】
システムは、--縮約された定義815によって示されるように--制約のステータスを用いてクエリQ4のクエリの定義を縮約し得る。クエリの定義は、ColumbiaメンバーノードとDukeメンバーノードとの両方に関してTRUEに縮約され、したがって、システムは、保存されたクエリ結果にColumbiaおよびDukeメンバーノードを追加し得る。システムは、今や、トリプルの追加によって影響を受ける保存されたクエリ結果を更新済みであり、グループ内の次のトリプルを処理することに取りかかる可能性があり、またはデータグラフに対する別の更新を待つ可能性がある。
【００７７】
読みやすくするために、上の例は、名前または説明によってノードおよび関係を参照する。システムは、開示された実装を逸脱することなく、データ構造、インデックス、制約などの中でその他の識別子を使用し得ることが理解される。
【００７８】
図9は、本明細書に記載の技術で使用され得る、図1のシステム100および/またはクライアント170である可能性がある汎用的なコンピュータデバイス900の例を示す。コンピューティングデバイス900は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、セルラー電話、スマートフォン、タブレット、サーバ、およびウェアラブルデバイスを含むその他のコンピューティングデバイスなどの様々な例示的な形態のコンピューティングデバイスを表すように意図される。本明細書において示される構成要素、それらの構成要素の接続および関係、ならびにそれらの構成要素の機能は、単に例であるように意図されており、本明細書において説明および/または特許請求されている本発明の実装を限定するように意図されていない。
【００７９】
コンピューティングデバイス900は、インターフェース908を介して接続されたプロセッサ902、メモリ904、ストレージデバイス906、および拡張ポート910を含む。一部の実装において、コンピューティングデバイス900は、インターフェース908によって接続されたその他の構成要素の中でもとりわけトランシーバ946、通信インターフェース944、およびGPS (全地球測位システム)受信機モジュール948を含む可能性がある。デバイス900は、必要に応じてデジタル信号処理回路を含む可能性がある通信インターフェース944を介してワイヤレスで通信し得る。構成要素902、904、906、908、910、940、944、946、および948の各々は、共通のマザーボードに搭載されるか、または適宜その他の方法で搭載される可能性がある。
【００８０】
プロセッサ902は、メモリ904内またはストレージデバイス906上に記憶された命令を含む、コンピューティングデバイス900内で実行するための命令を処理して、ディスプレイ916などの外部入力/出力デバイス上のGUIのためのグラフィカルな情報を表示することができる。ディスプレイ916は、モニタまたはフラットタッチスクリーンディスプレイである可能性がある。一部の実装においては、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数の種類のメモリとともに適宜使用され得る。また、複数のコンピューティングデバイス900が、各デバイスが必要な動作の一部を行うようにして(たとえば、サーババンク、一群のブレードサーバ、またはマルチプロセッサシステムとして)接続される可能性がある。
【００８１】
メモリ904は、コンピューティングデバイス900内で情報を記憶する。1つの実装において、メモリ904は、1つの揮発性メモリユニットまたは複数の揮発性メモリユニットである。別の実装において、メモリ904は、1つの不揮発性メモリユニットまたは複数の不揮発性メモリユニットである。メモリ904は、磁気または光ディスクなどの別の形態のコンピュータ可読媒体である可能性もある。一部の実装において、メモリ904は、拡張インターフェースを通じて提供される拡張メモリを含む可能性がある。
【００８２】
ストレージデバイス906は、コンピューティングデバイス900に大容量ストレージを提供することができる。1つの実装において、ストレージデバイス906は、フロッピーディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくはその他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくはその他の構成内のデバイスを含むデバイスのアレイなどのコンピュータ可読媒体であるか、またはそのようなコンピュータ可読媒体を含む可能性がある。コンピュータプログラム製品は、そのようなコンピュータ可読媒体内に有形で具現化され得る。コンピュータプログラム製品は、実行されるときに上述の方法などの1つまたは複数の方法を実行する命令を含む可能性もある。コンピュータまたは機械可読媒体は、メモリ904、ストレージデバイス906、またはプロセッサ902上のメモリなどのストレージデバイスである。
【００８３】
インターフェース908は、コンピューティングデバイス900に関する帯域を大量に消費する動作を管理する高速なコントローラ、または帯域をそれほど消費しない動作を管理する低速なコントローラ、またはそのようなコントローラの組合せである可能性がある。デバイス900とその他のデバイスとの近距離通信を可能にするために、外部インターフェース940が設けられる可能性がある。一部の実装において、コントローラ908は、ストレージデバイス906および拡張ポート914に結合され得る。様々な通信ポート(たとえば、USB、Bluetooth（登録商標）、イーサネット（登録商標）、ワイヤレスイーサネット)を含み得る拡張ポートは、キーボード、ポインティングデバイス、スキャナなどの1つもしくは複数の入力/出力デバイスと結合され得るか、またはたとえばネットワークアダプタを介してスイッチもしくはルータなどのネットワーキングデバイスと結合され得る。
【００８４】
コンピューティングデバイス900は、図に示されるように、多くの異なる形態で実装され得る。たとえば、コンピューティングデバイス900は、1つの標準的なサーバ930として実装されるか、または一群のそのようなサーバ内で複数回実装される可能性がある。コンピューティングデバイス900は、ラックサーバシステムの一部として実装される可能性もある。加えて、コンピューティングシステム900は、デスクトップコンピュータ934、ラップトップコンピュータ932、またはタブレットもしくはスマートフォン936などのパーソナルコンピューティングデバイスに実装される可能性がある。システム全体が、互いに通信する複数のコンピューティングデバイス900によって構成される可能性がある。その他の構成が、あり得る。
【００８５】
図10は、本明細書に記載の技術で使用され得る、図1のシステム100である可能性がある汎用的なコンピュータデバイス1000の例を示す。コンピューティングデバイス1000は、サーバ、ブレードサーバ、データセンター、メインフレーム、およびその他の大規模なコンピューティングデバイスなどの大規模なデータ処理デバイスの様々な例示的な形態を表すように意図される。コンピューティングデバイス1000は、1つまたは複数の通信ネットワークによって相互に接続される、おそらくはネットワーク接続ストレージノードを含む、複数のマイクロプロセッサを有する分散型のシステムである可能性がある。本明細書において示される構成要素、それらの構成要素の接続および関係、ならびにそれらの構成要素の機能は、単に例であるように意図されており、本明細書において説明および/または特許請求されている本発明の実装を限定するように意図されていない。
【００８６】
分散型のコンピューティングシステム1000は、任意の数のコンピューティングデバイス1080を含む可能性がある。コンピューティングデバイス1080は、ローカルまたは広域ネットワーク、専用の光リンク、モデム、ブリッジ、ルータ、スイッチ、有線またはワイヤレスネットワークなどを介して通信するサーバまたはラックサーバ、メインフレームなどを含み得る。
【００８７】
一部の実装において、各コンピューティングデバイスは、複数のラックを含む可能性がある。たとえば、コンピューティングデバイス1080aは、複数のラック1058a〜1058nを含む。各ラックは、プロセッサ1052a〜1052nおよび1062a〜1062nなどの1つまたは複数のプロセッサを含み得る。プロセッサは、データプロセッサ、ネットワーク接続ストレージデバイス、およびその他のコンピュータによって制御されるデバイスを含む可能性がある。一部の実装において、1つのプロセッサは、マスタプロセッサとして動作し、スケジューリングおよびデータ配信タスクを制御する可能性がある。プロセッサは、1つまたは複数のラックスイッチ1058を通じて相互に接続される可能性があり、1つまたは複数のラックは、スイッチ1078を通じて接続される可能性がある。スイッチ1078は、複数の接続されたコンピューティングデバイス1000の間の通信を扱い得る。
【００８８】
各ラックは、メモリ1054およびメモリ1064などのメモリならびに1056および1066などのストレージを含み得る。ストレージ1056および1066は、大容量ストレージを提供する可能性があり、ネットワーク接続ディスク、フロッピーディスク、ハードディスク、光ディスク、テープ、フラッシュメモリもしくはその他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくはその他の構成内のデバイスを含むデバイスのアレイなどの揮発性または不揮発性ストレージを含む可能性がある。ストレージ1056または1066は、複数のプロセッサ、複数のラック、または複数のコンピューティングデバイスの間で共有される可能性があり、プロセッサのうちの1つまたは複数によって実行され得る命令を記憶するコンピュータ可読媒体を含む可能性がある。メモリ1054および1064は、たとえば、1つの揮発性メモリユニットもしくは複数の揮発性メモリユニット、1つの不揮発性メモリユニットもしくは複数の不揮発性メモリユニット、および/または磁気もしくは光ディスク、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、およびこれらの組合せなどのその他の形態のコンピュータ可読媒体を含み得る。メモリ1054などのメモリは、プロセッサ1052a〜1052nの間でやはり共有される可能性がある。インデックスなどのデータ構造は、たとえば、ストレージ1056およびメモリ1054にまたがって記憶される可能性がある。コンピューティングデバイス1000は、コントローラ、バス、入力/出力デバイス、通信モジュールなどの図示されていないその他の構成要素を含む可能性がある。
【００８９】
システム100などのシステム全体が、互いに通信する複数のコンピューティングデバイス1000によって構成される可能性がある。たとえば、デバイス1080aは、デバイス1080b、1080c、および1080dと通信する可能性があり、これらは、集合的にシステム100として知られる可能性がある。別の例として、図1のシステム100は、保存されたクエリエンジン150として1つまたは複数のコンピューティングデバイス1000を含む可能性がある。さらに、コンピューティングデバイスの一部は、地理的に互いに近くに置かれる可能性があり、その他は、地理的に離れて置かれる可能性がある。システム1000のレイアウトは、単なる例であり、システムは、その他のレイアウトまたは構成を持つ可能性がある。
【００９０】
様々な実装は、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信し、それらにデータおよび命令を送信するために結合された、専用または汎用である可能性がある少なくとも1つのプログラミング可能なプロセッサを含むプログラミング可能なシステム上の、実行可能および/または解釈可能な1つまたは複数のコンピュータプログラムへの実装を含み得る。
【００９１】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られる)は、プログラミング可能なプロセッサ用の機械命令を含み、高級手続き型プログラミング言語および/もしくはオブジェクト指向プログラミング言語、ならびに/またはアセンブリ/機械言語で実装され得る。本明細書で使用されるとき、用語「機械可読媒体」、「コンピュータ可読媒体」とは、プログラミング可能なプロセッサに機械命令および/またはデータを提供するために使用される非一時的コンピュータプログラム製品、装置、ならびに/またはデバイス(たとえば、磁気ディスク、光ディスク、(ランダムアクセスメモリ(RAM)および読み出し専用メモリ(ROM)を含む)メモリ、プログラマブルロジックデバイス(PLD))を指す。
【００９２】
本明細書に記載のシステムおよび技術は、バックエンド構成要素を(たとえば、データサーバとして)含むか、またはミドルウェア構成要素(たとえば、アプリケーションサーバ)を含むか、またはフロントエンド構成要素(たとえば、ユーザが本明細書に記載のシステムおよび技術の実装とインタラクションすることができるグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータ)を含むか、またはそのようなバックエンド構成要素、ミドルウェア構成要素、もしくはフロントエンド構成要素の任意の組合せを含むコンピューティングシステムに実装され得る。システムの構成要素は、任意の形態または媒体のデジタルデータ通信(たとえば、通信ネットワーク)によって相互に接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)、広域ネットワーク(「WAN」)、およびインターネットを含む。
【００９３】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは、概して互いに離れており、通常は通信ネットワークを通じてインタラクションする。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されており、互いにクライアント-サーバの関係にあるコンピュータプログラムによって生じる。
【００９４】
いくつかの実装が、説明された。しかしながら、様々な修正が、本発明の精神および範囲から逸脱することなしになされ得る。加えて、図面に示された論理フローは、所望の結果を達成するために、示された特定の順序または逐次的順序である必要はない。さらに、その他のステップが設けられる可能性があり、またはステップが説明されたフローから削除される可能性があり、その他の構成要素が説明されたシステムに追加されるか、もしくは説明されたシステムから削除される可能性がある。したがって、その他の実装は、添付の請求項の範囲内にある。
【符号の説明】
【００９５】
100  システム
110  グラフエンジン
113  ハードウェアプロセッサ
114  メモリ
140  保存されたクエリ
145  クエリエッジインデックス
147  一時的探索結果
150  保存されたクエリエンジン
153  ハードウェアプロセッサ
160  保存されたクエリ結果
170  クライアント
180  ネットワーク
190  グラフに基づくデータストア
200  グラフ
305  クエリ識別子
310  制約
315  制約式
340  保存されたクエリ
345  クエリエッジインデックス
400  プロセス
500  プロセス
600  プロセス
705  ターゲットの制約
710  縮約された定義
805  ターゲットの制約
810  縮約された定義
900  コンピュータデバイス
902  プロセッサ
904  メモリ
906  ストレージデバイス
908  インターフェース
910  拡張ポート
914  拡張ポート
916  ディスプレイ
930  サーバ
932  ラップトップコンピュータ
934  デスクトップコンピュータ
936  タブレットもしくはスマートフォン
940  外部インターフェース
944  通信インターフェース
946  トランシーバ
948  GPS(全地球測位システム)受信機モジュール
1000  コンピュータデバイス
1052a〜1052n  プロセッサ
1054  メモリ
1056  ストレージ
1058  ラックスイッチ
1062a-1062n  プロセッサ
1064  メモリ
1066  ストレージ
1078  スイッチ
1080  コンピューティングデバイス
1080a  コンピューティングデバイス
1080b  デバイス
1080c  デバイス
1080d  デバイス
1058a〜1058n  ラック
【図１】
0006277286.tif 000002
【図２】
0006277286.tif 000003
【図３】
0006277286.tif 000004
【図４】
0006277286.tif 000005
【図５】
0006277286.tif 000006
【図６】
0006277286.tif 000007
【図７】
0006277286.tif 000008
【図８】
0006277286.tif 000009
【図９】
0006277286.tif 000010
【図１０】
0006277286.tif 000011