(57)【特許請求の範囲】
【請求項１】
装置であって、
１または複数のメモリ・デバイス内に格納されたインデックスと；
１又は複数のインデックス・サーバと；
ターム・プロデューサと
を備え、
前記インデックスは、タームと文書識別子とをそれぞれが有する複数のインデックス・エントリを有し、
前記インデックス・エントリのうちの少なくとも１つは、文書識別子およびコンポジット・タームを有し、
前記コンポジット・タームは、２以上のデータ・オブジェクト属性を有し、
前記文書識別子のそれぞれは、複数のデータ・オブジェクトのうちの１つのデータ・オブジェクトに対応し、
前記１または複数のインデックス・サーバは、
１または複数の属性値からなるクエリにアクセスし、
前記１または複数の属性値に対して前記インデックスを検索することによって、前記クエリに一致する１または複数のデータ・オブジェクトを識別し、
前記クエリに一致する前記１または複数の識別されたデータ・オブジェクトに対応する１又は複数のオブジェクト識別子を返す
ように動作し、
前記ターム・プロデューサは、
複数のデータ・オブジェクト属性を有するデータ・オブジェクトにアクセスし、
前記データ・オブジェクトを解析することによって、前記データ・オブジェクトに対して１又は複数のインデックス・エントリを作成し、
文書識別子／タームペアの集合を出力する
ように動作し、
前記文書識別子／タームペアそれぞれは、前記データ・オブジェクトの前記対応するオブジェクト・タイプに基づくタイプを有し、
前記タームの少なくとも１つは、コンポジット・タームであり、
前記文書識別子／タームペアは、接続タイプ／ソースペア、接続／ソースペア、接続タ
イプ／宛先ペア、または接続／宛先ペアを有し、
前記接続タイプ／ソースペアは、
ソース・オブジェクトの文書識別子と；
エッジ・オブジェクトの接続タイプと、宛先オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続／ソースペアは、
ソース・オブジェクトの文書識別子と；
宛先オブジェクトの接続と、宛先オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続タイプ／宛先ペアは、
宛先オブジェクトの文書識別子と；
エッジ・オブジェクトの接続タイプと、ソース・オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続／宛先ペアは、
宛先オブジェクトの文書識別子と；
ソース・オブジェクトの接続と、ソース・オブジェクトの文書識別子とを識別するコンポジット・タームと
を有する、装置。
【請求項２】
前記文書識別子は、オブジェクト識別子およびタイム・スタンプを有する、
請求項１に記載の装置。
【請求項３】
前記インデックスは、１または複数のレプリケーション・インデックスを有する、
請求項１に記載の装置。
【請求項４】
前記インデックスは、それぞれが文書識別子空間の一部が割り当てられる複数のシャードを有する、
請求項１に記載の装置。
【請求項５】
方法であって、
１または複数のメモリ・デバイスによって、インデックスを格納することであって、前記インデックスは、それぞれがタームおよび文書識別子を有する複数のインデックス・エントリからなり、前記インデックス・エントリのうちの少なくとも１つは、文書識別子およびコンポジット・タームを有し、前記コンポジット・タームは、複数のデータ・オブジェクト属性を有し、前記文書識別子は、複数のデータ・オブジェクトのうちの１つのデータ・オブジェクトに対応することと；
１または複数のインデックス・サーバが、１または複数の属性値を有するクエリにアクセスすることと；
前記１または複数のインデックス・サーバが、前記１または複数の属性値に対して前記インデックスを検索することによって、前記クエリに一致する１または複数のデータ・オブジェクトを識別することと；
前記１または複数のインデックス・サーバが、前記クエリに一致する前記１または複数の識別されたデータ・オブジェクトに対応するオブジェクト識別子を返すことと；
１または複数のターム・プロデューサが、複数のデータ・オブジェクト属性を有するデータ・オブジェクトにアクセスすることと；
前記１または複数のターム・プロデューサが、前記データ・オブジェクトを解析することによって、前記データ・オブジェクトの１または複数のインデックス・エントリを作成
することと；
前記１または複数のターム・プロデューサが、文書識別子／タームペアの集合を出力することと
を有し、
前記集合内のペアのタイプは、前記データ・オブジェクトの対応するオブジェクト・タイプに基づき、
前記タームのうちの少なくとも１つは、コンポジット・タームであり、
前記文書識別子／タームペアは、接続タイプ／ソースペア、接続／ソースペア、接続タイプ／宛先ペア、または接続／宛先ペアを有し、
前記接続タイプ／ソースペアは、
ソース・オブジェクトの文書識別子と；
エッジ・オブジェクトの接続タイプと、宛先オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続／ソースペアは、
ソース・オブジェクトの文書識別子と；
宛先オブジェクトの接続と、宛先オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続タイプ／宛先ペアは、
宛先オブジェクトの文書識別子と；
エッジ・オブジェクトの接続タイプと、ソース・オブジェクトの文書識別子とを識別するコンポジット・タームと
を有し、
前記接続／宛先ペアは、
宛先オブジェクトの文書識別子と；
ソース・オブジェクトの接続と、ソース・オブジェクトの文書識別子とを識別するコンポジット・タームと
を有する、方法。
【請求項６】
前記文書識別子は、オブジェクト識別子およびタイム・スタンプからなる、
請求項５に記載の方法。
【請求項７】
前記インデックスは、１または複数のレプリケーション・インデックスからなる、
請求項５に記載の方法。
【請求項８】
前記インデックスは、それぞれが文書識別子空間の一部が割り当てられる複数のシャードからなる、
請求項５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、全般的にはデータベースに関し、より詳細には、グラフ・データ構造のデータ・インデクシング・システムに関する。
【背景技術】
【０００２】
コンピュータ・ユーザは、プロプライエタリ・ネットワーク（ｐｒｏｐｒｉｅｔａｒｙ
ｎｅｔｗｏｒｋｓ）ならびにインターネットなどの公衆ネットワークを含む様々なローカル・エリア・コンピュータ・ネットワークおよび広域コンピュータ・ネットワークを介して膨大な量の情報にアクセスし、共有することができる。通常、ユーザのコンピューティング・デバイスにインストールされたウェブ・ブラウザは、たとえば関連するｕｎｉｆｏｒｍ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｏｒ（ＵＲＬ）によって識別される様々なネットワーク・サーバに配置された情報へのアクセスおよびこれとのやり取り（ｉｎｔｅｒａｃｔｉｏｎ）を容易にする。ユーザ生成コンテンツの共有を可能にする従来の手法は、ソーシャル・ネットワーキング・ウェブサイトなどの様々な情報共有技術または情報共有プラットフォームを含む。そのようなウェブサイトは、ユーザが他のユーザによって作成されまたはカスタマイズされたウェブ・ページを見ることを可能にするアプリケーションのプラットフォームを含み、これにリンクされ、またはこれを提供することができ、他のユーザによるそのようなページの可視性およびこれとのやり取りは、ある特徴的なルールのセットによって管理される（ｇｏｖｅｒｎ）。
【０００３】
そのようなソーシャル・ネットワーキング情報およびほとんどの情報全般は、通常、関係データベースに格納される。一般に、関係データベース（ｒｅｌａｔｉｏｎａｌ  ｄａｔａｂａｓｅ）は、関係の集合（しばしばテーブルと呼ばれる）である。関係データベースは、１組の数学用語（ｍａｔｈｅｍａｔｉｃａｌ  ｔｅｒｍｓ）を使用し、この数学用語は、構造化照会言語（ＳＱＬ）データベース用語法を使用する場合がある。たとえば、関係を、同一の属性を有するタプル（ｔｕｐｌｅｓ）の組として定義することができる。タプルは、通常、オブジェクトと、そのオブジェクトに関する情報とを表す。関係は、通常、テーブルとして記述され、テーブルは、行および列に編成される。一般に、ある属性によって参照されるすべてのデータが、同一のドメインにあり、同一の制約（ｃｏｎｓｔｒａｉｎｔｓ）に従う。
【０００４】
関係モデルは、関係のタプルが特定の順序を有しないことと、タプルが属性に順序を課さないこととを指定する。アプリケーションは、クエリを指定することによってデータにアクセスし、クエリは、演算を使用して、タプルを識別し、属性を識別し、関係を組み合わせる。関係を変更することができ、新しいタプルが明示的な値を供給することができ、またはクエリから新しいタプルを導出することができる。同様に、クエリは、更新または削除のためにタプルを識別することができる。関係の各タプルが、その属性値のある組合せ（１または複数）によって一意に識別可能であることが必要である。この組合せは、主キー（ｐｒｉｍａｒｙ  ｋｅｙ）と呼ばれる。関係データベースでは、すべてのデータが、関係を介して格納され、アクセスされる。データを格納する関係は、通常、テーブルを用いて実施され、またはテーブルと呼ばれる。
【０００５】
関係データベース管理システムによって実施される関係データベースは、たとえば金融記録、製造およびロジスティック情報、職員データ、および他のアプリケーションに使用されるデータベース内の情報の格納に関する最も主要な選択肢になっている。コンピュータ能力が高まるにつれて、関係データベースを以前に非実用的にしていた関係データベースの非効率性よりも、従来のアプリケーションに関する関係データベースの使い易さが優
るようになった。３つの主導的なオープン・ソース実装は、ＭｙＳＱＬ、ＰｏｓｔｇｒｅＳＱＬ、およびＳＱＬｉｔｅである。ＭｙＳＱＬは、複数のデータベースへのマルチユーザ・アクセスを提供するサーバとして実行される関係データベース管理システム（ＲＤＢＭＳ）である。人気のあるＬＡＭＰソフトウェア・スタックの頭字語の「Ｍ」は、ＭｙＳＱＬを指す。ウェブ・アプリケーションと共に使用することに関するその人気は、ＰＨＰ（ＬＡＭＰの「Ｐ」）に密接に結び付けられている。複数の高トラフィック・ウェブサイトは、データ・ストレージおよびユーザ・データのログ記録にＭｙＳＱＬを使用する。
【０００６】
データベース・インデックスは、データベース・テーブルに対するデータ取出し動作の速度を改善するデータ構造である。データベース・インデックスを、データベース・テーブルの１または複数の列を使用して作成することができ、これは、高速ランダム・ルックアップと順序付きレコードの効率的アクセスとの両方の基礎を提供する。インデックスを格納するのに必要なディスク空間は、通常、テーブルに必要なディスク空間より少なく（インデックスは、通常、テーブルがそれに従って配置されるキーフィールドだけを含み、テーブル内の他のすべての詳細を除外するので）、そのデータがメモリ内に格納するには大きすぎるテーブルについて、インデックスをメモリ内に格納する可能性をもたらす。インデックスは、様々なデータ構造を使用して実施することができる。普及しているインデックスは、平衡木、Ｂ＋ツリー、およびハッシュである。
【０００７】
グラフは、オブジェクトの少なくともいくつかのペアがリンクによって接続されたオブジェクトの集合の抽象表現である。相互接続されたオブジェクトは、一般にノードと呼ばれ、ノードを接続するリンクは、エッジと呼ばれる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１０／１１８１６２号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、グラフ構造でのデータのモデル化は、スケーラビリティおよび性能に難題を課す。グラフ構造のトラバースを必要とするクエリは、多数のデータベース・ルックアップを必要とする可能性がある。非常にスケーラブルなシステムは、通常、クエリ応答時間および全体的な性能を改善するために、キャッシングおよびインデクシングに依存する。
【課題を解決するための手段】
【００１０】
本発明は、グラフ・データのインデクシング・システムを対象とする方法、装置、およびシステムを提供する。特定の実装形態では、インデクシング・システムは、クエリ性能を改善するために非正規化およびレプリケーション・インデックス機能性を提供する。本開示の上記および他の特徴、態様、および利点を、下の発明を実施するための形態で、次の図面に関連して詳細に説明する。
【図面の簡単な説明】
【００１１】
【図１】本発明の１実装形態による例示的なインデクシング・システム・アーキテクチャを示す図。
【図２】例示的なコンピュータ・システム・アーキテクチャを示す図。
【図３】例示的なネットワーク環境を提供する図。
【図４】新しいオブジェクトをグラフおよびコンポジット・インデックス（ｃｏｍｐｏｓｉｔｅ  ｉｎｄｅｘ）に追加する例示的な方法を示す流れ図。
【発明を実施するための形態】
【００１２】
これから、本発明を、添付図面に示されたその少数の実施形態を参照して詳細に説明する。次の説明では、本開示の完全な理解を提供するために、多数の具体的な詳細を示す。しかし、本開示を、これらの具体的な詳細の一部またはすべてを伴わずに実践できることは、当業者には明白である。他の場合には、周知の工程ステップおよび／または構造は、本開示を不必要に不明瞭にしないようにするために、詳細には説明しない。さらに、本開示が、特定の実施形態に関連して説明されるが、この説明が、本開示を説明される実施形態に限定することを意図されたものではないことを理解されたい。逆に、説明は、添付の特許請求の範囲によって定義される本開示の趣旨および範囲に含めることができる代替案、修正形態、および同等物を包含することを意図されたものである。
【００１３】
特定の実装形態では、本発明は、データ・オブジェクトおよびデータ・オブジェクトの間の関連付けに対する柔軟な検索能力を提供するデータベース・インデックス・インフラストラクチャを対象とする。特定の実施形態は、ノードと、エッジがグラフ内で接続されるノードの間の関連付けまたは関係を定義するエッジとを含むグラフとしてモデル化された情報を格納し、サービングするインデクシング・システムに関する。特定の実施形態では、グラフは、ソーシャル・グラフであるかソーシャル・グラフを含み、インデクシング・システムは、統合されたソーシャル・ネットワーク環境を可能にする、より大きいネットワーキング・システム、インフラストラクチャ、またはプラットフォームの一部である。本開示では、ソーシャル・ネットワーク環境は、ソーシャル・グラフ情報を含むソーシャル・グラフに関して説明される場合がある。実際に、本開示の特定の実施形態は、ソーシャル・ネットワーク環境によってまたはソーシャル・ネットワーク環境のために格納されるデータのほとんどまたはすべてを、ソーシャル・グラフとして表すことができるという事実に依存し、これを活用し、またはこれを利用する。特定の実施形態は、本明細書で説明されるものなどのソーシャル・ネットワーク環境のユーザの指数関数的に増加する人数に伴って効率的に、知的に、かつ成功してスケーリングすることのできるコスト効率のよいインフラストラクチャを提供する。
【００１４】
特定の実施形態では、本明細書で説明される分散インデクシング・システムおよびバックエンド・インフラストラクチャは、大規模での低レイテンシ、１要求あたりのより低いコスト、開発者にとって使い易いフレームワーク、本明細書で例によって説明される、ソーシャル・グラフの関連付け（エッジ）とオブジェクト（ノード）との両方を用いる組み合わされたクエリを可能にするインフラストラクチャ、格納されたオブジェクトおよび関連付けに関する柔軟で表現力のあるクエリ・モデルを提供するインフラストラクチャ、およびＰＨＰから直接に呼び出すのが簡単なインフラストラクチャのうちの１または複数を提供する。さらに、本明細書で使用される時に、「または」は、「および」ならびに「または」を意味する場合がある、すなわち、「または」は、明示的に述べられるか暗黙のうちに暗示されない限り、「および」を必ずしも除外しない。
【００１５】
特定の実施形態は、インターネットなど、複数のネットワーク・アドレス可能システムを含む広域ネットワーク環境で動作することができる。図３に、様々な例示的な実施形態がその中で動作することのできる、例示的なネットワーク環境を示す。ネットワーク・クラウド６０は、一般に、本明細書で説明されるシステムおよびホストがそれを介して通信できる、１または複数の相互接続されたネットワークを表す。ネットワーク・クラウド６０は、パケットベースの広域ネットワーク（インターネットなど）、プライベートネットワーク、無線ネットワーク、衛星ネットワーク、セルラ・ネットワーク、ページング・ネットワーク、および類似物を含むことができる。図３に示されているように、特定の実施形態は、ソーシャル・ネットワーキング・システム２０および１または複数のクライアント・デバイス３０を備えるネットワーク環境内で動作することができる。クライアント・デバイス３０は、ネットワーク・サービス・プロバイダ、無線搬送波、または任意の他の適切な手段を介してネットワーク環境に動作可能に接続される。
【００１６】
１つの例示的な実施形態では、ソーシャル・ネットワーキング・システム２０は、本明細書で説明されるように、ユーザがお互いと通信するか他の形でやり取りし、ユーザ・プロファイルなどのコンテンツにアクセスすることを可能にするコンピューティング・システムを備える。ソーシャル・ネットワーキング・システム２０は、様々な例示的な実施形態で、１または複数の物理サーバ２２およびデータ・ストア２４を備えるネットワーク・アドレス可能システムである。１または複数の物理サーバ２２は、たとえばルータおよび／またはネットワーキング・スイッチ２６のセットを介してコンピュータ・ネットワーク６０に動作可能に接続される。例示的な実施形態では、１または複数の物理サーバ２２によってホスティングされる機能性は、ウェブ・サーバまたはＨＴＴＰサーバ、ＦＴＰサーバ、ならびに、限定なしに、Ｃｏｍｍｏｎ  Ｇａｔｅｗａｙ  Ｉｎｔｅｒｆａｃｅ（ＣＧＩ）スクリプト、ＰＨＰ  Ｈｙｐｅｒ−ｔｅｘｔ  Ｐｒｅｐｒｏｃｅｓｓｏｒ（ＰＨＰ）、Ａｃｔｉｖｅ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ（ＡＳＰ）、ハイパーテキスト・マークアップ言語（ＨＴＭＬ）、Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）、ＪＡＶＡ（登録商標）、ＪＡＶＡＳＣＲＩＰＴ（登録商標）、Ａｓｙｎｃｈｒｏｎｏｕｓ  ＪＡＶＡＳＣＲＩＰＴ（登録商標）  ａｎｄ  ＸＭＬ（ＡＪＡＸ）、および類似物を使用して実施されたウェブ・ページおよびアプリケーションを含むことができる。
【００１７】
物理サーバ２２は、ソーシャル・ネットワーキング・システム２０の動作に向けられた機能性をホスティングすることができる。たとえば、ソーシャル・ネットワーキング・システム２０は、１または複数のクライアント・デバイス３０の１または複数のユーザが、情報を見、ポストすると同時に、ウェブサイトを介してお互いと通信することを可能にするウェブサイトをホスティングすることができる。以下では、複数のサーバ２２は、サーバ２２と呼ばれる場合があるが、サーバ２２は、たとえばソーシャル・ネットワーキング・システム２０ならびに他のコンテンツ配布サーバ、データ・ストア、およびデータベースをホスティングする多数のサーバを含むことができる。データ・ストア２４は、ソーシャル・ネットワーキング・システムの動作に関連し、動作を可能にするコンテンツおよびデータをディジタル・データ・オブジェクトとして格納することができる。データ・オブジェクトは、特定の実装形態で、通常はデータ・ファイル、データベース、またはレコードに格納されまたはその中で実施されるディジタル情報のアイテムである。コンテンツ・オブジェクトは、テキスト（たとえば、ＡＳＣＩＩ、ＳＧＭＬ、ＨＴＭＬ）、イメージ（たとえば、ｊｐｅｇ、ｔｉｆ、およびｇｉｆ）、グラフィックス（ベクトルベースのまたはビットマップ）、オーディオ、ビデオ（たとえば、ｍｐｅｇ）、または他のマルチメディア、およびその組合せを含む多数の形をとることができる。コンテンツ・オブジェクト・データは、実行可能コード・オブジェクト（たとえば、ブラウザ・ウィンドウまたはフレーム内で実行可能なゲーム）、ポッドキャスト、その他を含むこともできる。論理的に、データ・ストア２４は、関係データベースおよびオブジェクト指向データベースなど、１または複数の物理システムに格納された論理的に関係するレコードまたはファイルの統合されたコレクションとして情報を維持する様々な別々のデータベースおよび統合されたデータベースのうちの１または複数に対応する。構造的に、データ・ストア２４は、一般に、データ・ストレージおよび管理システムの大きいクラスのうちの１または複数を含むことができる。特定の実施形態では、データ・ストア２４を、１または複数のデータベース・サーバ、マス・ストレージ・メディア、メディア・ライブラリ・システム、ストレージ・エリア・ネットワーク、データ・ストレージ・クラウド、および類似物などのコンポーネントを含む任意の適切な物理システム（１または複数）によって実施することができる。１つの例示的な実施形態では、データ・ストア２４は、１または複数のサーバ、データベース（たとえば、ＭｙＳＱＬ）、および／またはデータ・ウェアハウスを含む。
【００１８】
データ・ストア２４は、異なるソーシャル・ネットワーキング・システム２０のユーザおよび／またはクライアント・デバイス３０に関連するデータを含むことができる。特定
の実施形態では、ソーシャル・ネットワーキング・システム２０は、システム２０のユーザごとにユーザ・プロファイルを維持する。ユーザ・プロファイルは、ソーシャル・ネットワークのユーザを記述するデータを含み、このデータは、たとえば、正式名称（人のファースト・ネーム、ミドル・ネーム、およびラスト・ネーム、企業の商号および／または会社名など）生物学的、人口統計的、ならびに、職歴、学歴、趣味または好み、地理的位置、および追加の記述データなどの他のタイプの記述情報を含むことができる。たとえば、ユーザ・プロファイルは、ユーザの誕生日、関係状況（ｒｅｌａｔｉｏｎｓｈｉｐ  ｓｔａｔｕｓ）、居住都市、および類似物を含むことができる。システム２０は、さらに、異なるユーザ同士の間の１または複数の関係を記述するデータを格納することができる。関係情報は、類似するまたは共通の職歴、グループ・メンバシップ、趣味、または学歴を有するユーザを示すことができる。ユーザ・プロファイルは、他のユーザによるユーザの情報へのアクセスがそれに基づいて決まるプライバシ・セッティングを含むこともできる。
【００１９】
クライアント・デバイス３０は、一般に、コンピュータ・ネットワークを介して（たとえば、リモートに）通信する機能性を含むコンピュータまたはコンピューティング・デバイスである。クライアント・デバイス３０を、他の適切なコンピューティング・デバイスの中でも、デスクトップ・コンピュータ、ラップトップ・コンピュータ、携帯情報端末（ＰＤＡ）、車内もしくは車外のナビゲーション・システム、スマートホンもしくは他のセルラホンもしくは携帯電話機、またはモバイル・ゲーミング・デバイスとすることができる。クライアント・デバイス３０は、ウェブ・ブラウザ（たとえば、Ｍｉｃｒｏｓｏｆｔ
Ｗｉｎｄｏｗｓ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）、Ｍｏｚｉｌｌａ
Ｆｉｒｅｆｏｘ（登録商標）、Ａｐｐｌｅ  Ｓａｆａｒｉ（登録商標）、Ｇｏｏｇｌｅ
Ｃｈｒｏｍｅ（登録商標）、およびＯｐｅｒａ（登録商標）など）など、コンピュータ・ネットワークを介してコンテンツにアクセスし、これを見るための、１または複数のクライアント・アプリケーションを実行することができる。特定の実装形態では、クライアント・アプリケーションは、クライアント・デバイス３０のユーザが、ソーシャル・ネットワーキング・システム２０によってホスティングされるリソースなど、取り出されるべき特定のネットワーク・リソースのアドレスを入力することを可能にする。これらのアドレスを、Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  ＬｏｃａｔｏｒすなわちＵＲＬとすることができる。さらに、ページまたは他のリソースが取り出された後に、クライアント・アプリケーションは、ユーザが他のリソースへのハイパーリンクを「クリック」する時に、他のページまたは他のリソースへのアクセスを提供することができる。たとえば、そのようなハイパーリンクは、ウェブ・ページ内に配置され得、ユーザが別のページへのＵＲＬを入力し、そのページを取り出すための自動化された形を提供することができる。
【００２０】
図１に、図３に示されたソーシャル・ネットワーキング・システム２０のバック・エンド機能を実施することのできるネットワーキング・システム、アーキテクチャ、またはインフラストラクチャ１００（以下ではネットワーキング・システム１００と呼ばれる）の例示的な実施形態を示す。特定の実施形態では、ネットワーキング・システム１００は、ネットワーキング・システム１００のユーザが、ネットワーキング・システム１００によって提供されるソーシャル・ネットワーキング・サービスを介してお互いとならびに第三者とやり取りすることを可能にする。たとえば、リモート・ユーザ・コンピューティング・デバイス（たとえば、パーソナル・コンピュータ、ネットブック、マルチメディア・デバイス、セルラ電話機（特にスマートホン）など）のユーザは、情報を見、情報を格納しもしくは更新し、情報を通信し、または他のユーザ、サード・パーティ・ウェブサイト、ウェブ・ページ、もしくはウェブ・アプリケーション、もしくはネットワーキング・システム１００によって格納され、ホスティングされ、またはアクセス可能である他の情報と他の形でやり取り（相互作用）するために、少なくとも部分的にネットワーキング・システム１００によってホスティングされまたはアクセス可能であるウェブサイト、ウェブ・
ページ、またはウェブ・アプリケーションにアクセスするために、ウェブ・ブラウザまたは他のユーザ・クライアント・アプリケーションを介してネットワーキング・システム１００にアクセスすることができる。特定の実施形態では、ネットワーキング・システム１００は、下でより詳細に説明されるように、ユーザ、コンセプト、トピック、および他の情報（データ）を表すグラフ・ノードと、グラフ・ノード同士の間を接続するかその間の関係を定義するグラフ・エッジとを含むグラフを維持する。
【００２１】
図１を参照すると、特定の実施形態で、ネットワーキング・システム１００は、ネットワーキング・システム１００のユーザへおよびこれから情報を通信する複数のクライアント・サーバまたはウェブ・サーバ１０４（以下ではクライアント・サーバ１０４）を含む。たとえば、リモート・ユーザ・コンピューティング・デバイスのユーザは、ロード・バランサまたは他の適切なシステムを介し、ネットワークおよびサービス・プロバイダの任意の適切な組合せを介して、クライアント・サーバ１０４と通信することができる。クライアント・サーバ１０４は、ユーザ要求に応答するために構造化文書を生成するためにデータを取り出すために、本明細書で説明されるインデックス・システムおよびデータベース・システムに照会することができる。ネットワーキング・システム１００は、１または複数のインデックス・サーバ１０６を備えるインデックス・レイヤ、１または複数のキャッシュ・サーバを備えるキャッシュ・レイヤ１０８、ならびに１または複数のデータベース・サーバおよび関連するデータベース管理機能性１１０を備えるデータベース・レイヤをも備える。データベース１１０は、一般に、他のクエリ・タイプを処理するための他のキャッシュ・レイヤをそれ自体で含むことができるデータベース・システムを意味する。
【００２２】
各クライアント・サーバ１０４は、キャッシュ・レイヤ１０８と通信する。キャッシュ・レイヤ１０８を、１または複数の分散キャッシュ・クラスタまたは分散キャッシュ・リングとして実施することができる。１実施態様では、キャッシュ・レイヤ１０８は、ライトスルー／リードスルー・キャッシュ・レイヤであり、すべての読取および書込は、キャッシュ・レイヤをトラバースする、１実装形態では、キャッシュ・レイヤは、関連付け情報を維持し、したがって、そのような情報に関するクエリを処理することができる。他のクエリは、実行のためにデータベース１１０にパス・スルーされる。特定の実施形態では、データベース１１０は、関係データベースである。データベース１１０を、ＭｙＳＱＬ、および／またはたとえばとりわけＨＡＹＳＴＡＣＫ、ＣＡＳＳＡＮＤＲＡなどの任意の適切な関係データベース管理システムとして実施することができる。特定の実施形態では、キャッシュ・レイヤ１０８は、データベース１１０の任意の適切な実装形態と相互作用するように動作可能なプラグインを含むことができる。１実装形態では、プラグインは、グラフ・ノードおよびグラフ・エッジとしてキャッシュ・レイヤに格納されたデータを、１または複数のテーブルまたはフラット・ファイルを含む関係データベースに適するクエリおよびコマンドに変換することなど、様々な変換動作を実行する。
【００２３】
特定の実施形態では、ネットワーキング・システム１００によって格納される情報は、データベース１１０およびキャッシュ・レイヤ１０８内に格納される。特定の実施形態では、各データベース１１０内に格納される情報は、関係的に（たとえば、ＭｙＳＱＬを介してオブジェクトおよびテーブルとして）格納され、同一の情報が、グラフ・ノードと、ノードの間の関連付けまたは接続（以下ではグラフ・エッジと呼ばれる）とを含むグラフの形でキャッシュ・レイヤによって格納される。
【００２４】
特定の実施形態では、各グラフ・ノードまたはオブジェクトには、グラフ内のグラフ・ノードを一意に識別する一意識別子（ＩＤ）（以下ではノードＩＤと呼ばれる）が割り当てられる；すなわち、各ノードＩＤは、グローバルに一意である。１実装形態では、各ノードＩＤは、６４ビット識別子である。１実装形態では、シャードには、ノードＩＤ空間の１セグメントが割り当てられる。
【００２５】
特定の実施形態では、グラフは、ユーザ、ページ、イベント、ウォールポスト、コメント、写真、ビデオ、背景情報、コンセプト、興味、およびノードとして表すのに有用である任意の他の要素など、様々な異なるノード・タイプを維持することができる。エッジ・タイプは、ノード同士の間の関連付けに対応し、友達、フォロワ、サブスクライバ、ファン、いいね（または興味の他の表示）、ウォールポスト、コメント、リンク、提案、推奨、およびノード同士の間の他のタイプの関連付けを含むことができる。１実装形態では、グラフの一部を、ソーシャル・ネットワーク環境のそれぞれのユーザにそれぞれが対応するユーザ・ノードを含むソーシャル・グラフとすることができる。ソーシャル・グラフは、トピックノードだけでなく、それぞれが特定のコンセプトの専用であるかこれを対象とするコンセプト・ノードなどの他のノードをも含むことができる。トピック・ノードは、一時的（ｅｐｈｅｍｅｒａｌ）であってもなくてもよく、それぞれは、ソーシャル・ネットワーク環境のユーザ同士の間で現在興味を持たれている特定のトピックの専用であるかこれを対象とする。特定の実施形態では、各ノードは、ソーシャル・ネットワーク環境内でホスティングされまたはアクセス可能である対応するウェブ・ページ（「プロファイル・ページ」）を有し、表し、またはこれによって表される。たとえば、ユーザ・ノードは、対応するユーザ・プロファイル・ページを有することができる。対応するユーザ・プロファイル・ページでは、対応するユーザは、コンテンツを追加し、宣言を行い、他の形で彼自身または彼女自身を表現することができる。たとえば、下で説明するように、たとえばユーザ・プロファイル・ページ、コンセプト・プロファイル・ページ、またはトピック・プロファイル・ページなど、ソーシャル・ネットワーク環境内でホスティングされまたはアクセス可能である様々なウェブ・ページは、ユーザが、コンテンツをポストし、ステータス更新をポストし、メッセージをポストし、そのユーザまたは他のユーザによってサブミットされた他のポストに対するコメントを含むコメントをポストし、興味を宣言し、前述のポストならびにページおよび特定のコンテンツのいずれかに向かって「いいね」（下で説明する）を宣言し、あるいは、他の形で彼ら自身を表現するか様々なアクション（以下では、これらおよび他のユーザ・アクションを、集合的に「ポスト」または「ユーザ・アクション」と呼ばれる場合がある）を実行することを可能にする。或る実施形態では、ポスト（ｐｏｓｔｉｎｇ）は、メディア・コンテンツ（たとえば、写真、ビデオ、音楽、テキストなど）、ｕｎｉｆｏｒｍ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｏｒ（ＵＲＬ）、および他のノードなどの追加コンテンツに、そのそれぞれのプロファイル・ページ、他のユーザ・プロファイル・ページ、コンセプト・プロファイル・ページ、トピック・ページ、または他のウェブ・ページもしくはウェブ・アプリケーションを介してリンクしまたは他の形で参照することを含むことができる。そのようなポスト、宣言、またはアクションを、作成するユーザならびに他のユーザによって可視とする（ｖｉｅｗａｂｌｅ）ことができる。特定の��施形態では、ソーシャル・グラフは、さらに、それぞれがソーシャル・グラフ内のノードの対応するペアの間（ｂｅｔｗｅｅｎ  ａ  ｃｏｒｒｅｓｐｏｎｄｉｎｇ
ｐａｉｒ）の接続を定義しまたは表す複数のエッジを含む。上で述べたように、コンテンツの各アイテムを、他のノードにリンクされたグラフ内のノードとすることができる。
【００２６】
すぐ上で説明したように、様々な例示的な実施形態では、１または複数の説明されるウェブ・ページまたはウェブ・アプリケーションは、ソーシャル・ネットワーク環境またはソーシャル・ネットワーキング・サービスに関連する。本明細書で使用される時に、「ユーザ」は、そのようなソーシャル・ネットワーク環境とまたはこれを介してやり取りしまたは通信する、個人（人間のユーザ）、エンティティ（たとえば、企業、会社、またはサード・パーティ・アプリケーション）、または（たとえば、個人のまたはエンティティの）グループとすることができる。本明細書で使用される時に、「登録ユーザ」は、ソーシャル・ネットワーク環境内で公式に登録されたユーザを指す（一般に、本明細書で説明されるユーザおよびユーザ・ノードは、登録ユーザだけを指すが、これは、他の実施形態では必ずしも要件ではない；すなわち、他の実施形態では、本明細書で説明されるユーザお
よびユーザ・ノードが、本明細書で説明されるソーシャル・ネットワーク環境に登録されていないユーザを指す場合がある）。特定の実施形態では、各ユーザは、対応する「プロファイル」ページを有し、対応する「プロファイル」ページは、ソーシャル・ネットワーク環境によって格納され、ホスティングされ、またはアクセス可能であり、他のユーザのすべてまたは選択されたサブセットによって可視である。一般に、ユーザは、彼または彼女自身のそれぞれのプロファイル・ページのすべてまたは一部に対する、ならびに潜在的に、たとえば他の可能性の中でも、ホーム・ページ、ウェブ・アプリケーションをホスティングするページを含む特定のユーザによってまたはこれのために作成された他のページに対する管理権を有する。本明細書で使用される時に、「認証されたユーザ」は、そのユーザが管理権を有する対応するプロファイル・ページで主張されるユーザであるものとしてソーシャル・ネットワーク環境によって認証されたユーザを、または代替では、主張されるユーザの適切に信頼される代理人を指す。
【００２７】
２つのユーザ同士またはコンセプト同士の間の接続は、ソーシャル・ネットワーク環境のユーザ同士またはコンセプト同士の間の定義された関係を表すことができ、それに関して関連付けが行われたソーシャル・ネットワーク環境のユーザ、コンセプト、イベント、または他のノードに対応するノード同士の間のエッジとして、ソーシャル・ネットワーク環境の適切なデータ構造内で論理的に定義され得る。本明細書で使用される時に、「ｆｒｉｅｎｄｓｈｉｐ」は、ソーシャル・ネットワーク環境のユーザのペアの間の、定義されたソーシャル関係などの関連付けを表す。本明細書で使用される時に、「友達」は、別のユーザが接続、ｆｒｉｅｎｄｓｈｉｐ、関連付け、または関係を形成し、２人のユーザの間にエッジを生成させた、ソーシャル・ネットワーク環境の任意のユーザを指すことができる。たとえば、２人の登録ユーザは、たとえば、２人のユーザの一方が、他方のユーザにｆｒｉｅｎｄｓｈｉｐ要求を送信するか送信させた結果としてｆｒｉｅｎｄｓｈｉｐについて他方を選択することによるなど、明示的にお互いに友達になることができる。その要求について、他方のユーザは、受け入れまたは拒否することができる。代替案では、ｆｒｉｅｎｄｓｈｉｐまたは他の接続を、自動的に確立することができる。そのようなソーシャルｆｒｉｅｎｄｓｈｉｐを、他のユーザ、特に彼ら自身が登録ユーザの一方または両方の友達であるユーザに可視とすることができる。登録ユーザの友達は、登録ユーザのプロファイルまたは他のページ上のコンテンツ、特にユーザ生成コンテンツまたは宣言されたコンテンツに対する高められたアクセス特権（ｉｎｃｒｅａｓｅｄ  ａｃｃｅｓｓ  ｐｒｉｖｉｌｅｇｅｓ）を有することもできる。しかし、ソーシャル・グラフ内で彼らの間に友達接続を確立させた２人のユーザが、実生活（ソーシャル・ネットワーキング環境の外部）では必ずしも（通常の意味での）友達ではない場合があることに留意されたい。たとえば、或る実装形態で、あるユーザが、会社または他の人間以外のエンティティであり、したがって、この単語の伝統的な意味で、人間のユーザの友達になることができない場合がある。
【００２８】
本明細書で使用される時に、「ファン」は、特定のユーザ、ウェブ・ページ、ウェブ・アプリケーション、またはソーシャル・ネットワーク環境内でアクセス可能な他のウェブ・コンテンツのサポータまたはフォロワであるユーザを指すことができる。特定の実施形態では、あるユーザが特定のウェブ・ページのファンである（特定のウェブ・ページを「愛好する（動詞のｆａｎ）」）時に、そのユーザを、他の登録ユーザまたは一般大衆が見るために、ファンとしてそのページ上でリストすることができる。さらに、ユーザのアバタまたはプロファイル写真を、そのページに（または、下で説明されるページのいずれかの中／上に）示すことができる。本明細書で使用される時に、「いいね」は、ユーザ、特に登録ユーザまたは認証されたユーザが、限定ではなく例として、彼または彼女がそれを「いいね」と思い、そのファンであり、それを支持し、楽しみ、または他の形で肯定的に捉えていることを宣言しまたは他の形で実証した、他の可能性の中でもポスト、コメント、興味、リンク、媒体（たとえば、写真、写真アルバム、ビデオ、音楽など）コンセプト
、エンティティ、またはページなどのものを指すことができる（或る実装形態では、ユーザは、ソーシャル・ネットワーク・システムまたはソーシャル・ネットワーク環境によってホスティングされまたはアクセス可能である任意のページに対して、いいねまたは事実上何でも示しまたは宣言することができる）。１実施形態では、「いいね」を示しもしくは宣言することまたはユーザがあるものの「ファン」であることを示しもしくは宣言することを、ソーシャル・ネットワーキング環境内で同等に処理し、定義することができ、交換可能に使用することができる。同様に、自分自身がコンセプトもしくはコンセプト・プロファイル・ページなど、何かの「ファン」であると宣言することまたは自分自身が或ることを「いいね」と思うことを宣言することを、ソーシャル・ネットワーキング環境内で同等に定義し、本明細書で交換可能に使用することができる。さらに、本明細書で使用される時に、「興味」は、ユーザのプロファイル・ページ内で提示される、ユーザの宣言した興味など、ユーザが宣言した興味を指すことができる。本明細書で使用される時に、「欲しい（ｗａｎｔ）」は、ユーザが欲しがる事実上すべてのものを指すことができる。上で説明したように、「コンセプト」は、たとえば、スポーツ、スポーツ・チーム、音楽のジャンル、作曲家、趣味、会社（企業）、エンティティ、グループ、有名人、登録ユーザではない人、またはイベント、或る実施形態では別のユーザ（たとえば、認証されないユーザ）、その他などへの興味、いいねと思う気持ち、または関係をユーザが宣言しまたは他の形で実証できる事実上すべてのものを指すことができる。たとえば、複数のユーザのうちの１または複数（たとえば、ジェリー・ライス以外）によって作成され、管理される、有名なプロ・フットボール・プレイヤである「ジェリー・ライス」のコンセプト・ノードおよびコンセプト・プロファイル・ページがあると同時に、ソーシャル・グラフが、さらに、ジェリー・ライス自身（またはジェリー・ライスの信頼されもしくは認可された代理人）によって作成され、管理されるジェリー・ライスのユーザ・ノードおよびユーザ・プロファイル・ページを含む場合がある。
【００２９】
例示的なグラフ構造では、データ・オブジェクトは、複数の属性を含む。属性を、ｎａｍｅ−ｖａｌｕｅ（名前／値）ペアとすることができる。たとえば、或る人に対応するデータ・オブジェクトは、次の属性を含むことができる。
｛
“ｉｄ”：１２３４５，＃  ６４ビット  ＦＢｉｄ
“ｔｙｐｅ”：ｐｅｒｓｏｎ，＃  ｉｎｔｅｇｅｒ型または文字列名とすることができる“ｃｒｅａｔｅｄ”：１２５３６６５１３７，
“ｎａｍｅ”：”Ｐａｐａ  Ｓｍｕｒｆ”，
“ｕｓｅｒｎａｍｅ”：”ｐａｐａ＿ｓｍｕｒｆ”，
“ｇｅｎｄｅｒ”：”ｍａｌｅ”，
“ｅｍａｉｌｓ”：［”ｐｓｍｕｒｆ＠ｆａｃｅｂｏｏｋ．ｃｏｍ”，”ｐａｐａｓｍｕｒｆ＠ｇｍａｉｌ．ｃｏｍ”］
｝
データ・オブジェクト識別子（ｉｄ）は、オブジェクトが作成される時に割り当てられる６４ビット値とされることができる。データ・オブジェクトの属性を、１または複数のインデックス・サーバ１０６によって維持される検索インデックス内で解析し、維持することができる。たとえば、新しいデータ・オブジェクトが作成される時に、タームプロデューサ・モジュールは、前述のデータ・オブジェクトから次のタームを作成することができる。
ｔｙｐｅ：ｐｅｒｓｏｎ
ｃｒｅａｔｅｄ：１２５３６６５１３７
ｎａｍｅ：ｐａｐａ
ｎａｍｅ：ｓｍｕｒｆ
ｕｓｅｒｎａｍｅ：ｐａｐａ＿ｓｍｕｒｆ
ｇｅｎｄｅｒ：ｍａｌｅ｜
ｅｍａｉｌｓ：ｐｓｍｕｒｆ＠ｆａｃｅｂｏｏｋ．ｃｏｍ
ｅｍａｉｌｓ：ｐａｐａｓｍｕｒｆ＠ｇｍａｉｌ．ｃｏｍ
文書識別子（ｄｏｃｉｄ）は、タイム・スタンプ（３２ビット・カウンタまたはクロック値など）および対応するデータ・オブジェクトのデータ・オブジェクト識別子（ｉｄ）を含むことができる。これらのタームを、対応するｄｏｃｉｄに関連して１または複数のインデックス内に格納することができる。たとえば、例示的な検索インデックス内で、ｄｏｃｉｄは、オブジェクトＩＤおよび「ｃｒｅａｔｅｄ」タイム・スタンプから生成され、その結果、すべてのポスティング・リストが、逆年代順に（ｃｈｒｏｎｏｌｏｇｉｃａｌｌｙ順序付けられる（概念的には、ｄｏｃｉｄは「ｃｒｅａｔｅｄ（３２ビット）：ＯＢｉｄ（６４ビット）」である）。タイム・スタンプ（ｃｒｅａｔｅｄ）は、データ・オブジェクトが最初に作成された時刻に対応する。他の実装形態では、タイム・スタンプは、所与のデータ・オブジェクトが最後に変更された時刻に対応することができる。１実装形態では、インデックスのｄｏｃｉｄは、所与の検索の結果を作成時刻によって逆年代順に順序付けることができるように構成される。たとえば、この方式に基づけば、検索、ｎａｍｅ：ｓｍｕｒｆ  ｔｙｐｅ：ｐｅｒｓｏｎは、名前「ｓｍｕｒｆ」を有するすべての人を、その人に関連するデータ・オブジェクトが作成された時刻によって逆年代順に）順序付けて返す。他の実施形態では、オブジェクトをある他の基礎で順序付けることが望まれる場合に、任意の３２ビット・ソート・キーをタイム・スタンプの代わりに使用することができる。
【００３０】
オブジェクト同士の間の関連付け（エッジ）を、概念上、「エッジ・オブジェクト」と呼ばれるデータ・オブジェクトとしてモデル化し、格納することができる。したがって、インデックスは、人などのデータ・オブジェクト、およびソーシャル・ネットワークの検索を容易にするエッジ関係または他のグラフ関連情報に対応する他のオブジェクトに対応するエントリを格納することができ、これによって、システム性能を高める。次のデータ・オブジェクトは、上のｐｅｒｓｏｎオブジェクト（ｉｄ  １２３４５）と、音楽グループ（Ｃｏｌｄｐｌａｙ）に対応する別のデータ・オブジェクト（ｉｄ  ６７８９０）との間のタイプ「ｆａｎ（ファン）」の関連付けに対応する。
｛
“ｉｄ”：９２８２１，
“ｔｙｐｅ”：ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ，
“ｃｒｅａｔｅｄ”：１２５３６６５２４８，
“ｓｏｕｒｃｅ”：１２３４５，＃  Ｐａｐａ  Ｓｍｕｒｆ
“ｄｅｓｔ”：６７８９０  ＃  Ｃｏｌｄｐｌａｙ
｝
エッジは、ソース・オブジェクトおよび宛先オブジェクトに関連する、検索インデックス内の特殊なタームを生成することができる。たとえば、検索クエリｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｔｏ（６７８９０）は、すべてのＣｏｌｄｐｌａｙ（ｄｏｃｉｄ  ６７８９０）ファンに関連する文書識別子を返す。同様に、検索クエリｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｆｒｏｍ（１２３４５）は、人（ｉｄ  １２３４５）がそのファン関連付けを確立したすべてのデータ・オブジェクトに関する文書識別子を返す。この構文を使用して、アプリケーションは、次のクエリを用いて、ある人の友達または他の接続からのすべてのステータス更新を見つけることができる。
ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（１２３４５）ｔｙｐｅ：ｓｔａｔｕｓ
追加の例として、次の検索クエリは、やはりＣｏｌｄｐｌａｙファンである、ある人（ｉｄ  １２３４５）の友達のすべてを返す。
ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５）ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｔｏ（６７８９０）
データ・オブジェクトに、属性を用いて別のオブジェクトを直接に「ポイント」させることが可能なので、あるタイプの関連付けを、別々のエッジ・オブジェクトなしで作成す
ることができる。たとえば、ステータス・メッセージとユーザとの間の「所有者」エッジ・オブジェクトを有するのではなく、ステータス・オブジェクトが、作成するユーザに対応するデータ・オブジェクトの値を有するｏｗｎｅｒ（所有者）属性を含むことができる。たとえば、
｛
“ｉｄ”：５８３４６３９，
“ｔｙｐｅ”：”ｓｔａｔｕｓ．ｍｅｓｓａｇｅ”，
“ｔｅｘｔ”：”ｄｏｉｎｇ  ｎｏｔｈｉｎｇ”，
“ｏｗｎｅｒ”：１２３４５，
｝
１実装形態では、インデックス・サーバ１０６は、クエリ構成を介するグラフ・トラバーサル（ｇｒａｐｈ  ｔｒａｖｅｒｓａｌ）に関する単純な構文をサポートする。たとえば、次の検索クエリは、ある人（ｉｄ  １２３４５）の友達の友達のすべてを返す：ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５））。
【００３１】
この場合に、インデックス・サーバは、まず、内部クエリｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５）を実行する。次に、この内部クエリによって返される文書識別子が、外部プレフィックスに適用され、その結果、この式全体が、その人の友達のすべてに関するタームからのｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍのＯＲに展開されるようになる。
【００３２】
このクエリ構成構文を使用して、様々なクエリを構成することができる。たとえば、次の検索は、その人（ｉｄ  １２３４５）の友達を識別するタグを有し、スタンフォード（Ｓｔａｎｆｏｒｄ）ネットワーク内にある写真のすべてを返す：ｃｏｎｎｅｃｔｉｏｎ．ｔａｇ．ｆｒｏｍ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５）ｎｅｔｗｏｒｋ：ｓｔａｎｆｏｒｄ）ｔｙｐｅ：ｐｈｏｔｏ。内部クエリ構文は、エッジだけではなく、すべてのプロパティに適用される。たとえば、「ａｕｔｈｏｒ（作成者）」が、ステータス・メッセージの属性であると仮定すると、次の検索は、その人（ｉｄ  １２３４５）の友達からのすべてのステータス・メッセージを返す：ａｕｔｈｏｒ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５））ｔｙｐｅ：ｓｔａｔｕｓ。さらに、次の検索クエリは、Ｐａｐａという名前の人からのすべてのステータス・メッセージを返す：ａｕｔｈｏｒ（ｎａｍｅ：ｐａｐａ  ｔｙｐｅ：ｐｅｒｓｏｎ）ｔｙｐｅ：ｓｔａｔｕｓ。さらに、次の検索クエリは、その人（ｉｄ  １２３４５）の作成された友達接続を逆年代順で返す：ｓｏｕｒｃｅ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｉｅｎｄ．ｆｒｏｍ（１２３４５））ｔｙｐｅ：ｃｏｎｎｅｃｔｉｏｎ。
【００３３】
インデックス・サーバ１０６は、クエリに応答して文書識別子を返し、クライアント工程１０４は、この文書識別子を使用して、データベース１１０またはキャッシュ・レイヤ１０８などのデータ・ストア内に格納された対応するデータ・オブジェクトにアクセスすることができる。１実装形態では、上で述べたタームプロデューサ・モジュールが、データ・オブジェクトの属性から検索インデックスのタームを生成する。タームプロデューサは、入力としてオブジェクトをとり、どのタームをそのデータ・オブジェクトについてインデクシングしなければならないのかを示す（ｄｏｃｉｄ，ターム）ペアの集合（ｓｅｔ）を出力する。１実装形態では、タームプロデューサ・モジュールのタイプまたは挙動は、挿入されるオブジェクトのタイプに基づいて選択される。たとえば、メッセージを伝える目的のために、タームプロデューサ・モジュールが、次のエッジ・オブジェクトを処理するために呼び出されたと仮定する。
｛
“ｉｄ”：９２８２１，
“ｔｙｐｅ”：”ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ”，
“ｃｒｅａｔｅｄ”：１２５３６６５２４８，
“ｓｏｕｒｃｅ”：１２３４５，＃  Ｐａｐａ  Ｓｍｕｒｆ
“ｄｅｓｔ”：６７８９０  ＃  Ｃｏｌｄｐｌａｙ
｝
接続タームプロデューサ・モジュールは、インデックスへの挿入のために次のタームを作ることができる。
（９２８２１，”ｔｙｐｅ：ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ”）＃  エッジ文書
（９２８２１，”ｓｏｕｒｃｅ：１２３４５”）
（９２８２１，”ｄｅｓｔ：６７８９０”）
（１２３４５，”ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｔｏ：６７８９０”）＃  Ｐａｐａ  Ｓｍｕｒｆの文書
（１２３４５，”ｃｏｎｎｅｃｔｉｏｎ．ｔｏ：６７８９０”）
（６７８９０，”ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｆｒｏｍ：１２３４５”）＃  Ｃｏｌｄｐｌａｙの文書
（６７８９０，”ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ：１２３４５”）
図４に、本発明の実装形態に従って構成されたシステム内での新しいオブジェクトの作成および格納に関連する例示的な方法を示す。図４は、新しいオブジェクトについて、オブジェクト作成工程が、新しい文書識別子（ｄｏｃｉｄ）を生成することを示し、この文書識別子は、作成タイム・スタンプ（ｃｒｅａｔｅｄ）コンポーネントおよびオブジェクト識別子コンポーネント（上を参照されたい）を含む（４０２）。その後、１または複数のタームプロデューサ・モジュールを呼び出して、オブジェクトのタイプに基づいてｄｏｃｉｄ／タームペア（ｄｏｃｉｄ−ｔｅｒｍ  ｐａｉｒｓ）を作成する（４０４）。その後、オブジェクト作成工程は、インデックス・サーバ１０６によって維持される１または複数のインデックスにｄｏｃｉｄ／タームペアを挿入し（４０６）、データベース１１０にオブジェクトを書き込む（４０８）。或る実装形態では、各ｄｏｃｉｄ／タームペアを、所与のインデックス内で別々のエントリとして維持することができる。他の実装形態では、或るｄｏｃｉｄ／タームペアのｄｏｃｉｄを、同一のタームを有する既存のインデックス・エントリに追加することができる。たとえば、Ｃｏｌｄｐｌａｙ（ｄｏｃｉｄ  ６７８９０）の新しいファンに対応するオブジェクトの文書識別子（たとえば、ｄｏｃｉｄ
１２３４５）を、ターム「ｃｏｎｎｅｃｔｉｏｎ．ｔｏ：６７８９０」および／または「ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｔｏ：６７８９０」を有する１または複数の既存のインデックス・エントリに追加することができる。
【００３４】
タームプロデューサ・モジュールを更新することができ、すべての新しいオブジェクトは、タームプロデューサからの新しいタームをインデクシングする。さらに、更新工程は、毎日ＭａｐＲｅｄｕｃｅジョブ内でインデックス全体を再生成することもでき、その結果、すべての古いオブジェクトは、新しいタームを用いて更新されるようになる。インデックス再構築を、非正規化を介して性能を改善する機構として使用することができる。多くのストレージ・システムは、性能を改善するために、アプリケーション・レベルでデータの非正規化を必要とする。タームプロデューサは、非正規化判断をより動的にすることを可能にし、クエリ・パターンが変化する時のこれらの判断に対する変更を容易にする。さらに、非正規化構成に対する変更は、基礎になるデータがデータベース１１０に永続的に格納される形に対する変更を必要としない。たとえば、ページを生成するスクリプト（ｈｏｍｅ．ｐｈｐ）が、友達からのステータス・メッセージを得るために次の検索を頻繁に実行すると仮定する：ａｕｔｈｏｒ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（ＵＩＤ））ｔｙｐｅ：ｓｔａｔｕｓ。性能が、クエリの量およびｔｙｐｅ：ｓｔａｔｕｓポスティング・リストのサイズのゆえに問題になる場合には、結果が単一の、より小さいポスティング・リストまたはインデックスになるようにするために、タームプロデューサ・モジュールを、ａｕｔｈｏｒおよびｔｙｐｅのコンポジット・タームを出力するためにステータス・
メッセージについて追加するか更新することができる。たとえば、タームプロデューサ・モジュールを、下記など、ステータス・オブジェクトについて追加のタームを追加するように構成することができる。
｛
“ｉｄ”：３２１２２４，
“ｔｙｐｅ”：”ｓｔａｔｕｓ”，
“ｃｒｅａｔｅｄ”：１２５３６６５１３７，
“ｍｅｓｓａｇｅ”：”．．．”，
“ａｕｔｈｏｒ”：１２３４５
｝
タームプロデューサ・モジュールは、追加のターム（３２１２２４，”ｓｔａｔｕｓ：ａｕｔｈｏｒ：１２３４５”）を出力するように、更新されることができる。ページを生成するスクリプトは、クエリがｓｔａｔｕｓ：ａｕｔｈｏｒ（ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（ＵＩＤ））と表されるように、更新されることができる。さらに、下でより詳細に説明するように、レプリケーション・インデックスの集合は、さらなる性能改善のために特定のタームについて作成されることができる。この方式の１つの特定の利点は、非正規化判断を、簡単に変更でき、アプリケーション・レベルで行う必要がないことである。これは、開発者が、概念的に最も論理的な形でデータを格納できることを意味する。クエリ性能を、これらのアプリケーション・レベル判断とは相対的に独立の形でチューニングすることができ、アプリケーションを、より綺麗で理解し易く、経時的な更新がより簡単なものにする。
【００３５】
１実装形態では、検索インデックスは、文書識別子（ｄｏｃｉｄ）によってシャーディングされる。たとえば、図１に示されているように、インデックス・レイヤは、ルート・サーバ１０６ａおよび複数のリーフ・サーバ１０６ｂを含むインデックス・サーバの階層構成によって実施されることができる。１実装形態では、各リーフ・サーバ１０６ｂには、１または複数のシャードが割り当てられる。もう１つの実装形態では、クラスタまたはリング・トポロジを使用することができる。デフォルトでは、すべてのシャードに並列にクエリを送信し、結果をミキサまたはルート・インデックス・サーバ１０６ａ内でマージすることによって検索を実行することができる。１実装形態では、シャードには、文書識別子空間の１セグメントが割り当てられる。特定の実施形態では、各文書識別子（ｄｏｃｉｄ）は、一意の対応するシャードＩＤにマッピングされる（たとえば、算術的にまたは何らかの数学関数を介して）。したがって、特定のターム（たとえば、「ｃｏｎｎｅｃｔｉｏｎ．ｆａｎ．ｆｒｏｍ：１２３４５」）を、オブジェクトＣｏｌｄｐｌａｙ（ｄｏｃｉｄ  ６７８９０）が対応する１つのシャード内と、人（ｄｏｃｉｄ１２３４５）が「ファン」接続をも確立した他のオブジェクトの対応する他のシャード内とで維持することができる。１実装形態では、インデックス・サーバ１０６のそれぞれには、それらが維持する責任を負うシャードＩＤの集合が割り当てられる。この割当を調整して、システムにインデックス・サーバ１０６を追加しまたは除去することができる。
【００３６】
すべてのシャードにすべてのクエリを送ることは、計算的に高価である可能性があり、システムの全体的なクエリ・レートを制限する可能性がある。１実装形態では、インデックス・サーバ１０６によって実施されるインデックス・レイヤは、インデックス・システム内のタームのサブセットをインデクシングするのみである特殊なレプリケーション・インデックスをサポートする。たとえば、主インデックスまたはマスタ・インデックスに加えて、インデックス・レイヤは、１または複数の特定のクエリ・タイプに適合される１または複数の追加のレプリケーション・インデックスを含むことができる。たとえば、クエリｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（＊）が、システム内で極端に一般的なクエリであると仮定する。本明細書で説明されるインデクシング・システムを、すべてのｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍタームが、これらのタームだけを含む追加のレプリケーション・イン
デックス内でレプリケーションされるように構成することができる。次のコマンドは、そのようなレプリケーション・インデックスの作成を可能にする、例示的なアプリケーション・プログラミング・インターフェースを示す。
ｒｅｐｌｉｃａｓ  ＝  ｛
“ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ：＊”：［．．．］，＃専用のｃｏｎｎｅｃｔｉｏｎレプリケーション
“ｅｍａｉｌ：＊”：［．．．］，＃電子メール検索レプリケーション
“＊”：［．．．］，＃主レプリケーション
｝
インデックス・サーバ１０６は、クエリを実行する時に、検索を満足できる最小のレプリケーション・インデックスを選択する。たとえば、クエリｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（１２３４５）を、ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍレプリケーション・インデックス専用であるインデックス・サーバに転送することができる。その一方で、ｃｏｎｎｅｃｔｉｏｎ．ｆｒｏｍ（１２３４５）ｔｙｐｅ：ｐａｇｅなどの、より包括的なまたはより幅広い検索は、主インデックスまたは両方のタームをサポートする別のレプリケーション上で実行される。しかし、ある種のクエリの性能を改善するためのタームによるシャーディングに反対する、理論的理由はない。この設計の利点は、システムが、すべてのクエリをサポートでき、最も重要なクエリに関する最適のスループットおよび性能のためにチューニングされ得ることである。クエリが十分に一般的になった後に、管理者は、クエリのそのクラスを満足することに専用のレプリケーションのセットを作成することによって、クエリ・レートを高めるためにシステムをチューニングすることができる。これは、まず必要なすべてのクエリを実行するようにネットワーク・アプリケーションを構成することができるという点で、アプリケーション開発を単純にする。アプリケーションを起動する前に、アプリケーション開発中に作成されたクエリの構造に基づいて性能を改善するために、レプリケーション・インデックスを作成することができる。
【００３７】
図２に、サーバ２２ａ、２２ｂを実施するのに使用できる、例示的なコンピューティング・システム・アーキテクチャを示す。１実施形態では、ハードウェア・システム１０００は、プロセッサ１００２、キャッシュ・メモリ１００４、ならびに、有形のコンピュータ可読媒体上に格納された、明細書で説明される機能を対象とする、１または複数の実行可能モジュールおよびドライバを備える。さらに、ハードウェア・システム１０００は、高性能入出力（Ｉ／Ｏ）バス１００６および標準Ｉ／Ｏバス１００８を含む。ホスト・ブリッジ１０１０は、プロセッサ１００２を高性能Ｉ／Ｏバス１００６に結合し、Ｉ／Ｏバス・ブリッジ１０１２は、２つのバス１００６および１００８をお互いに結合する。システム・メモリ１０１４および１または複数のネットワーク／通信インターフェース１０１６は、バス１００６に結合される。ハードウェア・システム１０００は、さらに、ビデオ・メモリ（図示せず）およびビデオ・メモリに結合された表示デバイスを含むことができる。マス・ストレージ１０１８およびＩ／Ｏポート１０２０は、バス１００８に結合される。ハードウェア・システム１０００は、オプションで、キーボードおよびポインティング・デバイスと、バス１００８に結合された表示デバイス（図示せず）とを含むことができる。集合的に、これらの要素は、米国カリフォルニア州サンタ・クララのインテル（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ）によって製造されるｘ８６互換プロセッサおよび米国カリフォルニア州サニーベールのアドバンスド・マイクロ・デバイセズ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（ＡＭＤ），Ｉｎｃ．）によって製造されるｘ８６互換プロセッサ、ならびに任意の他の適切なプロセッサに基づく汎用コンピュータ・システムを含むがこれに限定されないコンピュータ・ハードウェア・システムの広いカテゴリを表すことが意図されている。
【００３８】
ハードウェア・システム１０００の要素を、下でより詳細に説明する。具体的には、ネットワーク・インターフェース１０１６は、ハードウェア・システム１０００と、ＥＴＨ
ＥＲＮＥＴ（登録商標）（たとえば、ＩＥＥＥ  ８０２．３）ネットワーク、バックプレーン、その他など、広範囲のネットワークのいずれかとの間の通信を提供する。マス・ストレージ１０１８は、サーバ２２ａ、２２ｂ内で実施される上で説明した機能を実行するためのデータおよびプログラミング命令の永久ストレージを提供し、システム・メモリ１０１４（たとえば、ＤＲＡＭ）は、プロセッサ１００２によって実行される時にデータおよびプログラミング命令の１次ストレージを提供する。Ｉ／Ｏポート１０２０は、ハードウェア・システム１０００に結合され得る追加の周辺デバイスの間の通信を提供する、１または複数のシリアル通信ポートおよび／またはパラレル通信ポートである。
【００３９】
ハードウェア・システム１０００は、様々なシステム・アーキテクチャを含むことができ、ハードウェア・システム１０００の様々なコンポーネントを、再配置することができる。たとえば、キャッシュ１００４を、プロセッサ１００２と共にオンチップとすることができる。その代わりに、キャッシュ１００４およびプロセッサ１００２を、「プロセッサ・モジュール」として一緒にパックすることができ、プロセッサ１００２は、「プロセッサ・コア」と呼ばれる。さらに、本発明のある種の実施形態は、上記のコンポーネントのすべてを必要としまたは含むのではない場合がある。たとえば、標準Ｉ／Ｏバス１００８に結合されて図示された周辺デバイスを、高性能Ｉ／Ｏバス１００６に結合することができる。さらに、或る実施形態では、単一のバスだけが存在する場合があり、ハードウェア・システム１０００のコンポーネントは、その単一のバスに結合される。さらに、ハードウェア・システム１０００は、追加のプロセッサ、ストレージ・デバイス、またはメモリなど、追加のコンポーネントを含むことができる。
【００４０】
１実装形態では、本明細書で説明される実施形態の動作は、ハードウェア・システム１０００によって実行される一連の実行可能モジュールとして、分散コンピューティング環境内で個別にまたは集合的に実施される。特定の実施形態では、１組のソフトウェア・モジュールおよび／またはドライバが、ネットワーク通信プロトコル・スタック、ブラウジング機能および他のコンピューティング機能、最適化工程、ならびに類似物を実施する。前述の機能モジュールを、ハードウェア、コンピュータ可読媒体上に格納された実行可能モジュール、またはこの両方の組合せによって実現することができる。たとえば、機能モジュールは、プロセッサ１００２など、ハードウェア・システム内のプロセッサによって実行される複数のまたは一連の命令を備えることができる。当初に、一連の命令を、マス・ストレージ１０１８などのストレージ・デバイス上に格納することができる。しかし、一連の命令を、ディスケット、ＣＤ−ＲＯＭ、ＲＯＭ、ＥＥＰＲＯＭ、その他などの任意の適切な記憶媒体上に有形に格納することができる。さらに、一連の命令を、ローカルに格納する必要はなく、ネットワーク／通信インターフェース１０１６を介して、ネットワーク上のサーバなどのリモート・ストレージ・デバイスから受信することができる。命令は、マス・ストレージ１０１８などのストレージ・デバイスからメモリ１０１４にコピーされ、その後、プロセッサ１００２によってアクセスされ、実行される。
【００４１】
オペレーティング・システムは、ソフトウェア・アプリケーション（図示せず）へおよびソフトウェア・アプリケーションからのデータの入力および出力を含む、ハードウェア・システム１０００の動作を管理し、制御する。オペレーティング・システムは、システム上で実行されつつあるソフトウェア・アプリケーションとシステムのハードウェア・コンポーネントとの間のインターフェースを提供する。ＬＩＮＵＸ（登録商標）オペレーティング・システム、米国カリフォルニア州クパティーノのアップル・コンピュータ（Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ  Ｉｎｃ．）から入手可能なＡｐｐｌｅ  Ｍａｃｉｎｔｏｓｈオペレーティング・システム、ＵＮＩＸ（登録商標）オペレーティング・システム、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティング・システム、ＢＳＤオペレーティング・システム、および類似物など、任意の適切なオペレーティング・システムを使用することができる。もちろん、他の実装形態が可能
である。たとえば、本明細書で説明されるニックネーム生成機能を、ファームウェア内または特定用途向け集積回路上で実施することができる。
【００４２】
さらに、上で説明した要素および動作は、記憶媒体上に格納される命令からなるものとすることができる。命令を、処理システムによって取り出し、実行することができる。命令の或る例は、ソフトウェア、プログラム・コード、およびファームウェアである。記憶媒体の或る例は、メモリ・デバイス、テープ、ディスク、集積回路、およびサーバである。命令は、処理システムによって実行される時に、本発明に従って動作するように処理システムに指示するように動作可能である。用語「処理システム」は、単一の処理デバイスまたは相互動作可能な処理デバイスのグループを指す。処理デバイスの或る例は、集積回路および論理回路網である。当業者は、命令、コンピュータ、および記憶媒体を熟知している。
【００４３】
本開示は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。同様に、適当である場合には、添付の特許請求の範囲は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。たとえば、本発明の実施形態は、ソーシャル・ネットワーキング・ウェブサイトに関連して動作するものとして説明されたが、本発明を、ウェブ・アプリケーションをサポートし、関連付けのグラフとしてデータをモデル化する任意の通信ファシリティに関連して使用することができる。さらに、或る実施形態では、用語「ウェブ・サービス」および「ウェブサイト」が、交換可能に使用される場合があり、さらに、サーバに直接にＡＰＩ呼出しを行う、モバイル・デバイス（たとえば、セルラ電話機、スマートホン、パーソナルＧＰＳ、携帯情報端末、パーソナル・ゲーミング・デバイスなど）などのデバイス上のカスタムＡＰＩまたは一般化されたＡＰＩを指すことができる。
【要約】  グラフ・データのインデクシング・システム。特定の実装形態では、インデクシング・システムは、クエリ性能を改善するために非正規化およびレプリケーション・インデックス機能性を提供する。【図１】
0005451954.tif 000002
【図２】
0005451954.tif 000003
【図３】
0005451954.tif 000004
【図４】
0005451954.tif 000005