最適なシステム性能のために、ノードをクラスタリングし、ノードをコンピューティング・リソースに対してマッピングするべく、コンピュータに実装された方法、システム、およびコンピュータ読取可能な媒体は、一実施形態において、複数のノードに関連付けられる分類を識別し得る。分類は、分類の間のエッジの重みに基づいて、第1のレベルのコミュニティへグループ化され得る。第1のレベルのコミュニティは、第1のレベルのコミュニティ間のエッジの重みに基づいて、第2のレベルのコミュニティへグループ化され得る。複数のノードのソート済みリストは、分類、第1のレベルのコミュニティ、および第2のレベルのコミュニティに基づいて生成され得る。一意の識別子(ID)は、複数のノードのソート済みリストに対して順次に割り当てられ得る。
一実施形態において、複数のノードは、ソーシャル・ネットワーキング・システムのユーザに関連付けられている。
一実施形態において、複数のノードは、人、人以外、組織、コンテンツ、イベント、ウェブ・ページ、通信、オブジェクト、およびコンセプトのうちの少なくとも1つに関連付けられている。
一実施形態において、分類は、複数のノードに関連付けられている少なくとも1つの属性を表し得る。
一実施形態において、属性は、地理的ロケーションを含む。
一実施形態において、複数のノードのノード間のつながりは、エッジの重みに関連付けられている。
一実施形態において、エッジの重みは、つながりの数に基づく。
一実施形態において、エッジの重みは、つながりの強さに基づく。
一実施形態において、つながりは、複数のノードのノード間の共有される特性を表す。
一実施形態において、エッジの重みは、共有される特性を考慮する。
一実施形態において、第1の共有される特性は、第2の共有される特性とは異なる重み付けをされる。
一実施形態において、複数のノードのソート済みリストの生成は、第2のレベルのコミュニティによって複数のノードをソートすることを備える。
一実施形態において、複数のノードのソート済みリストの生成は、第1のレベルのコミュニティによって複数のノードをソートすることを備える。
一実施形態において、複数のノードのソート済みリストの生成は、分類によって複数のノードをソートすることを備える。
一実施形態において、共有される特性を有するノードは、共有される特性を有しないノードに対して割り当てられる一意のIDよりも数値的に近い一意のIDを割り当てられる。
一実施形態において、コミュニティに対するより低いレベルにおけるコミュニティは、より低いレベルの各々におけるコミュニティ間のエッジの重みに基づいて、より高いレベルにおいて反復してグループ化され得る。複数のノードのソート済みリストは、より高いレベルにおけるコミュニティにさらに基づいて生成され得る。
一実施形態において、複数のノードに関連付けられている既存のIDは、一意のIDに対してマッピングされ得る。
一実施形態において、第1のレベルのコミュニティへの分類のグループ化は、コミュニティ内のつながりの数およびつながりの強さのうちの少なくとも1つを最大化すること、およびコミュニティ間のつながりの数およびつながりの強さのうちの少なくとも1つを最小化することを備える。
本発明の多くの他の特徴および実施形態は、添付の図面から、および下記の詳細な説明から、明らかとなるであろう。
図は、本発明の様々な実施形態を例示の目的のためだけに描くものであり、図は、同様の要素を識別するために同様の参照符号を使用する。図において例示される構造および方法の代替的な実施形態が、本明細書において説明される本発明の原理から逸脱することなく採用され得ることを、当業者は下記の議論から容易に認識するであろう。
ソーシャル・グラフなどのノード・グラフは、非常に多数のノードおよびノード間のつながり(またはエッジ)を含み得る。ノードの数は、例えば、数億単位または数十億単位になり得る。ネットワーク化されたコンピュータ・システムによって実装されるソーシャル・ネットワーキング・システムを用いる場合などの、多くの場合において、ユーザは、膨大な量の情報にアクセスし、膨大な量の情報を他のユーザと共有することが可能である。そのような膨大な量のデータを記憶および提供することは、多くの課題を提示する。こうした課題は、例えば、分散システムにわたるノード・グラフをどのようにパーティションに分けるかを決定する際に伴われる著しい計算要件およびメモリ要件を含み得る。例えば、分散システムに対してクエリ(または要求)を実行することは、多数のマシンに対するクエリを潜在的に必要とし得る。クエリのこの「ファン・アウト」は、クエリ応答時間を遅延させ得るだけでなく、ネットワークへの過度の負担も課し得る。
分散システム全体のノード・グラフ情報のパーティション分けは、ネットワークの計算速度およびネットワークへの負担に対して大きな影響を有し得る。例えば、どこにユーザ情報が記憶されるか(例えば、どのマシン)、および、どのようにユーザ情報がアクセスまたは記憶されるか(例えば、永続メモリまたは高速メモリ)は、計算の量および計算の速度に著しく影響し得る。本明細書において説明されるシステムおよび方法の実施形態は、分散システム全体のノード・グラフを最適な手法でパーティションに分けるために使用され得る一意のIDの生成に関する。例えば、一意のIDは、ノードをノードの関係に基づいてクラスタリングし、これらのクラスタが同じマシンに対して局所的になる傾向を強める手法で生成され得る。
計算性能およびネットワーク性能は、マシンが受信するトラフィックの量によって影響を及ぼされ得る。使用パターンは、マシンへ課される負荷の量を変動させ得る。本明細書において説明されるシステムおよび方法の実施形態は、マシン全体のそのような負荷を管理および分散させることにも関する。これは、例えば、クラスタに関連する使用パターン
およびマシンの負荷への使用パターンの対応する効果を決定し、より良好に負荷を分散する手法でクラスタをマシンに対して再割り当てすることを含み得る。
図1は、一実施形態に係る例示的なクラスタリング・モジュール100を例示する。クラスタリング・モジュール100は、識別モジュール102と、マッピング・モジュール104とを含む。クラスタリング・モジュール100は、ソーシャル・ネットワーキング・システムの一部など、ネットワーク化されたコンピュータの分散システムの一部として実装され得る。本明細書において、この図および全ての図において示される構成要素は、例示に過ぎず、他の実装は、付加的な構成要素、より少ない構成要素、または異なる構成要素を含んでもよい。いくつかの構成要素は、関連する細部を不明瞭にしないように、図示されないことがある。
識別モジュール102は、ノード・グラフのノードに対して割り当てられるべき一意の識別子(ID)を生成し得る。一実施形態において、ノードは、ソーシャル・ネットワーキング・システムのユーザに対して関連付けられ得る。一実施形態において、ノードは、例えば、人、人以外、組織、コンテンツ(例えば、画像、動画、オーディオ等)、イベント、ウェブ・ページ、通信、オブジェクト、コンセプト、または、具体的であれ、抽象的であれ、ノードとして表され得る任意の他の物、観念、もしくは構築物に対して関連付けられ得る。一意のIDは、まず、各ノードについての分類を決定することによって生成され得る。一実施形態において、分類の決定は、任意の属性(または複数の属性)に基づき得る。例えば、属性は、地理的ロケーション(例えば、居住都市)に関連し得る。一実施形態において、分類の決定は、本明細書においてより詳細に説明されるように、ノード間のエッジの重みに基づかない。
分類は、次に、分類間で定義されるエッジの重みに基づいて、より高いレベルのコミュニティへグループ化され得る。一定の実施形態において、エッジの重みは、分類間のつながりの数、分類間のつながりの強さ、または、これらもしくは他の要因の組み合わせに基づき得る。結果として得られるコミュニティは、さらに高いレベルのコミュニティへ再度反復してグループ化され得る。さらに高いレベルのコミュニティへのこうしたグループ化も、コミュニティ間のエッジの重みに基づき得る。ノードは、次いで、本明細書においてより詳細に議論されるように、分類および全てのレベルのコミュニティによってソートされ、その後、数値が連続するように一意のIDを割り当てられ得る。
一実施形態において、つながりは、任意のタイプのアクティビティ、対話、共通の興味、または、分類間およびコミュニティ間で共有される他の特性を表し得る。エッジの重みは、共有される特性を異なった方法で考慮し得る。例えば、第1のタイプの共有される特性は、第2のタイプの共有される特性よりも、2つの分類間または2つのコミュニティ間のより強い関係を反映し得る。そのため、それらの相対的な重要度に基づいて、第1のタイプの共有される特性は、第2のタイプの共有される特性よりも重く重み付けをされ得る。したがって、エッジの重みは、様々なタイプの共有される特性の相対的な重要度を反映し得る。共有される特性に関連付けられている値は、本明細書においてより詳細に議論されるように、係数によって表されてもよい。
マッピング・モジュール104は、全てのノードについての一意のIDのセット(「一意のID空間」とも称される)を利用して、ネットワーク化されたコンピュータ・システムにわたるノード・グラフをパーティションに分け得る。一実施形態において、一意のID空間は、ネットワーク化されたコンピュータ・システムのデータベース・サーバに対してノードをマッピングするために使用され得る。別の実施形態において、一意のID空間は、ネットワーク化されたコンピュータ・システムのキャッシュ・システムに対してノードをマッピングするために使用され得る。
マッピング・モジュール104は、一意のID空間をパーティションの数によって分割し(またはセグメント化し)、その分割部分に基づいて、ネットワーク化されたコンピュータ・システムのマシンに対してノードをルーティングし得る。一実施形態において、これらの分割部分は、分割部分ごとに同じ数の一意のIDを有するように、一定の場合において等しく重み付けをされ得る。別の実施形態において、分割部分は、等しく重み付けをされなくてもよい。マッピング・モジュール104は、ノードの関連付けられた一意のIDに基づいて、ノードをマシンに対してマッピングし得る。これは、近しくつなげられたノード(例えば、ユーザとユーザの友達)が、同じマシン(または、例えば、マシン・プールなどの、近しく関連付けられたマシンのグループ)上にクラスタリングされるという傾向をもたらす。一実施形態において、マッピング・モジュール104は、マシンに対する負荷を最適化するために、負荷分散検討事項を考慮してノードをマッピングする。
図2は、一実施形態に係る例示的な識別モジュール102を例示する。識別モジュール102は、元のノードの代わりに、分類の新たなグラフ(例えば、地理的ロケーション)を定義し得る。識別モジュール102は、分類決定モジュール202と、コミュニティ生成モジュール204と、ID割り当てモジュール206とを含み得る。分類決定モジュール202は、ノード・グラフのノードに関連する属性を識別し、その属性に基づいて、各ノードについての分類を決定し得る。属性は、任意の特徴またはコンセプトであってよく、ノードは、その特徴またはコンセプトに従ってグループ化され得る。一実施形態において、1つよりも多くの属性および属性の異なる組み合わせが、ノードを分類するために選択および使用され得る。
一実施形態において、属性は、関連付けられた都市、地域、郡、または他の地理的ロケーションなどの地理的関連性であり得る。各ノードは、その地理的関連性によって分類され得る。例えば、ソーシャル・グラフは、ユーザをノードとして、また、交友関係をノード間のつながり(またはエッジ)として含み得る。ユーザの属性は、関連付けられた都市(例えば、居住都市)であり得る。そのような場合において、各ユーザは、そのユーザに関連付けられた都市に基づいて分類され得る。都市または他の関連性に基づいて分類されたユーザは、ユーザのコミュニティを構成する。
ノード間のつながりと強く相関する属性は、コミュニティの決定を容易にし得る。例えば、ソーシャル・グラフの例において、地理的関連性は、交友関係と強く相関し得る。なぜなら、人々は、1つの地理的領域(例えば、都市)内で生活し、労働し、交際することが多い傾向があり、したがって、同じ地理的領域において他者と友達になる傾向を有するためである。したがって、本明細書においてより詳細に説明されるように、共通の地理的領域における友達は、コミュニティを形成し得る。別の例として、人口学的検討事項(例えば、年齢、民族、性別、宗教等)のうちのいずれか1つまたはいくつかは、ノード間のつながりと強く相関することが多い属性であり得る。この点に関して、類似した人口学的プロフィールを有する人は、友達であることが多い。したがって、人口学的検討事項は、コミュニティを決定する際に、人を分類するために使用され得る。コミュニティを決定する際におけるユーザの分類は、本明細書において例として明示的に説明される属性以外の属性に基づいてもよい。
ソーシャル・グラフについての例は、例示的なコンテキストを提供し、様々な実施形態の有効な(operative)原理を例示するために使用される。ソーシャル・グラフのこの例の議論は、限定としてみなされるべきではない。ソーシャル・グラフについてのこの例の基本的な原理およびコンセプトは、他の実施形態において、他のタイプのグラフ、ノード、つながり、属性等に適用可能であり得る。
分類決定モジュール202は、分類(例えば、都市)を新たなグラフのノードとして表し、分類間のエッジの重み(または値)を定義し得る。一定の実施形態において、エッジの重みは、分類間のつながりの数、分類間のつながりの強さもしくはタイプ、または、これらもしくは他の要因の組み合わせに基づき得る。一実施形態において、エッジの重みは、分類間のつながりの総数に基づいて決定され得る。例えば、2つの分類間のつながりが多くなればなるほど、それらのつながりを表すエッジの重みが大きくなるように、エッジの重みは、任意の2つの分類間のつながりの数に比例し得る。例えば、エッジの重みは、2つの分類間のつながりの数によって表されてもよい。例えば、100個のつながりは、100のエッジの重みをもたらし、200個のつながりは、200のエッジの重みをもたらす等である。分類間のエッジの重みに対して値を割り当てるための他の技法が、他の実施形態において使用されてもよい。
一実施形態において、エッジの重みは、分類間のつながり(または類似性)の強さまたは性質に基づいて決定され得る。例えば、2つの分類間の個々のつながりは、つながりの強さに基づいて割り当てられる変動する係数を有し得る。例えば、特色「A」(例えば、2人のユーザは結婚している)のつながりは、特色「B」(例えば、2人のユーザは同僚である)のつながりよりも強い(または、より重要な)つながりとしてみなされ得る。したがって、特色「A」とのつながりは、特色「B」とのつながりよりも大きい係数を割り当てられ得る。例えば、ソーシャル・グラフの例において、サンノゼ市のユーザは、サンフランシスコ市内の単なる知人との一定の数の交友関係を有し得るが、ロサンゼルス市において、ユーザが頻繁に通信する家族の一員、親しい友達、または友達たちとの等しい数の交友関係を有し得る。ユーザが頻繁に通信する家族の一員、親しい友達、または友達たちとのロサンゼルス市内における交友関係は、ロサンゼルス市内のより強い交友関係を反映するために、サンフランシスコ市内の交友関係よりも大きい係数値を割り当てられ得る。
一般に、ソーシャル・グラフ・データは、係数についての情報を、ソーシャル・グラフ内のノード間の関連性の尺度として含み得る。係数は、ソーシャル・グラフ内のノード間のつながり(または経路)についての重みを反映し得る。例えば、係数は、ユーザがそのユーザによって友達とされた別の人よりも、そのユーザの親友と親しいことを、彼らをつなげる経路のそれぞれの重みに基づいて示し得る。係数は、ソーシャル・ネットワーキング・システムの内部であれ、外部であれ、ノード間で取り得る多様な対話に基づき得る。ノードは、ユーザ、人々、ページ、またはソーシャル・グラフにおける任意のオブジェクトを含み得る。係数の決定は、方向性を有し、ソーシャル・グラフ内のノード間の関係、対話、または親しさなどの多くの要因に依存し得る。例として、1人のユーザ(例えば、ユーザA)の別のユーザ(例えば、ユーザB)に対する関連性の尺度は、ユーザAがユーザBと友達であるか、ユーザAがユーザBの写真に対してコメントしたか、ユーザAがユーザBのコンテンツまたは近況アップデートに対して「いいね!」を表明したか、ユーザAがユーザBのウォールに対して投稿したか、ユーザAがユーザBと同じスレッド上に存在したか、ユーザAがユーザBと同じ写真に写っているか、ユーザAがユーザBまたはユーザBのコンテンツに関与した状態で(または関与しない状態で)一定の時間(例えば、日数)が経過したか、ユーザAがユーザBのコメントにリンクしたか、ユーザAがユーザBのコンテンツを他者と共有したか、ユーザAがウォール・コメント中でユーザBに言及したか、ユーザAがユーザBのプロフィールまたは他のウェブ・ページを見たか等を含むが、これらに限定されない様々な検討事項に基づき得る。
ユーザBについてのユーザAの係数の決定に関する前述の例において、係数を通知する取り得る対話のうちの多くは、ユーザAのアクションに基づく。しかしながら、ユーザBのアクションを伴う他の対話も、ユーザBについてのユーザAの係数の決定において検討され得る。そのような対話は、ユーザBがユーザAの写真を見たか、ユーザBがユーザA
のアルバムを見たか、ユーザBがユーザAまたはユーザAのコンテンツに関与した状態で(または関与しない状態で)一定の時間(例えば、日数)が経過したか等などの、任意の多様なアクティビティを含み得る。さらに、係数の決定を通知する対話は、対話が発生した期間(例えば、過去30日間、60日間、90日間、または任意の他の適切な時間間隔)に基づき得る。係数は、そうした履歴期間内の対話の頻度ならびに他の要因にも基づき得る。
係数は、いくつかの例では、非対称的であり得る。例えば、一定の理由(例えば、プライバシー)のために、係数スコアは、動作中のユーザのアクションのみに基づいてもよい。一実施形態において、2方向係数スコアは、キャッシュ・シャーディングが使用パターンをより良好に反映するように計算され得る。
コミュニティ生成モジュール204は、分類間のエッジの重みに基づいて、第1のレベルにおけるコミュニティ内の分類をグループ化し得る。一実施形態において、コミュニティ検出アルゴリズムは、分類を入力として用いて実行され、分類(例えば、都市)が対応するコミュニティに対してマッピングされることをもたらす。例えば、一実施形態において、分類間に相対的に大きい値のエッジの重みを有する分類は、コミュニティ内のつながりの数またはつながりの強さを最大化し、コミュニティ間のつながりの数またはつながりの強さを最小化するように、1つのコミュニティにおいて共にグループ化され得る。
第1のレベルにおける分類のグループ化から結果として得られるコミュニティは、第1のレベルのコミュニティと称され得る。反復したグループ化が実行されて、より高いレベルにおけるコミュニティが生成され得る。例えば、コミュニティ検出アルゴリズムは、第1のレベルのコミュニティを入力として用いて実行され、第1のレベルのコミュニティをより高いレベルの第2のレベルのコミュニティへグループ化し得る。同様に、コミュニティ検出アルゴリズムは、第2のレベルのコミュニティを入力として用いて実行されて、第2のレベルのコミュニティをより高いレベルの第3のレベルのコミュニティへグループ化し得るなどである。この技法は、分類が第1のレベルのコミュニティへグループ化されること、第1のレベルのコミュニティが第2のレベルのコミュニティへグループ化されること、第2のレベルのコミュニティが第3のレベルのコミュニティへグループ化されること、および、第3のレベルのコミュニティが、またさらに他のより高いレベルのコミュニティへグループ化されることをもたらす。連続したレベルのコミュニティの各々におけるコミュニティは、そのコミュニティ内のつながりの数またはつながりの強さを最大化し、他のコミュニティとのつながりの数またはつながりの強さを最小化することによって決定され得る。
連続したレベルのコミュニティを生成するための反復したグループ化は、数において限定されない。一実施形態において、本技法は、n個のコミュニティ・レベルに対するマッピングを伴ってもよく、ここで、nは、分類およびコミュニティの最適なグループ化のために選択された任意の整数値であり得る。例えば、nの値は、2、3、または他の適切な数であってもよい。別の例として、nの値は、2または3以外の値であってもよい。
ソーシャル・グラフの例において、都市は、都市間のエッジの重みに基づいて、コミュニティへグループ化され得る(例えば、都市間の交友関係の数、都市間の交友関係の強さ、これら双方等)。結果として得られる第1のレベルのコミュニティは、同様の手法で第2のレベルのコミュニティへさらにグループ化され得る。結果として得られる第2のレベルのコミュニティは、同様の手法で第3のレベルのコミュニティへさらにグループ化され得るなどである。より高いレベルのコミュニティへの任意の回数の反復したグループ化が実行され得る。一定の実施形態において、元のノードに関連付けられた既存のID(例えば、ユーザID)は、分類および様々なレベルのコミュニティに対してマッピングされ得
る。
ノードを属性によって分類し、その後、ノードをコミュニティへグループ化するための作業用セットとして分類を使用することは、著しい利点を提供し得る。ソーシャル・グラフの例において、10億人のユーザにわたって関連付けられたノードに基づく作業用セットは、ユーザに関連付けられた750,000の都市の分類に基づく作業用セットへ低減され得る。作業用セットにおけるそのような低減は、一意のIDを決定するための計算時間を、例えば、数時間から数分へ著しく低減し得る。さらに、低減された作業用セットは、様々な適用例のために必要となる反復したグループ化の回数を著しく低減し得る。いくつかの例において、ノードの最適なクラスタリングを達成するための低減された作業用セットに基づく反復したグループ化の回数は、5回以下の反復であり得る。
ソーシャル・グラフの例において、ソーシャル・グラフは、約10億個のノードを含むことがあり、当該ノードは、約750,000の都市に関して分類され得る。都市が、都市間のエッジの重み(例えば、つながりの数)に基づいてグループ化される場合、結果として得られる第1のレベルのコミュニティの数は、約2,000となり得る。第1のレベルのコミュニティが、それらの間のエッジの重みに基づいてさらにグループ化される場合、結果として得られる第2のレベルのコミュニティの数は、約60となり得る。さらに高いレベルにおいてコミュニティをグループ化するための後続の試行は、コミュニティの数における著しい低減を提供しないことがあり得る。
様々なレベルにおける、結果として得られるコミュニティは、地理的領域とある程度の対応関係を有し得るが、当該コミュニティは、交友関係に基づいてもよく、交友関係は、地理と強い相関関係を有し得る。コミュニティと地理的領域との間の対応関係は、厳格な対応関係である必要はない。例えば、互いに近接したいくつかの地理的領域は、それらの間に多くの交友関係または強い交友関係を有しなくてもよく、互いに離間したいくつかの地理的領域が、多くの交友関係または強い交友関係を有してもよい。地理的領域と交友関係との間の相関は、文化的要因、人口学的傾向、共通の興味または結びつき等などの幅広い検討事項に基づき得る。
ID割り当てモジュール206は、一意のIDをノードのソート済みリストに対して数値が連続するように割り当て得る。ノードは、友達が共にクラスタリングされる傾向があり、同じ分類を有し、同じコミュニティ内に収まる傾向があるようにソートされ得る。ID割り当てモジュール206は、分類および結果として得られるコミュニティによってノードをソートし得る。一実施形態において、ノードは、分類によってソートされ、次いで、第1のレベルのコミュニティによってソートされ、次いで、第2のレベルのコミュニティなどによって再度ソートされ得る。
一意のIDは、ノードのソート済みリストに対して割り当てられる(例えば、1から10億までの)数列であり得る。一般に、様々なレベルにおけるクラスタリングされたノードまたはコミュニティは、互いに数値的に近い一意のIDを有する。例えば、同じ分類を有するノードは、互いに数値的に近い一意のIDを有する。別の例として、同じ第1のレベルのコミュニティ内のノードは、互いに数値的に近い一意のIDを有する。同じ第2のレベルのコミュニティ内のノードは、互いに数値的に近い一意のIDを有する。同じ第3のレベルのコミュニティ内のノードは、互いに数値的に近い一意のIDを有する。「数値的に近い」という用語は、本明細書において広く使用され、ある数列の最初から最後までのあらゆる整数または値を含む、連続した数の厳格なシーケンスを有する一意のIDには限定されないことが認識されるべきである。例えば、数値的に近い一意のIDは、数値が連続する奇数、例えば、1、3、5、7、9などであってもよい。別の例として、数値的に近い数は、一連の非連続な奇数および偶数、例えば、1、2、4、5、7、8などであ
ってもよい。また別の例として、数値的に近い数は、本明細書において説明される技法によって決定されるような、ノードについての一意のIDのセットにおける値間の差異が、ノードについての別のタイプの既存のIDのセットにおける値間の差異よりも相対的に小さいことを示し得る。
したがって、一意のID空間は、友達、分類、およびコミュニティが互いに近い一意のIDを有するように構築され得る。一意のIDは、ネットワーク化されたコンピュータ・システム全体のマッピングのために分割され得る。一意のID空間が分割される場合、一意のID空間の分割部分は、様々なレベルにおける都市のクラスタおよびコミュニティのクラスタだけでなく、友達のクラスタも含む。いくつかの実施形態において、特定のレベルにおける都市または他のコミュニティは、パーティション間で分けられ得る。一般に、パーティション化は、本明細書においてより詳細に議論されるように、ファン・アウトに関連付けられた不都合を低減しつつ、局所性を改善し、システム性能を最適化し得る。
識別モジュール102は、新たなグラフの定義を更新し得る。識別モジュール102による、元のノードの代わりに分類に基づいた新たなグラフの定義は、より少ない更新を必要とし得る。ソーシャル・グラフの例において、都市間の交友関係の数または交友関係の強さは、かなり静的であることがあり、短期間で著しく変化しないことがあり得る。対照的に、ユーザに対する変化は、より頻繁に発生し得る。なぜなら、人々は、都市内で、移動し、新たな友達を作る等し得るためである。したがって、新たなグラフは、元のノードの代わりに分類に基づくので、識別モジュール102は、ユーザに関連付けられている基本的なデータにおける変化を考慮するために、相対的により少ない更新を実行することが必要とされ得る。様々な実施形態において、識別モジュール102は、様々な間隔で(例えば、毎週、毎月、3か月ごとに、6か月ごとに、または他の適用可能な期間ごとに)、または、一定のイベント(例えば、都市間もしくはコミュニティ間のエッジの重みにおける閾値変化)の発生時に、新たなグラフを更新し得る。
図3A〜図3Dは、一実施形態に係る例示的なマッピング・テーブルを例示する。例示的なマッピング・テーブルは、ソーシャル・グラフに関して説明される。しかしながら、このテーブルに関係して議論される基本的なコンセプトは、任意の単一のソーシャル・グラフまたはその特定の特徴に限定されない。
図3Aにおいて、テーブル300は、12人のユーザ(例えば、ノード)を列挙するユーザ列を含む。明確さおよび簡潔さのために、12人のユーザのみが、例示的な目的のために示される。生成されるマッピング・テーブルは、数百万人、数十億人、または任意の数のユーザを含み得ることが認識されるべきである。一実施形態において、ユーザ列は、各ユーザについて前もって割り当てられた既存のID(例えば、ユーザID)を表し得る。既存のIDは、次いで、L1列内の分類(例えば、都市)ならびにC1列およびC2列におけるコミュニティに対して適切にマッピングされ得る。
L1列は、ユーザの関連付けられた都市を表す。都市は、ユーザの居住地を表し得る。例えば、ユーザ1〜12の各々は、そのユーザの関連付けられた都市、例えば、ニューヨーク市(NY)、サンフランシスコ市(SF)、サンディエゴ市(SD)、ロサンゼルス市(LA)、またはニュージャージー市(NJ)のいずれかの隣に示される。
C1列は、都市間に定義されるエッジの重みに基づいた(例えば、都市間の交友関係の数、都市間の交友関係の強さ等に基づいた)、都市のグループ化に由来する第1のレベルのコミュニティを表す。一実施形態においては、第1のレベルのコミュニティ内の交友関係の数(または強さ)を最大化し、第1のレベルのコミュニティ間の交友関係の数(または強さ)を最小化するために、第1のレベルのコミュニティは、都市間でより大きい数(
または強さ)の交友関係を有する都市が共にグループ化されるように選択される。図示されるように、NYは、第1のレベルのコミュニティ「1」内として列挙され、SFは、第1のレベルのコミュニティ「2」内として列挙され、SDおよびLAは、第1のレベルのコミュニティ「3」内として列挙され、NJは、第1のレベルのコミュニティ「4」内として列挙される。図示される実施形態において、LAおよびSDは、それらの間に相対的に大きい数の交友関係を有することがあり、LAとSDとが同じ第1のレベルのコミュニティ内にグループ化されることをもたらす。
C2列は、第1のレベルのコミュニティ間で定義されるエッジの重みに基づいた(例えば、第1のレベルのコミュニティ間の交友関係の数、第1のレベルのコミュニティ間の交友関係の強さ等に基づいた)、第1のレベルのコミュニティのグループ化に由来する第2のレベルのコミュニティを表す。一実施形態において、第2のレベルのコミュニティ内の交友関係の数(または強さ)を最大化し、第2のレベルのコミュニティ間の交友関係の数(または強さ)を最小化するために、第2のレベルのコミュニティは、それらの間で大きい数(または強さ)の交友関係を有する第1のレベルのコミュニティが共にグループ化されるように選択される。図示される実施形態において、NYおよびNJは、同じ第2のレベルのコミュニティ「1」内に収まり、SF、SD、およびLAは、同じ第2のレベルのコミュニティ「2」内に収まる。
都市および結果として得られるレベルのコミュニティは、次いで、ソートされ、都市および結果として得られるレベルのコミュニティに基づいた、ユーザ(またはユーザID)のソート済みリストをもたらし得る。例えば、マッピング・テーブル300内のユーザは、都市(L1列)、第1のレベルのコミュニティ(C1列)、および第2のレベルのコミュニティ(C2列)によってソートされ得る。コミュニティは、交友関係に関連付けられているエッジの重みに基づいてグループ化されているため、友達は、共にクラスタリングされ、または、共にクラスタリングされる傾向を有する。
図3Bは、ユーザが都市(L1列)によってソートされた後のマッピング・テーブル300を示す。図示されるように、LAのユーザは、チャートの最上部において最初に列挙され、都市NJ、NY、SD、および、次いで、SFがその後に続く。
図3Cは、ユーザが第1のレベルのコミュニティ(C1列)によってソートされた後のマッピング・テーブル300を示す。図示されるように、第1のレベルのコミュニティ「1」におけるユーザは、チャート200の最上部において最初に列挙され、第1のレベルのコミュニティ「2」、「3」、および、次いで、「4」におけるユーザがその後に続く。
図3Dは、ユーザが第2のレベルのコミュニティ(C2列)に基づいてソートされた後のマッピング・テーブル300を示す。図示されるように、第2のレベルのコミュニティ「1」におけるユーザは、チャート200の最上部において最初に列挙され、第2のレベルのコミュニティ「2」におけるユーザがその後に続く。
ソート手続きの結果として、ユーザ1〜12は、都市、第1のレベルのコミュニティ、および第2のレベルのコミュニティによってソートされる。例えば、第2のレベルのコミュニティ「2」内の全てのユーザは、互いに数値的に近い(例えば、ユーザ2、6、8、11、4、7、1、3、および12)。さらに、第2のレベルのコミュニティ「2」内において、第1のレベルのコミュニティ「2」内の全てのユーザは、互いに数値的に近い(例えば、ユーザ2、6、8、および11)、第1のレベルのコミュニティ「3」内の全てのユーザは、互いに近い(例えば、ユーザ4、7、1、3、および12)。またさらに、第1のレベルのコミュニティ「2」内において、都市「SF」内の全てのユーザは、互い
に近い(例えば、ユーザ2、6、8、および11)。第1のレベルのコミュニティ「3」内において、都市「LA」内の全てのユーザは、互いに近い(例えば、ユーザ4および7)し、都市「NY」内の全てのユーザは、互いに近く(例えば、ユーザ1)、都市「SD」内の全てのユーザは、互いに近い(例えば、ユーザ3および12)。この同じパターンは、第2のレベルのコミュニティ「1」内の全てのユーザにも当てはまる。
このように、識別モジュール102が、一意のIDをユーザのソート済みリストに対して数値が連続するように割り当てる場合、同じ都市内のユーザおよび結果として得られるレベルのコミュニティは、互いに数値的に近い一意のIDを有する。例えば、図3Dにおけるテーブル300は、分類、第1のレベルのコミュニティ、および第2のレベルのコミュニティによってソートされたユーザに対して数値が連続するように割り当てられた一意のIDを列挙するUQ_ID列を含む。図示されるように、同じ分類を有するか、または同じコミュニティ内に収まるユーザは、互いに近く、したがって、互いに数値的に近い一意のIDを有する。このようにしてノードを一意に識別することは、本明細書において説明されるように、システム性能を改善し、計算リソースを最適化する観点からすると、有益または有利であると判明し得る。コミュニティは、例によっては、地理的構成要素を有し得るが、例によっては、コミュニティは、地理的構成要素を有しないこともあり得ることが認識されるべきである。図3A〜図3Dにおいて、例えば、ユーザ1およびユーザ5は、どちらもNYに関連付けられているが、異なる第1のレベルのコミュニティ内に存在する。ユーザ1は、例えば、第1のレベルのコミュニティ「3」において多数の友達を有していることがあり、その結果、第1のレベルのコミュニティ「3」内にグループ化される。他方で、ユーザ5は、第1のレベルのコミュニティ「1」において多数の友達を有していることがあり、その結果、第1のレベルのコミュニティ「1」内にグループ化される。
いくつかの実施形態において、ソート技法は異なり得る。例えば、分類およびあらゆるレベルのコミュニティに基づいてソートする代わりに、ユーザは、分類またはコミュニティのレベルの任意の組み合わせに基づいて、選択的にソートされてもよい。例えば、ユーザは、最も高いレベルのコミュニティ(例えば、第2のレベルのコミュニティ)のみに基づいてソートされてもよい。その結果、一意のIDは、そのようなソートに基づいて割り当てられ得る。別の例として、一意のIDが割り当てられる前に、2つの最も高いレベルのコミュニティのみ(例えば、第1のレベルのコミュニティおよび第2のレベルのコミュニティ)がソートされてもよい。
図4は、一実施形態に係る、分類402、第1のレベルのコミュニティ403、および第2のレベルのコミュニティ404に対して割り当てられたノード401の例示的な樹形図400を例示する。樹形図400は、任意の適切な数X1個のノードを含み得る。図示される例では、各ノード401から対応する分類402への線によって表されるように、10億個のノード401は、分類402によってグループ化されている。ノードに関連付けられている任意の適切な数X2個の分類が決定され得る。図示される例では、地理的ロケーション(例えば、都市)を表す750,000個の分類402が、ノード401に対して関連付けられている。分類402の各々は、各分類から対応する第1のレベルのコミュニティへの線によって表されるように、第1のレベルのコミュニティ403内にグループ化される。任意の適切な数X3個の第1のレベルのコミュニティ403が決定され得る。図示される例では、2,000個の第1のレベルのコミュニティ403が、分類402に対して関連付けられている。さらに、第1のレベルのコミュニティ403の各々は、各第1のレベルのコミュニティから対応する第2のレベルのコミュニティへの線によって表されるように、第2のレベルのコミュニティ404内にグループ化される。任意の適切な数X4個の第2のレベルのコミュニティが決定され得る。図示される例では、60個の第2のレベルのコミュニティ404が、第1のレベルのコミュニティ403に対して関連付
けられている。樹形図400は、同じ分類を有し、かつ、同じコミュニティ内に収まるノード401が共にクラスタリングされ、したがって、分類402、第1のレベルのコミュニティ403、および第2のレベルのコミュニティ404に基づいてソート化されて構築されるように構築される。このように、一意のIDは、ノード401に対して最初から最後まで(例えば、左から右へ)数値が連続するように割り当てられ得る。同じ分類を有するか、または同じコミュニティ内に収まるノードは、互いに数値的に近い一意のIDを有する。図4においてX1、X2、X3、およびX4について示される値は例示であることが認識されるべきである。任意の適切な数が、異なる実施形態において実装され得る。
図5は、一実施形態に係る、一意のIDをノード・グラフのノードに対して割り当てる例示的なプロセスを例示する。図1〜図4についての上記議論は、図5のプロセスにも当てはまり得ることが認識されるべきである。簡潔さおよび明確さのために、図5に対して適用可能なあらゆる特徴および機能は、ここでは繰り返し説明されない。
ブロック502において、ノード・グラフ内のノードが識別され得る。一実施形態において、例えば、ノードは、ソーシャル・グラフ内のユーザに対して関連付けられ得る。ブロック504において、ノードについての1つまたは複数の属性が識別され得る。属性は、ノードに、またはノード間のつながりに関連し得る。ブロック506において、各ノードについての分類が、属性に基づいて生成され得る。1つの実施形態において、属性は、地理的関連性(例えば、都市との関連)であってもよく、ノードは、当該ノードが関連付けられている地理的ロケーション(例えば、居住都市、勤務都市または経営都市等)によって分類され得る。分類は、分類間で定義されたエッジの重みを有する、新たなグラフのノードとしてみなされ得る。一実施形態において、エッジの重みは、ノード間のつながりの数に基づき得る。一実施形態において、エッジの重みは、つながりの強さに基づいてもよく、つながりの強さは、係数によって表され得る。一実施形態において、ブロック502、504、および506は、図2の分類決定モジュール202によって実行され得る。
ブロック508において、分類(例えば、関連付けられた都市)は、分類間で定義されたエッジの重みに基づいて(例えば、分類間のつながりの数または強さに基づいて)、コミュニティへグループ化され得る。グループ化は、分類から第1のレベルのコミュニティへのマップを提供し得る。ブロック510において、別のレベルのコミュニティへの付加的なグループ化が実行されるべきかが決定される。付加的なグループ化が実行されるべきである場合、ブロック510からブロック508への矢印によって表されるように、ブロック508に由来する第1のレベルのコミュニティは、第1のレベルのコミュニティ間のエッジの重みに基づいて(第1のレベルのコミュニティ間のつながりの数、または第1のレベルのコミュニティ間のつながりの強さに基づいて)グループ化される。このプロセスは、より高いレベルのコミュニティへの任意の付加的なグループ化について同様に繰り返され得る。より高いレベルのコミュニティへの付加的なグループ化が実行されるべきではない場合、ブロック512において、(ブロック502からの)ノードは、分類および結果として得られるレベルのコミュニティのソートに基づいてソートされる。ノードは、友達がソート済みリスト内で共にクラスタリングされる傾向にあり、さらに、同じ分類を有し、同じコミュニティ内に収まる傾向があるようにソートされる。
ブロック514において、一意のIDは、ノードのソート済みリストに対して数値が連続するように割り当てられる。このように、つながり(例えば、交友関係)を有するノード(例えば、ユーザ)は、同じ分類で、同じコミュニティ内で共にクラスタリングされる傾向があり、したがって、互いに数値的に近いIDを有する。一実施形態において、ブロック508および510は、図2のコミュニティ生成モジュール204によって実行され得る。さらに、一実施形態において、ブロック512および514は、図2のID割り当てモジュール206によって実行され得る。
分類およびより高いレベルのコミュニティは、必ずしも分類内においてきめ細かい粒の情報を提供するとは限らないことがある。例えば、ユーザのソート済みリストは、必ずしも都市内の友達のサブ・コミュニティが一意のID空間内で互いに連続的に近くなるようにソートされるとは限らないことがある。都市のサブ・コミュニティは、例えば、ユーザ間に大きい数のつながりを有する郊外に対して関連付けられ得る。
一実施形態において、ノードのサブ・コミュニティは、分類内で識別され得る。例えば、サブ・コミュニティについての分類は、本明細書において議論されるものと同様の手法で導かれ得る。次いで、ノードは、例えば、ノード間のつながりの数または強さに基づいて、分類内でサブ・コミュニティへグループ化され得る。付加的なレベルのサブ・コミュニティも、反復して計算され得る。次いで、ノードのソート済みリストは、分類およびサブ・コミュニティ(および、より高いレベルのコミュニティ)によってノードをソートすることによって生成され得る。次いで、一意のIDは、ノードのソート済みリストに対して数値が連続するように割り当てられ得る。このように、つながりを有するノードのサブ・コミュニティは、共にクラスタリングされる傾向がある。
識別モジュール102によって実行される技法に基づいて、ノードを一意に識別することは、様々な状況において利点を提供し得る。例えば、識別モジュール102によって一意のIDを生成し、割り当てることは、情報が記憶のために圧縮され得る手法を改善し得る。ネットワーク化されたコンピュータ・システムは、アクセスするには時間がかかるが、大きい記憶容量を有するメイン・メモリを含み得る。この理由のため、圧縮は、メイン・メモリ管理に関する重要な検討事項ではないことがある。しかしながら、ネットワーク化されたコンピュータ・システムのメモリ階層は、処理速度を強化するためにより多くアクセスされ得る、より高速なメモリを実装することも多い。より高速なメモリ技術は、より高価になる傾向があるため、メモリの大きさが限定されることが多く、その結果、圧縮技法は、メモリ内に記憶され得るデータの量を最大化するために、より重要な役割を果たす。デルタ符号化は、識別モジュール102によって生成され、割り当てられる一意のID空間から利益を享受し得る1つの圧縮技法である。
例えば、ユーザの友達リストは、既存のユーザID200、3,000、および30,000を含み得る。一般には、友達リストをデルタ符号化するために、友達のユーザIDは、最小の値から最大の値へソートされる。先行するユーザID値は、先行するユーザIDを有しない最小のユーザIDを除いて、各ユーザIDから減算される。デルタ符号化されたリストは、下記を含み得る:200、2800および27,000。値2800は、3000から200を減算することによって導かれ、値27,000は、30,000から3,000を減算することによって導かれた。本思想は、デルタ符号化によって、記憶するのにより少ないビットしか必要としない、より小さい数字を生成することである。しかしながら、図示されるように、潜在的なユーザID値の大きなセットを扱う場合、ユーザID値間の差異は、相対的に大きい値となり得る。
一意のIDは、つながりに基づいてノードをクラスタリングする、ノード(例えば、ユーザ)のソート済みリストに対して数値が連続するように割り当てられるため、つながり(例えば、交友関係)を有する多くのノード(例えば、ユーザ)は、ソート済みリスト内で共にクラスタリングされ、最終的には、互いに連続的に近い一意のIDを割り当てられる。そのため、ユーザID200、3,000および30,000を有する同じ友達は、1,001、1,003および1010などの、識別モジュール102によって割り当てられた互いに連続的に近い一意のIDを有し得る。これらの一意のIDに対してデルタ符号化を適用することは、デルタ符号化値1,001、2および7をもたらす。これらのデルタ符号化値は、メモリ内に記憶するのに、より著しく少ないデータしか必要としない、
より著しく小さい値を提供する。
識別モジュール102によって実行される技法に基づいて、一意のIDを生成し、ノードに対して割り当てることは、ディスク、マシン、データベース・サーバ、およびデータ・センタを含む、ネットワーク化されたコンピュータ・システム全体に規模を拡大した巨大なグラフを分割する場合に、有益と判明し得る。
図6は、一実施形態に係る例示的なネットワーク化されたコンピュータ・システム600を例示する。ネットワーク化されたコンピュータ・システム600は、n個のデータベース・サーバ602と、データベース・サーバ602に関連付けられているn個のキャッシュ・システム604と、ウェブ・サーバ606と、ウェブ・サーバ606に関連付けられているキャッシュ・システム608とを含む。ここで、nは、ソーシャル・ネットワーキング・システムなどのコンピュータ・ネットワーク化されたシステム600をサポートするためのデータベース・サーバおよび関連付けられたキャッシュ・システムの任意の数である。データベース・サーバ602は、データベース・サーバ612、データベース・サーバ614、データベース・サーバ616、およびデータベース・サーバ618を含む。キャッシュ・システム604は、キャッシュ・システム622、キャッシュ・システム624、キャッシュ・システム626、およびキャッシュ・システム628を含む。データベース・サーバ612は、キャッシュ・システム622に関連付けられている。データベース・サーバ614は、キャッシュ・システム624に関連付けられている。データベース・サーバ616は、キャッシュ・システム626に関連付けられている。また、データベース・サーバ618は、キャッシュ・システム628に関連付けられている。データベース・サーバ602、キャッシュ・システム604、およびウェブ・サーバ606は、LAN、WAN、およびインターネットなどの、1つまたは複数のネットワークを通じて、互いに通信可能に結合され得る。データベース・サーバ602の各々は、単一のデータベース・サーバまたはデータ・センタを表し得る。ソーシャル・グラフなどのグラフのための情報は、データベース・サーバ602によって形成される永続メモリ層内に記憶され得る。
ソーシャル・グラフの例において、データベース・サーバ602は、そのソーシャル・グラフ内のユーザの全てについてのユーザ情報を含み得る。ユーザ情報は、例えば、ユーザ・プロフィール、画像、動画、投稿、近況アップデート、友達リスト、フィード、または、ソーシャル・グラフによってサポートされるソーシャル・ネットワーキング・システム上のユーザもしくはユーザのアクティビティに関連付けられている任意の他の情報に関連する情報を含んでもよい。特定のユーザについてのユーザ情報は、データベース・サーバ602の特定のデータベース・サーバ上に記憶され得る。ユーザは、ユーザの友達関係のいずれかに関わりなく、データベース・サーバ602のうちの1つに対してマッピングされ得る。例えば、ソーシャル・ネットワーキング・システムの新たなユーザは、ユーザがそのソーシャル・ネットワーキング・システムに加わった時に、データベース・サーバ602のうちのいずれが、そのユーザについてのデータを維持する容量を有するかに基づいて、データベース・サーバ602のうちの1つを割り当てられ得る。
一定の実施形態において、ユーザに関連付けられているユーザIDは、データベース・サーバ602のうちのいずれにユーザの情報が記憶されるべきかを示すために使用され得る。ユーザ情報が、所与のユーザについて望まれる場合、ユーザの情報を有する特定のデータベース・サーバは、ユーザの情報を取得するためにクエリを行われ得る。例えば、ユーザAが、ネットワーク化されたコンピュータ・システム600のウェブ・サーバ606に対してアクセスする場合、ウェブ・サーバ606は、ユーザAのユーザIDを識別し、そのユーザIDを使用して、ユーザAについてのユーザ情報がデータベース・サーバ614上に記憶されていると決定し得る。ユーザAについてのユーザ情報は、例えば、ユーザ
Aの友達の友達リスト、または、ユーザAについての他の情報を含んでもよい。
次いで、ユーザAの友達の各々についてのユーザ情報は、それぞれのデータベース・サーバ612、616、および618に対するクエリ632、636、および638によって表されるように、それぞれの友達についてのユーザ情報を有する各データベース・サーバに対してクエリを行うことによって取得され得る。それぞれのデータベース・サーバ612、616、および618の各々に対するクエリ632、636、および638は、ファン・アウト・クエリを表す。この例は、それぞれのデータベース・サーバ612、616、および618に対する3つの付加的なクエリ632、636、および638を示すが、ユーザAは、各友達について異なるデータベース・サーバに対するファン・アウト・クエリを潜在的に必要とする、データベース・サーバ602のうちの多くにわたって広がる著しく多数の友達(例えば、数百人または数千人の友達)を有し得る。この状況において、多数のファン・アウト・クエリは望ましくない。ファン・アウト・クエリは、性能(例えば、情報が取得される速度)を著しく減退させ、特に、極めて多数のノードおよびクエリを扱う場合に、過度な量のネットワーク・トラフィックを生成し得る。ファン・アウト・クエリに関連付けられている問題は、ユーザAの「友達の友達」(または、ユーザAからさらに大きい分離度を有する間接的な友達)についてのユーザ情報のクエリが実行される場合にさらに悪化する。ファン・アウト・クエリは、キャッシュ・システム604におけるメモリの過度な使用にも寄与し得る。
ネットワーク化されたコンピュータ・システム600は、データベース・サーバ602の永続メモリ層よりも高速なメモリ・アクセスを提供するために、データベース・サーバ602に関連して実装されるキャッシュ・システム604も含む。例えば、キャッシュ・システム604は、RAM内に、または、フラッシュ・メモリなどの他の形態の高速メモリ技術内に、キャッシュ層サービスを実装し得る。例えば、データまたは計算は、代替PHPキャッシュ(APC:Alternative PHP Cache)、メムキャッシュ(Memcache)等を使用してキャッシュされ得る。同様に、ウェブ・サーバ606も、データまたは計算をキャッシュ・システム608内にキャッシュし得る。ユーザAについてのユーザ情報に対するクエリが、所与のデータベース・サーバ614へ最初に送られる場合、例えば、ユーザ情報は、データベース・サーバ614から得られ、キャッシュ・システム624において記憶もされ得る。その後に、ユーザAについてのユーザ情報がキャッシュ・システム624内に残存する限り、ユーザAについてのユーザ情報に対する後続のクエリは、キャッシュ・システム624から、より迅速に得られ得る。しかしながら、ユーザAの友達についてのユーザ情報が、異なるデータベース・サーバ602上に記憶される場合、キャッシュ・システム604は、必ずしも、ファン・アウト・クエリの数に対して著しい低減を提供するとは限らない。
友達は、1つまたは複数のグループの友達の一部となる傾向があるため、友達が多くの共通の友達を有する強い傾向が存在する。友達、および友達の友達についてのユーザ情報を収集する場合、共通の友達のユーザ情報に対する多くのクエリが発生し得る。これらの友達が、異なるデータベース・サーバおよびキャッシュ・システム上に無作為に散在させられる場合、ファン・アウト・クエリが実行される。
一定の実施形態において、キャッシュ・システム604は、同じキャッシュ・システム内の友達をクラスタリングし、その結果、キャッシュ局所性を増加させるように構成され得る。共通のキャッシュ・システムに対して局所的である友達の数を増加させることは、共通の友達についての要求されたユーザ情報が、ユーザ情報についての過去のクエリによって既にキャッシュされている蓋然性を高め得る。このようにしてキャッシュ・ヒット率を増加させることは、たとえ共通の友達についてのユーザ情報が異なるデータベース・サーバ602内に記憶されている場合でも、ファン・アウト・クエリを低減する。そのため
、キャッシュ局所性およびキャッシュ・ヒット率を増加させることは、特に、極めて多数のノードおよびクエリを扱う場合に、性能における著しい利益、ネットワーク・トラフィックの低減等をもたらし得る。
図7は、一実施形態に係るマッピング・モジュールを例示する。マッピング・モジュール104は、パーティション分けモジュール702と、ルーティング・モジュール704と、負荷監視モジュール706と、一時的分散モジュール708とを含むものとして示される。パーティション分けモジュール702は、グラフがパーティションに分けられるべきパーティションの数を決定し得る。パーティションの数は、グラフ・データが分散されるべき物理マシン(例えば、データベース・サーバ602またはキャッシュ・システム604)の数に関連し得る。次いで、一意のID空間は、各パーティションについてのノードの数に基づいて分割され(またはセグメント化され)得る。
例えば、ノードによって表される10億人のユーザのソーシャル・グラフが、100個のキャッシュ・システムにわたってパーティションに分けられるべき場合、ユーザの数(例えば、10億人)は、パーティションの数(例えば、100)で除算されて、パーティションサイズ、すなわち、パーティションごとのユーザの数(例えば、パーティションごとに1千万人のユーザ)が提供される。したがって、一意のID空間は、パーティションサイズで除算されて、パーティションごとに1千万個の一意のIDがもたらされ得る。一意のID空間は、数値が連続しているため、各パーティションにおける1千万個の一意のIDは、互いに数値的に近い。そのため、一意のID空間内での都市およびコミュニティのクラスタリングは、数多くのマシンにわたるソーシャル・グラフのパーティションにおいて反映される。さらに、友達が一意のID空間内でクラスタリングされる傾向は、マシン対するグラフのパーティションにおいて反映される。この例において、パーティションサイズは等しく(例えば、パーティションごとに1千万人のユーザ)、マシンの各々に対して同じ数の一意のIDをもたらす。別の実施形態において、パーティションサイズは等しくなくてもよく、マシンに対する変動する数の一意のIDをもたらす。
ルーティング・モジュール704は、例えば、パーティション分けモジュール702について説明されたような、一意のID空間の分割およびパーティションに基づいて、ユーザをマシンに対してマッピングし得る。次いで、ルーティング・モジュール704は、マッピングに従って、ユーザをマシンへルーティングし得る。例えば、いくつかの例において、あるアプリケーションについてのパーティション(例えば、マシン)の数は既知であり、一意のID空間は、ユーザをマシンのキャッシュ層に対してマッピングするために、説明されたように分割され得る。一意のID空間は、異なる実施形態においては、均一にまたは不均一に分割され得る。例えば、一意のID空間の分割は、1つの都市またはコミュニティを2つのマシン間で分ける結果となり得る。さらに、いくつかのレベルのコミュニティは大きくてもよく、したがって、全てのコミュニティが単一のマシンに対して適合するとは限らない。一実施形態において、パーティションサイズ(例えば、パーティションごとのユーザの数)は、都市またはコミュニティの局所性における整合性を維持するために適宜調整され得る。
一意のID空間は、ユーザをキャッシュ・システムに対してマッピングするために使用され得る。一意のIDは、友達のクラスタが同じキャッシュ・システムへルーティングされることを可能にし得る。これは、局所性を著しく改善し、したがって、ネットワーク化されたコンピュータ・システムに対して提供されるクエリの処理(または実行)において利益を提供し得る。クエリは、ソーシャル・ネットワーキング・システムに対して提出される「友達の友達」のクエリなどの任意のタイプであって良い。クエリは、そのクエリを実行するために必要とされる適当なキャッシュ・システムへ向けられる。例えば、ユーザAの友達についてのクエリは、ユーザAの一意のIDに基づいて、ユーザAがマッピング
されているマシンへ送られる。
一定の実施形態において、既存のID(例えば、ユーザID)は、ノードに既に割り当てられており、ユーザをデータベース・サーバに対してマッピングするために使用され得るが、エッジの重みまたは近しくつなげられたノードの所望のクラスタリングを考慮しない手法であり得る。そのような場合、一意のIDは、代替的な識別子を構成し得る。ユーザIDは、一意のIDに対してマッピングされ得、一意のIDは、ユーザをキャッシュ・システムに対してマッピングするために使用され得る。このように、永続メモリ層(例えば、データベース・サーバ)内のユーザ・データが維持され得る一方で、一意のID空間の利益は、キャッシュ層(例えばキャッシュ・システム)において実現される。1つの実施形態において、ユーザIDの一意のIDに対するマッピングは、キャッシュ層動作のためにユーザIDが一意のIDへ変換されるべきときにはいつでもアクセスされるマシン上に記憶され得る。
本明細書において説明される一意のIDの別の利益は、一意のIDを生成するために、パーティションの数を知る必要がないということである。例えば、複数のサービスが、異なる数のパーティションを必要とする場合、同じ一意のID空間は、パーティションの対応する数に基づいて適宜分割され得る。例えば、ソーシャル・グラフの例において、ネットワーク化されたコンピュータ・システムは、データベース・サーバの永続メモリ層(または段)と、キャッシュ・システムのキャッシュ層(または段)とを含み得る。1つのキャッシュ層サービスは、100個のキャッシュ・システム(例えば、100個のパーティション)にわたって実装されるインデックス・サービスであり得る。別のキャッシュ層サービスは、200個のキャッシュ・システム(例えば、200個のパーティション)にわたって実装されるニュースフィード・サービスであり得る。さらに別のキャッシュ層サービスは、300個のキャッシュ・システム(例えば、300個のパーティション)にわたって実装されるグラフ・サービスであり得る。このように、永続メモリ層は、かなり静的に保たれ得るが、キャッシュ層は、動的に構成され得る。
一意のIDに基づいてユーザをルーティングすることは、ファン・アウト問題を著しく改善し得る。マシン上のユーザが、類似したデータにアクセスする傾向がある場合、そのデータは、そのデータについての最初のクエリの後にキャッシュされ、同じデータを必要とする後続のクエリについて利用可能となる。例えば、「友達の友達」のクエリを例にとる。友達またはコミュニティは、同じキャッシュ・システム上へクラスタリングされ得る。そのため、ユーザAが、ユーザAの友達についてのクエリを提出する場合、ユーザAの全ての友達についてのデータがフェッチされ、キャッシュ内に既に記憶されていない場合には、キャッシュ内に記憶される。ユーザBが、ユーザAと友達である場合において、特に、ユーザAおよびユーザBが同じ都市内に住んでいるとき、ユーザAおよびユーザBは、何人かの共通の友達を有する可能性がある。したがって、ユーザBが、ユーザBの友達についてクエリを提出する場合、ユーザAとユーザBとの共通の友達についての任意のデータは、ユーザAがユーザAのクエリを提出した時から既にキャッシュされている。共通の友達の数が多ければ多いほど、もたらされる効率は高くなる。さらに、多数のユーザ(例えば、5億人のユーザ、10億人のユーザ等)にわたって適用される場合、性能およびネットワーク・トラフィックにおける非常に大きな利得が実現され得る。
さらに、異なるクエリにわたってユーザを同じマシンへルーティングすることによって、ユーザは、そのユーザが既にキャッシュしたデータを活用し得る。例えば、ユーザが、ソーシャル・ネットワーキング・システム上のニュースフィードまたは投稿などのデータをリフレッシュする場合、過去のデータがキャッシュされている同じマシンへクエリを送らせることは、データが取得される速度における著しい改善を提供し得る。
本明細書において説明される特定の例は、ユーザおよびユーザの友達に関連し得るが、基本的なコンセプトおよび原理は、他のノードおよびつながりに適用可能である。本明細書において議論されるように、ノードは任意のタイプであってよい。さらに、つながりは、様々なタイプの関係を含み得る。例えば、つながりは、ユーザが別の実体またはユーザをフォローする「フォロー」エッジであってもよい。一意のIDに基づいてノードをマシンへルーティングする同じアプローチは、人だけでなく他の実体にも拡張されることができ、例えば、サッカーはエジプトで人気があること、クリケットはバングラデシュで人気があること、特定の企業が米国で人気があることが決定され得る。例えば、1つのクエリは、「企業Aに対して『いいね!』を表明しており、かつ、サンフランシスコ市に住む全ての人々を示せ」であり得る。このクエリは、ソーシャル・ネットワーキング・システムに関連付けられている企業Aのウェブ・ページが、そのファンの多くと同じマシン上に存在する場合に、より効率的に実行され得る。特に、クエリの実行は、企業Aのウェブ・ページとそのファンとを1つのマシンのキャッシュ層内に維持することによって強化され得る。
一意のID空間の分割に基づいてユーザをマシンに対してマッピングすることは、マシン上の局所性を改善するが、各マシン上の負荷は変動することがあり、いくつかの例においては、著しく異なり得る。一実施形態において、ルーティング・モジュール704は、負荷検討事項に基づいて、ユーザをマシンに対してルーティングし得る。負荷監視モジュール706は、マシンがオンラインになっている間、マシンの負荷を監視し、ルーティング・モジュール704と共に機能して、負荷検討事項に基づいてユーザをマシンへルーティングし得る。一実施形態において、負荷は監視されて、その負荷が閾値を超えたか、または閾値を下回ったかが決定され得る。いくつかの例においては、任意の所与の時間におけるマシンに対する負荷の量(例えば、最大容量の割合)が監視される。
一実施形態において、最初のマッピングは、均一に分散されているか否かに拘わらず、一意のID空間の分割に基づいており、その後に、ルーティング・モジュール704は、負荷分散検討事項に基づいて、ユーザを動的にルーティングし得る。例えば、ユーザによるクエリは、そのユーザの既存のユーザIDと一緒に受信され得る。一意のID空間に対する既存のユーザIDのマッピングは、既存のユーザIDを一意のIDへ変換するために使用され得る。次いで、共有番号は、パーティションサイズに基づいて決定され得る。シャード番号とパーティションサイズとの双方は、下記の例示的な方程式によって決定され得る。
パーティションサイズ=(ユーザの数)/(パーティションの数)
シャード番号=(一意のID)/(パーティションサイズ)
例えば、22億5千万人のユーザおよび1万5千個のパーティションの場合、パーティションサイズは、パーティションごとに15万人のユーザとなる。次いで、任意の単一の一意のIDを15万で除算することは、対応するシャード番号を決定するために使用され得る。次いで、ルーティング・モジュール704は、負荷監視モジュール706によって識別される負荷分散検討事項を考慮した後に、シャード番号を適当なマシンに対してマッピングし得る。シャード番号がマシンに対してマッピングされた後、クエリは、そのマシン上で実行され得る。
一実施形態において、負荷は、マシンが受信したクエリの数を追跡することによって部分的に決定され得る。例えば、アプリケーションがクエリを実行するにつれて、そのアプリケーションは、各シャードが処理しているクエリの数を示すカウンタをエクスポートし得る(例えば、アプリケーション・シャード番号100は、100個のクエリを有し、アプリケーション・シャード番号101は、500個のクエリを有する等)。次いで、負荷監視モジュール706は、エクスポートされたカウンタ・データを受信し、ルーティング
・モジュール704と共に機能して、例えば、ユーザを移動させるべきか、またはマシンのシャード間でどのようにユーザ移動させるべきかを決定し得る。例えば、負荷監視モジュール706は、マシンが処理しているクエリの数が閾値を超えるかを監視し得る。閾値が超えられた場合、負荷監視モジュール706は、処理されているクエリの数が閾値を下回るまで、付加的なクエリがマシンへルーティングされることを防止し得る。これらの付加的なクエリは、マシンが処理しているクエリの数が閾値を下回るまで、別のマシンへルーティングされ得る。同じように、負荷監視モジュール706は、マシンが処理しているクエリの数が閾値を下回るかを監視し得る。クエリの数が閾値を下回る場合、負荷監視モジュール706は、クエリの閾値を超えているマシンへルーティングされることを防止されたクエリなどの、付加的なクエリを受信するために、このマシンが利用可能であると決定し得る。
一実施形態において、負荷監視モジュール706は、マシンが過負荷を掛けられているかを決定し、ユーザを適宜ルーティングする。例えば、ユーザは、最初は、現在過負荷を掛けられているマシンに対してマッピングされ得る。過負荷を掛けられた状態は、負荷監視モジュール706によって検出され、ルーティング・モジュール704へ通信される。ルーティング・モジュール704は、負荷がより少ない異なるマシンへユーザをルーティングする。その結果、過負荷を掛けられたマシンは、さらに負荷を掛けられることを防止され、軽負荷を掛けられているマシンの負荷は増加される。一実施形態において、負荷監視モジュール706は、ユーザが1つのクエリについて1つよりも多くのマシンを必要とすると決定し、ルーティング・モジュール704は、そのクエリを他の複数のマシンへ適宜ルーティングし得る。クエリ処理需要などの負荷分散検討事項に基づいた、1つのシャードから別のシャードへのユーザの移動は、局所性をある程度損なわせ得る。負荷監視モジュール706は、局所性とクエリ速度との間のトレードオフを継続的に比較し得る。
一実施形態において、地理的ロケーションは、限定された使用パターンを示し得る。例えば、いくつかのアプリケーションの場合、一定の地理的ロケーションに関連付けられている特定のユーザは、例えば、法的な理由、プライバシー上の理由等のために、1つまたは複数のマシンへルーティングされず、未使用の計算リソースが作成され得る。例えば、ある国家は、特定のアプリケーションを使用しなくてもよく、または、特定のアプリケーションがその国家の居住者または国民に対して利用可能になることを許可しなくてもよい。例えば、欧州連合およびカナダは、それらの国民に対して特定のアプリケーションを許容しなくてもよく、したがって、それらの国内のユーザは、そのアプリケーションに対してアクセスすることができない。そのアプリケーションに対して分配されたキャッシュ・システム内の未使用のシャードは、それらのユーザによって使用されない。そのため、他の地理的ロケーションに関連付けられている他のユーザは、キャッシュ・システムの未使用のシャードなどの、利用可能な計算リソースを利用するために、マシンへルーティングされ得る。
1つの実施形態において、禁止されたアプリケーションに関連付けられている地理的ロケーションに対応する、一意のID空間のセクションは、一意のID空間から除去される。次いで、(抹消された地理的ロケーションに対応する一意のIDを有しない)変形された一意のID空間は、パーティションの数に基づいて(例えば、均一にまたは不均一に)分割されて、ユーザをシャード番号および対応するマシンに対してマッピングし得る。
一定の実施形態において、ユーザは、地理的ロケーションに強く相関する使用パターンに従って、マシンに対してマッピングされ得る。異なる地理的ロケーションは、異なる使用パターンを示し得る。一意のID空間は、局所性を最適化することを助け得る一方で、地理的ロケーションは、変動する使用パターンを有し得る。これは、異なる時間におけるマシンに対する変動する負荷につながり得る。これら負荷変動は、ある時にはマシンに対
して大きな負荷を提供し、別の時には同じマシンに対して小さい負荷を提供することによって、著しく変動し得る。
一時的分散モジュール708は、ルーティング・モジュール704と共に機能して、使用パターンにおける一時的な揺らぎなどの使用特性を考慮する手法で、ユーザをマシンへルーティングし得る。例えば、地理的ロケーションについての負荷は、時刻によって変動し得る(例えば、労働時間対非労働時間)。別の例として、負荷は、日によっても(例えば、休日対平日)、または、他のより大きな時間の間隔(例えば、夏季休暇対バスケットボール決勝戦)によっても変動し得る。一時的分散モジュール708は、負荷監視モジュール706からのデータを使用して、使用パターンを決定し、その使用パターンに基づいて、ルーティング・モジュール704と共に機能して、ユーザを様々なマシンへルーティングして、負荷分散を最適化し得る。
例えば、一時的分散モジュール708は、相補的な使用パターンを有する地理的ロケーションを識別し得る。相補的な使用パターンは、位相の一致しない地理的ロケーションによって示される使用を参照し得る。例えば、相補的な使用パターンの1つのタイプは、第2の地理的ロケーションがトラフィックの使用における谷となる時と同時にまたは重複した時にトラフィックの使用がピークとなる第1の地理的ロケーションを伴い得る。同じように、別のタイプの相補的な使用パターンは、第2の地理的ロケーションのトラフィックの使用がピークとなる時と同時にまたは重複した時にトラフィックの使用が谷となる第1の地理的ロケーションを伴い得る。高トラフィックと低トラフィックとの著しい変動を有する2つの地理的ロケーションを2つの別個のマシン上へルーティングする代わりに、一時的分散モジュール708は、同じマシン(または、マシンのクラスタ)に対してそれらを一緒にペアにし得る。このように、マシンは、実際には、主として、1つの地理的ロケーションのみに対して、その対応する高トラフィック時間中にサービスを提供し、したがって、計算リソースの使用を最適化し、マシンへの負荷を分散させる。一実施形態において、高トラフィックは、トラフィックが所定の閾値を超えるかに基づいて決定され得る。同様に、一実施形態において、低トラフィックは、トラフィックが閾値を下回るかに基づいて決定され得る。
ソーシャル・ネットワーキング・システム内で、地理的ロケーション(例えば、都市、国家、コミュニティ等)または関連付けられたシャードは、ピーク時および非ピーク時のソーシャル・ネットワーキング・システムの使用において大きな変動を示し得る。このパターンは、一般には、例えば、共通の地理的領域またはタイム・ゾーン内の異なるユーザによって示され得る。例えば、多くの都市、領域、および国家ですら、人々が睡眠中である傾向のある夜間には、日中よりもより少ないトラフィックを示し得る。したがって、トラフィックは、12時間の期間または他の時間間隔にカテゴリ分けされ得る。別の例として、第1の地理的ロケーションは、日中の8時間間隔において特徴的な使用(例えば、重いトラフィックまたは最小限のトラフィック)を示し、第2の地理的ロケーションは、日中の6時間間隔において特徴的な使用を示し、第3の地理的ロケーションは、特徴的な使用パターンをほとんどまたは全く示さないことがあり得る。
使用パターンは、一定の地理的領域に関連付けられている習慣または文化に基づき得る。例えば、1つの地理的ロケーションにおける人々は、ソーシャル・ネットワーキング・システムを自宅で主に使用し得る。別の地理的ロケーションは、ソーシャル・ネットワーキング・システムを職場で主に使用し得る。さらに別の地理的ロケーションは、ソーシャル・ネットワーキング・システムを週末または他の特別な日に主に使用し得る。
さらに、ソーシャル・ネットワーキング・システムのユーザは、異なる地理的ロケーションにおいて不均一に分散され得る。例えば、アメリカ合衆国および欧州は、同じ期間ま
たは重複する期間にわたって著しい使用パターンを示す非常に多数のユーザを有し得る。これらの2つの国家についてのピーク期間は重複することがあり、重複する期間中に、非常に大きな結合された使用を生成し得る。したがって、これらの地理的ロケーションからのユーザの結合は、マシンに対する負荷の過度な変動を引き起こし得る。したがって、一実施形態において、各地理的ロケーションがピーク使用量を示す時に、1つの地理的ロケーションに関連付けられているユーザは、その時間中に負荷の過度な変動を回避するために、一時的分散モジュール708によって、異なるマシンへルーティングされ得る。ユーザは、ピーク使用量間隔後に、元のマシンへ戻され得る。このようにして、そのような負荷の過度な変動を回避するためにユーザをルーティングすることは、任意の間隔にわたって任意の数の地理的ロケーションについて実行されて、負荷分散を最適化し得る。一時的分散モジュール708は、重い使用量または軽い使用量に関連付けられている時間間隔を識別し、したがって特定の地理的ロケーションを共に同じマシン上へ適宜グループ化し、またはまとめて、負荷を最適化し得る。一時的分散モジュール708は、変動する数の地理的ロケーションと変動する大きさの時間間隔とを混合および一致させ得る、任意の数の置換を実装して、異なる使用パターンについての負荷分散を最適化し得る。
一時的分散モジュール708は、相補的なタイム・ゾーンによって地理的ロケーションをまとめてもよい。例えば、2つの地理的ロケーションは、12時間の期間で互いに補完することがあり、3つの地理的ロケーションは、8時間の期間で互いに補完することがある等である。地理的ロケーションをこうしてまとめることは、世界中の地理的ロケーションについての様々な結合において実行され得る。いくつかの例において、一時的分散モジュール708は、負荷分散の目的のために、複数の異なる地理的ロケーションを1つの単位として取り扱い得る。
一時的分散モジュール708は、負荷分散と局所性との間のトレードオフも考慮に入れ得る。例えば、2つの地理的ロケーションは、使用パターンに関しては互いに補完し得る一方で、これらは、局所性への影響があまりにも大きいと決定される場合には、必ずしも同じマシンへルーティングされるとは限らないことがあり得る。
様々なシステムおよび技法が、負荷の変動を考慮するために実装され得る。一実施形態においては、過度な負荷需要、またはメンテナンスなどに起因する負荷処理能力の低下に対して適応するために、マシンの汎用プールが実装され得る。例えば、マシンが、現在過負荷を掛けられているか、またはメンテナンスに起因して動作不能である場合、そのマシンに対してマッピングされたクエリは、そのマシンが過負荷を掛けられなくなるか、またはメンテナンスに起因して動作不能ではなくなるまで、マシンの汎用プールへ一時的にルーティングされ得る。
一実施形態において、シャードに関連付けられているマシン・プールの大きさは、負荷需要または予期される負荷需要に応じて動的に変動させられ得る。例えば、マシン・プールに対して分配されるマシンの数は、より高い負荷需要またはより低い負荷需要を考慮するために、それぞれ動的に増加または減少され得る。いくつかの例において、マシン・プールの大きさは、予期される時刻による負荷変化に基づいて変動し得る。いくつかの例において、マシン・プールの大きさは、例えば、コミュニティの緊急事態に起因する負荷急増などの、予期しない負荷急増に応じて変動し得る。
いくつかの例において、一定のユーザ、コミュニティ、またはシャードは、予期外に高い負荷を誘発し得る。例えば、ユーザは、突然の全国的な注目を集める有名人または公人であり、そのユーザのアカウントに対する多くのクエリを同時に招くことがある。ユーザのアカウントに関連付けられているマシンまたはシャードへ課される負荷需要における突然かつ過度の増加は、破壊的となり得る。ユーザまたはシャードに関連付けられているマ
シン・プールの大きさは、増加した負荷需要に適応するために、動的に増加され得る。一実施形態において、クエリは、負荷需要を軽減することを助けるために、マシンの汎用プールへルーティングされ得る。いくつかの例において、クエリは、ユーザまたはシャードに関連付けられているマシン・プールが動的にサイズ変更されるまで、マシンの汎用プールへルーティングされる。
いくつかの例において、負荷需要は、匿名のユーザ、友達が全くいないユーザ、ログインしていないユーザ、サーチ・エンジン・スクレイパー(search engine scrapers)等などの、ユーザのコミュニティへ効果的にリンクされていないユーザ、または関連付けられた一意のIDを有しないユーザによって生成され得る。なぜなら、これらのユーザは、コミュニティまたは一意のIDに対して効果的に関連付けられておらず、これらのユーザが生成する負荷需要は、本明細書において説明される負荷利益および性能利益のうちの一部から必ずしも利益を享受せず、または寄与しないことがあり得るためである。一実施形態において、そのようなユーザからのクエリは、マシンの汎用プール、これらのタイプの非ソーシャル・ユーザのための専用マシン・プールへルーティングされ、または、1つのマシン・プールもしくは複数のマシン・プールにおけるマシンの全セットにまたがって負荷分散され得る。
ユーザとコミュニティ、一意のID、またはシャードとの間のマッピングは、クラスタリングの変更またはノード・グラフのパーティション分けのされ方などに起因して、ときには著しく変化し得る。過去のマップに対して著しい変化を有する新たなマップを採用する影響を低減するために、更新は、徐々に、または世界的にオフ・ピークの時間など、低減されたトラフィックもしくは負荷の時に、採用され得る。一実施形態においては、現在のクエリについてどのマップが利用されているのかを一意に識別するために、バージョン識別子が、一意のID、コミュニティの識別子、またはシャードの識別子と共に使用され得る。
図8は、一実施形態に係る、負荷分散検討事項に基づいてユーザをマシンに対してマッピングする例示的なプロセスを例示する。ブロック802において、マシンの負荷および使用時間が監視される。監視は、動的であり、例えば、クエリが受信されると決定され得る。例えば、クエリが受信され、マシン(または、マシン・プールなどの、複数の近しく関連付けられたマシン)に対して最初にマッピングされる場合、そのマシンへの現在の負荷がまず監視されて、そのマシンが過負荷を掛けられているかが決定される。別の例においては、地理的ロケーションの使用パターンが監視される。一実施形態において、ブロック802は、図7の負荷監視モジュール706によって実行され得る。
ブロック804において、再割り当てによって自身の負荷を改善し得るユーザまたは地理的ロケーションが識別される。これは、高い負荷を有するマシンを識別すること、または低い負荷を有するマシンを識別することを含み得る。これらの負荷は、例えば、任意の所与の時(例えば、マシンが、あまりにも多くのクエリを一度に有する時)における使用量トラフィックの動的な変化に基づいて変動し得る。負荷は、任意のタイプの使用パターンに基づいても識別され得る。使用パターンは、12時間の期間、8時間の期間、4時間の期間等などの、使用の1つまたは複数の期間に基づいて識別され得る。
ブロック806において、負荷分散にとって有益な、ユーザまたは地理的ロケーションの適当な再割り当てが決定される。例えば、クエリの実行に関して、最初のマッピングが、過負荷を掛けられているマシンに対するものである場合、クエリは、軽負荷を掛けられている別のマシンへマッピングされ得る。別の例として、負荷の分散を最適化するために、地理的ロケーションの2つ以上のグループは、それらの相補的な使用パターンに基づいて、共にまとめられ得る。地理的ロケーションは、様々な数の地理的ロケーションと様々
な時間間隔を混合または一致させる任意の数の置換において共にまとめられて、変動する使用パターンについての負荷分散を最適化し得る。一実施形態において、ブロック804および806は、図7の負荷監視モジュール706および一時的分散モジュール708によって実行され得る。
ブロック808において、ユーザは、ブロック806における再割り当てに基づいて、マシンに対してマッピングされる。まとめられた地理的ロケーションに関して、まとめられた地理的ロケーションのユーザは、ブロック806において決定された最適化された構成に従って、マッピングおよびルーティングされる。例えば、反対の使用パターンを有する2つの相補的な地理的ロケーションが、同じマシンに対してマッピングおよびルーティングされ得る。
図9は、一実施形態に係る、クエリをマシン(または、マシン・プールなどの、複数の近しく関連付けられたマシン)へルーティングする例示的なプロセスを例示する。図6〜図8についての上記議論は、図9のプロセスに対しても当てはまることが認識されるべきである。簡潔さおよび明確さのために、類似した特徴および機能は、図9についてここでは繰りかえされないが、等しく適用可能であり得る。
プロセス900のブロック902において、クエリ(または要求)が受信される。例えば、システムは、ソーシャル・ネットワーキング・システムのユーザによって開始されたクエリを受信し得る。クエリは、そのクエリと一緒に、ユーザのユーザIDを含み得る。ブロック904においては、一意のIDが、ユーザIDから決定される。例えば、ユーザIDから一意のIDへのマッピングは、ユーザIDを一意のIDへ変換するために使用され得る。ブロック906においては、シャード番号が、一意のIDに基づいて決定され得る。例えば、シャード番号は、本明細書において説明されるように、パーティションサイズに基づいて決定され得る。一実施形態において、ブロック902、904、および906は、図7のシャード決定モジュール702によって実行され得る。
ブロック908において、シャード番号は、物理マシン(または、複数の近しく関連付けられたマシン)に対してマッピングされ得る。1つの実施形態において、シャード番号は、物理マシンへの一意のID空間の等しい分割に基づいて、物理マシンに対してマッピングされる。一実施形態において、シャード番号は、一意のID空間の不均等な分割に基づいて、物理マシンに対してマッピングされる。一実施形態において、本明細書においてより詳細に議論されるような負荷分散検討事項も、物理マシンに対するシャード番号のマッピングのために考慮に入れられ得る。
ブロック910において、マシンが選択される。シャード番号が、マシン・プールなどの複数のマシンに対してマッピングされる場合、マシンのうちの1つが選択される。ブロック912においては、選択されたマシンが、クエリを動的に拒否したかが決定される。クエリが、選択されたマシンによって拒否されない場合、ブロック914において、そのクエリは、選択されたマシンへルーティングされ、選択されたマシンによって実行される。しかしながら、クエリが、選択されたマシンによって拒否される場合には、ブロック912からブロック910への矢印によって表されるように、別のマシンが選択され得る。例えば、複数のマシンから選択された第1のマシンが拒否される場合、複数のマシンからの別のマシンが選択され得る。この選択プロセスは、複数のマシンからの1つのマシンがクエリを受け入れるまで継続し得る。一実施形態において、(例えば、過負荷またはメンテナンスに起因して)クエリを正常に受信するためのマシンが複数のマシンから選択されることができない場合、クエリは、マシンの汎用プールへルーティングされ得る。シャード番号が、ブロック908において単一のマシンへマッピングされ、かつ、そのマシンがクエリを拒否する場合、マシンの汎用プールからのマシンなどの代替的なマシンが、クエ
リを受信するために選択され得る。別の実施形態においては、クエリが、選択されたマシンによって拒否される場合、そのクエリは、所定の待機期間後に、同じマシンへ再送され得る。一実施形態において、ブロック908、910、912、および914は、図7のルーティング・モジュール704、負荷監視モジュール706、および一時的分散モジュール708によって実行され得る。
ソーシャル・ネットワーキング・システム−実施例
図10は、幾つかの実施形態による、本発明の実施形態に応じたソーシャル・ネットワーキング・システムにおけるビデオリンクの代替のための例示システム1000のネットワーク図である。システム1000は、1つまたは複数のユーザ・デバイス1010、1つまたは複数の外部システム1020、ソーシャル・ネットワーキング・システム1030、およびネットワーク1050を含む。実施形態では、上述した実施形態に関連して考察したソーシャル・ネットワーキング・システムは、ソーシャル・ネットワーキング・システム1030として実施され得る。例示のために、図10に示されるシステム1000の実施形態は、単一の外部システム1020および単一のユーザ・デバイス1010を含む。しかし、他の実施形態では、ソーシャル・ネットワーキング・システム1000は、より多数のユーザ・デバイス1010および/またはより多数の外部システム1020を含み得る。特定の実施形態では、ソーシャル・ネットワーキング・システム1030は、ソーシャルネットワークプロバイダによって運営され、一方、外部システム1020は、異なるエンティティによって運営され得るという点で、ソーシャル・ネットワーキング・システム1030とは別個である。しかし、様々な実施形態では、ソーシャル・ネットワーキング・システム1030および外部システム1020は、併せて動作して、ソーシャルネットワーキングサービスをソーシャル・ネットワーキング・システム1030のユーザ(またはメンバ)に提供する。この意味では、ソーシャル・ネットワーキング・システム1030は、外部システム1020等の他のシステムが、インターネットにわたりソーシャルネットワーキングサービスおよび機能をユーザに提供するために使用し得るプラットフォームまたはバックボーンを提供する。
ユーザ・デバイス1010は、ユーザから入力を受信し、ネットワーク1050を通じてデータを受信することができる1つまたは複数の計算デバイスを含む。一実施形態では、ユーザ・デバイス1010は、例えば、マイクロソフトウィンドウズ(Microsoft Windows)(登録商標)互換性オペレーティングシステム)、アップル(Apple)(登録商標)OS−X、および/またはリナックス(Linux)(登録商標)ディストリビューションを実行する従来のコンピュータ・システムである。別の実施形態では、ユーザ・デバイス1010は、スマートフォン、タブレット、個人情報端末(PDA)、モバイル電話等のコンピュータ機能を有するデバイスとすることができる。ユーザ・デバイス1010は、ネットワーク1050を通じて通信するように構成される。ユーザ・デバイス1010は、アプリケーション、例えば、ユーザ・デバイス1010のユーザがソーシャル・ネットワーキング・システム1030と対話できるようにするブラウザ・アプリケーションを実行することができる。別の実施形態では、ユーザ・デバイス1010は、iOS(登録商標)およびアンドロイド(ANDROID)(登録商標)等のユーザ・デバイス1010のネイティブオペレーティングシステムによって提供されるアプリケーションプログラミングインターフェース(API)を通して、ソーシャル・ネットワーキング・システム1030と対話する。ユーザ・デバイス1010は、ネットワーク1050を通じて外部システム1020およびソーシャル・ネットワーキング・システム1030と通信するように構成され、ネットワーク1050は、有線および/または無線通信システムを使用するローカルエリアネットワークおよび/または広域ネットワークの任意の組合せを含み得る。
一実施形態では、ネットワーク1050は、標準通信技術およびプロトコルを使用する
。したがって、ネットワーク1050は、イーサネット(Ethernet)(登録商標)、802.11、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス(WiMAX)(登録商標)、3G、4G、CDMA、GSM(登録商標)、LTE、デジタル加入者回線(DSL)等の技術を使用するリンクを含むことができる。同様に、ネットワーク1050で使用されるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング(MPLS)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキストトランスポートプロトコル(HTTP)、簡易メール転送プロトコル(SMTP)、ファイル転送プロトコル(FTP)等を含むことができる。ネットワーク1050を通じて交換されるデータは、ハイパーテキストマークアップ言語(HTML)および拡張可能マークアップ言語(XML)を含む技術および/またはフォーマットを使用して表すことができる。加えて、全てまたは幾つかのリンクは、セキュアソケットレイヤ(SSL)、トランスポートレイヤセキュリティ(TLS)、およびインターネットプロトコルセキュリティ(IPsec)等の従来の暗号化技術を使用して暗号化することができる。
一実施形態では、ユーザ・デバイス1010は、ブラウザ・アプリケーション1012を使用して外部システム1020およびソーシャル・ネットワーキング・システム1030から受信されるマークアップ言語ドキュメント1014を処理することにより、外部システム1020および/またはソーシャル・ネットワーキング・システム1030からのコンテンツを表示し得る。マークアップ言語ドキュメント1014は、コンテンツと、コンテンツのフォーマットまたはプレゼンテーションを記述する1つまたは複数の命令とを識別する。マークアップ言語ドキュメント1014に含まれる命令を実行することにより、ブラウザ・アプリケーション1012は、マークアップ言語ドキュメント1014によって記述されるフォーマットまたはプレゼンテーションを使用して、識別されたコンテンツを表示する。例えば、マークアップ言語ドキュメント1014は、外部システム1020およびソーシャル・ネットワーキング・システム1030から検索されたテキストおよび/または画像データを含む複数のフレームを有するウェブ・ページを生成し表示する命令を含む。様々な実施形態において、マークアップ言語ドキュメント1014は、拡張可能マークアップ言語(XML)データ、拡張可能ハイパーテキストマークアップ言語(XHTML)データ、または他のマークアップ言語データを含むデータファイルを含む。更に、マークアップ言語ドキュメント1014は、外部システム1020とユーザ・デバイス1010との間でのデータ交換を促進するために、ジャバスクリプト(JavaScript)(登録商標)オブジェクト表記(JSON)データ、パディングを有するJSON(JSONP)、およびジャバスクリプト(JavaScript)(登録商標)データを含み得る。ユーザ・デバイス1010のブラウザ・アプリケーション1012は、ジャバスクリプト(JavaScript)(登録商標)コンパイラを使用して、マークアップ言語ドキュメント1014を復号化し得る。
マークアップ言語ドキュメント1014は、フラッシュ(FLASH)(商標)またはユニティ(Unity)(商標)アプリケーション、シルバーライト(SilverLight)(商標)アプリケーションフレームワーク等のアプリケーションまたはアプリケーションフレームワークを含むか、またはそれらにリンクすることもできる。
一実施形態では、ユーザ・デバイス1010は、ユーザ・デバイス1010のユーザがソーシャル・ネットワーキング・システム1030にログインするか否かを示すデータを含む1つまたは複数のクッキー1016も含み、クッキーは、ソーシャル・ネットワーキング・システム1030からユーザ・デバイス1010に通信されるデータの変更を可能にし得る。
外部システム1020は、1つまたは複数のウェブ・ページ1022a、1022bを
含む1つまたは複数のウェブ・サーバを含み、ウェブ・ページは、ネットワーク1050を使用してユーザ・デバイス1010に通信される。外部システム1020は、ソーシャル・ネットワーキング・システム1030とは別個である。例えば、外部システム1020には第1のドメインが関連付けられ、一方、ソーシャル・ネットワーキング・システム1030には別個のソーシャルネットワーキングドメインが関連付けられる。外部システム1020に含まれるウェブ・ページ1022a、1022bは、コンテンツを識別し、識別されたコンテンツのフォーマットまたはプレゼンテーションを指定する命令を含むマークアップ言語ドキュメント1014を含む。
ソーシャル・ネットワーキング・システム1030は、複数のユーザを含み、ソーシャル・ネットワーキング・システムの他のユーザと通信し、対話する能力をソーシャル・ネットワークのユーザに提供する、ソーシャル・ネットワークの1つまたは複数の計算デバイスを含む。幾つかの場合、ソーシャル・ネットワークは、グラフ、すなわち、エッジおよびノードを含むデータ構造によって表すことができる。ソーシャル・ネットワークを表すために、データベース、オブジェクト、クラス、メタ要素、ファイル、または任意の他のデータ構造を含むが、これらに限定されない他のデータ構造を使用することもできる。ソーシャル・ネットワーキング・システム1030は、オペレータによって監督され、管理され、または制御され得る。ソーシャル・ネットワーキング・システム1030のオペレータは、人間、自動アプリケーション、またはコンテンツを管理し、ポリシーを調整し、ソーシャル・ネットワーキング・システム1030内の使用尺度を収集する一連のアプリケーションとし得る。任意のタイプのオペレータが使用され得る。
ユーザは、ソーシャル・ネットワーキング・システム1030に加わり、次に、結び付きたいソーシャル・ネットワーキング・システム1030の任意の数の他のユーザへのつながりを追加し得る。本明細書で使用される場合、「友達」という用語は、ユーザがソーシャル・ネットワーキング・システム1030を通じてつながり、関連、または関係を形成したソーシャル・ネットワーキング・システム1030の任意の他のユーザを指す。例えば、実施形態では、ソーシャル・ネットワーキング・システム1030内のユーザが、ソーシャル・グラフ内のノードとして表される場合、「友達」という用語は、2つのユーザノード間に形成され、2つのユーザノードを直接結び付けるエッジを指すことができる。
つながりは、ユーザによって明示的に追加されてもよく、またはユーザ(例えば、同じ教育機関の卒業生であるユーザ)の共通の特徴に基づいてソーシャル・ネットワーキング・システム1030によって自動的に作成されてもよい。例えば、第1のユーザは特に、友達である特定の他のユーザを選択する。ソーシャル・ネットワーキング・システム1030でのつながりは通常、両方向であるが、両方である必要はなく、したがって、「ユーザ」および「友達」という用語は枠組みに依存する。ソーシャル・ネットワーキング・システム1030のユーザ間のつながりは通常、2者間(「双方向」)または「相互」であるが、一方的または「一方向」であってもよい。例えば、ボブおよびジョーは両方ともソーシャル・ネットワーキング・システム1030のユーザであり、互いに結び付けられる場合、ボブおよびジョーは互いのつながりである。他方、ボブがジョーに結び付けられ、ジョーによってソーシャル・ネットワーキング・システム1030に通信されたデータを見ることを希望するが、ジョーは相互つながりを形成することを希望しない場合、一方的なつながりが確立され得る。ユーザ間のつながりは、直接的なつながりであり得るが、ソーシャル・ネットワーキング・システム1030の幾つかの実施形態では、1つまたは複数のレベルのつながりまたは分離度を通じて間接的であることができる。
ユーザ間につながりを確立し維持し、ユーザ間の対話を可能にすることに加えて、ソーシャル・ネットワーキング・システム1030は、ソーシャル・ネットワーキング・シス
テム1030によってサポートされる様々なタイプのアイテムに対してアクションをとる能力をユーザに提供する。これらのアイテムは、ソーシャル・ネットワーキング・システム1030のユーザが属し得るグループまたはネットワーク(すなわち、人々、エンティティ、およびコンセプトのソーシャル・ネットワーク)、ユーザが関心を有し得るイベントまたはカレンダーエントリ、ユーザがソーシャル・ネットワーキング・システム1030を通じて使用し得るコンピュータベースのアプリケーション、ユーザがソーシャル・ネットワーキング・システム1030によりまたはソーシャル・ネットワーキング・システム1030を通して提供されるサービスを通じてアイテムを購入または販売できるようにするトランザクション、およびユーザがソーシャル・ネットワーキング・システム1030内外で実行し得る広告との対話を含み得る。これらは、ユーザがソーシャル・ネットワーキング・システム1030に対して作用し得るアイテムの少数の例にすぎず、多くの他のアイテムが可能である。ユーザは、ソーシャル・ネットワーキング・システム1030内またはソーシャル・ネットワーキング・システム1030とは別個であるか、若しくはネットワーク1050を通じてソーシャル・ネットワーキング・システム1030に結合される外部システム1020内で表されることが可能ないかなるものとでも対話し得る。
ソーシャル・ネットワーキング・システム1030は、様々なエンティティをリンクすることも可能である。例えば、ソーシャル・ネットワーキング・システム1030は、ユーザが、API、ウェブサービス、または他の通信チャネルを通して互いと、並びに外部システム1020または他のエンティティと対話できるようにする。ソーシャル・ネットワーキング・システム1030は、複数のエッジで相互接続された複数のノードを含む「ソーシャル・グラフ」を生成し維持する。ソーシャル・グラフ内の各ノードは、別のノードに作用することができ、且つ/または別のノードによる作用が可能なエンティティを表し得る。ソーシャル・グラフは、様々なタイプのノードを含み得る。ノードのタイプの例としては、ユーザ、人以外のエンティティ、コンテンツアイテム、ウェブ・ページ、グループ、アクティビティ、メッセージ、コンセプト、およびソーシャル・ネットワーキング・システム1030内のオブジェクトによって表すことができる任意の他のものが挙げられる。ソーシャル・グラフ内の2つのノード間のエッジは、ノード関係またはノードのうちの一方によって他方のノードに実行されたアクションに起因し得る2つのノード間の特定の種類のつながりまたは関連を表し得る。幾つかの場合、ノード間のエッジは重み付けされることができる。エッジの重みは、ノード間のつながりまたは関連の強さ等のエッジに関連付けられる属性を表すことができる。異なるタイプのエッジに異なる重みが提供されることができる。例えば、あるユーザが別のユーザを「好き」な場合に作成されるエッジにある重みが与えられ得、一方、ユーザが別のユーザの友達である場合に作成されるエッジには異なる重みが与えられ得る。
例として、第1のユーザが第2のユーザを友達として識別する場合、第1のユーザを表すノードおよび第2のユーザを表す第2のノードを結ぶソーシャル・グラフ内のエッジが生成される。様々なノードが互いに関係または対話するため、ソーシャル・ネットワーキング・システム1030は、関係および対話を反映するように、様々なノードを結ぶエッジを変更する。
ソーシャル・ネットワーキング・システム1030は、ユーザ生成コンテンツも含み、ユーザ生成コンテンツは、ソーシャル・ネットワーキング・システム1030とのユーザの対話を強化する。ユーザ生成コンテンツは、ユーザがソーシャル・ネットワーキング・システム1030に追加し、アップロードし、送信し、または「掲示」することができるいかなるものも含み得る。例えば、ユーザは、掲示をユーザ・デバイス1010からソーシャル・ネットワーキング・システム1030に通信する。掲示は、ステータス更新若しくは他のテキストデータ、ロケーション情報、写真等の画像、動画、リンク、音楽、または他の同様のデータおよび/またはメディア等のデータを含み得る。コンテンツは、第3
者によってソーシャル・ネットワーキング・システム1030に追加されることもできる。コンテンツ「アイテム」は、ソーシャル・ネットワーキング・システム1030においてオブジェクトとして表される。このようにして、ソーシャル・ネットワーキング・システム1030のユーザは、様々な通信チャネルを通してテキストおよび様々なタイプのメディアのコンテンツアイテムを掲示することにより、互いと通信するように促される。そのような通信は、互いとのユーザの対話を増大させ、ユーザがソーシャル・ネットワーキング・システム1030と対話する頻度を増大させる。
ソーシャル・ネットワーキング・システム1030は、ウェブ・サーバ1032、API要求サーバ1034、ユーザ・プロフィール・ストア1036、つながりストア1038、アクション・ロガー1040、アクティビティ・ログ1042、認証サーバ1044、およびビデオ代替モジュール1046を含む。本発明の実施形態では、ソーシャル・ネットワーキング・システム1030は、様々なアプリケーションの追加、より少数、または異なる構成要素を含み得る。ネットワーク・インターフェース、セキュリティメカニズム、ロードバランサー、フェイルオーバサーバ、管理およびネットワーク動作コンソール等の他の構成要素は、システムの詳細を曖昧にしないために示されていない。
ユーザ・プロフィール・ストア1036は、経歴、人口統計、およびユーザによって宣言されたか、またはソーシャル・ネットワーキング・システム1030によって推測される仕事経験、教育履歴、趣味または好み、ロケーション等の他のタイプの説明的情報を含め、ユーザアカウントについての情報を保持する。この情報は、各ユーザが一意に識別されるように、ユーザ・プロフィール・ストア1036に記憶される。ソーシャル・ネットワーキング・システム1030は、異なるユーザ間の1つまたは複数のつながりを記述するデータもつながりストア1038に記憶する。つながり情報は、同様または共通の仕事経験、グループメンバシップ、趣味、または教育履歴を有するユーザを示し得る。更に、ソーシャル・ネットワーキング・システム1030は、異なるユーザ間のユーザ定義つながりを含み、ユーザが他のユーザとの関係を指定できるようにする。例えば、ユーザ定義つながりは、ユーザが、友達、同僚、パートナ等のユーザの現実世界の関係と同様の他のユーザとの関係を生成できるようにする。ユーザは、予め定義されたタイプのつながりから選択してもよく、または必要に応じて自身のつながりタイプを定義してもよい。人以外のエンティティ、バケツ、クラスタセンター、画像、関心、ページ、外部システム、コンセプト等のソーシャル・ネットワーキング・システム1030での他のノードとのつながりも、つながりストア1038に記憶される。
ソーシャル・ネットワーキング・システム1030は、ユーザが対話し得るオブジェクトについてのデータを保持する。このデータを保持するために、ユーザ・プロフィール・ストア1036およびつながりストア1038が、ソーシャル・ネットワーキング・システム1030によって保持される対応するタイプのオブジェクトのインスタンスを記憶する。各オブジェクトタイプは、そのタイプのオブジェクトに適切な情報を記憶するのに適する情報フィールドを有する。例えば、ユーザ・プロフィール・ストア1036は、ユーザのアカウントおよびユーザのアカウントに関連する情報の記述に適するデータ構造を含む。特定のタイプの新しいオブジェクトが作成される場合、ソーシャル・ネットワーキング・システム1030は、対応するタイプの新しいデータ構造を初期化し、一意のオブジェクト識別子を割り当て、必要に応じてデータをオブジェクトに追加し始める。これは、例えば、ユーザがソーシャル・ネットワーキング・システム1030のユーザになるときに行われ得、ソーシャル・ネットワーキング・システム1030は、ユーザ・プロフィール・ストア1036にユーザ・プロフィールの新しいインスタンスを生成し、一意の識別子をユーザアカウントに割り当て、ユーザアカウントのフィールドに、ユーザによって提供された情報を入れ始める。
つながりストア1038は、他のユーザへのユーザのつながり、外部システム1020へのつながり、または他のエンティティへのつながりを記述するのに適するデータ構造を含む。つながりストア1038は、つながりタイプもユーザのつながりに関連付け得、つながりタイプは、ユーザについての情報へのアクセスを規制するために、ユーザのプライバシー設定と併せて使用され得る。本発明の実施形態では、ユーザ・プロフィール・ストア1036およびつながりストア1038は、連合データベースとして実施され得る。
つながりストア1038、ユーザ・プロフィール・ストア1036、およびアクティビティ・ログ1042に記憶されたデータは、ソーシャル・ネットワーキング・システム1030が、ノードを使用して様々なオブジェクトを識別し、ノードを結ぶエッジを使用して、異なるオブジェクト間の関係を識別するソーシャル・グラフを生成できるようにする。例えば、第1のユーザが、ソーシャル・ネットワーキング・システム1030において第2のユーザとの接続を確立する場合、ユーザ・プロフィール・ストア1036からの第1のユーザおよび第2のユーザのユーザアカウントは、ソーシャル・グラフにおいてノードとして機能し得る。つながりストア1038に記憶される第1のユーザと第2のユーザとのつながりは、第1のユーザおよび第2のユーザに関連付けられたノード間のエッジである。この例を続けると、次に、第2のユーザは、ソーシャル・ネットワーキング・システム1030内でメッセージを第1のユーザに送信し得る。記憶され得るメッセージを送信するというアクションは、ソーシャル・グラフで第1のユーザおよび第2のユーザを表す2つのノード間の別のエッジである。更に、メッセージそれ自体が識別され、第1のユーザおよび第2のユーザを表すノードに結ばれた別のノードとして、ソーシャル・グラフに含まれ得る。
別の例では、第1のユーザは、ソーシャル・ネットワーキング・システム1030によって保持される画像(または代替的に、ソーシャル・ネットワーキング・システム1030外の別のシステムによって保持される画像)において、第2のユーザをタグ付けし得る。画像はそれ自体、ソーシャル・ネットワーキング・システム1030内のノードとして表され得る。このタグ付け動作は、第1のユーザと第2のユーザとの間にエッジを作成し得るとともに、各ユーザと画像との間にエッジを作成し得、画像もソーシャル・グラフのノードである。更に別の例では、ユーザがイベントへの参加を確認する場合、ユーザおよびイベントは、ユーザ・プロフィール・ストア1036から得られるノードであり、イベントの参加は、アクティビティ・ログ1042から検索され得るノード間のエッジである。ソーシャル・グラフを生成して保持することにより、ソーシャル・ネットワーキング・システム1030は、多くの異なるタイプのオブジェクトおよびそれらのオブジェクト間のつながりを記述するデータを含み、ソーシャル関連情報の豊富なソースを提供する。
ウェブ・サーバ1032は、ネットワーク1050を通じてソーシャル・ネットワーキング・システム1030を1つまたは複数のユーザ・デバイス1010および/または1つまたは複数の外部システム1020にリンクする。ウェブ・サーバ1032は、ウェブ・ページおよびジャバ(Java)(登録商標)、ジャバスクリプト(JavaScript)(登録商標)、フラッシュ(Flash)、XML等の他のウェブ関連コンテンツにサービングする。ウェブ・サーバ1032は、メッセージを受信し、ソーシャル・ネットワーキング・システム1030と1つまたは複数のユーザ・デバイス1010との間でメッセージをルーティングするメールサーバまたは他のメッセージング機能を含み得る。メッセージは、インスタントメッセージ、待ち行列型メッセージ(例えば、電子メール)、テキストおよびSMSメッセージ、または任意の他の適するメッセージングフォーマットとすることができる。
API要求サーバ1034は、1つまたは複数の外部システム1020およびユーザ・デバイス1010が、1つまたは複数のAPI機能を呼び出すことによってソーシャル・
ネットワーキング・システム1030からのアクセス情報を呼び出せるようにする。API要求サーバ1034は、APIを呼び出すことにより、外部システム1020が情報をソーシャル・ネットワーキング・システム1030に送信できるようにもする。外部システム1020は、一実施形態では、ネットワーク1050を通じてAPI要求をソーシャル・ネットワーキング・システム1030に送信し、API要求サーバ1034はAPI要求を受信する。API要求サーバ1034は、API要求に関連付けられたAPIを呼び出して、適切な応答を生成することによって要求を処理し、API要求サーバ1034は、ネットワーク1050を通じて適切な応答を外部システム1020に通信する。例えば、API要求に応答して、API要求サーバ1034は、外部システム1020にログインしたことがあるユーザのつながり等のユーザに関連付けられたデータを収集し、収集されたデータを外部システム1020に通信する。別の実施形態では、ユーザ・デバイス1010は、外部システム1020と同じように、APIを通じてソーシャル・ネットワーキング・システム1030と通信する。
アクション・ロガー1040は、ソーシャル・ネットワーキング・システム1030内外でのユーザアクションについての通信をウェブ・サーバ1032から受信することが可能である。アクション・ロガー1040は、ユーザアクションについての情報をアクティビティ・ログ1042に入れ、ソーシャル・ネットワーキング・システム1030が、ソーシャル・ネットワーキング・システム1030内およびソーシャル・ネットワーキング・システム1030外でユーザがとった様々なアクションを発見できるようにする。特定のユーザがソーシャル・ネットワーキング・システム1030での別のノードに関してとった任意のアクションには、アクティビティ・ログ1042または同様のデータベース若しくは他のデータリポジトリに保持された情報を通して、各ユーザのアカウントが関連付けられ得る。識別された記憶されたソーシャル・ネットワーキング・システム1030内のユーザがとったアクションの例は、例えば、別のユーザへのつながりの追加、別のユーザへのメッセージの送信、別のユーザからのメッセージを読むこと、別のユーザに関連付けられたコンテンツの閲覧、別のユーザによって掲示されたイベントへの参加、画像の掲示、画像を掲示する試み、または別のユーザ若しくは別のオブジェクトと対話する他のアクションを含み得る。ユーザがソーシャル・ネットワーキング・システム1030内でアクションをとる場合、そのアクションはアクティビティ・ログ1042に記録される。一実施形態では、ソーシャル・ネットワーキング・システム1030は、エントリのデータベースとしてアクティビティ・ログ1042を保持する。アクションがソーシャル・ネットワーキング・システム1030内でとられる場合、そのアクションのエントリがアクティビティ・ログ1042に追加される。アクティビティ・ログ1042はアクションログと呼ばれ得る。
更に、ユーザアクションには、ソーシャル・ネットワーキング・システム1030とは別個の外部システム1020等のソーシャル・ネットワーキング・システム1030外のエンティティ内で生じるコンセプトおよびアクションを関連付け得る。例えば、アクション・ロガー1040は、ウェブ・サーバ1032から、外部システム1020とのユーザの対話を記述するデータを受信し得る。この例では、外部システム1020は、ソーシャル・グラフ内の構造化されたアクションおよびオブジェクトに従ってユーザの対話を報告する。
ユーザが外部システム1020と対話するアクションの他の例としては、ユーザが外部システム1020または別のエンティティ内で関心を表現すること、ユーザが、外部システム1020または外部システム1020内のウェブ・ページ1022aを考察するコメントをソーシャル・ネットワーキング・システム1030に掲示すること、ユーザが外部システム1020に関連付けられたユニフォームリソースロケータ(URL)または他の識別子をソーシャル・ネットワーキング・システム1030に掲示すること、ユーザが外
部システム1020に関連付けられたイベントに参加すること、または外部システム1020に関連するユーザによる任意の他のアクションが挙げられる。したがって、アクティビティ・ログ1042は、ソーシャル・ネットワーキング・システム1030のユーザと、ソーシャル・ネットワーキング・システム1030とは別個の外部システム1020との対話を記述するアクションを含み得る。
認証サーバ1044は、ソーシャル・ネットワーキング・システム1030のユーザの1つまたは複数のプライバシー設定を施行する。ユーザのプライバシー設定は、ユーザに関連付けられた特定の情報がいかに共有されることができるかを決定する。プライバシー設定は、ユーザに関連付けられた特定の情報の指定と、情報を共有することができる1つまたは複数のエンティティの指定とを含む。情報を共有することができるエンティティの例は、他のユーザ、アプリケーション、外部システム1020、または情報に潜在的にアクセスすることができる任意のエンティティを含み得る。ユーザによって共有することができる情報は、プロフィール写真等のユーザアカウント情報、ユーザに関連付けられた電話番号、ユーザのつながり、つながりの追加、ユーザ・プロフィール情報の変更等のユーザがとったアクション等を含む。
プライバシー設定指定は、異なるレベルの粒度で提供され得る。例えば、プライバシー設定は、他のユーザと共有されるべき特定の情報を識別し得、プライバシー設定は、プロフィール写真、家の電話番号、およびステータスを含む個人情報等の仕事用電話番号または特定の関連情報セットを識別する。代替的には、プライバシー設定は、ユーザに関連付けられた全ての情報に適用され得る。特定の情報にアクセスすることができるエンティティセットの指定も、様々なレベルの粒度で指定することができる。情報を共有することができる様々なエンティティセットは、例えば、ユーザの全ての友達、友達の全ての友達、全てのアプリケーション、または全ての外部システム1020を含み得る。一実施形態では、エンティティセットの指定はエンティティの一覧を含むことができる。例えば、ユーザは、特定の情報にアクセス許可されている外部システム1020のリストを提供し得る。別の実施形態では、指定は、情報にアクセス許可されていない例外と共にエンティティセットを含むことができる。例えば、ユーザは、全ての外部システム1020がユーザの仕事情報にアクセスすることを許可し得るが、仕事情報にアクセス許可されていない外部システム1020のリストを指定し得る。特定の実施形態は、特定の情報にアクセス許可されていない例外のリストを「ブロックリスト」と呼ぶ。ユーザによって指定されたブロックリストに属する外部システム1020は、プライバシー設定で指定される情報へのアクセスから遮断される。情報の指定の粒度および情報が共有されるエンティティの指定の粒度の様々な組合せが可能である。例えば、全ての個人情報は友達と共有され得、一方、全ての仕事情報は、友達の友達と共有され得る。
認証サーバ1044は、ユーザに関連付けられた特定の情報にユーザの友達、外部システム1020、および/または他のアプリケーションおよびエンティティがアクセスすることができるか否かを判断する論理を含む。外部システム1020は、ユーザの仕事用電話番号等のユーザのより私的で機密性のある情報にアクセスするため、認証サーバ1044からの認証を必要とし得る。ユーザのプライバシー設定に基づいて、認証サーバ1044は、別のユーザ、外部システム1020、アプリケーション、または別のエンティティが、ユーザがとったアクションについての情報を含め、ユーザに関連付けられた情報にアクセス許可されているか否かを判断する。
ソーシャル・ネットワーキング・システム1030は、クラスタリング・モジュール1046を含み得る。クラスタリング・モジュール1046は、一意のIDを生成し、それらをソーシャル・グラフのノードに対して割り当て得る。さらに、クラスタリング・モジュール1046は、一意のIDを利用して、ソーシャル・ネットワーキング・システム1
030にわたってソーシャル・グラフをパーティションに分け得る。一意のID空間は、ソーシャル・ネットワーキング・システム1030のマシン(例えば、データベース・サーバまたはキャッシュ・システム)に対してユーザをマッピングするために使用され得る。クラスタリング・モジュール1046は、マッピングに基づいて、ソーシャル・ネットワーキング・システム1030のユーザをマシンへルーティングし得る。クラスタリング・モジュール1046は、トラフィック使用量パターン、またはマシンが過負荷を掛けられているか、もしくは軽負荷を掛けられているかなどの負荷分散検討事項に基づいて、ユーザをマシンに対してマッピングまたはルーティングし得る。一実施形態において、クラスタリング・モジュール1046は、図1のクラスタリング・モジュール1046として実装され得る。
ハードウェア実装
上記プロセスおよび特徴は、広範囲のマシンおよびコンピュータシステムアーキテクチャにより、広範囲のネットワークおよび計算環境で実施することができる。図11は、本発明の実施形態により本明細書に記載される実施形態の1つまたは複数の実施に使用され得るコンピュータ・システム1100の例を示す。コンピュータ・システム1100は、コンピュータ・システム1100に本明細書に記載されるプロセスおよび特徴を実行させる命令セットを含む。コンピュータ・システム1100は、他のマシンに接続(例えば、ネットワーク接続)され得る。ネットワーク接続された展開では、コンピュータ・システム1100は、クライアント−サーバネットワーク環境でのサーバマシン若しくはクライアントマシンとして、またはピアツーピア(若しくは分散)ネットワーク環境でのピアマシンとして動作し得る。本発明の実施形態では、コンピュータ・システム1100は、本明細書に記載されたソーシャル・ネットワーキング・システムの構成要素とし得る。本発明の実施形態では、コンピュータ・システム1100は、ソーシャル・ネットワーキング・システム1030の全てまたは部分を構成する多くのうちの1つのサーバとし得る。
コンピュータ・システム1100は、プロセッサ1102、キャッシュ1104、および本明細書に記載されるプロセスおよび特徴に向けられた、コンピュータ可読媒体に記憶された1つまたは複数の実行可能モジュールおよびドライバを含む。更に、コンピュータ・システム1100は、高性能入/出力(I/O)バス1106および標準I/Oバス1108を含む。ホスト・ブリッジ1110は、プロセッサ1102を高性能I/Oバス1106に結合し、一方、I/Oバス・ブリッジ1112は、2つのバス1106および1108を互いに結合する。システム・メモリ1114および1つまたは複数のネットワーク・インターフェース1116は、高性能I/Oバス1106に結合する。コンピュータ・システム1100は、ビデオメモリ(図示せず)に結合されたビデオメモリおよび表示装置を更に含み得る。大容量ストレージ1118およびI/Oポート1120は、標準I/Oバス1108に結合する。コンピュータ・システム1100は任意選択的に、キーボードおよびポインティングデバイス、表示装置、または標準I/Oバス1108に結合された他の入/出力デバイス(図示せず)を含み得る。まとめて、これらの要素は、カリフォルニア州サンタクララに所在のインテル社(Intel Corporation)製のx86互換性プロセッサ、カリフォルニア州サニーベールに所在のアドバンストマイクロデバイセズ(Advanced Micro Devices)(AMD)社製のx86互換性プロセッサ、および任意の他の適するプロセッサに基づくコンピュータ・システムを含むが、これらに限定されない広いカテゴリのコンピュータハードウェアシステムを表すことが意図される。
オペレーティングシステムは、ソフトウェアアプリケーション(図示せず)とのデータの入出力を含め、コンピュータ・システム1100の動作を管理し制御する。オペレーティングシステムは、システムで実行中のソフトウェアアプリケーションとシステムのハードウェア構成要素との間のインターフェースを提供する。リナックス(LINUX)(登
録商標)オペレーティングシステム、カリフォルニア州クパチーノに所在のアップルコンピュータ社(Apple Computer Inc.)から入手可能なアップルマッキントッシュ(Apple Macintosh)(登録商標)オペレーティングシステム、ユニックス(UNIX)(登録商標)オペレーティングシステム、マイクロソフト(Microsoft)(登録商標)ウィンドウズ(登録商標)オペレーティングシステム、BSDオペレーティングシステム等の任意の適するオペレーティングシステムが使用され得る。他の実施も可能である。
コンピュータ・システム1100の要素について、更に詳細に以下に説明する。特に、ネットワーク・インターフェース1116は、コンピュータ・システム1100と、イーサネット(Ethernet)(登録商標)(例えば、IEEE802.3)ネットワーク、バックプレーン等の任意の広範囲のネットワークとの間の通信を提供する。大容量ストレージ1118は、上記で識別された各計算システムによって実施される上記プロセスおよび特徴を実行するためのデータおよびプログラミング命令の永続的な記憶を提供し、一方、システム・メモリ1114(例えば、DRAM)は、プロセッサ1102によって実行される場合、データおよびプログラミング命令の一時的な記憶を提供する。I/Oポート1120は、コンピュータ・システム1100に結合され得る追加の周辺デバイス間に通信を提供する1つまたは複数のシリアルおよび/またはパラレル通信ポートとし得る。
コンピュータ・システム1100は、様々なシステムアーキテクチャを含み得、コンピュータ・システム1100の様々な構成要素は再構成され得る。例えば、キャッシュ1104は、プロセッサ1102と共にオンチップであり得る。代替的には、キャッシュ1104およびプロセッサ1102は、「プロセッサモジュール」として一緒にパッケージされ得、プロセッサ1102は「プロセッサコア」と呼ばれる。更に、本発明の特定の実施形態は、上記構成要素の全てを必要とせず、且つ含まないことがある。例えば、標準I/Oバス1108に結合された周辺デバイスは、高性能I/Oバス1106に結合し得る。加えて、幾つかの実施形態では、単一のバスのみが存在し得、コンピュータ・システム1100の構成要素は単一のバスに結合される。更に、コンピュータ・システム1100は、追加のプロセッサ、記憶デバイス、またはメモリ等の追加の構成要素を含み得る。
一般に、本明細書に記載されるプロセスおよび特徴は、オペレーティングシステムの一環としてまたは特定のアプリケーション、構成要素、プログラム、オブジェクト、モジュール、または「プログラム」と呼ばれる一連の命令として実施され得る。例えば、1つまたは複数のプログラムが、本明細書に記載される特定のプロセスの実行に使用され得る。プログラムは通常、1つまたは複数のプロセッサによって読み取られて実行されると、本明細書に記載されるプロセスおよび特徴を実行する動作をコンピュータ・システム1100に実行させる、コンピュータ・システム1100内の様々なメモリおよび記憶デバイス内の1つまたは複数の命令を含む。本明細書に記載されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア(例えば、特定用途向け集積回路)、またはそれらの任意の組合せで実施され得る。
一実装形態では、本明細書に記載されるプロセスおよび特徴は、個々にまたは分散計算環境で集合的にコンピュータ・システム1100によって実行される一連の実行可能モジュールとして実施される。上記モジュールは、ハードウェア、コンピュータ可読媒体(またはマシン可読媒体)に記憶された実行可能モジュール、または両方の組合せによって実現され得る。例えば、モジュールは、プロセッサ1102等のハードウェアシステム内のプロセッサによって実行される複数または一連の命令を含み得る。まず、一連の命令は、大容量ストレージ1118等の記憶デバイスに記憶され得る。しかし、一連の命令は、任意の適するコンピュータ可読記憶媒体に記憶することができる。更に、一連の命令は、ロ
ーカルに記憶される必要はなく、ネットワーク・インターフェース1116を通じて、ネットワーク上のサーバ等のリモート記憶デバイスから受信することができる。命令は、大容量ストレージ1118等の記憶デバイスからシステム・メモリ1114にコピーされ、次に、プロセッサ1102によってアクセスされ実行される。様々な実装形態では、1つまたは複数のモジュールは、並列処理環境での複数のサーバ等の1つまたは複数のロケーションにある1つまたは複数のプロセッサによって実行することができる。
コンピュータ可読媒体の例としては、揮発性メモリデバイスおよび不揮発性メモリデバイス等の記録可能型媒体、固体状態メモリ、フロッピー(登録商標)および他のリムーバブルディスク、ハードディスクドライブ、磁気媒体、光ディスク(例えば、コンパクトディスク読み取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD))、他の同様の非一時的(または一時的)有形(または非有形)記憶媒体、またはコンピュータ・システム1100によって実行されて、本明細書に記載されるプロセスおよび特徴の任意の1つまたは複数を実行する一連の命令の記憶、符号化、または搬送に適する任意のタイプの媒体が挙げられるが、これらに限定されない。
説明のため、説明の完全な理解を提供するために、多くの特定の詳細が記載されている。しかし、これらの特定の詳細なしで本開示の実施形態が実施可能なことが当業者には明らかである。幾つかの場合、説明を曖昧にしないように、モジュール、構造、プロセス、特徴、およびデバイスがブロック図の形態で示されている。他の場合、機能ブロック図および流れ図は、データおよび論理フローを表すために示されている。ブロック図および流れ図(例えば、モジュール、ブロック、構造、デバイス、特徴等)の構成要素は、本明細書に明示的に記載され示される以外の方法で様々に組み合せられ、分離され、除去され、記録され、置換され得る。
本明細書での「一実施形態」、「実施形態」、「他の実施形態」、「一連の実施形態」、「幾つかの実施形態」、「様々な実施形態」等への参照は、その実施形態に関連して説明された特定の特徴、設計、構造、または特性が、本開示の少なくとも一つの実施形態に含まれることを意味する。例えば、本明細書での様々な箇所での「一実施形態において」または「実施形態において」という語句の出現は必ずしも、全てが同じ実施形態を指すわけではなく、他の実施形態と相互に排他的な別個または代替の実施形態であるわけでもない。更に、「実施形態」等の明示的な参照があるか否かに関係なく、様々な特徴が記載され、様々な特徴は、様々に組合せられ得、幾つかの実施形態に含まれ得るが、他の実施形態では様々に省かれることもできる。同様に、幾つかの実施形態では好ましいか、または必要とされ得るが、他の実施形態ではそうではない様々な特徴が記載されている。
本明細書で使用される用語は主に、読みやすさおよび教示を目的として選択され、本発明の主題を描写するか、または限定するために選択されていない。したがって、範囲がこの詳細な説明によってではなく、本明細書に基づく出願に対して発行される任意の特許請求の範囲によって限定されることが意図される。したがって、本発明の実施形態の開示は、範囲の限定ではなく例示を意図し、範囲は以下の特許請求の範囲に記載される。