(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムが、複数のノードに関連付けられている分類を識別する工程と、
前記コンピュータ・システムが、前記分類の間のエッジの重みに基づいて、前記分類を第１のレベルのコミュニティへグループ化する、第１グループ化工程と、
前記コンピュータ・システムが、前記第１のレベルのコミュニティ間のエッジの重みに基づいて、前記第１のレベルのコミュニティを第２のレベルのコミュニティへグループ化する、第２グループ化工程と、
前記コンピュータ・システムが、複数のノードを、前記分類、前記第１のレベルのコミュニティ、および前記第２のレベルのコミュニティの各々に基づいて、順次ソートした複数のノードのソート済みリストを生成する、リスト生成工程と、
前記コンピュータ・システムが、前記複数のノードの前記ソート済みリストに対して一意の識別子（ＩＤ）を順次に割り当てる工程と
を備える、コンピュータに実装された方法。
【請求項２】
前記複数のノードは、ソーシャル・ネットワーキング・システムのユーザに関連付けられている、請求項１に記載の方法。
【請求項３】
前記複数のノードは、人、人以外のもの、組織、コンテンツ、イベント、ウェブ・ページ、通信、オブジェクト、およびコンセプトのうちの少なくとも１つに関連付けられている、請求項１に記載の方法。
【請求項４】
前記分類は、前記複数のノードに関連付けられている少なくとも１つの属性を表す、請求項１に記載の方法。
【請求項５】
前記少なくとも１つの属性は、地理的ロケーションを含む、請求項４に記載の方法。
【請求項６】
前記複数のノードのノード間のつながりは、前記エッジの重みに関連付けられている、請求項１に記載の方法。
【請求項７】
前記エッジの重みは、前記つながりの数に基づく、請求項６に記載の方法。
【請求項８】
前記エッジの重みは、前記つながりの強さに基づく、請求項６に記載の方法。
【請求項９】
前記つながりは、前記複数のノードのノード間の共有される特性を表す、請求項６に記載の方法。
【請求項１０】
前記エッジの重みは、共有される前記特性を考慮する、請求項９に記載の方法。
【請求項１１】
第１の共有される特性は、第２の共有される特性とは異なる重み付けをされる、請求項１０に記載の方法。
【請求項１２】
前記リスト生成工程は、前記第２のレベルのコミュニティによって前記複数のノードをソートする工程を備える、請求項１に記載の方法。
【請求項１３】
前記リスト生成工程は、前記第１のレベルのコミュニティによって前記複数のノードをソートする工程を備える、請求項１に記載の方法。
【請求項１４】
前記リスト生成工程は、前記分類によって前記複数のノードをソートする工程を備える、請求項１に記載の方法。
【請求項１５】
共有される特性を有するノードは、共有される特性を有しないノードに対して割り当てられる一意のＩＤよりもより数値的に近い一意のＩＤを割り当てられる、請求項１に記載の方法。
【請求項１６】
より低いレベルにおけるコミュニティを、前記より低いレベルの各々における前記コミュニティ間のエッジの重みに基づいて、より高いレベルにおけるコミュニティへ反復してグループ化する工程と、
前記より高いレベルにおけるコミュニティにさらに基づいて、前記複数のノードのソート済みリストを生成する工程と
をさらに備える、請求項１に記載の方法。
【請求項１７】
前記複数のノードに関連付けられている既存のＩＤを前記一意のＩＤに対してマッピングする工程をさらに備える、請求項１に記載の方法。
【請求項１８】
前記第１グループ化工程は、
コミュニティ内のつながりの数およびつながりの強さのうちの少なくとも１つを最大化する工程と、
コミュニティ間のつながりの数およびつながりの強さのうちの少なくとも１つを最小化する工程と
を備える、請求項１に記載の方法。
【請求項１９】
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに、
複数のノードに関連付けられている分類を識別する工程と、
前記分類の間のエッジの重みに基づいて、前記分類を第１のレベルのコミュニティへグループ化する、第１グループ化工程と、
前記第１のレベルのコミュニティ間のエッジの重みに基づいて、前記第１のレベルのコミュニティを第２のレベルのコミュニティへグループ化する、第２グループ化工程と、
複数のノードを、前記分類、前記第１のレベルのコミュニティ、および前記第２のレベルのコミュニティの各々に基づいて、順次ソートした複数のノードのソート済みリストを生成する、リスト生成工程と、
前記複数のノードの前記ソート済みリストに対して一意の識別子（ＩＤ）を順次に割り当てる工程と、
を実行するように命令するように構成された命令を記憶したメモリと
を備える、システム。
【請求項２０】
コンピュータ実行可能な命令を記憶したコンピュータ記憶媒体であって、前記コンピュータ実行可能な命令は、実行される場合に、コンピュータ・システムに、
複数のノードに関連付けられている分類を識別する工程と、
前記分類の間のエッジの重みに基づいて、前記分類を第１のレベルのコミュニティへグループ化する、第１グループ化工程と、
前記第１のレベルのコミュニティ間のエッジの重みに基づいて、前記第１のレベルのコミュニティを第２のレベルのコミュニティへグループ化する、第２グループ化工程と、
複数のノードを、前記分類、前記第１のレベルのコミュニティ、および前記第２のレベルのコミュニティの各々に基づいて、順次ソートした複数のノードのソート済みリストを生成する、リスト生成工程と、
前記複数のノードの前記ソート済みリストに対して一意の識別子（ＩＤ）を順次に割り当てる工程と、
を備えるコンピュータに実装された方法を実行させる、記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタリングの分野に関する。より具体的には、本発明は、クラスタリングに基づいて、ＩＤをユーザに対して割り当てるための技法を提供する。
【背景技術】
【０００２】
ソーシャル・ネットワーキング・ウェブサイトは、メンバーが他のメンバーとつながり、および通信することができる動的な環境を提供する。こうしたウェブサイトは、メンバーが新たなソーシャル・ネットワークを作成することだけでなく、メンバーがメンバーの既存のソーシャル・ネットワーク内で対話することも可能にするオンライン・メカニズムを一般に提供し得る。メンバーは、任意の個人、または組織もしくは企業などの任意の実体を含み得る。数ある属性のうちでも特に、ソーシャル・ネットワーキング・ウェブサイトは、メンバーが関連情報をメンバーのソーシャル・ネットワークへ効果的かつ効率的に通信することを可能にする。
【０００３】
ソーシャル・ネットワークのメンバーは、情報、ニュース、ストーリ、交際アクティビティ、音楽、動画、および興味のある任意の他のコンテンツを、そのメンバー専用のウェブサイトの領域へ、または、さもなければ、そのようなコンテンツのために利用可能とされるウェブサイトの領域へ、強調または共有し得る。ソーシャル・ネットワークの他のメンバーは、メンバー・プロフィールをブラウズすることによって、または専用検索を実行することによって、共有されるコンテンツにアクセスし得る。コンテンツに対してアクセスし、コンテンツを検討すると、他のメンバーは、コンテンツについてのフィードバックまたは意見を提供することなどの、１つまたは複数の応答アクションを行うことによって反応し得る。メンバーがこのように対話する能力は、メンバー間の通信を促進し、ソーシャル・ネットワーキング・ウェブサイトの目的を実現することを助ける。
【０００４】
ソーシャル・ネットワークのありふれた使用法であっても、無数のコンピューティング・リソースにわたる大量のデータの作成を伴い得る。そのような量のデータをメンバーの期待と一致した手法で管理する能力は、ソーシャル・ネットワークの最適な運用にとって重要である。例えば、メンバーと他のメンバーとの対話において、ソーシャル・ネットワークのリソースを要求するメンバーは、情報のタイムリーな提示を望む。別の例として、ソーシャル・ネットワークによって維持されるデータに対する検索を実行し得るメンバーは、検索結果のタイムリーな返答を期待する。
【図面の簡単な説明】
【０００５】
【図１】本開示の一実施形態に係る例示的なクラスタリング・モジュールを例示する図。
【図２】本開示の一実施形態に係る例示的な識別モジュールを例示する図。
【図３Ａ】本開示の一実施形態に係る例示的なマッピング・テーブルを例示する図。
【図３Ｂ】本開示の一実施形態に係る例示的なマッピング・テーブルを例示する図。
【図３Ｃ】本開示の一実施形態に係る例示的なマッピング・テーブルを例示する図。
【図３Ｄ】本開示の一実施形態に係る例示的なマッピング・テーブルを例示する図。
【図４】本開示の一実施形態に係る、分類、第１のレベルのコミュニティ、および第２のレベルのコミュニティによって構築されるノードの例示的な樹形図を例示する図。
【図５】本開示の一実施形態に係る、一意のＩＤをノード・グラフのノードに対して割り当てる例示的なプロセスを例示する図。
【図６】本開示の一実施形態に係る例示的なネットワーク化されたコンピュータ・システムを例示する図。
【図７】一実施形態に係る例示的なマッピング・モジュールを例示する図。
【図８】一実施形態に係る、負荷分散検討事項に基づいて、ユーザをマシンに対してマッピングする例示的なプロセスを例示する図。
【図９】一実施形態に係る、ユーザをマシンへルーティングする例示的なプロセスを例示する図。
【図１０】一実施形態に係る、ソーシャル・ネットワーキング・システム内のユーザをクラスタリングおよびマッピングするためのシステムの例示的なネットワーク図を例示する図。
【図１１】一実施形態に係る、本明細書において説明される実施形態のうちの１つまたは複数を実装するために使用され得る例示的なコンピュータ・システムを例示する図。
【発明を実施するための形態】
【０００６】
最適なシステム性能のために、ノードをクラスタリングし、ノードをコンピューティング・リソースに対してマッピングするべく、コンピュータに実装された方法、システム、およびコンピュータ読取可能な媒体は、一実施形態において、複数のノードに関連付けられる分類を識別し得る。分類は、分類の間のエッジの重みに基づいて、第１のレベルのコミュニティへグループ化され得る。第１のレベルのコミュニティは、第１のレベルのコミュニティ間のエッジの重みに基づいて、第２のレベルのコミュニティへグループ化され得る。複数のノードのソート済みリストは、分類、第１のレベルのコミュニティ、および第２のレベルのコミュニティに基づいて生成され得る。一意の識別子（ＩＤ）は、複数のノードのソート済みリストに対して順次に割り当てられ得る。
【０００７】
一実施形態において、複数のノードは、ソーシャル・ネットワーキング・システムのユーザに関連付けられている。
一実施形態において、複数のノードは、人、人以外、組織、コンテンツ、イベント、ウェブ・ページ、通信、オブジェクト、およびコンセプトのうちの少なくとも１つに関連付けられている。
【０００８】
一実施形態において、分類は、複数のノードに関連付けられている少なくとも１つの属性を表し得る。
一実施形態において、属性は、地理的ロケーションを含む。
【０００９】
一実施形態において、複数のノードのノード間のつながりは、エッジの重みに関連付けられている。
一実施形態において、エッジの重みは、つながりの数に基づく。
【００１０】
一実施形態において、エッジの重みは、つながりの強さに基づく。
一実施形態において、つながりは、複数のノードのノード間の共有される特性を表す。
一実施形態において、エッジの重みは、共有される特性を考慮する。
【００１１】
一実施形態において、第１の共有される特性は、第２の共有される特性とは異なる重み付けをされる。
一実施形態において、複数のノードのソート済みリストの生成は、第２のレベルのコミュニティによって複数のノードをソートすることを備える。
【００１２】
一実施形態において、複数のノードのソート済みリストの生成は、第１のレベルのコミュニティによって複数のノードをソートすることを備える。
一実施形態において、複数のノードのソート済みリストの生成は、分類によって複数のノードをソートすることを備える。
【００１３】
一実施形態において、共有される特性を有するノードは、共有される特性を有しないノードに対して割り当てられる一意のＩＤよりも数値的に近い一意のＩＤを割り当てられる。
【００１４】
一実施形態において、コミュニティに対するより低いレベルにおけるコミュニティは、より低いレベルの各々におけるコミュニティ間のエッジの重みに基づいて、より高いレベルにおいて反復してグループ化され得る。複数のノードのソート済みリストは、より高いレベルにおけるコミュニティにさらに基づいて生成され得る。
【００１５】
一実施形態において、複数のノードに関連付けられている既存のＩＤは、一意のＩＤに対してマッピングされ得る。
一実施形態において、第１のレベルのコミュニティへの分類のグループ化は、コミュニティ内のつながりの数およびつながりの強さのうちの少なくとも１つを最大化すること、およびコミュニティ間のつながりの数およびつながりの強さのうちの少なくとも１つを最小化することを備える。
【００１６】
本発明の多くの他の特徴および実施形態は、添付の図面から、および下記の詳細な説明から、明らかとなるであろう。
図は、本発明の様々な実施形態を例示の目的のためだけに描くものであり、図は、同様の要素を識別するために同様の参照符号を使用する。図において例示される構造および方法の代替的な実施形態が、本明細書において説明される本発明の原理から逸脱することなく採用され得ることを、当業者は下記の議論から容易に認識するであろう。
【００１７】
ソーシャル・グラフなどのノード・グラフは、非常に多数のノードおよびノード間のつながり（またはエッジ）を含み得る。ノードの数は、例えば、数億単位または数十億単位になり得る。ネットワーク化されたコンピュータ・システムによって実装されるソーシャル・ネットワーキング・システムを用いる場合などの、多くの場合において、ユーザは、膨大な量の情報にアクセスし、膨大な量の情報を他のユーザと共有することが可能である。そのような膨大な量のデータを記憶および提供することは、多くの課題を提示する。こうした課題は、例えば、分散システムにわたるノード・グラフをどのようにパーティションに分けるかを決定する際に伴われる著しい計算要件およびメモリ要件を含み得る。例えば、分散システムに対してクエリ（または要求）を実行することは、多数のマシンに対するクエリを潜在的に必要とし得る。クエリのこの「ファン・アウト」は、クエリ応答時間を遅延させ得るだけでなく、ネットワークへの過度の負担も課し得る。
【００１８】
分散システム全体のノード・グラフ情報のパーティション分けは、ネットワークの計算速度およびネットワークへの負担に対して大きな影響を有し得る。例えば、どこにユーザ情報が記憶されるか（例えば、どのマシン）、および、どのようにユーザ情報がアクセスまたは記憶されるか（例えば、永続メモリまたは高速メモリ）は、計算の量および計算の速度に著しく影響し得る。本明細書において説明されるシステムおよび方法の実施形態は、分散システム全体のノード・グラフを最適な手法でパーティションに分けるために使用され得る一意のＩＤの生成に関する。例えば、一意のＩＤは、ノードをノードの関係に基づいてクラスタリングし、これらのクラスタが同じマシンに対して局所的になる傾向を強める手法で生成され得る。
【００１９】
計算性能およびネットワーク性能は、マシンが受信するトラフィックの量によって影響を及ぼされ得る。使用パターンは、マシンへ課される負荷の量を変動させ得る。本明細書において説明されるシステムおよび方法の実施形態は、マシン全体のそのような負荷を管理および分散させることにも関する。これは、例えば、クラスタに関連する使用パターン
およびマシンの負荷への使用パターンの対応する効果を決定し、より良好に負荷を分散する手法でクラスタをマシンに対して再割り当てすることを含み得る。
【００２０】
図１は、一実施形態に係る例示的なクラスタリング・モジュール１００を例示する。クラスタリング・モジュール１００は、識別モジュール１０２と、マッピング・モジュール１０４とを含む。クラスタリング・モジュール１００は、ソーシャル・ネットワーキング・システムの一部など、ネットワーク化されたコンピュータの分散システムの一部として実装され得る。本明細書において、この図および全ての図において示される構成要素は、例示に過ぎず、他の実装は、付加的な構成要素、より少ない構成要素、または異なる構成要素を含んでもよい。いくつかの構成要素は、関連する細部を不明瞭にしないように、図示されないことがある。
【００２１】
識別モジュール１０２は、ノード・グラフのノードに対して割り当てられるべき一意の識別子（ＩＤ）を生成し得る。一実施形態において、ノードは、ソーシャル・ネットワーキング・システムのユーザに対して関連付けられ得る。一実施形態において、ノードは、例えば、人、人以外、組織、コンテンツ（例えば、画像、動画、オーディオ等）、イベント、ウェブ・ページ、通信、オブジェクト、コンセプト、または、具体的であれ、抽象的であれ、ノードとして表され得る任意の他の物、観念、もしくは構築物に対して関連付けられ得る。一意のＩＤは、まず、各ノードについての分類を決定することによって生成され得る。一実施形態において、分類の決定は、任意の属性（または複数の属性）に基づき得る。例えば、属性は、地理的ロケーション（例えば、居住都市）に関連し得る。一実施形態において、分類の決定は、本明細書においてより詳細に説明されるように、ノード間のエッジの重みに基づかない。
【００２２】
分類は、次に、分類間で定義されるエッジの重みに基づいて、より高いレベルのコミュニティへグループ化され得る。一定の実施形態において、エッジの重みは、分類間のつながりの数、分類間のつながりの強さ、または、これらもしくは他の要因の組み合わせに基づき得る。結果として得られるコミュニティは、さらに高いレベルのコミュニティへ再度反復してグループ化され得る。さらに高いレベルのコミュニティへのこうしたグループ化も、コミュニティ間のエッジの重みに基づき得る。ノードは、次いで、本明細書においてより詳細に議論されるように、分類および全てのレベルのコミュニティによってソートされ、その後、数値が連続するように一意のＩＤを割り当てられ得る。
【００２３】
一実施形態において、つながりは、任意のタイプのアクティビティ、対話、共通の興味、または、分類間およびコミュニティ間で共有される他の特性を表し得る。エッジの重みは、共有される特性を異なった方法で考慮し得る。例えば、第１のタイプの共有される特性は、第２のタイプの共有される特性よりも、２つの分類間または２つのコミュニティ間のより強い関係を反映し得る。そのため、それらの相対的な重要度に基づいて、第１のタイプの共有される特性は、第２のタイプの共有される特性よりも重く重み付けをされ得る。したがって、エッジの重みは、様々なタイプの共有される特性の相対的な重要度を反映し得る。共有される特性に関連付けられている値は、本明細書においてより詳細に議論されるように、係数によって表されてもよい。
【００２４】
マッピング・モジュール１０４は、全てのノードについての一意のＩＤのセット（「一意のＩＤ空間」とも称される）を利用して、ネットワーク化されたコンピュータ・システムにわたるノード・グラフをパーティションに分け得る。一実施形態において、一意のＩＤ空間は、ネットワーク化されたコンピュータ・システムのデータベース・サーバに対してノードをマッピングするために使用され得る。別の実施形態において、一意のＩＤ空間は、ネットワーク化されたコンピュータ・システムのキャッシュ・システムに対してノードをマッピングするために使用され得る。
【００２５】
マッピング・モジュール１０４は、一意のＩＤ空間をパーティションの数によって分割し（またはセグメント化し）、その分割部分に基づいて、ネットワーク化されたコンピュータ・システムのマシンに対してノードをルーティングし得る。一実施形態において、これらの分割部分は、分割部分ごとに同じ数の一意のＩＤを有するように、一定の場合において等しく重み付けをされ得る。別の実施形態において、分割部分は、等しく重み付けをされなくてもよい。マッピング・モジュール１０４は、ノードの関連付けられた一意のＩＤに基づいて、ノードをマシンに対してマッピングし得る。これは、近しくつなげられたノード（例えば、ユーザとユーザの友達）が、同じマシン（または、例えば、マシン・プールなどの、近しく関連付けられたマシンのグループ）上にクラスタリングされるという傾向をもたらす。一実施形態において、マッピング・モジュール１０４は、マシンに対する負荷を最適化するために、負荷分散検討事項を考慮してノードをマッピングする。
【００２６】
図２は、一実施形態に係る例示的な識別モジュール１０２を例示する。識別モジュール１０２は、元のノードの代わりに、分類の新たなグラフ（例えば、地理的ロケーション）を定義し得る。識別モジュール１０２は、分類決定モジュール２０２と、コミュニティ生成モジュール２０４と、ＩＤ割り当てモジュール２０６とを含み得る。分類決定モジュール２０２は、ノード・グラフのノードに関連する属性を識別し、その属性に基づいて、各ノードについての分類を決定し得る。属性は、任意の特徴またはコンセプトであってよく、ノードは、その特徴またはコンセプトに従ってグループ化され得る。一実施形態において、１つよりも多くの属性および属性の異なる組み合わせが、ノードを分類するために選択および使用され得る。
【００２７】
一実施形態において、属性は、関連付けられた都市、地域、郡、または他の地理的ロケーションなどの地理的関連性であり得る。各ノードは、その地理的関連性によって分類され得る。例えば、ソーシャル・グラフは、ユーザをノードとして、また、交友関係をノード間のつながり（またはエッジ）として含み得る。ユーザの属性は、関連付けられた都市（例えば、居住都市）であり得る。そのような場合において、各ユーザは、そのユーザに関連付けられた都市に基づいて分類され得る。都市または他の関連性に基づいて分類されたユーザは、ユーザのコミュニティを構成する。
【００２８】
ノード間のつながりと強く相関する属性は、コミュニティの決定を容易にし得る。例えば、ソーシャル・グラフの例において、地理的関連性は、交友関係と強く相関し得る。なぜなら、人々は、１つの地理的領域（例えば、都市）内で生活し、労働し、交際することが多い傾向があり、したがって、同じ地理的領域において他者と友達になる傾向を有するためである。したがって、本明細書においてより詳細に説明されるように、共通の地理的領域における友達は、コミュニティを形成し得る。別の例として、人口学的検討事項（例えば、年齢、民族、性別、宗教等）のうちのいずれか１つまたはいくつかは、ノード間のつながりと強く相関することが多い属性であり得る。この点に関して、類似した人口学的プロフィールを有する人は、友達であることが多い。したがって、人口学的検討事項は、コミュニティを決定する際に、人を分類するために使用され得る。コミュニティを決定する際におけるユーザの分類は、本明細書において例として明示的に説明される属性以外の属性に基づいてもよい。
【００２９】
ソーシャル・グラフについての例は、例示的なコンテキストを提供し、様々な実施形態の有効な（ｏｐｅｒａｔｉｖｅ）原理を例示するために使用される。ソーシャル・グラフのこの例の議論は、限定としてみなされるべきではない。ソーシャル・グラフについてのこの例の基本的な原理およびコンセプトは、他の実施形態において、他のタイプのグラフ、ノード、つながり、属性等に適用可能であり得る。
【００３０】
分類決定モジュール２０２は、分類（例えば、都市）を新たなグラフのノードとして表し、分類間のエッジの重み（または値）を定義し得る。一定の実施形態において、エッジの重みは、分類間のつながりの数、分類間のつながりの強さもしくはタイプ、または、これらもしくは他の要因の組み合わせに基づき得る。一実施形態において、エッジの重みは、分類間のつながりの総数に基づいて決定され得る。例えば、２つの分類間のつながりが多くなればなるほど、それらのつながりを表すエッジの重みが大きくなるように、エッジの重みは、任意の２つの分類間のつながりの数に比例し得る。例えば、エッジの重みは、２つの分類間のつながりの数によって表されてもよい。例えば、１００個のつながりは、１００のエッジの重みをもたらし、２００個のつながりは、２００のエッジの重みをもたらす等である。分類間のエッジの重みに対して値を割り当てるための他の技法が、他の実施形態において使用されてもよい。
【００３１】
一実施形態において、エッジの重みは、分類間のつながり（または類似性）の強さまたは性質に基づいて決定され得る。例えば、２つの分類間の個々のつながりは、つながりの強さに基づいて割り当てられる変動する係数を有し得る。例えば、特色「Ａ」（例えば、２人のユーザは結婚している）のつながりは、特色「Ｂ」（例えば、２人のユーザは同僚である）のつながりよりも強い（または、より重要な）つながりとしてみなされ得る。したがって、特色「Ａ」とのつながりは、特色「Ｂ」とのつながりよりも大きい係数を割り当てられ得る。例えば、ソーシャル・グラフの例において、サンノゼ市のユーザは、サンフランシスコ市内の単なる知人との一定の数の交友関係を有し得るが、ロサンゼルス市において、ユーザが頻繁に通信する家族の一員、親しい友達、または友達たちとの等しい数の交友関係を有し得る。ユーザが頻繁に通信する家族の一員、親しい友達、または友達たちとのロサンゼルス市内における交友関係は、ロサンゼルス市内のより強い交友関係を反映するために、サンフランシスコ市内の交友関係よりも大きい係数値を割り当てられ得る。
【００３２】
一般に、ソーシャル・グラフ・データは、係数についての情報を、ソーシャル・グラフ内のノード間の関連性の尺度として含み得る。係数は、ソーシャル・グラフ内のノード間のつながり（または経路）についての重みを反映し得る。例えば、係数は、ユーザがそのユーザによって友達とされた別の人よりも、そのユーザの親友と親しいことを、彼らをつなげる経路のそれぞれの重みに基づいて示し得る。係数は、ソーシャル・ネットワーキング・システムの内部であれ、外部であれ、ノード間で取り得る多様な対話に基づき得る。ノードは、ユーザ、人々、ページ、またはソーシャル・グラフにおける任意のオブジェクトを含み得る。係数の決定は、方向性を有し、ソーシャル・グラフ内のノード間の関係、対話、または親しさなどの多くの要因に依存し得る。例として、１人のユーザ（例えば、ユーザＡ）の別のユーザ（例えば、ユーザＢ）に対する関連性の尺度は、ユーザＡがユーザＢと友達であるか、ユーザＡがユーザＢの写真に対してコメントしたか、ユーザＡがユーザＢのコンテンツまたは近況アップデートに対して「いいね！」を表明したか、ユーザＡがユーザＢのウォールに対して投稿したか、ユーザＡがユーザＢと同じスレッド上に存在したか、ユーザＡがユーザＢと同じ写真に写っているか、ユーザＡがユーザＢまたはユーザＢのコンテンツに関与した状態で（または関与しない状態で）一定の時間（例えば、日数）が経過したか、ユーザＡがユーザＢのコメントにリンクしたか、ユーザＡがユーザＢのコンテンツを他者と共有したか、ユーザＡがウォール・コメント中でユーザＢに言及したか、ユーザＡがユーザＢのプロフィールまたは他のウェブ・ページを見たか等を含むが、これらに限定されない様々な検討事項に基づき得る。
【００３３】
ユーザＢについてのユーザＡの係数の決定に関する前述の例において、係数を通知する取り得る対話のうちの多くは、ユーザＡのアクションに基づく。しかしながら、ユーザＢのアクションを伴う他の対話も、ユーザＢについてのユーザＡの係数の決定において検討され得る。そのような対話は、ユーザＢがユーザＡの写真を見たか、ユーザＢがユーザＡ
のアルバムを見たか、ユーザＢがユーザＡまたはユーザＡのコンテンツに関与した状態で（または関与しない状態で）一定の時間（例えば、日数）が経過したか等などの、任意の多様なアクティビティを含み得る。さらに、係数の決定を通知する対話は、対話が発生した期間（例えば、過去３０日間、６０日間、９０日間、または任意の他の適切な時間間隔）に基づき得る。係数は、そうした履歴期間内の対話の頻度ならびに他の要因にも基づき得る。
【００３４】
係数は、いくつかの例では、非対称的であり得る。例えば、一定の理由（例えば、プライバシー）のために、係数スコアは、動作中のユーザのアクションのみに基づいてもよい。一実施形態において、２方向係数スコアは、キャッシュ・シャーディングが使用パターンをより良好に反映するように計算され得る。
【００３５】
コミュニティ生成モジュール２０４は、分類間のエッジの重みに基づいて、第１のレベルにおけるコミュニティ内の分類をグループ化し得る。一実施形態において、コミュニティ検出アルゴリズムは、分類を入力として用いて実行され、分類（例えば、都市）が対応するコミュニティに対してマッピングされることをもたらす。例えば、一実施形態において、分類間に相対的に大きい値のエッジの重みを有する分類は、コミュニティ内のつながりの数またはつながりの強さを最大化し、コミュニティ間のつながりの数またはつながりの強さを最小化するように、１つのコミュニティにおいて共にグループ化され得る。
【００３６】
第１のレベルにおける分類のグループ化から結果として得られるコミュニティは、第１のレベルのコミュニティと称され得る。反復したグループ化が実行されて、より高いレベルにおけるコミュニティが生成され得る。例えば、コミュニティ検出アルゴリズムは、第１のレベルのコミュニティを入力として用いて実行され、第１のレベルのコミュニティをより高いレベルの第２のレベルのコミュニティへグループ化し得る。同様に、コミュニティ検出アルゴリズムは、第２のレベルのコミュニティを入力として用いて実行されて、第２のレベルのコミュニティをより高いレベルの第３のレベルのコミュニティへグループ化し得るなどである。この技法は、分類が第１のレベルのコミュニティへグループ化されること、第１のレベルのコミュニティが第２のレベルのコミュニティへグループ化されること、第２のレベルのコミュニティが第３のレベルのコミュニティへグループ化されること、および、第３のレベルのコミュニティが、またさらに他のより高いレベルのコミュニティへグループ化されることをもたらす。連続したレベルのコミュニティの各々におけるコミュニティは、そのコミュニティ内のつながりの数またはつながりの強さを最大化し、他のコミュニティとのつながりの数またはつながりの強さを最小化することによって決定され得る。
【００３７】
連続したレベルのコミュニティを生成するための反復したグループ化は、数において限定されない。一実施形態において、本技法は、ｎ個のコミュニティ・レベルに対するマッピングを伴ってもよく、ここで、ｎは、分類およびコミュニティの最適なグループ化のために選択された任意の整数値であり得る。例えば、ｎの値は、２、３、または他の適切な数であってもよい。別の例として、ｎの値は、２または３以外の値であってもよい。
【００３８】
ソーシャル・グラフの例において、都市は、都市間のエッジの重みに基づいて、コミュニティへグループ化され得る（例えば、都市間の交友関係の数、都市間の交友関係の強さ、これら双方等）。結果として得られる第１のレベルのコミュニティは、同様の手法で第２のレベルのコミュニティへさらにグループ化され得る。結果として得られる第２のレベルのコミュニティは、同様の手法で第３のレベルのコミュニティへさらにグループ化され得るなどである。より高いレベルのコミュニティへの任意の回数の反復したグループ化が実行され得る。一定の実施形態において、元のノードに関連付けられた既存のＩＤ（例えば、ユーザＩＤ）は、分類および様々なレベルのコミュニティに対してマッピングされ得
る。
【００３９】
ノードを属性によって分類し、その後、ノードをコミュニティへグループ化するための作業用セットとして分類を使用することは、著しい利点を提供し得る。ソーシャル・グラフの例において、１０億人のユーザにわたって関連付けられたノードに基づく作業用セットは、ユーザに関連付けられた７５０，０００の都市の分類に基づく作業用セットへ低減され得る。作業用セットにおけるそのような低減は、一意のＩＤを決定するための計算時間を、例えば、数時間から数分へ著しく低減し得る。さらに、低減された作業用セットは、様々な適用例のために必要となる反復したグループ化の回数を著しく低減し得る。いくつかの例において、ノードの最適なクラスタリングを達成するための低減された作業用セットに基づく反復したグループ化の回数は、５回以下の反復であり得る。
【００４０】
ソーシャル・グラフの例において、ソーシャル・グラフは、約１０億個のノードを含むことがあり、当該ノードは、約７５０，０００の都市に関して分類され得る。都市が、都市間のエッジの重み（例えば、つながりの数）に基づいてグループ化される場合、結果として得られる第１のレベルのコミュニティの数は、約２，０００となり得る。第１のレベルのコミュニティが、それらの間のエッジの重みに基づいてさらにグループ化される場合、結果として得られる第２のレベルのコミュニティの数は、約６０となり得る。さらに高いレベルにおいてコミュニティをグループ化するための後続の試行は、コミュニティの数における著しい低減を提供しないことがあり得る。
【００４１】
様々なレベルにおける、結果として得られるコミュニティは、地理的領域とある程度の対応関係を有し得るが、当該コミュニティは、交友関係に基づいてもよく、交友関係は、地理と強い相関関係を有し得る。コミュニティと地理的領域との間の対応関係は、厳格な対応関係である必要はない。例えば、互いに近接したいくつかの地理的領域は、それらの間に多くの交友関係または強い交友関係を有しなくてもよく、互いに離間したいくつかの地理的領域が、多くの交友関係または強い交友関係を有してもよい。地理的領域と交友関係との間の相関は、文化的要因、人口学的傾向、共通の興味または結びつき等などの幅広い検討事項に基づき得る。
【００４２】
ＩＤ割り当てモジュール２０６は、一意のＩＤをノードのソート済みリストに対して数値が連続するように割り当て得る。ノードは、友達が共にクラスタリングされる傾向があり、同じ分類を有し、同じコミュニティ内に収まる傾向があるようにソートされ得る。ＩＤ割り当てモジュール２０６は、分類および結果として得られるコミュニティによってノードをソートし得る。一実施形態において、ノードは、分類によってソートされ、次いで、第１のレベルのコミュニティによってソートされ、次いで、第２のレベルのコミュニティなどによって再度ソートされ得る。
【００４３】
一意のＩＤは、ノードのソート済みリストに対して割り当てられる（例えば、１から１０億までの）数列であり得る。一般に、様々なレベルにおけるクラスタリングされたノードまたはコミュニティは、互いに数値的に近い一意のＩＤを有する。例えば、同じ分類を有するノードは、互いに数値的に近い一意のＩＤを有する。別の例として、同じ第１のレベルのコミュニティ内のノードは、互いに数値的に近い一意のＩＤを有する。同じ第２のレベルのコミュニティ内のノードは、互いに数値的に近い一意のＩＤを有する。同じ第３のレベルのコミュニティ内のノードは、互いに数値的に近い一意のＩＤを有する。「数値的に近い」という用語は、本明細書において広く使用され、ある数列の最初から最後までのあらゆる整数または値を含む、連続した数の厳格なシーケンスを有する一意のＩＤには限定されないことが認識されるべきである。例えば、数値的に近い一意のＩＤは、数値が連続する奇数、例えば、１、３、５、７、９などであってもよい。別の例として、数値的に近い数は、一連の非連続な奇数および偶数、例えば、１、２、４、５、７、８などであ
ってもよい。また別の例として、数値的に近い数は、本明細書において説明される技法によって決定されるような、ノードについての一意のＩＤのセットにおける値間の差異が、ノードについての別のタイプの既存のＩＤのセットにおける値間の差異よりも相対的に小さいことを示し得る。
【００４４】
したがって、一意のＩＤ空間は、友達、分類、およびコミュニティが互いに近い一意のＩＤを有するように構築され得る。一意のＩＤは、ネットワーク化されたコンピュータ・システム全体のマッピングのために分割され得る。一意のＩＤ空間が分割される場合、一意のＩＤ空間の分割部分は、様々なレベルにおける都市のクラスタおよびコミュニティのクラスタだけでなく、友達のクラスタも含む。いくつかの実施形態において、特定のレベルにおける都市または他のコミュニティは、パーティション間で分けられ得る。一般に、パーティション化は、本明細書においてより詳細に議論されるように、ファン・アウトに関連付けられた不都合を低減しつつ、局所性を改善し、システム性能を最適化し得る。
【００４５】
識別モジュール１０２は、新たなグラフの定義を更新し得る。識別モジュール１０２による、元のノードの代わりに分類に基づいた新たなグラフの定義は、より少ない更新を必要とし得る。ソーシャル・グラフの例において、都市間の交友関係の数または交友関係の強さは、かなり静的であることがあり、短期間で著しく変化しないことがあり得る。対照的に、ユーザに対する変化は、より頻繁に発生し得る。なぜなら、人々は、都市内で、移動し、新たな友達を作る等し得るためである。したがって、新たなグラフは、元のノードの代わりに分類に基づくので、識別モジュール１０２は、ユーザに関連付けられている基本的なデータにおける変化を考慮するために、相対的により少ない更新を実行することが必要とされ得る。様々な実施形態において、識別モジュール１０２は、様々な間隔で（例えば、毎週、毎月、３か月ごとに、６か月ごとに、または他の適用可能な期間ごとに）、または、一定のイベント（例えば、都市間もしくはコミュニティ間のエッジの重みにおける閾値変化）の発生時に、新たなグラフを更新し得る。
【００４６】
図３Ａ〜図３Ｄは、一実施形態に係る例示的なマッピング・テーブルを例示する。例示的なマッピング・テーブルは、ソーシャル・グラフに関して説明される。しかしながら、このテーブルに関係して議論される基本的なコンセプトは、任意の単一のソーシャル・グラフまたはその特定の特徴に限定されない。
【００４７】
図３Ａにおいて、テーブル３００は、１２人のユーザ（例えば、ノード）を列挙するユーザ列を含む。明確さおよび簡潔さのために、１２人のユーザのみが、例示的な目的のために示される。生成されるマッピング・テーブルは、数百万人、数十億人、または任意の数のユーザを含み得ることが認識されるべきである。一実施形態において、ユーザ列は、各ユーザについて前もって割り当てられた既存のＩＤ（例えば、ユーザＩＤ）を表し得る。既存のＩＤは、次いで、Ｌ１列内の分類（例えば、都市）ならびにＣ１列およびＣ２列におけるコミュニティに対して適切にマッピングされ得る。
【００４８】
Ｌ１列は、ユーザの関連付けられた都市を表す。都市は、ユーザの居住地を表し得る。例えば、ユーザ１〜１２の各々は、そのユーザの関連付けられた都市、例えば、ニューヨーク市（ＮＹ）、サンフランシスコ市（ＳＦ）、サンディエゴ市（ＳＤ）、ロサンゼルス市（ＬＡ）、またはニュージャージー市（ＮＪ）のいずれかの隣に示される。
【００４９】
Ｃ１列は、都市間に定義されるエッジの重みに基づいた（例えば、都市間の交友関係の数、都市間の交友関係の強さ等に基づいた）、都市のグループ化に由来する第１のレベルのコミュニティを表す。一実施形態においては、第１のレベルのコミュニティ内の交友関係の数（または強さ）を最大化し、第１のレベルのコミュニティ間の交友関係の数（または強さ）を最小化するために、第１のレベルのコミュニティは、都市間でより大きい数（
または強さ）の交友関係を有する都市が共にグループ化されるように選択される。図示されるように、ＮＹは、第１のレベルのコミュニティ「１」内として列挙され、ＳＦは、第１のレベルのコミュニティ「２」内として列挙され、ＳＤおよびＬＡは、第１のレベルのコミュニティ「３」内として列挙され、ＮＪは、第１のレベルのコミュニティ「４」内として列挙される。図示される実施形態において、ＬＡおよびＳＤは、それらの間に相対的に大きい数の交友関係を有することがあり、ＬＡとＳＤとが同じ第１のレベルのコミュニティ内にグループ化されることをもたらす。
【００５０】
Ｃ２列は、第１のレベルのコミュニティ間で定義されるエッジの重みに基づいた（例えば、第１のレベルのコミュニティ間の交友関係の数、第１のレベルのコミュニティ間の交友関係の強さ等に基づいた）、第１のレベルのコミュニティのグループ化に由来する第２のレベルのコミュニティを表す。一実施形態において、第２のレベルのコミュニティ内の交友関係の数（または強さ）を最大化し、第２のレベルのコミュニティ間の交友関係の数（または強さ）を最小化するために、第２のレベルのコミュニティは、それらの間で大きい数（または強さ）の交友関係を有する第１のレベルのコミュニティが共にグループ化されるように選択される。図示される実施形態において、ＮＹおよびＮＪは、同じ第２のレベルのコミュニティ「１」内に収まり、ＳＦ、ＳＤ、およびＬＡは、同じ第２のレベルのコミュニティ「２」内に収まる。
【００５１】
都市および結果として得られるレベルのコミュニティは、次いで、ソートされ、都市および結果として得られるレベルのコミュニティに基づいた、ユーザ（またはユーザＩＤ）のソート済みリストをもたらし得る。例えば、マッピング・テーブル３００内のユーザは、都市（Ｌ１列）、第１のレベルのコミュニティ（Ｃ１列）、および第２のレベルのコミュニティ（Ｃ２列）によってソートされ得る。コミュニティは、交友関係に関連付けられているエッジの重みに基づいてグループ化されているため、友達は、共にクラスタリングされ、または、共にクラスタリングされる傾向を有する。
【００５２】
図３Ｂは、ユーザが都市（Ｌ１列）によってソートされた後のマッピング・テーブル３００を示す。図示されるように、ＬＡのユーザは、チャートの最上部において最初に列挙され、都市ＮＪ、ＮＹ、ＳＤ、および、次いで、ＳＦがその後に続く。
【００５３】
図３Ｃは、ユーザが第１のレベルのコミュニティ（Ｃ１列）によってソートされた後のマッピング・テーブル３００を示す。図示されるように、第１のレベルのコミュニティ「１」におけるユーザは、チャート２００の最上部において最初に列挙され、第１のレベルのコミュニティ「２」、「３」、および、次いで、「４」におけるユーザがその後に続く。
【００５４】
図３Ｄは、ユーザが第２のレベルのコミュニティ（Ｃ２列）に基づいてソートされた後のマッピング・テーブル３００を示す。図示されるように、第２のレベルのコミュニティ「１」におけるユーザは、チャート２００の最上部において最初に列挙され、第２のレベルのコミュニティ「２」におけるユーザがその後に続く。
【００５５】
ソート手続きの結果として、ユーザ１〜１２は、都市、第１のレベルのコミュニティ、および第２のレベルのコミュニティによってソートされる。例えば、第２のレベルのコミュニティ「２」内の全てのユーザは、互いに数値的に近い（例えば、ユーザ２、６、８、１１、４、７、１、３、および１２）。さらに、第２のレベルのコミュニティ「２」内において、第１のレベルのコミュニティ「２」内の全てのユーザは、互いに数値的に近い（例えば、ユーザ２、６、８、および１１）、第１のレベルのコミュニティ「３」内の全てのユーザは、互いに近い（例えば、ユーザ４、７、１、３、および１２）。またさらに、第１のレベルのコミュニティ「２」内において、都市「ＳＦ」内の全てのユーザは、互い
に近い（例えば、ユーザ２、６、８、および１１）。第１のレベルのコミュニティ「３」内において、都市「ＬＡ」内の全てのユーザは、互いに近い（例えば、ユーザ４および７）し、都市「ＮＹ」内の全てのユーザは、互いに近く（例えば、ユーザ１）、都市「ＳＤ」内の全てのユーザは、互いに近い（例えば、ユーザ３および１２）。この同じパターンは、第２のレベルのコミュニティ「１」内の全てのユーザにも当てはまる。
【００５６】
このように、識別モジュール１０２が、一意のＩＤをユーザのソート済みリストに対して数値が連続するように割り当てる場合、同じ都市内のユーザおよび結果として得られるレベルのコミュニティは、互いに数値的に近い一意のＩＤを有する。例えば、図３Ｄにおけるテーブル３００は、分類、第１のレベルのコミュニティ、および第２のレベルのコミュニティによってソートされたユーザに対して数値が連続するように割り当てられた一意のＩＤを列挙するＵＱ＿ＩＤ列を含む。図示されるように、同じ分類を有するか、または同じコミュニティ内に収まるユーザは、互いに近く、したがって、互いに数値的に近い一意のＩＤを有する。このようにしてノードを一意に識別することは、本明細書において説明されるように、システム性能を改善し、計算リソースを最適化する観点からすると、有益または有利であると判明し得る。コミュニティは、例によっては、地理的構成要素を有し得るが、例によっては、コミュニティは、地理的構成要素を有しないこともあり得ることが認識されるべきである。図３Ａ〜図３Ｄにおいて、例えば、ユーザ１およびユーザ５は、どちらもＮＹに関連付けられているが、異なる第１のレベルのコミュニティ内に存在する。ユーザ１は、例えば、第１のレベルのコミュニティ「３」において多数の友達を有していることがあり、その結果、第１のレベルのコミュニティ「３」内にグループ化される。他方で、ユーザ５は、第１のレベルのコミュニティ「１」において多数の友達を有していることがあり、その結果、第１のレベルのコミュニティ「１」内にグループ化される。
【００５７】
いくつかの実施形態において、ソート技法は異なり得る。例えば、分類およびあらゆるレベルのコミュニティに基づいてソートする代わりに、ユーザは、分類またはコミュニティのレベルの任意の組み合わせに基づいて、選択的にソートされてもよい。例えば、ユーザは、最も高いレベルのコミュニティ（例えば、第２のレベルのコミュニティ）のみに基づいてソートされてもよい。その結果、一意のＩＤは、そのようなソートに基づいて割り当てられ得る。別の例として、一意のＩＤが割り当てられる前に、２つの最も高いレベルのコミュニティのみ（例えば、第１のレベルのコミュニティおよび第２のレベルのコミュニティ）がソートされてもよい。
【００５８】
図４は、一実施形態に係る、分類４０２、第１のレベルのコミュニティ４０３、および第２のレベルのコミュニティ４０４に対して割り当てられたノード４０１の例示的な樹形図４００を例示する。樹形図４００は、任意の適切な数Ｘ１個のノードを含み得る。図示される例では、各ノード４０１から対応する分類４０２への線によって表されるように、１０億個のノード４０１は、分類４０２によってグループ化されている。ノードに関連付けられている任意の適切な数Ｘ２個の分類が決定され得る。図示される例では、地理的ロケーション（例えば、都市）を表す７５０，０００個の分類４０２が、ノード４０１に対して関連付けられている。分類４０２の各々は、各分類から対応する第１のレベルのコミュニティへの線によって表されるように、第１のレベルのコミュニティ４０３内にグループ化される。任意の適切な数Ｘ３個の第１のレベルのコミュニティ４０３が決定され得る。図示される例では、２，０００個の第１のレベルのコミュニティ４０３が、分類４０２に対して関連付けられている。さらに、第１のレベルのコミュニティ４０３の各々は、各第１のレベルのコミュニティから対応する第２のレベルのコミュニティへの線によって表されるように、第２のレベルのコミュニティ４０４内にグループ化される。任意の適切な数Ｘ４個の第２のレベルのコミュニティが決定され得る。図示される例では、６０個の第２のレベルのコミュニティ４０４が、第１のレベルのコミュニティ４０３に対して関連付
けられている。樹形図４００は、同じ分類を有し、かつ、同じコミュニティ内に収まるノード４０１が共にクラスタリングされ、したがって、分類４０２、第１のレベルのコミュニティ４０３、および第２のレベルのコミュニティ４０４に基づいてソート化されて構築されるように構築される。このように、一意のＩＤは、ノード４０１に対して最初から最後まで（例えば、左から右へ）数値が連続するように割り当てられ得る。同じ分類を有するか、または同じコミュニティ内に収まるノードは、互いに数値的に近い一意のＩＤを有する。図４においてＸ１、Ｘ２、Ｘ３、およびＸ４について示される値は例示であることが認識されるべきである。任意の適切な数が、異なる実施形態において実装され得る。
【００５９】
図５は、一実施形態に係る、一意のＩＤをノード・グラフのノードに対して割り当てる例示的なプロセスを例示する。図１〜図４についての上記議論は、図５のプロセスにも当てはまり得ることが認識されるべきである。簡潔さおよび明確さのために、図５に対して適用可能なあらゆる特徴および機能は、ここでは繰り返し説明されない。
【００６０】
ブロック５０２において、ノード・グラフ内のノードが識別され得る。一実施形態において、例えば、ノードは、ソーシャル・グラフ内のユーザに対して関連付けられ得る。ブロック５０４において、ノードについての１つまたは複数の属性が識別され得る。属性は、ノードに、またはノード間のつながりに関連し得る。ブロック５０６において、各ノードについての分類が、属性に基づいて生成され得る。１つの実施形態において、属性は、地理的関連性（例えば、都市との関連）であってもよく、ノードは、当該ノードが関連付けられている地理的ロケーション（例えば、居住都市、勤務都市または経営都市等）によって分類され得る。分類は、分類間で定義されたエッジの重みを有する、新たなグラフのノードとしてみなされ得る。一実施形態において、エッジの重みは、ノード間のつながりの数に基づき得る。一実施形態において、エッジの重みは、つながりの強さに基づいてもよく、つながりの強さは、係数によって表され得る。一実施形態において、ブロック５０２、５０４、および５０６は、図２の分類決定モジュール２０２によって実行され得る。
【００６１】
ブロック５０８において、分類（例えば、関連付けられた都市）は、分類間で定義されたエッジの重みに基づいて（例えば、分類間のつながりの数または強さに基づいて）、コミュニティへグループ化され得る。グループ化は、分類から第１のレベルのコミュニティへのマップを提供し得る。ブロック５１０において、別のレベルのコミュニティへの付加的なグループ化が実行されるべきかが決定される。付加的なグループ化が実行されるべきである場合、ブロック５１０からブロック５０８への矢印によって表されるように、ブロック５０８に由来する第１のレベルのコミュニティは、第１のレベルのコミュニティ間のエッジの重みに基づいて（第１のレベルのコミュニティ間のつながりの数、または第１のレベルのコミュニティ間のつながりの強さに基づいて）グループ化される。このプロセスは、より高いレベルのコミュニティへの任意の付加的なグループ化について同様に繰り返され得る。より高いレベルのコミュニティへの付加的なグループ化が実行されるべきではない場合、ブロック５１２において、（ブロック５０２からの）ノードは、分類および結果として得られるレベルのコミュニティのソートに基づいてソートされる。ノードは、友達がソート済みリスト内で共にクラスタリングされる傾向にあり、さらに、同じ分類を有し、同じコミュニティ内に収まる傾向があるようにソートされる。
【００６２】
ブロック５１４において、一意のＩＤは、ノードのソート済みリストに対して数値が連続するように割り当てられる。このように、つながり（例えば、交友関係）を有するノード（例えば、ユーザ）は、同じ分類で、同じコミュニティ内で共にクラスタリングされる傾向があり、したがって、互いに数値的に近いＩＤを有する。一実施形態において、ブロック５０８および５１０は、図２のコミュニティ生成モジュール２０４によって実行され得る。さらに、一実施形態において、ブロック５１２および５１４は、図２のＩＤ割り当てモジュール２０６によって実行され得る。
【００６３】
分類およびより高いレベルのコミュニティは、必ずしも分類内においてきめ細かい粒の情報を提供するとは限らないことがある。例えば、ユーザのソート済みリストは、必ずしも都市内の友達のサブ・コミュニティが一意のＩＤ空間内で互いに連続的に近くなるようにソートされるとは限らないことがある。都市のサブ・コミュニティは、例えば、ユーザ間に大きい数のつながりを有する郊外に対して関連付けられ得る。
【００６４】
一実施形態において、ノードのサブ・コミュニティは、分類内で識別され得る。例えば、サブ・コミュニティについての分類は、本明細書において議論されるものと同様の手法で導かれ得る。次いで、ノードは、例えば、ノード間のつながりの数または強さに基づいて、分類内でサブ・コミュニティへグループ化され得る。付加的なレベルのサブ・コミュニティも、反復して計算され得る。次いで、ノードのソート済みリストは、分類およびサブ・コミュニティ（および、より高いレベルのコミュニティ）によってノードをソートすることによって生成され得る。次いで、一意のＩＤは、ノードのソート済みリストに対して数値が連続するように割り当てられ得る。このように、つながりを有するノードのサブ・コミュニティは、共にクラスタリングされる傾向がある。
【００６５】
識別モジュール１０２によって実行される技法に基づいて、ノードを一意に識別することは、様々な状況において利点を提供し得る。例えば、識別モジュール１０２によって一意のＩＤを生成し、割り当てることは、情報が記憶のために圧縮され得る手法を改善し得る。ネットワーク化されたコンピュータ・システムは、アクセスするには時間がかかるが、大きい記憶容量を有するメイン・メモリを含み得る。この理由のため、圧縮は、メイン・メモリ管理に関する重要な検討事項ではないことがある。しかしながら、ネットワーク化されたコンピュータ・システムのメモリ階層は、処理速度を強化するためにより多くアクセスされ得る、より高速なメモリを実装することも多い。より高速なメモリ技術は、より高価になる傾向があるため、メモリの大きさが限定されることが多く、その結果、圧縮技法は、メモリ内に記憶され得るデータの量を最大化するために、より重要な役割を果たす。デルタ符号化は、識別モジュール１０２によって生成され、割り当てられる一意のＩＤ空間から利益を享受し得る１つの圧縮技法である。
【００６６】
例えば、ユーザの友達リストは、既存のユーザＩＤ２００、３，０００、および３０，０００を含み得る。一般には、友達リストをデルタ符号化するために、友達のユーザＩＤは、最小の値から最大の値へソートされる。先行するユーザＩＤ値は、先行するユーザＩＤを有しない最小のユーザＩＤを除いて、各ユーザＩＤから減算される。デルタ符号化されたリストは、下記を含み得る：２００、２８００および２７，０００。値２８００は、３０００から２００を減算することによって導かれ、値２７，０００は、３０，０００から３，０００を減算することによって導かれた。本思想は、デルタ符号化によって、記憶するのにより少ないビットしか必要としない、より小さい数字を生成することである。しかしながら、図示されるように、潜在的なユーザＩＤ値の大きなセットを扱う場合、ユーザＩＤ値間の差異は、相対的に大きい値となり得る。
【００６７】
一意のＩＤは、つながりに基づいてノードをクラスタリングする、ノード（例えば、ユーザ）のソート済みリストに対して数値が連続するように割り当てられるため、つながり（例えば、交友関係）を有する多くのノード（例えば、ユーザ）は、ソート済みリスト内で共にクラスタリングされ、最終的には、互いに連続的に近い一意のＩＤを割り当てられる。そのため、ユーザＩＤ２００、３，０００および３０，０００を有する同じ友達は、１，００１、１，００３および１０１０などの、識別モジュール１０２によって割り当てられた互いに連続的に近い一意のＩＤを有し得る。これらの一意のＩＤに対してデルタ符号化を適用することは、デルタ符号化値１，００１、２および７をもたらす。これらのデルタ符号化値は、メモリ内に記憶するのに、より著しく少ないデータしか必要としない、
より著しく小さい値を提供する。
【００６８】
識別モジュール１０２によって実行される技法に基づいて、一意のＩＤを生成し、ノードに対して割り当てることは、ディスク、マシン、データベース・サーバ、およびデータ・センタを含む、ネットワーク化されたコンピュータ・システム全体に規模を拡大した巨大なグラフを分割する場合に、有益と判明し得る。
【００６９】
図６は、一実施形態に係る例示的なネットワーク化されたコンピュータ・システム６００を例示する。ネットワーク化されたコンピュータ・システム６００は、ｎ個のデータベース・サーバ６０２と、データベース・サーバ６０２に関連付けられているｎ個のキャッシュ・システム６０４と、ウェブ・サーバ６０６と、ウェブ・サーバ６０６に関連付けられているキャッシュ・システム６０８とを含む。ここで、ｎは、ソーシャル・ネットワーキング・システムなどのコンピュータ・ネットワーク化されたシステム６００をサポートするためのデータベース・サーバおよび関連付けられたキャッシュ・システムの任意の数である。データベース・サーバ６０２は、データベース・サーバ６１２、データベース・サーバ６１４、データベース・サーバ６１６、およびデータベース・サーバ６１８を含む。キャッシュ・システム６０４は、キャッシュ・システム６２２、キャッシュ・システム６２４、キャッシュ・システム６２６、およびキャッシュ・システム６２８を含む。データベース・サーバ６１２は、キャッシュ・システム６２２に関連付けられている。データベース・サーバ６１４は、キャッシュ・システム６２４に関連付けられている。データベース・サーバ６１６は、キャッシュ・システム６２６に関連付けられている。また、データベース・サーバ６１８は、キャッシュ・システム６２８に関連付けられている。データベース・サーバ６０２、キャッシュ・システム６０４、およびウェブ・サーバ６０６は、ＬＡＮ、ＷＡＮ、およびインターネットなどの、１つまたは複数のネットワークを通じて、互いに通信可能に結合され得る。データベース・サーバ６０２の各々は、単一のデータベース・サーバまたはデータ・センタを表し得る。ソーシャル・グラフなどのグラフのための情報は、データベース・サーバ６０２によって形成される永続メモリ層内に記憶され得る。
【００７０】
ソーシャル・グラフの例において、データベース・サーバ６０２は、そのソーシャル・グラフ内のユーザの全てについてのユーザ情報を含み得る。ユーザ情報は、例えば、ユーザ・プロフィール、画像、動画、投稿、近況アップデート、友達リスト、フィード、または、ソーシャル・グラフによってサポートされるソーシャル・ネットワーキング・システム上のユーザもしくはユーザのアクティビティに関連付けられている任意の他の情報に関連する情報を含んでもよい。特定のユーザについてのユーザ情報は、データベース・サーバ６０２の特定のデータベース・サーバ上に記憶され得る。ユーザは、ユーザの友達関係のいずれかに関わりなく、データベース・サーバ６０２のうちの１つに対してマッピングされ得る。例えば、ソーシャル・ネットワーキング・システムの新たなユーザは、ユーザがそのソーシャル・ネットワーキング・システムに加わった時に、データベース・サーバ６０２のうちのいずれが、そのユーザについてのデータを維持する容量を有するかに基づいて、データベース・サーバ６０２のうちの１つを割り当てられ得る。
【００７１】
一定の実施形態において、ユーザに関連付けられているユーザＩＤは、データベース・サーバ６０２のうちのいずれにユーザの情報が記憶されるべきかを示すために使用され得る。ユーザ情報が、所与のユーザについて望まれる場合、ユーザの情報を有する特定のデータベース・サーバは、ユーザの情報を取得するためにクエリを行われ得る。例えば、ユーザＡが、ネットワーク化されたコンピュータ・システム６００のウェブ・サーバ６０６に対してアクセスする場合、ウェブ・サーバ６０６は、ユーザＡのユーザＩＤを識別し、そのユーザＩＤを使用して、ユーザＡについてのユーザ情報がデータベース・サーバ６１４上に記憶されていると決定し得る。ユーザＡについてのユーザ情報は、例えば、ユーザ
Ａの友達の友達リスト、または、ユーザＡについての他の情報を含んでもよい。
【００７２】
次いで、ユーザＡの友達の各々についてのユーザ情報は、それぞれのデータベース・サーバ６１２、６１６、および６１８に対するクエリ６３２、６３６、および６３８によって表されるように、それぞれの友達についてのユーザ情報を有する各データベース・サーバに対してクエリを行うことによって取得され得る。それぞれのデータベース・サーバ６１２、６１６、および６１８の各々に対するクエリ６３２、６３６、および６３８は、ファン・アウト・クエリを表す。この例は、それぞれのデータベース・サーバ６１２、６１６、および６１８に対する３つの付加的なクエリ６３２、６３６、および６３８を示すが、ユーザＡは、各友達について異なるデータベース・サーバに対するファン・アウト・クエリを潜在的に必要とする、データベース・サーバ６０２のうちの多くにわたって広がる著しく多数の友達（例えば、数百人または数千人の友達）を有し得る。この状況において、多数のファン・アウト・クエリは望ましくない。ファン・アウト・クエリは、性能（例えば、情報が取得される速度）を著しく減退させ、特に、極めて多数のノードおよびクエリを扱う場合に、過度な量のネットワーク・トラフィックを生成し得る。ファン・アウト・クエリに関連付けられている問題は、ユーザＡの「友達の友達」（または、ユーザＡからさらに大きい分離度を有する間接的な友達）についてのユーザ情報のクエリが実行される場合にさらに悪化する。ファン・アウト・クエリは、キャッシュ・システム６０４におけるメモリの過度な使用にも寄与し得る。
【００７３】
ネットワーク化されたコンピュータ・システム６００は、データベース・サーバ６０２の永続メモリ層よりも高速なメモリ・アクセスを提供するために、データベース・サーバ６０２に関連して実装されるキャッシュ・システム６０４も含む。例えば、キャッシュ・システム６０４は、ＲＡＭ内に、または、フラッシュ・メモリなどの他の形態の高速メモリ技術内に、キャッシュ層サービスを実装し得る。例えば、データまたは計算は、代替ＰＨＰキャッシュ（ＡＰＣ：Ａｌｔｅｒｎａｔｉｖｅ  ＰＨＰ  Ｃａｃｈｅ）、メムキャッシュ（Ｍｅｍｃａｃｈｅ）等を使用してキャッシュされ得る。同様に、ウェブ・サーバ６０６も、データまたは計算をキャッシュ・システム６０８内にキャッシュし得る。ユーザＡについてのユーザ情報に対するクエリが、所与のデータベース・サーバ６１４へ最初に送られる場合、例えば、ユーザ情報は、データベース・サーバ６１４から得られ、キャッシュ・システム６２４において記憶もされ得る。その後に、ユーザＡについてのユーザ情報がキャッシュ・システム６２４内に残存する限り、ユーザＡについてのユーザ情報に対する後続のクエリは、キャッシュ・システム６２４から、より迅速に得られ得る。しかしながら、ユーザＡの友達についてのユーザ情報が、異なるデータベース・サーバ６０２上に記憶される場合、キャッシュ・システム６０４は、必ずしも、ファン・アウト・クエリの数に対して著しい低減を提供するとは限らない。
【００７４】
友達は、１つまたは複数のグループの友達の一部となる傾向があるため、友達が多くの共通の友達を有する強い傾向が存在する。友達、および友達の友達についてのユーザ情報を収集する場合、共通の友達のユーザ情報に対する多くのクエリが発生し得る。これらの友達が、異なるデータベース・サーバおよびキャッシュ・システム上に無作為に散在させられる場合、ファン・アウト・クエリが実行される。
【００７５】
一定の実施形態において、キャッシュ・システム６０４は、同じキャッシュ・システム内の友達をクラスタリングし、その結果、キャッシュ局所性を増加させるように構成され得る。共通のキャッシュ・システムに対して局所的である友達の数を増加させることは、共通の友達についての要求されたユーザ情報が、ユーザ情報についての過去のクエリによって既にキャッシュされている蓋然性を高め得る。このようにしてキャッシュ・ヒット率を増加させることは、たとえ共通の友達についてのユーザ情報が異なるデータベース・サーバ６０２内に記憶されている場合でも、ファン・アウト・クエリを低減する。そのため
、キャッシュ局所性およびキャッシュ・ヒット率を増加させることは、特に、極めて多数のノードおよびクエリを扱う場合に、性能における著しい利益、ネットワーク・トラフィックの低減等をもたらし得る。
【００７６】
図７は、一実施形態に係るマッピング・モジュールを例示する。マッピング・モジュール１０４は、パーティション分けモジュール７０２と、ルーティング・モジュール７０４と、負荷監視モジュール７０６と、一時的分散モジュール７０８とを含むものとして示される。パーティション分けモジュール７０２は、グラフがパーティションに分けられるべきパーティションの数を決定し得る。パーティションの数は、グラフ・データが分散されるべき物理マシン（例えば、データベース・サーバ６０２またはキャッシュ・システム６０４）の数に関連し得る。次いで、一意のＩＤ空間は、各パーティションについてのノードの数に基づいて分割され（またはセグメント化され）得る。
【００７７】
例えば、ノードによって表される１０億人のユーザのソーシャル・グラフが、１００個のキャッシュ・システムにわたってパーティションに分けられるべき場合、ユーザの数（例えば、１０億人）は、パーティションの数（例えば、１００）で除算されて、パーティションサイズ、すなわち、パーティションごとのユーザの数（例えば、パーティションごとに１千万人のユーザ）が提供される。したがって、一意のＩＤ空間は、パーティションサイズで除算されて、パーティションごとに１千万個の一意のＩＤがもたらされ得る。一意のＩＤ空間は、数値が連続しているため、各パーティションにおける１千万個の一意のＩＤは、互いに数値的に近い。そのため、一意のＩＤ空間内での都市およびコミュニティのクラスタリングは、数多くのマシンにわたるソーシャル・グラフのパーティションにおいて反映される。さらに、友達が一意のＩＤ空間内でクラスタリングされる傾向は、マシン対するグラフのパーティションにおいて反映される。この例において、パーティションサイズは等しく（例えば、パーティションごとに１千万人のユーザ）、マシンの各々に対して同じ数の一意のＩＤをもたらす。別の実施形態において、パーティションサイズは等しくなくてもよく、マシンに対する変動する数の一意のＩＤをもたらす。
【００７８】
ルーティング・モジュール７０４は、例えば、パーティション分けモジュール７０２について説明されたような、一意のＩＤ空間の分割およびパーティションに基づいて、ユーザをマシンに対してマッピングし得る。次いで、ルーティング・モジュール７０４は、マッピングに従って、ユーザをマシンへルーティングし得る。例えば、いくつかの例において、あるアプリケーションについてのパーティション（例えば、マシン）の数は既知であり、一意のＩＤ空間は、ユーザをマシンのキャッシュ層に対してマッピングするために、説明されたように分割され得る。一意のＩＤ空間は、異なる実施形態においては、均一にまたは不均一に分割され得る。例えば、一意のＩＤ空間の分割は、１つの都市またはコミュニティを２つのマシン間で分ける結果となり得る。さらに、いくつかのレベルのコミュニティは大きくてもよく、したがって、全てのコミュニティが単一のマシンに対して適合するとは限らない。一実施形態において、パーティションサイズ（例えば、パーティションごとのユーザの数）は、都市またはコミュニティの局所性における整合性を維持するために適宜調整され得る。
【００７９】
一意のＩＤ空間は、ユーザをキャッシュ・システムに対してマッピングするために使用され得る。一意のＩＤは、友達のクラスタが同じキャッシュ・システムへルーティングされることを可能にし得る。これは、局所性を著しく改善し、したがって、ネットワーク化されたコンピュータ・システムに対して提供されるクエリの処理（または実行）において利益を提供し得る。クエリは、ソーシャル・ネットワーキング・システムに対して提出される「友達の友達」のクエリなどの任意のタイプであって良い。クエリは、そのクエリを実行するために必要とされる適当なキャッシュ・システムへ向けられる。例えば、ユーザＡの友達についてのクエリは、ユーザＡの一意のＩＤに基づいて、ユーザＡがマッピング
されているマシンへ送られる。
【００８０】
一定の実施形態において、既存のＩＤ（例えば、ユーザＩＤ）は、ノードに既に割り当てられており、ユーザをデータベース・サーバに対してマッピングするために使用され得るが、エッジの重みまたは近しくつなげられたノードの所望のクラスタリングを考慮しない手法であり得る。そのような場合、一意のＩＤは、代替的な識別子を構成し得る。ユーザＩＤは、一意のＩＤに対してマッピングされ得、一意のＩＤは、ユーザをキャッシュ・システムに対してマッピングするために使用され得る。このように、永続メモリ層（例えば、データベース・サーバ）内のユーザ・データが維持され得る一方で、一意のＩＤ空間の利益は、キャッシュ層（例えばキャッシュ・システム）において実現される。１つの実施形態において、ユーザＩＤの一意のＩＤに対するマッピングは、キャッシュ層動作のためにユーザＩＤが一意のＩＤへ変換されるべきときにはいつでもアクセスされるマシン上に記憶され得る。
【００８１】
本明細書において説明される一意のＩＤの別の利益は、一意のＩＤを生成するために、パーティションの数を知る必要がないということである。例えば、複数のサービスが、異なる数のパーティションを必要とする場合、同じ一意のＩＤ空間は、パーティションの対応する数に基づいて適宜分割され得る。例えば、ソーシャル・グラフの例において、ネットワーク化されたコンピュータ・システムは、データベース・サーバの永続メモリ層（または段）と、キャッシュ・システムのキャッシュ層（または段）とを含み得る。１つのキャッシュ層サービスは、１００個のキャッシュ・システム（例えば、１００個のパーティション）にわたって実装されるインデックス・サービスであり得る。別のキャッシュ層サービスは、２００個のキャッシュ・システム（例えば、２００個のパーティション）にわたって実装されるニュースフィード・サービスであり得る。さらに別のキャッシュ層サービスは、３００個のキャッシュ・システム（例えば、３００個のパーティション）にわたって実装されるグラフ・サービスであり得る。このように、永続メモリ層は、かなり静的に保たれ得るが、キャッシュ層は、動的に構成され得る。
【００８２】
一意のＩＤに基づいてユーザをルーティングすることは、ファン・アウト問題を著しく改善し得る。マシン上のユーザが、類似したデータにアクセスする傾向がある場合、そのデータは、そのデータについての最初のクエリの後にキャッシュされ、同じデータを必要とする後続のクエリについて利用可能となる。例えば、「友達の友達」のクエリを例にとる。友達またはコミュニティは、同じキャッシュ・システム上へクラスタリングされ得る。そのため、ユーザＡが、ユーザＡの友達についてのクエリを提出する場合、ユーザＡの全ての友達についてのデータがフェッチされ、キャッシュ内に既に記憶されていない場合には、キャッシュ内に記憶される。ユーザＢが、ユーザＡと友達である場合において、特に、ユーザＡおよびユーザＢが同じ都市内に住んでいるとき、ユーザＡおよびユーザＢは、何人かの共通の友達を有する可能性がある。したがって、ユーザＢが、ユーザＢの友達についてクエリを提出する場合、ユーザＡとユーザＢとの共通の友達についての任意のデータは、ユーザＡがユーザＡのクエリを提出した時から既にキャッシュされている。共通の友達の数が多ければ多いほど、もたらされる効率は高くなる。さらに、多数のユーザ（例えば、５億人のユーザ、１０億人のユーザ等）にわたって適用される場合、性能およびネットワーク・トラフィックにおける非常に大きな利得が実現され得る。
【００８３】
さらに、異なるクエリにわたってユーザを同じマシンへルーティングすることによって、ユーザは、そのユーザが既にキャッシュしたデータを活用し得る。例えば、ユーザが、ソーシャル・ネットワーキング・システム上のニュースフィードまたは投稿などのデータをリフレッシュする場合、過去のデータがキャッシュされている同じマシンへクエリを送らせることは、データが取得される速度における著しい改善を提供し得る。
【００８４】
本明細書において説明される特定の例は、ユーザおよびユーザの友達に関連し得るが、基本的なコンセプトおよび原理は、他のノードおよびつながりに適用可能である。本明細書において議論されるように、ノードは任意のタイプであってよい。さらに、つながりは、様々なタイプの関係を含み得る。例えば、つながりは、ユーザが別の実体またはユーザをフォローする「フォロー」エッジであってもよい。一意のＩＤに基づいてノードをマシンへルーティングする同じアプローチは、人だけでなく他の実体にも拡張されることができ、例えば、サッカーはエジプトで人気があること、クリケットはバングラデシュで人気があること、特定の企業が米国で人気があることが決定され得る。例えば、１つのクエリは、「企業Ａに対して『いいね！』を表明しており、かつ、サンフランシスコ市に住む全ての人々を示せ」であり得る。このクエリは、ソーシャル・ネットワーキング・システムに関連付けられている企業Ａのウェブ・ページが、そのファンの多くと同じマシン上に存在する場合に、より効率的に実行され得る。特に、クエリの実行は、企業Ａのウェブ・ページとそのファンとを１つのマシンのキャッシュ層内に維持することによって強化され得る。
【００８５】
一意のＩＤ空間の分割に基づいてユーザをマシンに対してマッピングすることは、マシン上の局所性を改善するが、各マシン上の負荷は変動することがあり、いくつかの例においては、著しく異なり得る。一実施形態において、ルーティング・モジュール７０４は、負荷検討事項に基づいて、ユーザをマシンに対してルーティングし得る。負荷監視モジュール７０６は、マシンがオンラインになっている間、マシンの負荷を監視し、ルーティング・モジュール７０４と共に機能して、負荷検討事項に基づいてユーザをマシンへルーティングし得る。一実施形態において、負荷は監視されて、その負荷が閾値を超えたか、または閾値を下回ったかが決定され得る。いくつかの例においては、任意の所与の時間におけるマシンに対する負荷の量（例えば、最大容量の割合）が監視される。
【００８６】
一実施形態において、最初のマッピングは、均一に分散されているか否かに拘わらず、一意のＩＤ空間の分割に基づいており、その後に、ルーティング・モジュール７０４は、負荷分散検討事項に基づいて、ユーザを動的にルーティングし得る。例えば、ユーザによるクエリは、そのユーザの既存のユーザＩＤと一緒に受信され得る。一意のＩＤ空間に対する既存のユーザＩＤのマッピングは、既存のユーザＩＤを一意のＩＤへ変換するために使用され得る。次いで、共有番号は、パーティションサイズに基づいて決定され得る。シャード番号とパーティションサイズとの双方は、下記の例示的な方程式によって決定され得る。
【００８７】
パーティションサイズ＝（ユーザの数）／（パーティションの数）
シャード番号＝（一意のＩＤ）／（パーティションサイズ）
例えば、２２億５千万人のユーザおよび１万５千個のパーティションの場合、パーティションサイズは、パーティションごとに１５万人のユーザとなる。次いで、任意の単一の一意のＩＤを１５万で除算することは、対応するシャード番号を決定するために使用され得る。次いで、ルーティング・モジュール７０４は、負荷監視モジュール７０６によって識別される負荷分散検討事項を考慮した後に、シャード番号を適当なマシンに対してマッピングし得る。シャード番号がマシンに対してマッピングされた後、クエリは、そのマシン上で実行され得る。
【００８８】
一実施形態において、負荷は、マシンが受信したクエリの数を追跡することによって部分的に決定され得る。例えば、アプリケーションがクエリを実行するにつれて、そのアプリケーションは、各シャードが処理しているクエリの数を示すカウンタをエクスポートし得る（例えば、アプリケーション・シャード番号１００は、１００個のクエリを有し、アプリケーション・シャード番号１０１は、５００個のクエリを有する等）。次いで、負荷監視モジュール７０６は、エクスポートされたカウンタ・データを受信し、ルーティング
・モジュール７０４と共に機能して、例えば、ユーザを移動させるべきか、またはマシンのシャード間でどのようにユーザ移動させるべきかを決定し得る。例えば、負荷監視モジュール７０６は、マシンが処理しているクエリの数が閾値を超えるかを監視し得る。閾値が超えられた場合、負荷監視モジュール７０６は、処理されているクエリの数が閾値を下回るまで、付加的なクエリがマシンへルーティングされることを防止し得る。これらの付加的なクエリは、マシンが処理しているクエリの数が閾値を下回るまで、別のマシンへルーティングされ得る。同じように、負荷監視モジュール７０６は、マシンが処理しているクエリの数が閾値を下回るかを監視し得る。クエリの数が閾値を下回る場合、負荷監視モジュール７０６は、クエリの閾値を超えているマシンへルーティングされることを防止されたクエリなどの、付加的なクエリを受信するために、このマシンが利用可能であると決定し得る。
【００８９】
一実施形態において、負荷監視モジュール７０６は、マシンが過負荷を掛けられているかを決定し、ユーザを適宜ルーティングする。例えば、ユーザは、最初は、現在過負荷を掛けられているマシンに対してマッピングされ得る。過負荷を掛けられた状態は、負荷監視モジュール７０６によって検出され、ルーティング・モジュール７０４へ通信される。ルーティング・モジュール７０４は、負荷がより少ない異なるマシンへユーザをルーティングする。その結果、過負荷を掛けられたマシンは、さらに負荷を掛けられることを防止され、軽負荷を掛けられているマシンの負荷は増加される。一実施形態において、負荷監視モジュール７０６は、ユーザが１つのクエリについて１つよりも多くのマシンを必要とすると決定し、ルーティング・モジュール７０４は、そのクエリを他の複数のマシンへ適宜ルーティングし得る。クエリ処理需要などの負荷分散検討事項に基づいた、１つのシャードから別のシャードへのユーザの移動は、局所性をある程度損なわせ得る。負荷監視モジュール７０６は、局所性とクエリ速度との間のトレードオフを継続的に比較し得る。
【００９０】
一実施形態において、地理的ロケーションは、限定された使用パターンを示し得る。例えば、いくつかのアプリケーションの場合、一定の地理的ロケーションに関連付けられている特定のユーザは、例えば、法的な理由、プライバシー上の理由等のために、１つまたは複数のマシンへルーティングされず、未使用の計算リソースが作成され得る。例えば、ある国家は、特定のアプリケーションを使用しなくてもよく、または、特定のアプリケーションがその国家の居住者または国民に対して利用可能になることを許可しなくてもよい。例えば、欧州連合およびカナダは、それらの国民に対して特定のアプリケーションを許容しなくてもよく、したがって、それらの国内のユーザは、そのアプリケーションに対してアクセスすることができない。そのアプリケーションに対して分配されたキャッシュ・システム内の未使用のシャードは、それらのユーザによって使用されない。そのため、他の地理的ロケーションに関連付けられている他のユーザは、キャッシュ・システムの未使用のシャードなどの、利用可能な計算リソースを利用するために、マシンへルーティングされ得る。
【００９１】
１つの実施形態において、禁止されたアプリケーションに関連付けられている地理的ロケーションに対応する、一意のＩＤ空間のセクションは、一意のＩＤ空間から除去される。次いで、（抹消された地理的ロケーションに対応する一意のＩＤを有しない）変形された一意のＩＤ空間は、パーティションの数に基づいて（例えば、均一にまたは不均一に）分割されて、ユーザをシャード番号および対応するマシンに対してマッピングし得る。
【００９２】
一定の実施形態において、ユーザは、地理的ロケーションに強く相関する使用パターンに従って、マシンに対してマッピングされ得る。異なる地理的ロケーションは、異なる使用パターンを示し得る。一意のＩＤ空間は、局所性を最適化することを助け得る一方で、地理的ロケーションは、変動する使用パターンを有し得る。これは、異なる時間におけるマシンに対する変動する負荷につながり得る。これら負荷変動は、ある時にはマシンに対
して大きな負荷を提供し、別の時には同じマシンに対して小さい負荷を提供することによって、著しく変動し得る。
【００９３】
一時的分散モジュール７０８は、ルーティング・モジュール７０４と共に機能して、使用パターンにおける一時的な揺らぎなどの使用特性を考慮する手法で、ユーザをマシンへルーティングし得る。例えば、地理的ロケーションについての負荷は、時刻によって変動し得る（例えば、労働時間対非労働時間）。別の例として、負荷は、日によっても（例えば、休日対平日）、または、他のより大きな時間の間隔（例えば、夏季休暇対バスケットボール決勝戦）によっても変動し得る。一時的分散モジュール７０８は、負荷監視モジュール７０６からのデータを使用して、使用パターンを決定し、その使用パターンに基づいて、ルーティング・モジュール７０４と共に機能して、ユーザを様々なマシンへルーティングして、負荷分散を最適化し得る。
【００９４】
例えば、一時的分散モジュール７０８は、相補的な使用パターンを有する地理的ロケーションを識別し得る。相補的な使用パターンは、位相の一致しない地理的ロケーションによって示される使用を参照し得る。例えば、相補的な使用パターンの１つのタイプは、第２の地理的ロケーションがトラフィックの使用における谷となる時と同時にまたは重複した時にトラフィックの使用がピークとなる第１の地理的ロケーションを伴い得る。同じように、別のタイプの相補的な使用パターンは、第２の地理的ロケーションのトラフィックの使用がピークとなる時と同時にまたは重複した時にトラフィックの使用が谷となる第１の地理的ロケーションを伴い得る。高トラフィックと低トラフィックとの著しい変動を有する２つの地理的ロケーションを２つの別個のマシン上へルーティングする代わりに、一時的分散モジュール７０８は、同じマシン（または、マシンのクラスタ）に対してそれらを一緒にペアにし得る。このように、マシンは、実際には、主として、１つの地理的ロケーションのみに対して、その対応する高トラフィック時間中にサービスを提供し、したがって、計算リソースの使用を最適化し、マシンへの負荷を分散させる。一実施形態において、高トラフィックは、トラフィックが所定の閾値を超えるかに基づいて決定され得る。同様に、一実施形態において、低トラフィックは、トラフィックが閾値を下回るかに基づいて決定され得る。
【００９５】
ソーシャル・ネットワーキング・システム内で、地理的ロケーション（例えば、都市、国家、コミュニティ等）または関連付けられたシャードは、ピーク時および非ピーク時のソーシャル・ネットワーキング・システムの使用において大きな変動を示し得る。このパターンは、一般には、例えば、共通の地理的領域またはタイム・ゾーン内の異なるユーザによって示され得る。例えば、多くの都市、領域、および国家ですら、人々が睡眠中である傾向のある夜間には、日中よりもより少ないトラフィックを示し得る。したがって、トラフィックは、１２時間の期間または他の時間間隔にカテゴリ分けされ得る。別の例として、第１の地理的ロケーションは、日中の８時間間隔において特徴的な使用（例えば、重いトラフィックまたは最小限のトラフィック）を示し、第２の地理的ロケーションは、日中の６時間間隔において特徴的な使用を示し、第３の地理的ロケーションは、特徴的な使用パターンをほとんどまたは全く示さないことがあり得る。
【００９６】
使用パターンは、一定の地理的領域に関連付けられている習慣または文化に基づき得る。例えば、１つの地理的ロケーションにおける人々は、ソーシャル・ネットワーキング・システムを自宅で主に使用し得る。別の地理的ロケーションは、ソーシャル・ネットワーキング・システムを職場で主に使用し得る。さらに別の地理的ロケーションは、ソーシャル・ネットワーキング・システムを週末または他の特別な日に主に使用し得る。
【００９７】
さらに、ソーシャル・ネットワーキング・システムのユーザは、異なる地理的ロケーションにおいて不均一に分散され得る。例えば、アメリカ合衆国および欧州は、同じ期間ま
たは重複する期間にわたって著しい使用パターンを示す非常に多数のユーザを有し得る。これらの２つの国家についてのピーク期間は重複することがあり、重複する期間中に、非常に大きな結合された使用を生成し得る。したがって、これらの地理的ロケーションからのユーザの結合は、マシンに対する負荷の過度な変動を引き起こし得る。したがって、一実施形態において、各地理的ロケーションがピーク使用量を示す時に、１つの地理的ロケーションに関連付けられているユーザは、その時間中に負荷の過度な変動を回避するために、一時的分散モジュール７０８によって、異なるマシンへルーティングされ得る。ユーザは、ピーク使用量間隔後に、元のマシンへ戻され得る。このようにして、そのような負荷の過度な変動を回避するためにユーザをルーティングすることは、任意の間隔にわたって任意の数の地理的ロケーションについて実行されて、負荷分散を最適化し得る。一時的分散モジュール７０８は、重い使用量または軽い使用量に関連付けられている時間間隔を識別し、したがって特定の地理的ロケーションを共に同じマシン上へ適宜グループ化し、またはまとめて、負荷を最適化し得る。一時的分散モジュール７０８は、変動する数の地理的ロケーションと変動する大きさの時間間隔とを混合および一致させ得る、任意の数の置換を実装して、異なる使用パターンについての負荷分散を最適化し得る。
【００９８】
一時的分散モジュール７０８は、相補的なタイム・ゾーンによって地理的ロケーションをまとめてもよい。例えば、２つの地理的ロケーションは、１２時間の期間で互いに補完することがあり、３つの地理的ロケーションは、８時間の期間で互いに補完することがある等である。地理的ロケーションをこうしてまとめることは、世界中の地理的ロケーションについての様々な結合において実行され得る。いくつかの例において、一時的分散モジュール７０８は、負荷分散の目的のために、複数の異なる地理的ロケーションを１つの単位として取り扱い得る。
【００９９】
一時的分散モジュール７０８は、負荷分散と局所性との間のトレードオフも考慮に入れ得る。例えば、２つの地理的ロケーションは、使用パターンに関しては互いに補完し得る一方で、これらは、局所性への影響があまりにも大きいと決定される場合には、必ずしも同じマシンへルーティングされるとは限らないことがあり得る。
【０１００】
様々なシステムおよび技法が、負荷の変動を考慮するために実装され得る。一実施形態においては、過度な負荷需要、またはメンテナンスなどに起因する負荷処理能力の低下に対して適応するために、マシンの汎用プールが実装され得る。例えば、マシンが、現在過負荷を掛けられているか、またはメンテナンスに起因して動作不能である場合、そのマシンに対してマッピングされたクエリは、そのマシンが過負荷を掛けられなくなるか、またはメンテナンスに起因して動作不能ではなくなるまで、マシンの汎用プールへ一時的にルーティングされ得る。
【０１０１】
一実施形態において、シャードに関連付けられているマシン・プールの大きさは、負荷需要または予期される負荷需要に応じて動的に変動させられ得る。例えば、マシン・プールに対して分配されるマシンの数は、より高い負荷需要またはより低い負荷需要を考慮するために、それぞれ動的に増加または減少され得る。いくつかの例において、マシン・プールの大きさは、予期される時刻による負荷変化に基づいて変動し得る。いくつかの例において、マシン・プールの大きさは、例えば、コミュニティの緊急事態に起因する負荷急増などの、予期しない負荷急増に応じて変動し得る。
【０１０２】
いくつかの例において、一定のユーザ、コミュニティ、またはシャードは、予期外に高い負荷を誘発し得る。例えば、ユーザは、突然の全国的な注目を集める有名人または公人であり、そのユーザのアカウントに対する多くのクエリを同時に招くことがある。ユーザのアカウントに関連付けられているマシンまたはシャードへ課される負荷需要における突然かつ過度の増加は、破壊的となり得る。ユーザまたはシャードに関連付けられているマ
シン・プールの大きさは、増加した負荷需要に適応するために、動的に増加され得る。一実施形態において、クエリは、負荷需要を軽減することを助けるために、マシンの汎用プールへルーティングされ得る。いくつかの例において、クエリは、ユーザまたはシャードに関連付けられているマシン・プールが動的にサイズ変更されるまで、マシンの汎用プールへルーティングされる。
【０１０３】
いくつかの例において、負荷需要は、匿名のユーザ、友達が全くいないユーザ、ログインしていないユーザ、サーチ・エンジン・スクレイパー（ｓｅａｒｃｈ  ｅｎｇｉｎｅ  ｓｃｒａｐｅｒｓ）等などの、ユーザのコミュニティへ効果的にリンクされていないユーザ、または関連付けられた一意のＩＤを有しないユーザによって生成され得る。なぜなら、これらのユーザは、コミュニティまたは一意のＩＤに対して効果的に関連付けられておらず、これらのユーザが生成する負荷需要は、本明細書において説明される負荷利益および性能利益のうちの一部から必ずしも利益を享受せず、または寄与しないことがあり得るためである。一実施形態において、そのようなユーザからのクエリは、マシンの汎用プール、これらのタイプの非ソーシャル・ユーザのための専用マシン・プールへルーティングされ、または、１つのマシン・プールもしくは複数のマシン・プールにおけるマシンの全セットにまたがって負荷分散され得る。
【０１０４】
ユーザとコミュニティ、一意のＩＤ、またはシャードとの間のマッピングは、クラスタリングの変更またはノード・グラフのパーティション分けのされ方などに起因して、ときには著しく変化し得る。過去のマップに対して著しい変化を有する新たなマップを採用する影響を低減するために、更新は、徐々に、または世界的にオフ・ピークの時間など、低減されたトラフィックもしくは負荷の時に、採用され得る。一実施形態においては、現在のクエリについてどのマップが利用されているのかを一意に識別するために、バージョン識別子が、一意のＩＤ、コミュニティの識別子、またはシャードの識別子と共に使用され得る。
【０１０５】
図８は、一実施形態に係る、負荷分散検討事項に基づいてユーザをマシンに対してマッピングする例示的なプロセスを例示する。ブロック８０２において、マシンの負荷および使用時間が監視される。監視は、動的であり、例えば、クエリが受信されると決定され得る。例えば、クエリが受信され、マシン（または、マシン・プールなどの、複数の近しく関連付けられたマシン）に対して最初にマッピングされる場合、そのマシンへの現在の負荷がまず監視されて、そのマシンが過負荷を掛けられているかが決定される。別の例においては、地理的ロケーションの使用パターンが監視される。一実施形態において、ブロック８０２は、図７の負荷監視モジュール７０６によって実行され得る。
【０１０６】
ブロック８０４において、再割り当てによって自身の負荷を改善し得るユーザまたは地理的ロケーションが識別される。これは、高い負荷を有するマシンを識別すること、または低い負荷を有するマシンを識別することを含み得る。これらの負荷は、例えば、任意の所与の時（例えば、マシンが、あまりにも多くのクエリを一度に有する時）における使用量トラフィックの動的な変化に基づいて変動し得る。負荷は、任意のタイプの使用パターンに基づいても識別され得る。使用パターンは、１２時間の期間、８時間の期間、４時間の期間等などの、使用の１つまたは複数の期間に基づいて識別され得る。
【０１０７】
ブロック８０６において、負荷分散にとって有益な、ユーザまたは地理的ロケーションの適当な再割り当てが決定される。例えば、クエリの実行に関して、最初のマッピングが、過負荷を掛けられているマシンに対するものである場合、クエリは、軽負荷を掛けられている別のマシンへマッピングされ得る。別の例として、負荷の分散を最適化するために、地理的ロケーションの２つ以上のグループは、それらの相補的な使用パターンに基づいて、共にまとめられ得る。地理的ロケーションは、様々な数の地理的ロケーションと様々
な時間間隔を混合または一致させる任意の数の置換において共にまとめられて、変動する使用パターンについての負荷分散を最適化し得る。一実施形態において、ブロック８０４および８０６は、図７の負荷監視モジュール７０６および一時的分散モジュール７０８によって実行され得る。
【０１０８】
ブロック８０８において、ユーザは、ブロック８０６における再割り当てに基づいて、マシンに対してマッピングされる。まとめられた地理的ロケーションに関して、まとめられた地理的ロケーションのユーザは、ブロック８０６において決定された最適化された構成に従って、マッピングおよびルーティングされる。例えば、反対の使用パターンを有する２つの相補的な地理的ロケーションが、同じマシンに対してマッピングおよびルーティングされ得る。
【０１０９】
図９は、一実施形態に係る、クエリをマシン（または、マシン・プールなどの、複数の近しく関連付けられたマシン）へルーティングする例示的なプロセスを例示する。図６〜図８についての上記議論は、図９のプロセスに対しても当てはまることが認識されるべきである。簡潔さおよび明確さのために、類似した特徴および機能は、図９についてここでは繰りかえされないが、等しく適用可能であり得る。
【０１１０】
プロセス９００のブロック９０２において、クエリ（または要求）が受信される。例えば、システムは、ソーシャル・ネットワーキング・システムのユーザによって開始されたクエリを受信し得る。クエリは、そのクエリと一緒に、ユーザのユーザＩＤを含み得る。ブロック９０４においては、一意のＩＤが、ユーザＩＤから決定される。例えば、ユーザＩＤから一意のＩＤへのマッピングは、ユーザＩＤを一意のＩＤへ変換するために使用され得る。ブロック９０６においては、シャード番号が、一意のＩＤに基づいて決定され得る。例えば、シャード番号は、本明細書において説明されるように、パーティションサイズに基づいて決定され得る。一実施形態において、ブロック９０２、９０４、および９０６は、図７のシャード決定モジュール７０２によって実行され得る。
【０１１１】
ブロック９０８において、シャード番号は、物理マシン（または、複数の近しく関連付けられたマシン）に対してマッピングされ得る。１つの実施形態において、シャード番号は、物理マシンへの一意のＩＤ空間の等しい分割に基づいて、物理マシンに対してマッピングされる。一実施形態において、シャード番号は、一意のＩＤ空間の不均等な分割に基づいて、物理マシンに対してマッピングされる。一実施形態において、本明細書においてより詳細に議論されるような負荷分散検討事項も、物理マシンに対するシャード番号のマッピングのために考慮に入れられ得る。
【０１１２】
ブロック９１０において、マシンが選択される。シャード番号が、マシン・プールなどの複数のマシンに対してマッピングされる場合、マシンのうちの１つが選択される。ブロック９１２においては、選択されたマシンが、クエリを動的に拒否したかが決定される。クエリが、選択されたマシンによって拒否されない場合、ブロック９１４において、そのクエリは、選択されたマシンへルーティングされ、選択されたマシンによって実行される。しかしながら、クエリが、選択されたマシンによって拒否される場合には、ブロック９１２からブロック９１０への矢印によって表されるように、別のマシンが選択され得る。例えば、複数のマシンから選択された第１のマシンが拒否される場合、複数のマシンからの別のマシンが選択され得る。この選択プロセスは、複数のマシンからの１つのマシンがクエリを受け入れるまで継続し得る。一実施形態において、（例えば、過負荷またはメンテナンスに起因して）クエリを正常に受信するためのマシンが複数のマシンから選択されることができない場合、クエリは、マシンの汎用プールへルーティングされ得る。シャード番号が、ブロック９０８において単一のマシンへマッピングされ、かつ、そのマシンがクエリを拒否する場合、マシンの汎用プールからのマシンなどの代替的なマシンが、クエ
リを受信するために選択され得る。別の実施形態においては、クエリが、選択されたマシンによって拒否される場合、そのクエリは、所定の待機期間後に、同じマシンへ再送され得る。一実施形態において、ブロック９０８、９１０、９１２、および９１４は、図７のルーティング・モジュール７０４、負荷監視モジュール７０６、および一時的分散モジュール７０８によって実行され得る。
【０１１３】
ソーシャル・ネットワーキング・システム−実施例
図１０は、幾つかの実施形態による、本発明の実施形態に応じたソーシャル・ネットワーキング・システムにおけるビデオリンクの代替のための例示システム１０００のネットワーク図である。システム１０００は、１つまたは複数のユーザ・デバイス１０１０、１つまたは複数の外部システム１０２０、ソーシャル・ネットワーキング・システム１０３０、およびネットワーク１０５０を含む。実施形態では、上述した実施形態に関連して考察したソーシャル・ネットワーキング・システムは、ソーシャル・ネットワーキング・システム１０３０として実施され得る。例示のために、図１０に示されるシステム１０００の実施形態は、単一の外部システム１０２０および単一のユーザ・デバイス１０１０を含む。しかし、他の実施形態では、ソーシャル・ネットワーキング・システム１０００は、より多数のユーザ・デバイス１０１０および／またはより多数の外部システム１０２０を含み得る。特定の実施形態では、ソーシャル・ネットワーキング・システム１０３０は、ソーシャルネットワークプロバイダによって運営され、一方、外部システム１０２０は、異なるエンティティによって運営され得るという点で、ソーシャル・ネットワーキング・システム１０３０とは別個である。しかし、様々な実施形態では、ソーシャル・ネットワーキング・システム１０３０および外部システム１０２０は、併せて動作して、ソーシャルネットワーキングサービスをソーシャル・ネットワーキング・システム１０３０のユーザ（またはメンバ）に提供する。この意味では、ソーシャル・ネットワーキング・システム１０３０は、外部システム１０２０等の他のシステムが、インターネットにわたりソーシャルネットワーキングサービスおよび機能をユーザに提供するために使用し得るプラットフォームまたはバックボーンを提供する。
【０１１４】
ユーザ・デバイス１０１０は、ユーザから入力を受信し、ネットワーク１０５０を通じてデータを受信することができる１つまたは複数の計算デバイスを含む。一実施形態では、ユーザ・デバイス１０１０は、例えば、マイクロソフトウィンドウズ（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ）（登録商標）互換性オペレーティングシステム）、アップル（Ａｐｐｌｅ）（登録商標）ＯＳ−Ｘ、および／またはリナックス（Ｌｉｎｕｘ）（登録商標）ディストリビューションを実行する従来のコンピュータ・システムである。別の実施形態では、ユーザ・デバイス１０１０は、スマートフォン、タブレット、個人情報端末（ＰＤＡ）、モバイル電話等のコンピュータ機能を有するデバイスとすることができる。ユーザ・デバイス１０１０は、ネットワーク１０５０を通じて通信するように構成される。ユーザ・デバイス１０１０は、アプリケーション、例えば、ユーザ・デバイス１０１０のユーザがソーシャル・ネットワーキング・システム１０３０と対話できるようにするブラウザ・アプリケーションを実行することができる。別の実施形態では、ユーザ・デバイス１０１０は、ｉＯＳ（登録商標）およびアンドロイド（ＡＮＤＲＯＩＤ）（登録商標）等のユーザ・デバイス１０１０のネイティブオペレーティングシステムによって提供されるアプリケーションプログラミングインターフェース（ＡＰＩ）を通して、ソーシャル・ネットワーキング・システム１０３０と対話する。ユーザ・デバイス１０１０は、ネットワーク１０５０を通じて外部システム１０２０およびソーシャル・ネットワーキング・システム１０３０と通信するように構成され、ネットワーク１０５０は、有線および／または無線通信システムを使用するローカルエリアネットワークおよび／または広域ネットワークの任意の組合せを含み得る。
【０１１５】
一実施形態では、ネットワーク１０５０は、標準通信技術およびプロトコルを使用する
。したがって、ネットワーク１０５０は、イーサネット（Ｅｔｈｅｒｎｅｔ）（登録商標）、８０２．１１、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス（ＷｉＭＡＸ）（登録商標）、３Ｇ、４Ｇ、ＣＤＭＡ、ＧＳＭ（登録商標）、ＬＴＥ、デジタル加入者回線（ＤＳＬ）等の技術を使用するリンクを含むことができる。同様に、ネットワーク１０５０で使用されるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング（ＭＰＬＳ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキストトランスポートプロトコル（ＨＴＴＰ）、簡易メール転送プロトコル（ＳＭＴＰ）、ファイル転送プロトコル（ＦＴＰ）等を含むことができる。ネットワーク１０５０を通じて交換されるデータは、ハイパーテキストマークアップ言語（ＨＴＭＬ）および拡張可能マークアップ言語（ＸＭＬ）を含む技術および／またはフォーマットを使用して表すことができる。加えて、全てまたは幾つかのリンクは、セキュアソケットレイヤ（ＳＳＬ）、トランスポートレイヤセキュリティ（ＴＬＳ）、およびインターネットプロトコルセキュリティ（ＩＰｓｅｃ）等の従来の暗号化技術を使用して暗号化することができる。
【０１１６】
一実施形態では、ユーザ・デバイス１０１０は、ブラウザ・アプリケーション１０１２を使用して外部システム１０２０およびソーシャル・ネットワーキング・システム１０３０から受信されるマークアップ言語ドキュメント１０１４を処理することにより、外部システム１０２０および／またはソーシャル・ネットワーキング・システム１０３０からのコンテンツを表示し得る。マークアップ言語ドキュメント１０１４は、コンテンツと、コンテンツのフォーマットまたはプレゼンテーションを記述する１つまたは複数の命令とを識別する。マークアップ言語ドキュメント１０１４に含まれる命令を実行することにより、ブラウザ・アプリケーション１０１２は、マークアップ言語ドキュメント１０１４によって記述されるフォーマットまたはプレゼンテーションを使用して、識別されたコンテンツを表示する。例えば、マークアップ言語ドキュメント１０１４は、外部システム１０２０およびソーシャル・ネットワーキング・システム１０３０から検索されたテキストおよび／または画像データを含む複数のフレームを有するウェブ・ページを生成し表示する命令を含む。様々な実施形態において、マークアップ言語ドキュメント１０１４は、拡張可能マークアップ言語（ＸＭＬ）データ、拡張可能ハイパーテキストマークアップ言語（ＸＨＴＭＬ）データ、または他のマークアップ言語データを含むデータファイルを含む。更に、マークアップ言語ドキュメント１０１４は、外部システム１０２０とユーザ・デバイス１０１０との間でのデータ交換を促進するために、ジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）オブジェクト表記（ＪＳＯＮ）データ、パディングを有するＪＳＯＮ（ＪＳＯＮＰ）、およびジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）データを含み得る。ユーザ・デバイス１０１０のブラウザ・アプリケーション１０１２は、ジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）コンパイラを使用して、マークアップ言語ドキュメント１０１４を復号化し得る。
【０１１７】
マークアップ言語ドキュメント１０１４は、フラッシュ（ＦＬＡＳＨ）（商標）またはユニティ（Ｕｎｉｔｙ）（商標）アプリケーション、シルバーライト（ＳｉｌｖｅｒＬｉｇｈｔ）（商標）アプリケーションフレームワーク等のアプリケーションまたはアプリケーションフレームワークを含むか、またはそれらにリンクすることもできる。
【０１１８】
一実施形態では、ユーザ・デバイス１０１０は、ユーザ・デバイス１０１０のユーザがソーシャル・ネットワーキング・システム１０３０にログインするか否かを示すデータを含む１つまたは複数のクッキー１０１６も含み、クッキーは、ソーシャル・ネットワーキング・システム１０３０からユーザ・デバイス１０１０に通信されるデータの変更を可能にし得る。
【０１１９】
外部システム１０２０は、１つまたは複数のウェブ・ページ１０２２ａ、１０２２ｂを
含む１つまたは複数のウェブ・サーバを含み、ウェブ・ページは、ネットワーク１０５０を使用してユーザ・デバイス１０１０に通信される。外部システム１０２０は、ソーシャル・ネットワーキング・システム１０３０とは別個である。例えば、外部システム１０２０には第１のドメインが関連付けられ、一方、ソーシャル・ネットワーキング・システム１０３０には別個のソーシャルネットワーキングドメインが関連付けられる。外部システム１０２０に含まれるウェブ・ページ１０２２ａ、１０２２ｂは、コンテンツを識別し、識別されたコンテンツのフォーマットまたはプレゼンテーションを指定する命令を含むマークアップ言語ドキュメント１０１４を含む。
【０１２０】
ソーシャル・ネットワーキング・システム１０３０は、複数のユーザを含み、ソーシャル・ネットワーキング・システムの他のユーザと通信し、対話する能力をソーシャル・ネットワークのユーザに提供する、ソーシャル・ネットワークの１つまたは複数の計算デバイスを含む。幾つかの場合、ソーシャル・ネットワークは、グラフ、すなわち、エッジおよびノードを含むデータ構造によって表すことができる。ソーシャル・ネットワークを表すために、データベース、オブジェクト、クラス、メタ要素、ファイル、または任意の他のデータ構造を含むが、これらに限定されない他のデータ構造を使用することもできる。ソーシャル・ネットワーキング・システム１０３０は、オペレータによって監督され、管理され、または制御され得る。ソーシャル・ネットワーキング・システム１０３０のオペレータは、人間、自動アプリケーション、またはコンテンツを管理し、ポリシーを調整し、ソーシャル・ネットワーキング・システム１０３０内の使用尺度を収集する一連のアプリケーションとし得る。任意のタイプのオペレータが使用され得る。
【０１２１】
ユーザは、ソーシャル・ネットワーキング・システム１０３０に加わり、次に、結び付きたいソーシャル・ネットワーキング・システム１０３０の任意の数の他のユーザへのつながりを追加し得る。本明細書で使用される場合、「友達」という用語は、ユーザがソーシャル・ネットワーキング・システム１０３０を通じてつながり、関連、または関係を形成したソーシャル・ネットワーキング・システム１０３０の任意の他のユーザを指す。例えば、実施形態では、ソーシャル・ネットワーキング・システム１０３０内のユーザが、ソーシャル・グラフ内のノードとして表される場合、「友達」という用語は、２つのユーザノード間に形成され、２つのユーザノードを直接結び付けるエッジを指すことができる。
【０１２２】
つながりは、ユーザによって明示的に追加されてもよく、またはユーザ（例えば、同じ教育機関の卒業生であるユーザ）の共通の特徴に基づいてソーシャル・ネットワーキング・システム１０３０によって自動的に作成されてもよい。例えば、第１のユーザは特に、友達である特定の他のユーザを選択する。ソーシャル・ネットワーキング・システム１０３０でのつながりは通常、両方向であるが、両方である必要はなく、したがって、「ユーザ」および「友達」という用語は枠組みに依存する。ソーシャル・ネットワーキング・システム１０３０のユーザ間のつながりは通常、２者間（「双方向」）または「相互」であるが、一方的または「一方向」であってもよい。例えば、ボブおよびジョーは両方ともソーシャル・ネットワーキング・システム１０３０のユーザであり、互いに結び付けられる場合、ボブおよびジョーは互いのつながりである。他方、ボブがジョーに結び付けられ、ジョーによってソーシャル・ネットワーキング・システム１０３０に通信されたデータを見ることを希望するが、ジョーは相互つながりを形成することを希望しない場合、一方的なつながりが確立され得る。ユーザ間のつながりは、直接的なつながりであり得るが、ソーシャル・ネットワーキング・システム１０３０の幾つかの実施形態では、１つまたは複数のレベルのつながりまたは分離度を通じて間接的であることができる。
【０１２３】
ユーザ間につながりを確立し維持し、ユーザ間の対話を可能にすることに加えて、ソーシャル・ネットワーキング・システム１０３０は、ソーシャル・ネットワーキング・シス
テム１０３０によってサポートされる様々なタイプのアイテムに対してアクションをとる能力をユーザに提供する。これらのアイテムは、ソーシャル・ネットワーキング・システム１０３０のユーザが属し得るグループまたはネットワーク（すなわち、人々、エンティティ、およびコンセプトのソーシャル・ネットワーク）、ユーザが関心を有し得るイベントまたはカレンダーエントリ、ユーザがソーシャル・ネットワーキング・システム１０３０を通じて使用し得るコンピュータベースのアプリケーション、ユーザがソーシャル・ネットワーキング・システム１０３０によりまたはソーシャル・ネットワーキング・システム１０３０を通して提供されるサービスを通じてアイテムを購入または販売できるようにするトランザクション、およびユーザがソーシャル・ネットワーキング・システム１０３０内外で実行し得る広告との対話を含み得る。これらは、ユーザがソーシャル・ネットワーキング・システム１０３０に対して作用し得るアイテムの少数の例にすぎず、多くの他のアイテムが可能である。ユーザは、ソーシャル・ネットワーキング・システム１０３０内またはソーシャル・ネットワーキング・システム１０３０とは別個であるか、若しくはネットワーク１０５０を通じてソーシャル・ネットワーキング・システム１０３０に結合される外部システム１０２０内で表されることが可能ないかなるものとでも対話し得る。
【０１２４】
ソーシャル・ネットワーキング・システム１０３０は、様々なエンティティをリンクすることも可能である。例えば、ソーシャル・ネットワーキング・システム１０３０は、ユーザが、ＡＰＩ、ウェブサービス、または他の通信チャネルを通して互いと、並びに外部システム１０２０または他のエンティティと対話できるようにする。ソーシャル・ネットワーキング・システム１０３０は、複数のエッジで相互接続された複数のノードを含む「ソーシャル・グラフ」を生成し維持する。ソーシャル・グラフ内の各ノードは、別のノードに作用することができ、且つ／または別のノードによる作用が可能なエンティティを表し得る。ソーシャル・グラフは、様々なタイプのノードを含み得る。ノードのタイプの例としては、ユーザ、人以外のエンティティ、コンテンツアイテム、ウェブ・ページ、グループ、アクティビティ、メッセージ、コンセプト、およびソーシャル・ネットワーキング・システム１０３０内のオブジェクトによって表すことができる任意の他のものが挙げられる。ソーシャル・グラフ内の２つのノード間のエッジは、ノード関係またはノードのうちの一方によって他方のノードに実行されたアクションに起因し得る２つのノード間の特定の種類のつながりまたは関連を表し得る。幾つかの場合、ノード間のエッジは重み付けされることができる。エッジの重みは、ノード間のつながりまたは関連の強さ等のエッジに関連付けられる属性を表すことができる。異なるタイプのエッジに異なる重みが提供されることができる。例えば、あるユーザが別のユーザを「好き」な場合に作成されるエッジにある重みが与えられ得、一方、ユーザが別のユーザの友達である場合に作成されるエッジには異なる重みが与えられ得る。
【０１２５】
例として、第１のユーザが第２のユーザを友達として識別する場合、第１のユーザを表すノードおよび第２のユーザを表す第２のノードを結ぶソーシャル・グラフ内のエッジが生成される。様々なノードが互いに関係または対話するため、ソーシャル・ネットワーキング・システム１０３０は、関係および対話を反映するように、様々なノードを結ぶエッジを変更する。
【０１２６】
ソーシャル・ネットワーキング・システム１０３０は、ユーザ生成コンテンツも含み、ユーザ生成コンテンツは、ソーシャル・ネットワーキング・システム１０３０とのユーザの対話を強化する。ユーザ生成コンテンツは、ユーザがソーシャル・ネットワーキング・システム１０３０に追加し、アップロードし、送信し、または「掲示」することができるいかなるものも含み得る。例えば、ユーザは、掲示をユーザ・デバイス１０１０からソーシャル・ネットワーキング・システム１０３０に通信する。掲示は、ステータス更新若しくは他のテキストデータ、ロケーション情報、写真等の画像、動画、リンク、音楽、または他の同様のデータおよび／またはメディア等のデータを含み得る。コンテンツは、第３
者によってソーシャル・ネットワーキング・システム１０３０に追加されることもできる。コンテンツ「アイテム」は、ソーシャル・ネットワーキング・システム１０３０においてオブジェクトとして表される。このようにして、ソーシャル・ネットワーキング・システム１０３０のユーザは、様々な通信チャネルを通してテキストおよび様々なタイプのメディアのコンテンツアイテムを掲示することにより、互いと通信するように促される。そのような通信は、互いとのユーザの対話を増大させ、ユーザがソーシャル・ネットワーキング・システム１０３０と対話する頻度を増大させる。
【０１２７】
ソーシャル・ネットワーキング・システム１０３０は、ウェブ・サーバ１０３２、ＡＰＩ要求サーバ１０３４、ユーザ・プロフィール・ストア１０３６、つながりストア１０３８、アクション・ロガー１０４０、アクティビティ・ログ１０４２、認証サーバ１０４４、およびビデオ代替モジュール１０４６を含む。本発明の実施形態では、ソーシャル・ネットワーキング・システム１０３０は、様々なアプリケーションの追加、より少数、または異なる構成要素を含み得る。ネットワーク・インターフェース、セキュリティメカニズム、ロードバランサー、フェイルオーバサーバ、管理およびネットワーク動作コンソール等の他の構成要素は、システムの詳細を曖昧にしないために示されていない。
【０１２８】
ユーザ・プロフィール・ストア１０３６は、経歴、人口統計、およびユーザによって宣言されたか、またはソーシャル・ネットワーキング・システム１０３０によって推測される仕事経験、教育履歴、趣味または好み、ロケーション等の他のタイプの説明的情報を含め、ユーザアカウントについての情報を保持する。この情報は、各ユーザが一意に識別されるように、ユーザ・プロフィール・ストア１０３６に記憶される。ソーシャル・ネットワーキング・システム１０３０は、異なるユーザ間の１つまたは複数のつながりを記述するデータもつながりストア１０３８に記憶する。つながり情報は、同様または共通の仕事経験、グループメンバシップ、趣味、または教育履歴を有するユーザを示し得る。更に、ソーシャル・ネットワーキング・システム１０３０は、異なるユーザ間のユーザ定義つながりを含み、ユーザが他のユーザとの関係を指定できるようにする。例えば、ユーザ定義つながりは、ユーザが、友達、同僚、パートナ等のユーザの現実世界の関係と同様の他のユーザとの関係を生成できるようにする。ユーザは、予め定義されたタイプのつながりから選択してもよく、または必要に応じて自身のつながりタイプを定義してもよい。人以外のエンティティ、バケツ、クラスタセンター、画像、関心、ページ、外部システム、コンセプト等のソーシャル・ネットワーキング・システム１０３０での他のノードとのつながりも、つながりストア１０３８に記憶される。
【０１２９】
ソーシャル・ネットワーキング・システム１０３０は、ユーザが対話し得るオブジェクトについてのデータを保持する。このデータを保持するために、ユーザ・プロフィール・ストア１０３６およびつながりストア１０３８が、ソーシャル・ネットワーキング・システム１０３０によって保持される対応するタイプのオブジェクトのインスタンスを記憶する。各オブジェクトタイプは、そのタイプのオブジェクトに適切な情報を記憶するのに適する情報フィールドを有する。例えば、ユーザ・プロフィール・ストア１０３６は、ユーザのアカウントおよびユーザのアカウントに関連する情報の記述に適するデータ構造を含む。特定のタイプの新しいオブジェクトが作成される場合、ソーシャル・ネットワーキング・システム１０３０は、対応するタイプの新しいデータ構造を初期化し、一意のオブジェクト識別子を割り当て、必要に応じてデータをオブジェクトに追加し始める。これは、例えば、ユーザがソーシャル・ネットワーキング・システム１０３０のユーザになるときに行われ得、ソーシャル・ネットワーキング・システム１０３０は、ユーザ・プロフィール・ストア１０３６にユーザ・プロフィールの新しいインスタンスを生成し、一意の識別子をユーザアカウントに割り当て、ユーザアカウントのフィールドに、ユーザによって提供された情報を入れ始める。
【０１３０】
つながりストア１０３８は、他のユーザへのユーザのつながり、外部システム１０２０へのつながり、または他のエンティティへのつながりを記述するのに適するデータ構造を含む。つながりストア１０３８は、つながりタイプもユーザのつながりに関連付け得、つながりタイプは、ユーザについての情報へのアクセスを規制するために、ユーザのプライバシー設定と併せて使用され得る。本発明の実施形態では、ユーザ・プロフィール・ストア１０３６およびつながりストア１０３８は、連合データベースとして実施され得る。
【０１３１】
つながりストア１０３８、ユーザ・プロフィール・ストア１０３６、およびアクティビティ・ログ１０４２に記憶されたデータは、ソーシャル・ネットワーキング・システム１０３０が、ノードを使用して様々なオブジェクトを識別し、ノードを結ぶエッジを使用して、異なるオブジェクト間の関係を識別するソーシャル・グラフを生成できるようにする。例えば、第１のユーザが、ソーシャル・ネットワーキング・システム１０３０において第２のユーザとの接続を確立する場合、ユーザ・プロフィール・ストア１０３６からの第１のユーザおよび第２のユーザのユーザアカウントは、ソーシャル・グラフにおいてノードとして機能し得る。つながりストア１０３８に記憶される第１のユーザと第２のユーザとのつながりは、第１のユーザおよび第２のユーザに関連付けられたノード間のエッジである。この例を続けると、次に、第２のユーザは、ソーシャル・ネットワーキング・システム１０３０内でメッセージを第１のユーザに送信し得る。記憶され得るメッセージを送信するというアクションは、ソーシャル・グラフで第１のユーザおよび第２のユーザを表す２つのノード間の別のエッジである。更に、メッセージそれ自体が識別され、第１のユーザおよび第２のユーザを表すノードに結ばれた別のノードとして、ソーシャル・グラフに含まれ得る。
【０１３２】
別の例では、第１のユーザは、ソーシャル・ネットワーキング・システム１０３０によって保持される画像（または代替的に、ソーシャル・ネットワーキング・システム１０３０外の別のシステムによって保持される画像）において、第２のユーザをタグ付けし得る。画像はそれ自体、ソーシャル・ネットワーキング・システム１０３０内のノードとして表され得る。このタグ付け動作は、第１のユーザと第２のユーザとの間にエッジを作成し得るとともに、各ユーザと画像との間にエッジを作成し得、画像もソーシャル・グラフのノードである。更に別の例では、ユーザがイベントへの参加を確認する場合、ユーザおよびイベントは、ユーザ・プロフィール・ストア１０３６から得られるノードであり、イベントの参加は、アクティビティ・ログ１０４２から検索され得るノード間のエッジである。ソーシャル・グラフを生成して保持することにより、ソーシャル・ネットワーキング・システム１０３０は、多くの異なるタイプのオブジェクトおよびそれらのオブジェクト間のつながりを記述するデータを含み、ソーシャル関連情報の豊富なソースを提供する。
【０１３３】
ウェブ・サーバ１０３２は、ネットワーク１０５０を通じてソーシャル・ネットワーキング・システム１０３０を１つまたは複数のユーザ・デバイス１０１０および／または１つまたは複数の外部システム１０２０にリンクする。ウェブ・サーバ１０３２は、ウェブ・ページおよびジャバ（Ｊａｖａ）（登録商標）、ジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）、フラッシュ（Ｆｌａｓｈ）、ＸＭＬ等の他のウェブ関連コンテンツにサービングする。ウェブ・サーバ１０３２は、メッセージを受信し、ソーシャル・ネットワーキング・システム１０３０と１つまたは複数のユーザ・デバイス１０１０との間でメッセージをルーティングするメールサーバまたは他のメッセージング機能を含み得る。メッセージは、インスタントメッセージ、待ち行列型メッセージ（例えば、電子メール）、テキストおよびＳＭＳメッセージ、または任意の他の適するメッセージングフォーマットとすることができる。
【０１３４】
ＡＰＩ要求サーバ１０３４は、１つまたは複数の外部システム１０２０およびユーザ・デバイス１０１０が、１つまたは複数のＡＰＩ機能を呼び出すことによってソーシャル・
ネットワーキング・システム１０３０からのアクセス情報を呼び出せるようにする。ＡＰＩ要求サーバ１０３４は、ＡＰＩを呼び出すことにより、外部システム１０２０が情報をソーシャル・ネットワーキング・システム１０３０に送信できるようにもする。外部システム１０２０は、一実施形態では、ネットワーク１０５０を通じてＡＰＩ要求をソーシャル・ネットワーキング・システム１０３０に送信し、ＡＰＩ要求サーバ１０３４はＡＰＩ要求を受信する。ＡＰＩ要求サーバ１０３４は、ＡＰＩ要求に関連付けられたＡＰＩを呼び出して、適切な応答を生成することによって要求を処理し、ＡＰＩ要求サーバ１０３４は、ネットワーク１０５０を通じて適切な応答を外部システム１０２０に通信する。例えば、ＡＰＩ要求に応答して、ＡＰＩ要求サーバ１０３４は、外部システム１０２０にログインしたことがあるユーザのつながり等のユーザに関連付けられたデータを収集し、収集されたデータを外部システム１０２０に通信する。別の実施形態では、ユーザ・デバイス１０１０は、外部システム１０２０と同じように、ＡＰＩを通じてソーシャル・ネットワーキング・システム１０３０と通信する。
【０１３５】
アクション・ロガー１０４０は、ソーシャル・ネットワーキング・システム１０３０内外でのユーザアクションについての通信をウェブ・サーバ１０３２から受信することが可能である。アクション・ロガー１０４０は、ユーザアクションについての情報をアクティビティ・ログ１０４２に入れ、ソーシャル・ネットワーキング・システム１０３０が、ソーシャル・ネットワーキング・システム１０３０内およびソーシャル・ネットワーキング・システム１０３０外でユーザがとった様々なアクションを発見できるようにする。特定のユーザがソーシャル・ネットワーキング・システム１０３０での別のノードに関してとった任意のアクションには、アクティビティ・ログ１０４２または同様のデータベース若しくは他のデータリポジトリに保持された情報を通して、各ユーザのアカウントが関連付けられ得る。識別された記憶されたソーシャル・ネットワーキング・システム１０３０内のユーザがとったアクションの例は、例えば、別のユーザへのつながりの追加、別のユーザへのメッセージの送信、別のユーザからのメッセージを読むこと、別のユーザに関連付けられたコンテンツの閲覧、別のユーザによって掲示されたイベントへの参加、画像の掲示、画像を掲示する試み、または別のユーザ若しくは別のオブジェクトと対話する他のアクションを含み得る。ユーザがソーシャル・ネットワーキング・システム１０３０内でアクションをとる場合、そのアクションはアクティビティ・ログ１０４２に記録される。一実施形態では、ソーシャル・ネットワーキング・システム１０３０は、エントリのデータベースとしてアクティビティ・ログ１０４２を保持する。アクションがソーシャル・ネットワーキング・システム１０３０内でとられる場合、そのアクションのエントリがアクティビティ・ログ１０４２に追加される。アクティビティ・ログ１０４２はアクションログと呼ばれ得る。
【０１３６】
更に、ユーザアクションには、ソーシャル・ネットワーキング・システム１０３０とは別個の外部システム１０２０等のソーシャル・ネットワーキング・システム１０３０外のエンティティ内で生じるコンセプトおよびアクションを関連付け得る。例えば、アクション・ロガー１０４０は、ウェブ・サーバ１０３２から、外部システム１０２０とのユーザの対話を記述するデータを受信し得る。この例では、外部システム１０２０は、ソーシャル・グラフ内の構造化されたアクションおよびオブジェクトに従ってユーザの対話を報告する。
【０１３７】
ユーザが外部システム１０２０と対話するアクションの他の例としては、ユーザが外部システム１０２０または別のエンティティ内で関心を表現すること、ユーザが、外部システム１０２０または外部システム１０２０内のウェブ・ページ１０２２ａを考察するコメントをソーシャル・ネットワーキング・システム１０３０に掲示すること、ユーザが外部システム１０２０に関連付けられたユニフォームリソースロケータ（ＵＲＬ）または他の識別子をソーシャル・ネットワーキング・システム１０３０に掲示すること、ユーザが外
部システム１０２０に関連付けられたイベントに参加すること、または外部システム１０２０に関連するユーザによる任意の他のアクションが挙げられる。したがって、アクティビティ・ログ１０４２は、ソーシャル・ネットワーキング・システム１０３０のユーザと、ソーシャル・ネットワーキング・システム１０３０とは別個の外部システム１０２０との対話を記述するアクションを含み得る。
【０１３８】
認証サーバ１０４４は、ソーシャル・ネットワーキング・システム１０３０のユーザの１つまたは複数のプライバシー設定を施行する。ユーザのプライバシー設定は、ユーザに関連付けられた特定の情報がいかに共有されることができるかを決定する。プライバシー設定は、ユーザに関連付けられた特定の情報の指定と、情報を共有することができる１つまたは複数のエンティティの指定とを含む。情報を共有することができるエンティティの例は、他のユーザ、アプリケーション、外部システム１０２０、または情報に潜在的にアクセスすることができる任意のエンティティを含み得る。ユーザによって共有することができる情報は、プロフィール写真等のユーザアカウント情報、ユーザに関連付けられた電話番号、ユーザのつながり、つながりの追加、ユーザ・プロフィール情報の変更等のユーザがとったアクション等を含む。
【０１３９】
プライバシー設定指定は、異なるレベルの粒度で提供され得る。例えば、プライバシー設定は、他のユーザと共有されるべき特定の情報を識別し得、プライバシー設定は、プロフィール写真、家の電話番号、およびステータスを含む個人情報等の仕事用電話番号または特定の関連情報セットを識別する。代替的には、プライバシー設定は、ユーザに関連付けられた全ての情報に適用され得る。特定の情報にアクセスすることができるエンティティセットの指定も、様々なレベルの粒度で指定することができる。情報を共有することができる様々なエンティティセットは、例えば、ユーザの全ての友達、友達の全ての友達、全てのアプリケーション、または全ての外部システム１０２０を含み得る。一実施形態では、エンティティセットの指定はエンティティの一覧を含むことができる。例えば、ユーザは、特定の情報にアクセス許可されている外部システム１０２０のリストを提供し得る。別の実施形態では、指定は、情報にアクセス許可されていない例外と共にエンティティセットを含むことができる。例えば、ユーザは、全ての外部システム１０２０がユーザの仕事情報にアクセスすることを許可し得るが、仕事情報にアクセス許可されていない外部システム１０２０のリストを指定し得る。特定の実施形態は、特定の情報にアクセス許可されていない例外のリストを「ブロックリスト」と呼ぶ。ユーザによって指定されたブロックリストに属する外部システム１０２０は、プライバシー設定で指定される情報へのアクセスから遮断される。情報の指定の粒度および情報が共有されるエンティティの指定の粒度の様々な組合せが可能である。例えば、全ての個人情報は友達と共有され得、一方、全ての仕事情報は、友達の友達と共有され得る。
【０１４０】
認証サーバ１０４４は、ユーザに関連付けられた特定の情報にユーザの友達、外部システム１０２０、および／または他のアプリケーションおよびエンティティがアクセスすることができるか否かを判断する論理を含む。外部システム１０２０は、ユーザの仕事用電話番号等のユーザのより私的で機密性のある情報にアクセスするため、認証サーバ１０４４からの認証を必要とし得る。ユーザのプライバシー設定に基づいて、認証サーバ１０４４は、別のユーザ、外部システム１０２０、アプリケーション、または別のエンティティが、ユーザがとったアクションについての情報を含め、ユーザに関連付けられた情報にアクセス許可されているか否かを判断する。
【０１４１】
ソーシャル・ネットワーキング・システム１０３０は、クラスタリング・モジュール１０４６を含み得る。クラスタリング・モジュール１０４６は、一意のＩＤを生成し、それらをソーシャル・グラフのノードに対して割り当て得る。さらに、クラスタリング・モジュール１０４６は、一意のＩＤを利用して、ソーシャル・ネットワーキング・システム１
０３０にわたってソーシャル・グラフをパーティションに分け得る。一意のＩＤ空間は、ソーシャル・ネットワーキング・システム１０３０のマシン（例えば、データベース・サーバまたはキャッシュ・システム）に対してユーザをマッピングするために使用され得る。クラスタリング・モジュール１０４６は、マッピングに基づいて、ソーシャル・ネットワーキング・システム１０３０のユーザをマシンへルーティングし得る。クラスタリング・モジュール１０４６は、トラフィック使用量パターン、またはマシンが過負荷を掛けられているか、もしくは軽負荷を掛けられているかなどの負荷分散検討事項に基づいて、ユーザをマシンに対してマッピングまたはルーティングし得る。一実施形態において、クラスタリング・モジュール１０４６は、図１のクラスタリング・モジュール１０４６として実装され得る。
【０１４２】
ハードウェア実装
上記プロセスおよび特徴は、広範囲のマシンおよびコンピュータシステムアーキテクチャにより、広範囲のネットワークおよび計算環境で実施することができる。図１１は、本発明の実施形態により本明細書に記載される実施形態の１つまたは複数の実施に使用され得るコンピュータ・システム１１００の例を示す。コンピュータ・システム１１００は、コンピュータ・システム１１００に本明細書に記載されるプロセスおよび特徴を実行させる命令セットを含む。コンピュータ・システム１１００は、他のマシンに接続（例えば、ネットワーク接続）され得る。ネットワーク接続された展開では、コンピュータ・システム１１００は、クライアント−サーバネットワーク環境でのサーバマシン若しくはクライアントマシンとして、またはピアツーピア（若しくは分散）ネットワーク環境でのピアマシンとして動作し得る。本発明の実施形態では、コンピュータ・システム１１００は、本明細書に記載されたソーシャル・ネットワーキング・システムの構成要素とし得る。本発明の実施形態では、コンピュータ・システム１１００は、ソーシャル・ネットワーキング・システム１０３０の全てまたは部分を構成する多くのうちの１つのサーバとし得る。
【０１４３】
コンピュータ・システム１１００は、プロセッサ１１０２、キャッシュ１１０４、および本明細書に記載されるプロセスおよび特徴に向けられた、コンピュータ可読媒体に記憶された１つまたは複数の実行可能モジュールおよびドライバを含む。更に、コンピュータ・システム１１００は、高性能入／出力（Ｉ／Ｏ）バス１１０６および標準Ｉ／Ｏバス１１０８を含む。ホスト・ブリッジ１１１０は、プロセッサ１１０２を高性能Ｉ／Ｏバス１１０６に結合し、一方、Ｉ／Ｏバス・ブリッジ１１１２は、２つのバス１１０６および１１０８を互いに結合する。システム・メモリ１１１４および１つまたは複数のネットワーク・インターフェース１１１６は、高性能Ｉ／Ｏバス１１０６に結合する。コンピュータ・システム１１００は、ビデオメモリ（図示せず）に結合されたビデオメモリおよび表示装置を更に含み得る。大容量ストレージ１１１８およびＩ／Ｏポート１１２０は、標準Ｉ／Ｏバス１１０８に結合する。コンピュータ・システム１１００は任意選択的に、キーボードおよびポインティングデバイス、表示装置、または標準Ｉ／Ｏバス１１０８に結合された他の入／出力デバイス（図示せず）を含み得る。まとめて、これらの要素は、カリフォルニア州サンタクララに所在のインテル社（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ）製のｘ８６互換性プロセッサ、カリフォルニア州サニーベールに所在のアドバンストマイクロデバイセズ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ）（ＡＭＤ）社製のｘ８６互換性プロセッサ、および任意の他の適するプロセッサに基づくコンピュータ・システムを含むが、これらに限定されない広いカテゴリのコンピュータハードウェアシステムを表すことが意図される。
【０１４４】
オペレーティングシステムは、ソフトウェアアプリケーション（図示せず）とのデータの入出力を含め、コンピュータ・システム１１００の動作を管理し制御する。オペレーティングシステムは、システムで実行中のソフトウェアアプリケーションとシステムのハードウェア構成要素との間のインターフェースを提供する。リナックス（ＬＩＮＵＸ）（登
録商標）オペレーティングシステム、カリフォルニア州クパチーノに所在のアップルコンピュータ社（Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ  Ｉｎｃ．）から入手可能なアップルマッキントッシュ（Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ）（登録商標）オペレーティングシステム、ユニックス（ＵＮＩＸ）（登録商標）オペレーティングシステム、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）（登録商標）ウィンドウズ（登録商標）オペレーティングシステム、ＢＳＤオペレーティングシステム等の任意の適するオペレーティングシステムが使用され得る。他の実施も可能である。
【０１４５】
コンピュータ・システム１１００の要素について、更に詳細に以下に説明する。特に、ネットワーク・インターフェース１１１６は、コンピュータ・システム１１００と、イーサネット（Ｅｔｈｅｒｎｅｔ）（登録商標）（例えば、ＩＥＥＥ８０２．３）ネットワーク、バックプレーン等の任意の広範囲のネットワークとの間の通信を提供する。大容量ストレージ１１１８は、上記で識別された各計算システムによって実施される上記プロセスおよび特徴を実行するためのデータおよびプログラミング命令の永続的な記憶を提供し、一方、システム・メモリ１１１４（例えば、ＤＲＡＭ）は、プロセッサ１１０２によって実行される場合、データおよびプログラミング命令の一時的な記憶を提供する。Ｉ／Ｏポート１１２０は、コンピュータ・システム１１００に結合され得る追加の周辺デバイス間に通信を提供する１つまたは複数のシリアルおよび／またはパラレル通信ポートとし得る。
【０１４６】
コンピュータ・システム１１００は、様々なシステムアーキテクチャを含み得、コンピュータ・システム１１００の様々な構成要素は再構成され得る。例えば、キャッシュ１１０４は、プロセッサ１１０２と共にオンチップであり得る。代替的には、キャッシュ１１０４およびプロセッサ１１０２は、「プロセッサモジュール」として一緒にパッケージされ得、プロセッサ１１０２は「プロセッサコア」と呼ばれる。更に、本発明の特定の実施形態は、上記構成要素の全てを必要とせず、且つ含まないことがある。例えば、標準Ｉ／Ｏバス１１０８に結合された周辺デバイスは、高性能Ｉ／Ｏバス１１０６に結合し得る。加えて、幾つかの実施形態では、単一のバスのみが存在し得、コンピュータ・システム１１００の構成要素は単一のバスに結合される。更に、コンピュータ・システム１１００は、追加のプロセッサ、記憶デバイス、またはメモリ等の追加の構成要素を含み得る。
【０１４７】
一般に、本明細書に記載されるプロセスおよび特徴は、オペレーティングシステムの一環としてまたは特定のアプリケーション、構成要素、プログラム、オブジェクト、モジュール、または「プログラム」と呼ばれる一連の命令として実施され得る。例えば、１つまたは複数のプログラムが、本明細書に記載される特定のプロセスの実行に使用され得る。プログラムは通常、１つまたは複数のプロセッサによって読み取られて実行されると、本明細書に記載されるプロセスおよび特徴を実行する動作をコンピュータ・システム１１００に実行させる、コンピュータ・システム１１００内の様々なメモリおよび記憶デバイス内の１つまたは複数の命令を含む。本明細書に記載されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア（例えば、特定用途向け集積回路）、またはそれらの任意の組合せで実施され得る。
【０１４８】
一実装形態では、本明細書に記載されるプロセスおよび特徴は、個々にまたは分散計算環境で集合的にコンピュータ・システム１１００によって実行される一連の実行可能モジュールとして実施される。上記モジュールは、ハードウェア、コンピュータ可読媒体（またはマシン可読媒体）に記憶された実行可能モジュール、または両方の組合せによって実現され得る。例えば、モジュールは、プロセッサ１１０２等のハードウェアシステム内のプロセッサによって実行される複数または一連の命令を含み得る。まず、一連の命令は、大容量ストレージ１１１８等の記憶デバイスに記憶され得る。しかし、一連の命令は、任意の適するコンピュータ可読記憶媒体に記憶することができる。更に、一連の命令は、ロ
ーカルに記憶される必要はなく、ネットワーク・インターフェース１１１６を通じて、ネットワーク上のサーバ等のリモート記憶デバイスから受信することができる。命令は、大容量ストレージ１１１８等の記憶デバイスからシステム・メモリ１１１４にコピーされ、次に、プロセッサ１１０２によってアクセスされ実行される。様々な実装形態では、１つまたは複数のモジュールは、並列処理環境での複数のサーバ等の１つまたは複数のロケーションにある１つまたは複数のプロセッサによって実行することができる。
【０１４９】
コンピュータ可読媒体の例としては、揮発性メモリデバイスおよび不揮発性メモリデバイス等の記録可能型媒体、固体状態メモリ、フロッピー（登録商標）および他のリムーバブルディスク、ハードディスクドライブ、磁気媒体、光ディスク（例えば、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ））、他の同様の非一時的（または一時的）有形（または非有形）記憶媒体、またはコンピュータ・システム１１００によって実行されて、本明細書に記載されるプロセスおよび特徴の任意の１つまたは複数を実行する一連の命令の記憶、符号化、または搬送に適する任意のタイプの媒体が挙げられるが、これらに限定されない。
【０１５０】
説明のため、説明の完全な理解を提供するために、多くの特定の詳細が記載されている。しかし、これらの特定の詳細なしで本開示の実施形態が実施可能なことが当業者には明らかである。幾つかの場合、説明を曖昧にしないように、モジュール、構造、プロセス、特徴、およびデバイスがブロック図の形態で示されている。他の場合、機能ブロック図および流れ図は、データおよび論理フローを表すために示されている。ブロック図および流れ図（例えば、モジュール、ブロック、構造、デバイス、特徴等）の構成要素は、本明細書に明示的に記載され示される以外の方法で様々に組み合せられ、分離され、除去され、記録され、置換され得る。
【０１５１】
本明細書での「一実施形態」、「実施形態」、「他の実施形態」、「一連の実施形態」、「幾つかの実施形態」、「様々な実施形態」等への参照は、その実施形態に関連して説明された特定の特徴、設計、構造、または特性が、本開示の少なくとも一つの実施形態に含まれることを意味する。例えば、本明細書での様々な箇所での「一実施形態において」または「実施形態において」という語句の出現は必ずしも、全てが同じ実施形態を指すわけではなく、他の実施形態と相互に排他的な別個または代替の実施形態であるわけでもない。更に、「実施形態」等の明示的な参照があるか否かに関係なく、様々な特徴が記載され、様々な特徴は、様々に組合せられ得、幾つかの実施形態に含まれ得るが、他の実施形態では様々に省かれることもできる。同様に、幾つかの実施形態では好ましいか、または必要とされ得るが、他の実施形態ではそうではない様々な特徴が記載されている。
【０１５２】
本明細書で使用される用語は主に、読みやすさおよび教示を目的として選択され、本発明の主題を描写するか、または限定するために選択されていない。したがって、範囲がこの詳細な説明によってではなく、本明細書に基づく出願に対して発行される任意の特許請求の範囲によって限定されることが意図される。したがって、本発明の実施形態の開示は、範囲の限定ではなく例示を意図し、範囲は以下の特許請求の範囲に記載される。
【図１】
0006310071.tif 000002
【図２】
0006310071.tif 000003
【図３Ａ】
0006310071.tif 000004
【図３Ｂ】
0006310071.tif 000005
【図３Ｃ】
0006310071.tif 000006
【図３Ｄ】
0006310071.tif 000007
【図４】
0006310071.tif 000008
【図５】
0006310071.tif 000009
【図６】
0006310071.tif 000010
【図７】
0006310071.tif 000011
【図８】
0006310071.tif 000012
【図９】
0006310071.tif 000013
【図１０】
0006310071.tif 000014
【図１１】
0006310071.tif 000015