"方法であって、第1キャッシュノードで、第1ノードと第2ノードとの間の関連付けを追加する要求を受信することであって、前記第1ノードは、クラスタの前記第1キャッシュノードに割り当てられた複数の識別子の第1範囲内の第1識別子によって識別され、前記第2ノードは、前記クラスタの第2キャッシュノードに割り当てられた複数の識別子の第2範囲内の第2識別子によって識別されることと;前記第1ノードと前記第2ノードとの間の前記関連付けを示すデータを前記第1キャッシュノードのメモリ内に格納することと;前記第2キャッシュノードにメッセージを送信することであって、前記メッセージは、前記第2キャッシュノードに、前記第1ノードと前記第2ノードとの間の前記関連付けを前記第2キャッシュノードのメモリ内に追加させるように動作することとを有する方法。前記方法はさらに、前記第2識別子に対応するシャード識別子を識別することを有し、前記第2キャッシュノードは、前記識別されたシャード識別子に関連する、請求項1に記載の方法。前記メッセージは、前記メッセージが前記第1ノードと前記第2ノードとの間のキャッシュレイヤ内で双方向関連付けを確立するのに必要な更新を含むことを、前記第2キャッシュノードにシグナリングする、請求項1に記載の方法。前記方法はさらに、前記第1識別子に関連するシャード識別子に対応するリーダキャッシュノードに前記メッセージを転送することを有する、請求項1に記載の方法。前記第1ノードおよび前記第2ノードは、複数のノードタイプのうちの1つのノードタイプを有するグラフ構造内に含まれる、請求項1に記載の方法。前記関連付けは、複数の関連付けタイプのうちの識別された関連付けタイプである、請求項1に記載の方法。前記要求は、関連付けタイプを識別し、前記方法はさらに、メモリ内で、複数のノードの前記第1ノードと、複数の関連付けタイプのうちの関連付けタイプとに対応する関連付けセットごとに、第1インデックスおよび第2インデックスを維持することであって、前記第1インデックスは、エントリの順序付き配列を備え、各エントリは、前記第1ノードに関連する第2ノードのノード識別子およびソート属性を含み、前記第2インデックスは、前記第1ノードに関連するそれぞれの第2ノードの前記ノード識別子に対応するエントリを備えるハッシュテーブルを有することと;第1関連付けタイプと前記第1ノード識別子とに対応する第1インデックスおよび第2インデックスに前記第2ノード識別子を追加するために、前記第1関連付けタイプと前記第1ノード識別子とに対して前記メモリにアクセスすることとを有する、請求項1に記載の方法。キャッシュノードのクラスタ内で動作可能なキャッシュノードであって、1または複数のプロセッサと;メモリと;コンピュータ可読命令を格納する非一時的記憶媒体とを備え、前記命令は、実行された時に、前記1または複数のプロセッサに、第1ノードと第2ノードとの間の関連付けを追加する要求を受信することであって、前記第1ノードは、クラスタの前記キャッシュノードに割り当てられた複数の識別子の第1範囲内の第1識別子によって識別され、前記第2ノードは、前記クラスタの第2キャッシュノードに割り当てられた複数の識別子の第2範囲内の第2識別子によって識別されることと;前記第1ノードと前記第2ノードとの間の前記関連付けを示すデータを前記キャッシュノードのメモリ内に格納することと;前記第2キャッシュノードにメッセージを送信することであって、前記メッセージは、前記第2キャッシュノードに、前記第1ノードと前記第2ノードとの間の前記関連付けを前記第2キャッシュノードのメモリ内に追加させるように動作することとを行わせるように動作する、キャッシュノード。前記命令はさらに、前記1または複数のプロセッサに、前記第2識別子に対応するシャード識別子を識別させるように動作し、前記第2キャッシュノードは、前記識別されたシャード識別子に関連する、請求項8に記載のキャッシュノード。前記メッセージは、前記メッセージが前記第1ノードと前記第2ノードとの間のキャッシュレイヤ内で双方向関連付けを確立するのに必要な更新を含むことを、前記第2キャッシュノードにシグナリングする、請求項8に記載のキャッシュノード。前記命令はさらに、前記1または複数のプロセッサに、前記第1識別子に関連するシャード識別子に対応するリーダキャッシュノードに前記メッセージを転送させるように動作する、請求項8に記載のキャッシュノード。前記第1ノードおよび前記第2ノードは、複数のノードタイプのうちの1つのノードタイプを有するグラフ構造内に含まれる、請求項8に記載のキャッシュノード。前記関連付けは、複数の関連付けタイプのうちの識別された関連付けタイプである、請求項8に記載のキャッシュノード。前記要求は、関連付けタイプを識別し、前記命令はさらに、前記1または複数のプロセッサに、メモリ内で、複数のノードの前記第1ノードと、複数の関連付けタイプのうちの関連付けタイプとに対応する関連付けセットごとに、第1インデックスおよび第2インデックスを維持することであって、前記第1インデックスは、エントリの順序付き配列を備え、各エントリは、前記第1ノードに関連する第2ノードのノード識別子およびソート属性を含み、前記第2インデックスは、前記第1ノードに関連するそれぞれの第2ノードの前記ノード識別子に対応するエントリを備えるハッシュテーブルを有することと;第1関連付けタイプと前記第1ノード識別子とに対応する第1インデックスおよび第2インデックスに前記第2ノード識別子を追加するために、前記第1関連付けタイプと前記第1ノード識別子とに対して前記メモリにアクセスすることとを行わせるように動作する、請求項8に記載のキャッシュノード。コンピュータ可読命令を格納する非一時的記憶媒体であって、前記命令は、実行された時に、1または複数のプロセッサに、第1キャッシュノードで、第1ノードと第2ノードとの間の関連付けを追加する要求を受信することであって、前記第1ノードは、クラスタの前記第1キャッシュノードに割り当てられた複数の識別子の第1範囲内の第1識別子によって識別され、前記第2ノードは、前記クラスタの第2キャッシュノードに割り当てられた複数の識別子の第2範囲内の第2識別子によって識別されることと;前記第1ノードと前記第2ノードとの間の前記関連付けを示すデータを前記第1キャッシュノードのメモリ内に格納することと;前記第2キャッシュノードにメッセージを送信することであって、前記メッセージは、前記第2キャッシュノードに、前記第1ノードと前記第2ノードとの間の前記関連付けを前記第2キャッシュノードのメモリ内に追加させるように動作することとを行わせるように動作する、非一時的記憶媒体。前記命令はさらに、前記1または複数のプロセッサに、前記第2識別子に対応するシャード識別子を識別させるように動作し、前記第2キャッシュノードは、前記識別されたシャード識別子に関連する、請求項15に記載の記憶媒体。前記メッセージは、前記メッセージが前記第1ノードと前記第2ノードとの間のキャッシュレイヤ内で双方向関連付けを確立するのに必要な更新を含むことを、前記第2キャッシュノードにシグナリングする、請求項15に記載の記憶媒体。前記命令はさらに、前記1または複数のプロセッサに、前記第1識別子に関連するシャード識別子に対応するリーダキャッシュノードに前記メッセージを転送させるように動作する、請求項15に記載の記憶媒体。前記関連付けは、複数の関連付けタイプのうちの識別された関連付けタイプである、請求項15に記載の記憶媒体。前記要求は、関連付けタイプを識別し、前記命令はさらに、前記1または複数のプロセッサに、メモリ内で、複数のノードの前記第1ノードと、複数の関連付けタイプのうちの関連付けタイプとに対応する関連付けセットごとに、第1インデックスおよび第2インデックスを維持することであって、前記第1インデックスは、エントリの順序付き配列を備え、各エントリは、前記第1ノードに関連する第2ノードのノード識別子およびソート属性を含み、前記第2インデックスは、前記第1ノードに関連するそれぞれの第2ノードの前記ノード識別子に対応するエントリを備えるハッシュテーブルを有することと;第1関連付けタイプと前記第1ノード識別子とに対応する第1インデックスおよび第2インデックスに前記第2ノード識別子を追加するために、前記第1関連付けタイプと前記第1ノード識別子とに対して前記メモリにアクセスすることとを行わせるように動作する、請求項15に記載の記憶媒体。したがって、クライアントは、Memcachedを一次的キャッシュとして扱わなければならず、Memcachedに格納されたデータが、必要な時にまだそこにあると仮定することはできない。特定の実施形態は、ノードと、エッジがグラフ内で接続するノードの間の関連付けまたは関係を定義するエッジとを含むグラフとしてモデル化された情報を格納し提供する分散キャッシングシステムに関する。特定の実施形態では、グラフは、ソーシャルグラフであるかこれを含み、分散キャッシングシステムは、より大きいネットワーキングシステム、インフラストラクチャ、または統合ソーシャルネットワーク環境を可能にするプラットフォームの一部である。本開示では、ソーシャルネットワーク環境は、ソーシャルグラフ情報を含むソーシャルグラフに関して説明される場合がある。実際に、本開示の特定の実施形態は、ソーシャルネットワーク環境によってまたはこれのために格納されるデータのほとんどまたはすべてを、ソーシャルグラフとして表すことができるという事実に依存し、これを活用し、またはこれを利用する。特定の実施形態は、本明細書で説明されるものなどのソーシャルネットワーク環境のユーザの指数関数的に増加する人数に伴って効率的に、知的に、かつ成功してスケーリングすることのできるコスト効率のよいインフラストラクチャを提供する。特定の実施形態は、ノードと、エッジがグラフ内で接続するノードの間の関連付けまたは関係を定義するエッジとを含むグラフとしてモデル化された情報を格納し提供する分散キャッシングシステムに関する。特定の実施形態では、グラフは、ソーシャルグラフであるか又はソーシャルグラフを含み、分散キャッシングシステムは、より大きいネットワーキングシステム、インフラストラクチャ、または統合ソーシャルネットワーク環境を可能にするプラットフォームの一部である。本開示では、ソーシャルネットワーク環境は、ソーシャルグラフ情報を含むソーシャルグラフに関して説明される場合がある。実際に、本開示の特定の実施形態は、ソーシャルネットワーク環境によってまたはソーシャルネットワーク環境のために格納されるデータのほとんどまたはすべてを、ソーシャルグラフとして表すことができるという事実に依存し、これを活用し、またはこれを利用する。特定の実施形態は、本明細書で説明されるものなどのソーシャルネットワーク環境のユーザの指数関数的に増加する人数に伴って効率的に、知的に、かつ成功してスケーリングすることのできるコスト効率のよいインフラストラクチャを提供する。特定の実施形態では、本明細書で説明される分散キャッシングシステムおよびバックエンドインフラストラクチャは、大規模での低レイテンシ、1要求あたりのより低いコスト、開発者にとって使い易いフレームワーク、マルチマスタをサポートするインフラストラクチャ、格納されたデータのアクセスをHypertextPreprocessorPHP以外の言語で記述されたクライアントに提供するインフラストラクチャ、本明細書で例によって説明される、ソーシャルグラフの関連付けエッジとオブジェクトノードとの両方を用いる組み合わされたクエリを可能にするインフラストラクチャ、および異なる永続データストアを異なるタイプのデータに使用することを可能にするインフラストラクチャのうちの1または複数を提供する。さらに、特定の実施形態は、キャッシング永続性レプリケーションインフラストラクチャからのデータアクセスAPIのきれいな分離cleanseparationを可能にするインフラストラクチャ、ライトスルー/リードスルーキャッシングをサポートするインフラストラクチャ、計算をデータのより近くに移動するインフラストラクチャ、異なるストレージスキーマおよびバックエンドへの透過的マイグレーションを可能にするインフラストラクチャ、およびデータオブジェクトアクセスの効率を改善するインフラストラクチャのうちの1または複数を提供する。さらに、本明細書で使用される時に、またはは、およびならびにまたはを意味する場合がある、すなわち、またはは、明示的に述べられるか暗黙のうちに暗示されない限り、およびを必ずしも除外しない。特定の実施形態は、インターネットなど、複数のネットワークアドレス可能システムを含む広域ネットワーク環境で動作することができる。図3に、様々な例示的な実施形態がその中で動作することのできる、例示的なネットワーク環境を示す。ネットワーククラウド60は、一般に、本明細書で説明されるシステムおよびホストがそれを介して通信できる、1または複数の相互接続されたネットワークを表す。ネットワーククラウド60は、パケットベースの広域ネットワークインターネットなど、プライベートネットワーク、無線ネットワーク、衛星ネットワーク、セルラネットワーク、ページングネットワーク、および類似物を含むことができる。図3に示されているように、特定の実施形態は、ソーシャルネットワーキングシステム20および1または複数のクライアントデバイス30を備えるネットワーク環境内で動作することができる。クライアントデバイス30は、ネットワークサービスプロバイダ、無線搬送波、または任意の他の適切な手段を介してネットワーク環境に動作可能に接続される。1つの例示的な実施形態では、ソーシャルネットワーキングシステム20は、本明細書で説明されるように、ユーザがお互いと通信するか他の形でやり取りし、ユーザプロファイルなどのコンテンツにアクセスすることを可能にするコンピューティングシステムを備える。ソーシャルネットワーキングシステム20は、様々な例示的な実施形態で、1または複数の物理サーバ22およびデータストア24を備えるネットワークアドレス可能システムである。1または複数の物理サーバ22は、たとえばルータおよび/またはネットワーキングスイッチ26のセットを介してコンピュータネットワーク60に動作可能に接続される。例示的な実施形態では、1または複数の物理サーバ22によってホスティングされる機能性は、ウェブサーバまたはHTTPサーバ、FTPサーバ、ならびに、限定なしに、CommonGatewayInterfaceCGIスクリプト、PHPHyper-textPreprocessorPHP、ActiveServerPagesASP、ハイパーテキストマークアップ言語HTML、ExtensibleMarkupLanguageXML、JAVA登録商標、JAVASCRIPT登録商標、AsynchronousJAVASCRIPT登録商標andXMLAJAX、および類似物を使用して実施されたウェブページおよびアプリケーションを含むことができる。物理サーバ22は、ソーシャルネットワーキングシステム20の動作に関する機能性をホスティングすることができる。たとえば、ソーシャルネットワーキングシステム20は、1または複数のクライアントデバイス30の1または複数のユーザが、情報を見、ポストすると同時に、ウェブサイトを介してお互いと通信することを可能にするウェブサイトをホスティングすることができる。以下では、複数のサーバ22は、サーバ22と呼ばれる場合があるが、サーバ22は、たとえばソーシャルネットワーキングシステム20ならびに他のコンテンツ配布サーバ、データストア、およびデータベースをホスティングする多数のサーバを含むことができる。データストア24は、ソーシャルネットワーキングシステムの動作に関連し、動作を可能にするコンテンツおよびデータをディジタルデータオブジェクトとして格納することができる。データオブジェクトは、特定の実装形態で、通常はデータファイル、データベース、またはレコードに格納されまたはその中で実施されるディジタル情報のアイテムである。コンテンツオブジェクトは、テキストたとえば、ASCII、SGML、HTML、イメージたとえば、jpeg、tif、およびgif、グラフィックスベクトルベースのまたはビットマップ、オーディオ、ビデオたとえば、mpeg、または他のマルチメディア、およびその組合せを含む多数の形をとることができる。コンテンツオブジェクトデータは、実行可能コードオブジェクトたとえば、ブラウザウィンドウまたはフレーム内で実行可能なゲーム、ポッドキャスト、その他を含むこともできる。論理的に、データストア24は、関係データベースおよびオブジェクト指向データベースなど、1または複数の物理システムに格納された論理的に関係するレコードまたはファイルの統合されたコレクションとして情報を維持する様々な別々のデータベースおよび統合されたデータベースのうちの1または複数に対応する。構造的に、データストア24は、一般に、データストレージおよび管理システムの大きいクラスのうちの1または複数を含むことができる。特定の実施形態では、データストア24は、1または複数のデータベースサーバ、マスストレージメディア、メディアライブラリシステム、ストレージエリアネットワーク、データストレージクラウド、および類似物などのコンポーネントを含む任意の適切な物理システム1または複数によって実施されることができる。1つの例示的な実施形態では、データストア24は、1または複数のサーバ、データベースたとえば、MySQL、および/またはデータウェアハウスを含む。データストア24は、異なるソーシャルネットワーキングシステム20のユーザおよび/またはクライアントデバイス30に関連するデータを含むことができる。特定の実施形態では、ソーシャルネットワーキングシステム20は、システム20のユーザごとにユーザプロファイルを維持する。ユーザプロファイルは、ソーシャルネットワークのユーザを記述するデータを含み、このデータは、たとえば、正式名称人のファーストネーム、ミドルネーム、およびラストネーム、企業の商号および/または会社名など、生物学的、人口統計的、ならびに、職歴、学歴、趣味または好み、地理的位置、および追加の記述データなどの他のタイプの記述情報を含むことができる。たとえば、ユーザプロファイルは、ユーザの誕生日、関係状況relationshipstatus、居住都市、および類似物を含むことができる。システム20はさらに、異なるユーザの間の1または複数の関係を記述するデータを格納することができる。関係情報は、類似するまたは共通の職歴、グループメンバシップ、趣味、または学歴を有するユーザを示すことができる。ユーザプロファイルは、他のユーザによるユーザの情報へのアクセスを管理するプライバシセッティングを含むこともできる。クライアントデバイス30は、一般に、コンピュータネットワークを介してたとえば、リモートに通信する機能性を含むコンピュータまたはコンピューティングデバイスである。クライアントデバイス30は、他の適切なコンピューティングデバイスの中でも、デスクトップコンピュータ、ラップトップコンピュータ、携帯情報端末PDA、車内もしくは車外のナビゲーションシステム、スマートホンもしくは他のセルラホンもしくは携帯電話機、またはモバイルゲーミングデバイスでもよい。クライアントデバイス30は、ウェブブラウザたとえば、MicrosoftWINDOWS登録商標InternetExplorer、MozillaFirefox、AppleSafari、GoogleChrome、およびOperaなどなど、コンピュータネットワークを介してコンテンツにアクセスし、これを見るための、1または複数のクライアントアプリケーションを実行することができる。特定の実装形態では、クライアントアプリケーションは、クライアントデバイス30のユーザが、ソーシャルネットワーキングシステム20によってホスティングされるリソースなど、取り出されるべき特定のネットワークリソースのアドレスを入力することを可能にする。これらのアドレスを、UniformResourceLocatorすなわちURLとすることができる。さらに、ページまたは他のリソースが取り出された後に、クライアントアプリケーションは、ユーザが他のリソースへのハイパーリンクをクリックする時に、他のページまたは他のリソースへのアクセスを提供することができる。たとえば、そのようなハイパーリンクは、ウェブページ内に配置され得、ユーザが別のページへのURLを入力し、そのページを読み出すための自動化された形を提供することができる。図1に、図3に示されたソーシャルネットワーキングシステム20のバックエンド機能を実施することのできるネットワーキングシステム、アーキテクチャ、またはインフラストラクチャ100以下ではネットワーキングシステム100と呼ばれるの例示的な実施形態を示す。特定の実施形態では、ネットワーキングシステム100は、ネットワーキングシステム100のユーザが、ネットワーキングシステム100によって提供されるソーシャルネットワーキングサービスを介してお互いとならびに第三者とやり取りすることを可能にする。たとえば、リモートユーザコンピューティングデバイスたとえば、パーソナルコンピュータ、ネットブック、マルチメディアデバイス、セルラ電話機特にスマートホンなどのユーザは、情報を見、情報を格納しもしくは更新アップデートし、情報を通信し、または他のユーザ、サードパーティウェブサイト、ウェブページ、もしくはウェブアプリケーション、もしくはネットワーキングシステム100によって格納され、ホスティングされ、またはアクセス可能である他の情報と他の形でやり取り相互作用するために、少なくとも部分的にネットワーキングシステム100によってホスティングされまたはアクセス可能であるウェブサイト、ウェブページ、またはウェブアプリケーションにアクセスするために、ウェブブラウザまたは他のユーザクライアントアプリケーションを介してネットワーキングシステム100にアクセスすることができる。特定の実施形態では、ネットワーキングシステム100は、下でより詳細に説明されるように、ユーザ、コンセプト、トピック、および他の情報データを表すグラフノードと、グラフノードの間を接続するかその間の関係を定義するグラフエッジとを含むグラフを維持する。図1および図5を参照すると、特定の実施形態で、ネットワーキングシステム100は、1または複数のデータセンタ102を含む。たとえば、ネットワーキングシステム100は、様々な地理的領域内に配置されたユーザにサービス提供するためにそれぞれの領域内に戦略的に配置された複数のデータセンタ102を含むことができる。特定の実施形態では、各データセンタは、ネットワーキングシステム100のユーザへおよびネットワーキングシステム100のユーザから情報を通信する複数のクライアントサーバまたはウェブサーバ104以下ではクライアントサーバ104を含む。たとえば、リモートユーザコンピューティングデバイスのユーザは、ロードバランサloadbalancersまたは他の適切なシステムを介し、ネットワークおよびサービスプロバイダの任意の適切な組合せを介して、クライアントサーバ104と通信することができる。クライアントサーバ104は、ユーザ要求に応答するために構造化文書を生成するためにデータを取り出すために、本明細書で説明されるキャッシングシステムに照会することができる。クライアントサーバ104のそれぞれは、1または複数のフォロワ分散キャッシュクラスタまたはフォロワ分散キャッシュリング106以下ではフォロワキャッシュクラスタ106と通信する。図示の実施形態では、データセンタ102は、それぞれがウェブサーバ104のサブセットにサービス提供する3つのフォロワキャッシュクラスタ106を含む。特定の実施形態では、フォロワキャッシュクラスタ106とフォロワキャッシュクラスタ106とがサービス提供するクライアントサーバ104は、ビルディング内、室内、または他の集中化された位置など、非常に近接して配置され、これは、インフラストラクチャに関連するコストたとえば、ワイヤまたは他の通信信号線などならびにクライアントサーバ104とそれぞれのフォロワキャッシュノードクラスタ106との間のレイテンシを減らす。しかし、或る実施形態では、フォロワキャッシュクラスタ106のそれぞれおよびそれらがそれぞれサービス提供するクライアントサーバ104を、集中化された位置内に配置することができるが、フォロワキャッシュクラスタ106のそれぞれおよびそのフォロワキャッシュクラスタ106がそれぞれサービス提供するそれぞれのクライアントサーバ104を、所与のデータセンタの他のフォロワキャッシュクラスタ106およびそれぞれのクライアントサーバ104とは異なる位置に配置することができる、すなわち、所与の領域の所与のデータセンタのフォロワキャッシュクラスタ106およびそのクラスタがサービス提供するそれぞれのクライアントサーバ104を、その領域内の様々な位置のいたるところに分散させることができる。特定の実施形態では、各データセンタ102はさらに、所与のデータセンタ102のフォロワキャッシュクラスタ106とその所与のデータセンタ102の永続ストレージデータベース110との間で情報を通信するリーダキャッシュクラスタ108を含む。特定の実施形態では、データベース110は、関係データベースである。特定の実施形態では、リーダキャッシュクラスタ108は、データベース110の任意の適切な実装形態と相互作用するように動作可能なプラグインを含むことができる。たとえば、データベース110は、動的可変プラグインアーキテクチャdynamically-variableplug-inarchitectureとして実施され得、MySQLおよび/またはたとえばとりわけHAYSTACK、CASSANDRAなどの任意の適切な関係データベース管理システムを利用することができる。1実装形態では、プラグインは、グラフノードおよびグラフエッジとしてキャッシングレイヤに格納されたデータを1または複数のテーブルまたはフラットファイルを含む関係データベースに適するクエリおよびコマンドに変換することなど、様々な変換動作を実行する。特定の実施形態では、リーダキャッシュクラスタ108は、フォロワキャッシュクラスタ106からのデータベース110への書込要求をも調整し、時々、リーダキャッシュクラスタ108内でキャッシングされたまたはリーダキャッシュクラスタ108内でキャッシングされていない場合にデータベース110内に格納された情報に関するフォロワキャッシュクラスタ106からの読取要求をも調整する。特定の実施形態では、リーダキャッシュクラスタ108はさらに、それぞれのデータセンタ102のフォロワキャッシュクラスタ106内に格納された情報の同期化を調整する。すなわち、特定の実施形態では、所与のデータセンタ102のリーダキャッシュクラスタ108は、そのデータセンタ102のフォロワキャッシュクラスタ106同士の間のキャッシュ一貫性たとえば、キャッシングされる情報を維持し、フォロワキャッシュクラスタ106とリーダキャッシュクラスタ108との間のキャッシュ一貫性を維持し、リーダキャッシュクラスタ108内でキャッシングされた情報をデータベース110内に格納するように構成される。1実装形態では、リーダキャッシュクラスタ108およびフォロワキャッシュクラスタ106を、クライアントサーバ104とデータベース110との間のキャッシングレイヤと考えることができる。1実装形態では、キャッシングレイヤは、ライトスルー/リードスルーキャッシングレイヤであり、すべての読取および書込は、キャッシングレイヤをトラバースするtraverse。1実装形態では、キャッシングレイヤは、関連付け情報を維持し、したがって、そのような情報に関するクエリを処理することができる。他のクエリは、実行のためにデータベース110にパススルーされる。データベース110は、一般に、他のクエリタイプを処理するための他のキャッシングレイヤをそれ自体で含むことができるデータベースシステムを意味する。各フォロワキャッシュクラスタ106は、複数のフォロワキャッシュノード112を含むことができ、このフォロワキャッシュノード112のそれぞれは、個々のコンピュータ、コンピューティングシステム、またはサーバ上で実行中であってもよい。しかし、上で説明したように、所与のフォロワキャッシュクラスタ106のフォロワキャッシュノード112のそれぞれを、集中化された位置内に配置することができる。同様に、各リーダキャッシュクラスタ108は、複数のリーダキャッシュノード114を含むことができ、このリーダキャッシュノード114のそれぞれは、個々のコンピュータ、コンピューティングシステム、またはサーバ上で実行中であってもよい。所与のフォロワキャッシュクラスタ106のフォロワキャッシュノード112と同様に、所与のリーダキャッシュクラスタ108のリーダキャッシュノード114のそれぞれを、集中化された位置内に配置することができる。たとえば、各データセンタ102が、数十台、数百台、または数千台のクライアントサーバ104を含んでもよく、各フォロワキャッシュクラスタ106が、クライアントサーバ104のサブセットにサービス提供する数十個、数百個、または数千個のフォロワキャッシュノード112を含んでもよい。同様に、各リーダキャッシュクラスタ108は、数十個、数百個、または数千個のリーダキャッシュノード114を含みうる。特定の実施形態では、所与のフォロワキャッシュクラスタ106内のフォロワキャッシュノード112のそれぞれは、特定のフォロワキャッシュクラスタ106内の他のフォロワキャッシュノード112、特定のフォロワキャッシュクラスタ106によってサービス提供されるクライアントサーバ104、およびリーダキャッシュクラスタ108内のリーダキャッシュノード114と通信することだけができる。特定の実施形態では、ネットワーキングシステム100によって格納される情報は、各データセンタ102内で、それぞれデータベース110内とフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれの中との両方に格納される。特定の実施形態では、各データベース110内に格納される情報は、関係的にたとえば、MySQLを介してオブジェクトおよびテーブルとして格納され、同一の情報は、フォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれの中で、グラフノードおよびノードの間の関連付けまたは接続以下ではグラフエッジと呼ばれるを含むグラフの形で、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれによって格納される複数のデータシャードdatashard内に格納される。特定の実施形態では、フォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれのデータシャードは、それぞれのキャッシュクラスタ内のキャッシュノード112または114の間でグループ化されまたは分割される。すなわち、それぞれのキャッシュクラスタ内のキャッシュノード112または114のそれぞれは、クラスタによって格納されるシャードのサブセットを格納するまた、リーダキャッシュクラスタが、所与のデータセンタ102のキャッシュクラスタのそれぞれによって格納されるシャードを同期化し、或る実施形態でデータセンタ102の間で同期化するので、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれによって格納されるシャードの各セットは、同一の情報を格納する。特定の実施形態では、各グラフノードは、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれと、データベース110とによって格納されるグラフ内のグラフノードを一意に識別する一意識別子ID以下ではノードIDと呼ばれるに割り当てられる;すなわち、各ノードIDは、グローバルに一意である。1実装形態では、各ノードIDは、64ビット識別子である。1実装形態では、シャードshardは、ノードID空間のセグメントを割り当てられる。特定の実施形態では、各ノードIDは、一意の対応するシャードIDにたとえば、算術的にまたは何らかの数学関数を介してマッピングされる;すなわち、各シャードIDも、グローバルに一意であり、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれによって格納されるシャードの各セット内の同一のデータオブジェクトを参照する。言い換えると、すべてのデータオブジェクトは、一意ノードIDを有するグラフノードとして格納され、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれのデータシャード内のグラフ内に格納されるすべての情報は、同一の対応する一意シャードIDを使用して、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれのデータシャード内に格納される。すぐ上で説明したように、特定の実施形態では、シャードID空間シャードIDと、各キャッシュクラスタのすべてのシャードによって格納され、他のフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のすべてにおいてレプリケーションされる関連する情報とは、それぞれフォロワキャッシュクラスタ106またはリーダキャッシュクラスタ108内で、それぞれフォロワキャッシュノード112またはリーダキャッシュノード114の間で分割される。たとえば、所与のフォロワキャッシュクラスタ106内の各フォロワキャッシュノード112は、それぞれのフォロワキャッシュクラスタ106によって格納されるシャードのサブセットたとえば、数十個、数百個、または数千個のシャードを格納することができる。各シャードは、特定のシャードによって格納される複数のシャードIDの範囲内のシャードIDにそのそれぞれのノードIDがマッピングされるノードに関する情報を含む情報を格納すべき複数のノードIDの範囲rangeを割り当てられる。同様に、リーダキャッシュクラスタ108内の各リーダキャッシュノード114は、それぞれのリーダキャッシュクラスタ108によって格納されるシャードのサブセットたとえば、数十個、数百個、または数千個のシャードを格納することができる。各シャードは、特定のシャードによって格納される複数のシャードIDの範囲内のシャードIDにそのそれぞれのノードIDがマッピングされるノードに関する情報を含む情報を格納すべき複数のノードIDの範囲を割り当てられる。しかし、上で説明したように、所与のシャードIDは、それぞれフォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108によって格納される同一のデータオブジェクトに対応する。各フォロワキャッシュクラスタ106内のフォロワキャッシュノード112の個数およびリーダキャッシュクラスタ108内のリーダキャッシュノード114の個数は、静的にたとえば、フォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108は、一般に、それぞれ異なる個数のフォロワキャッシュノード112およびリーダキャッシュノード114を含むことができるまたは動的にたとえば、所与のキャッシュクラスタ内のキャッシュノードが、様々な理由から周期的にまたは修正、更新、もしくは保守の必要に応じてシャットダウンされる場合がある変化する可能性があるので、フォロワキャッシュノード112およびリーダキャッシュノード114のそれぞれによって格納されるシャードの個数は、各キャッシュクラスタ内ならびにキャッシュクラスタの間で静的にまたは動的に変化する可能性がある。さらに、各シャードに割り当てられる複数のシャードIDの範囲も、静的にまたは動的に変化する可能性がある。特定の実施形態では、フォロワキャッシュノード112およびリーダキャッシュノード114のそれぞれは、それぞれのキャッシュノード内でキャッシングされる情報の格納および提供を管理するグラフ管理ソフトウェアを含む。特定の実施形態では、所与のキャッシュクラスタのキャッシュノードのそれぞれで実行されるグラフ管理ソフトウェアは、どのシャードおよび対応するシャードIDがそれぞれのキャッシュクラスタ内のキャッシュノードのそれぞれによって格納されるのかを判定するために通信することができる。さらに、キャッシュノードがフォロワキャッシュノード112である場合には、フォロワキャッシュノード112上で実行されるグラフ管理ソフトウェアは、クライアントサーバ104から要求たとえば、書込要求または読取要求を受信し、フォロワキャッシュノード内の適当なシャード内の情報を取り出し、更新し、削除し、または格納することによってその要求に応え、フォロワキャッシュノード112とそれぞれのフォロワキャッシュクラスタ106の他のフォロワキャッシュノード112との間の通信ならびにフォロワキャッシュノード112とリーダキャッシュクラスタ108のリーダキャッシュノード114との間の通信を管理しまたは容易にする。同様に、キャッシュノードが、リーダキャッシュノード114である場合には、リーダキャッシュノード114上で実行されるグラフ管理ソフトウェアは、リーダキャッシュノード114とフォロワキャッシュクラスタ106のフォロワキャッシュノード112とリーダキャッシュクラスタ108の他のリーダキャッシュノード114との間の通信ならびにリーダキャッシュノード114とデータベース110との間の通信を管理する。キャッシュノード112および114のそれぞれの上で実行されるグラフ管理ソフトウェアは、それがグラフの形の情報を格納し提供していることを理解する。特定の実施形態では、各フォロワキャッシュノード112上のグラフ管理ソフトウェアは、それがそれぞれのフォロワキャッシュクラスタ106の他のキャッシュノード112、リーダキャッシュクラスタ108のリーダキャッシュノード114、ならびにそれぞれのフォロワキャッシュクラスタ106がサービス提供するクライアントサーバ104と共有するテーブルを維持する責任をも負う。このテーブルは、所与のフォロワキャッシュクラスタ106内の特定のキャッシュノード112への各シャードIDのマッピングを提供し、所与のフォロワキャッシュクラスタ106は、シャードIDおよびそのシャードIDに関連する情報を格納する。このように、特定のフォロワキャッシュクラスタ106によってサービス提供されるクライアントサーバ104は、フォロワキャッシュクラスタ106内のフォロワキャッシュノード112のどれが、クライアントサーバ104がアクセス、追加、または更新を試みつつある情報に関連するシャードIDを維持するのかを知るたとえば、クライアントサーバ104は、フォロワキャッシュノード112のどれがシャードIDを割り当てられ、格納するのかを判定するためにマッピングテーブルを使用した後に、特定のシャードIDに関連する情報を格納しているかこれから格納する特定のフォロワキャッシュノード112に書込要求または読取要求を送信することができる。同様に、特定の実施形態では、各リーダキャッシュノード114上のグラフ管理ソフトウェアは、それぞれのリーダキャッシュクラスタ108の他のキャッシュノード114ならびにそのリーダキャッシュクラスタ108が管理するフォロワキャッシュクラスタ106のフォロワキャッシュノード112と共有するテーブルを維持する責任をも負う。さらに、このように、所与のフォロワキャッシュクラスタ106内の各フォロワキャッシュノード112は、その所与のフォロワキャッシュクラスタ106内の他のフォロワキャッシュノード112のどれが、それぞれのフォロワキャッシュクラスタ106によって格納されるシャードIDのどれを格納するのかを知る。同様に、このように、リーダキャッシュクラスタ108内の各リーダキャッシュノード114は、そのリーダキャッシュクラスタ108内の他のリーダキャッシュノード114のどれが、そのリーダキャッシュクラスタ108によって格納されるシャードIDのどれを格納するのかを知る。さらに、所与のフォロワキャッシュクラスタ106内の各フォロワキャッシュノード112は、リーダキャッシュクラスタ108内のリーダキャッシュノード114のどれがどのシャードIDを格納するのかを知る。同様に、リーダキャッシュクラスタ108内の各リーダキャッシュノード114は、フォロワキャッシュクラスタ106のそれぞれ内のフォロワキャッシュノード112のどれがどのシャードIDを格納するのかを知る。特定の実施形態では、グラフ内、特定の例示的な実施形態ではソーシャルグラフ内の各ノードに関する情報は、そのシャードIDに基づき、フォロワキャッシュクラスタ106およびリーダキャッシュクラスタ108のそれぞれの各シャード内に格納される。グラフ内の各ノードは、上で述べたように、ノードIDを有する。シャードIDと一緒に、それぞれのキャッシュノード112または114は、ノードのタイプを識別するノードタイプパラメータならびに1または複数のname-valueペアコンテンツたとえば、テキスト、メディア、またはメディアもしくは他のリソースへのURLおよびメタデータたとえば、ノードが作成されまたは変更された時のタイムスタンプを格納することができる。特定の実施形態では、グラフ内、特定の例示的な実施形態ではソーシャルグラフ内の各エッジは、そのエッジが接続される各ノードと共に格納される。たとえば、ほとんどのエッジは、双方向である;すなわち、ほとんどのエッジは、グラフ内の2つのノードに接続される。特定の実施形態では、各エッジは、そのエッジが接続される各ノードと共に同一のシャードに格納される。たとえば、ノードID1をノードID2に接続するエッジを、ノードID1に対応するシャードIDたとえば、シャードID1および、異なるシャード内または所与のキャッシュクラスタ内の異なるキャッシュノード内とすることすらできるノードID2に対応するシャードIDたとえば、シャードID2を用いて格納することができる。たとえば、エッジを、{ノードID1,エッジタイプ,ノードID2}の形でシャードID1を用いて格納することができ、ここで、エッジタイプは、エッジのタイプを示す。エッジは、メタデータたとえば、エッジが作成されまたは変更された時を示すタイムスタンプをも含むことができる。エッジを、ノードID1,エッジタイプ,ノードID2の形でシャードID2を用いてキャッシングすることもできる。たとえば、ソーシャルネットワーキングシステム100のユーザが、別のユーザとの連絡先関係またはコンセプトもしくはユーザとのファン関係を確立する時に、タイプ友達またはファンのエッジ関係を、2つのシャードすなわち、ユーザの識別子がマッピングされるシャードに対応する第1のシャードおよび他のユーザまたはコンセプトのオブジェクト識別子がマッピングされる第2のシャード内に格納することができる。ネットワーキングシステム100、特にフォロワキャッシュクラスタ106のフォロワキャッシュノード112およびリーダキャッシュクラスタ108のリーダキャッシュノード114上で実行されるグラフ管理ソフトウェアは、クライアントサーバ104から受信されるクエリ、ならびにそれぞれ他のフォロワキャッシュノード112または他のリーダキャッシュノード114へのクエリもしくはそれぞれ他のフォロワキャッシュノード112または他のリーダキャッシュノード114から受信される複数のクエリをサポートする。たとえば、クエリobject_add{ID1,ノードタイプ1,メタデータ必ず指定されるわけではない,ペイロード必ず指定されるわけではない}は、受信するキャッシュノードに、ノードID1が対応するシャード内に、指定されたノードタイプ1の、このクエリ内で指定されるノードID1を有する新しいノードを格納させる。受信するキャッシュノードは、ノードID1を用いて、指定される場合に、メタデータたとえば、タイムスタンプおよびペイロードたとえば、name-valueペアおよび/またはテキスト、メディア、リソース、もしくはリソースへの参照などのコンテンツをも格納する。もう1つの例として、クエリobject_update{ID1,ノードタイプ1必ず指定されるわけではない,メタデータ必ず指定されるわけではない,ペイロード必ず指定されるわけではない}は、受信するキャッシュノードに、対応するシャード内の、このクエリ内で指定されるノードID1によって識別されるノードを更新させるたとえば、ノードタイプをクエリ内で指定されるノードタイプ1に変更する、クエリ内で指定されるメタデータを用いてメタデータを更新する、あるいは、クエリ内で指定されるペイロードを用いて格納されたコンテンツを更新する。もう1つの例として、クエリobject_delete{ノードID1}は、受信するキャッシュノードに、クエリ内で指定されるノードID1によって識別されるノードを削除させる。もう1つの例として、クエリobject_get{ノードID1}は、クエリ内で指定されるノードID1によって識別されるノードを用いて格納されたコンテンツを取り出させる。ここで、エッジクエリすぐ上で説明したノードクエリではなくを参照すると、クエリassoc_add{ID1,エッジタイプ1,ID2,メタデータ必ず指定されるわけではない}は、受信するキャッシングノードノードID1を格納するに、ノードID1によって識別されるノードとノードID2によって識別されるノードとの間にエッジタイプがエッジタイプ1のエッジを作成させ、指定される場合にメタデータたとえば、エッジが要求された時を示すタイムスタンプと一緒に、ノードID1によって識別されるノードを用いてエッジを格納させる。もう1つの例として、クエリassoc_update{ノードID1,エッジタイプ1,ノードID2,メタデータ必ず指定されるわけではない}は、受信するキャッシュノードノードID1を格納するに、ノードID1によって識別されるノードとノードID2によって識別されるノードとの間のエッジを更新させる。もう1つの例として、クエリassoc_delete{ノードID1,エッジタイプ1必ず指定されるわけではない,ノードID2}は、受信するキャッシュノードノードID1を格納するに、ノードID1によって識別されるノードとノードID2によって識別されるノードとの間のエッジを削除させる。もう1つの例として、クエリassoc_get{ノードID1,エッジタイプ1,ソートキー必ず指定されるわけではない,開始必ず指定されるわけではない,限度必ず指定されるわけではない}は、受信するキャッシュノードノードID1を格納するに、ノードID1によって識別されるノードにエッジタイプ1のエッジによって接続されたノードのノードIDを返させる。さらに、指定された場合に、ソートキーは、フィルタを指定する。たとえば、ソートキーがタイムスタンプを指定する場合には、受信するキャッシュノードノードID1を格納するは、ノードID1によって識別されるノードにエッジタイプ1のエッジによって接続されたノードのノードIDを返す。ここで、エッジタイプ1のエッジは、開始パラメータによって指定される時間値と限度パラメータによって指定される時間値との間に作成されている。もう1つの例として、クエリassoc_exists{ノードID1,エッジタイプ1,他のノードIDのリスト,ソートキー必ず指定されるわけではない,開始必ず指定されるわけではない,限度必ず指定されるわけではない}は、受信するキャッシュノードノードID1を格納するに、シャードID1によって識別されるノードにエッジタイプ1のエッジによって接続された、他のノードIDのリスト内で指定されるノードのノードIDを返させる。さらに、上で説明したクエリを、説明された形で送信し、リーダキャッシュノード114を更新するのに使用することができる。1実装形態では、リーダキャッシュクラスタ108およびフォロワキャッシュクラスタ106のキャッシュによって実施されるキャッシングレイヤは、1または複数のクエリタイプに関する高いクエリレートをサポートする形で1または複数のインデックス内の関連付けデータassociationdataを維持する。或る実装形態では、本発明は、グラフ内のノードの間の関連付けを対象とする効率的な共通部分クエリ、メンバシップクエリ、およびフィルタリングクエリを容易にする。たとえば、1実装形態で、キャッシングレイヤは、ノード同士の間の様々な関連付けに関するポイントルックアップクエリ、レンジクエリ、およびカウントクエリを処理するために最適化された形で、情報をキャッシングする。たとえば、ページを構成する際に、クライアントサーバ104は、所与のユーザのすべての友達に関するクエリを発行しうる。クライアントサーバ104は、ユーザおよび友達エッジタイプを識別するassoc_getクエリを発行することができる。クエリの処理を容易にするために、キャッシングレイヤ内のキャッシングノードは、第1ノードたとえば、ユーザに対応するノードとユーザの連絡先または友達に対応するノードとの間の所与のタイプの関連付け友達、ファン、メンバ、いいね、その他などを格納することができる。さらに、ページの別の当事者を構成するために、クライアントサーバ104は、ユーザまたはユーザプロファイル、ウォールポストwallpostエッジタイプ、および限度値を識別するassoc_getクエリを発行することによって、プロファイル上のウォールポストの最後のN個のセットのクエリを発行することができる。同様に、特定のウォールポストに対するコメントを、同様の形で取り出すことができる。1実装形態では、フォロワキャッシュクラスタ106およびリーダキャッシュクラスタによって実施されるキャッシングレイヤは、高速検索を容易にし、高いクエリレートを処理するグラフ内のノードid1,id2同士の間の関連付けのためのインメモリ構造のセットを維持する。たとえば、id1,タイプ関連付けセットid1で始まり、所与のタイプを有するすべての関連付けのセットごとに、キャッシングレイヤは、2つのインメモリインデックスを維持する。上で述べたように、これらの関連付けセットは、id1が含まれるシャードに基づく各クラスタ内のキャッシュノードによって維持される。さらに、下で述べる構造を考慮すると、2つのノードの間の所与の関連付けを、関連付けのそれぞれのノードに向けられた2つの関連付けセットに格納することができる。第1インデックスは、時間的属性たとえば、タイムスタンプに基づいており、レンジクエリをサポートする。id2による第2インデックスは、レンジクエリをサポートしないが、挿入およびルックアップのよりよい時間計算量timecomplexityをサポートする。1実装形態では、第1インデックスは、環状バッファ内に格納される関連付けエントリの順序付き動的配列である。環状バッファ内の各エントリは、1つの関連付けを記述しまたはこれに対応し、以下のフィールドを含む:aflags1バイト関連付けの可視性を示す、bid28バイト、ctime4バイト、ddata8バイトdataは、固定サイズ8バイトフィールドである9バイト以上がdataのために必要である時には、dataは、完全なdata値を保持する別のメモリチャンクへのポインタになる。dataは、所与のassoc型についてオプションである、およびelink8バイト同一のid2インデックスバケット内の次のエントリおよび前のエントリのオフセット下を参照されたい。1実装形態では、配列は、time属性の昇順で順序付けられる。インデックス内のエントリの個数は、上限を設けられ10000など、関連付けタイプによって構成可能である。限度に達した時には、配列がラップアラウンドする。配列は、timeによってソートされるので、最も新しいエントリが、既存の要素のいずれをもシフトせずに末尾に付加される。1実装形態では、主インデックスを、グローバルmemcachedハッシュテーブルを介して名前によってルックアップできる単一のmemcacheキーassoc:<id1>:<タイプ>に格納することができる。配列は、以下のフィールドを含むヘッダを前に付けることができる:acount4バイトid1,タイプ関連付けセット内の可視の関連付けのカウントインデックス内のキャッシングされるエントリだけではなく、永続的に格納される、bhead4バイト環状バッファ内の配列頭部最大にソートされる要素のバイトオフセット、ctail4バイト環状バッファ内の配列尾部最小にソートされる要素のバイトオフセット、およびdid2indexpointer8バイトid2ハッシュテーブルを含むブロックへのポインタ。第2id2インデックスは、1実施形態では、ハッシュテーブルとして実施され、所与のid1,type,id2関連付けに関する迅速な挿入およびルックアップをサポートする。ハッシュテーブル自体は、1実装形態で、memcachedのメモリアロケータを用いて割り当てられる別々のブロック内に格納することができる。このテーブルは、それぞれが対応するハッシュバケット内の最初の要素を識別する主インデックスへのオフセットの配列である。要素は、そのlinkフィールドを介してバケットにリンクされる。別々のブロック内にハッシュテーブルを格納することは、実装者implementersが、テーブルおよび主インデックスのサイズを独立に変更することを可能にし、したがって、関連付けセットが増大する時にコピーされるメモリの量を減らす。インプレースでのバケットへの関連付けエントリのリンクも、メモリ効率を改善する。ハッシュテーブルおよびバケットリストは、隠しまたは削除としてマークされたエントリがインデックスから抹消される時に、再構築される必要がある可能性があるが、これは、まれにしか行われない。したがって、同一<タイプ>の新しい関連付けが追加される時には、キャッシュノード112および114は、新たに関連付けされたオブジェクトをハッシュテーブルおよび環状バッファに追加し、最も古いエントリを環状バッファから除去する。上で述べたように、<ソートキー>値を使用して、タイムスタンプなどの属性に基づいて、一致するエントリをソートすることができる。さらに、<限度>値は、返される結果の個数を最初のN個の値に制限し、ここで、N=<限度>である。この構成は、非常に高いクエリレートでノード同士の間の関連付けに関するクエリに応じることを可能にする。たとえば、第1のクエリが、ウェブページのセクション内に友達のセットを表示することを要求する場合がある。キャッシュノードは、主インデックスにアクセスすることによってid1に対応する関連付けセットをルックアップすることと、環状バッファ内の最初のNN=限度個のid2エントリを取り出すこととによって、get_associd1,タイプ,ソートキー,限度クエリにすばやく応答することができる。さらに、副インデックスのハッシュテーブルは、ポイントルックアップを容易にする。さらに、キャッシングレイヤによって維持されるカウント値は、所与の関連付けセットid1,タイプのカウントに対する高速応答を容易にする。データの格納および提供のいくつかの一般的な例を、これから説明するソーシャルグラフの特定の例示的な実装形態に関する、より特定の例は、その後、ソーシャルグラフの特定の例示的な実装形態を説明した後に説明する。たとえば、クライアントサーバ104が、ネットワーキングシステム100のユーザからまたはネットワーキングシステム100の別のサーバ、コンポーネント、アプリケーション、もしくは処理からたとえば、ユーザ要求に応答してなど、ウェブページに関する要求を受信する時に、クライアントサーバ104は、要求されたウェブページを生成するために1または複数のクエリを発行する必要がある場合がある。さらに、ユーザがネットワーキングシステム100とやり取りする時に、クライアントサーバ104が、オブジェクトノードを確立しもしくは変更する要求および/または関連付けがオブジェクトノードになることの要求を受信する場合がある。或る場合に、クライアントサーバ104によって受信される要求は、一般に、クライアントサーバ104への要求がそのユーザの代わりに行われたユーザを表すノードIDを含む。この要求は、それに加えてまたはその代わりに、ユーザが、見る、更新する、削除する、または接続するかエッジに関連付けることを望む可能性があるオブジェクトに対応する1または複数の他のノードIDを含むことができる。たとえば、要求は、ユーザが見ることを望む1または複数のオブジェクトたとえば、ウェブページを提供する1または複数のオブジェクトに関連する情報にアクセスする読取要求でもよい。たとえば、この読取要求は、特定のノードに関して格納されたコンテンツを求める要求でもよい。たとえば、ユーザプロファイルに対するウォールポストを、ウォールポストのエッジタイプを有するノードとして表すことができる。ウォールポストに対するコメントをも、ウォールポストに対するエッジタイプコメントの関連付けを有する、グラフ内のノードとして表すことができる。そのような例では、特定の実施形態で、クライアントサーバ104は、要求されたコンテンツまたは他の情報を含むオブジェクトノードのノードIDに対応するシャードIDを判定し、クライアントサーバ104にサービス提供するフォロワキャッシュクラスタ106内のフォロワキャッシュノード112のどれがそのシャードIDを格納するのかを判定するためにマッピングテーブルを使用し、そのシャードIDに関連付けられ、そのシャードIDを用いて格納された情報を格納するフォロワキャッシュノード112のうちの特定の1つに、そのシャードIDを含むクエリを送信する。その後、特定のフォロワキャッシュノード112は、対応するシャード内に要求された情報がキャッシングされている場合に要求された情報を取り出し、要求するクライアントサーバ104にその情報を送信し、この要求するクライアントサーバ104は、その後、この情報を、要求するユーザにサービス提供することができるたとえば、ユーザのコンピューティングデバイス上で実行されるウェブブラウザまたは他の文書をレンダリングするアプリケーションによってレンダリング可能なHTMLまたは他の構造化文書の形で。要求された情報が、フォロワキャッシュノード112内に格納/キャッシングされていない場合には、フォロワキャッシュノード112は、マッピングテーブルを使用して、リーダキャッシュノード114のどれが、シャードIDを格納するシャードを格納するのか判定し、クエリを、シャードIDを格納する特定のリーダキャッシュノード114に転送する。要求された情報が、その特定のリーダキャッシュノード114内でキャッシングされている場合には、そのリーダキャッシュノード114は、要求された情報を取り出し、これをフォロワキャッシュノード112に転送することができ、このフォロワキャッシュノード112は、要求された情報をシャードIDを用いて格納するためにフォロワキャッシュノード112内の特定のシャードを更新し、説明したばかりのクエリをクライアントサーバ104にサービス提供することに進み、このクライアントサーバ104は、その情報を、要求するユーザにサービス提供することができる。要求された情報が、リーダキャッシュノード114内でキャッシングされていない場合には、リーダキャッシュノード114は、クエリをデータベース110の言語に変換し、新しいクエリをデータベース110に送信することができ、このデータベース110は、要求された情報を取り出し、要求された情報をこの特定のリーダキャッシュノード114に送信する。このリーダキャッシュノード114は、その後、取り出された情報を、グラフ管理ソフトウェアによって理解されるグラフ言語に戻って変換し、要求された情報をシャードIDを用いて格納するためにリーダキャッシュノード114内の特定のシャードを更新し、取り出された情報を特定のフォロワキャッシュノード112に送信することができる。このフォロワキャッシュノード112は、要求された情報をシャードIDを用いて格納するためにフォロワキャッシュノード112内の特定のシャードを更新し、説明したばかりのクエリをクライアントサーバ104にサービス提供することに進む。そして、このクライアントサーバ104は、この情報を、要求するユーザにサービス提供することができる。もう1つの例として、ユーザ要求が、ノードに関する既存情報を更新するか追加情報を格納し、または2つのノードの間のエッジを作成するか変更する書込要求である場合がある。前者の場合に、格納される要求が既存ではないノードに関する場合には、このユーザ要求を受信するクライアントサーバ104は、新しいノードのノードIDを求める要求を、そのクライアントサーバ104にサービス提供するそれぞれのフォロワキャッシュクラスタ106に送信する。或る場合または実施形態では、クライアントサーバ104は、新しいノードを格納すべき特定のシャードを指定することができるたとえば、新しいノードを別のノードと同一位置に配置するために。その場合に、クライアントサーバ104は、指定されたシャードを格納する特定のフォロワキャッシュノード112に新しいノードIDを要求する。代替案では、クライアントサーバ104は、新しいノードIDの要求と共に既存ノードのノードIDを、渡されるノードIDを格納するシャードを格納するフォロワキャッシュノード112に渡して、そのフォロワキャッシュノード112に、シャード内に格納された複数のノードIDの範囲内にある新しいノードのノードIDをクライアントサーバ104に応答させることができる。他の場合または実施形態では、クライアントサーバ104は、新しいノードID要求をそこに送信すべき特定のフォロワキャッシュノード112または特定のシャードをたとえば、ランダムにまたは或る関数に基づいて選択することができる。いずれの場合でも、特定のキャッシュノード112、またはより具体的にはそのフォロワキャッシュノード112上で実行されるグラフ管理ソフトウェアは、新しいノードIDをクライアントサーバ104に送信する。その後、クライアントサーバ104は、対応するフォロワキャッシュノード112に対する、新しいノードIDを含む書込要求を定式化するformulateことができる。この書込要求は、新しいノードのノードタイプを指定し、ノードIDを用いて格納されるペイロードたとえば、新しいノードと共に格納されるコンテンツと、メタデータたとえば、他のデータの中でも、要求を行うユーザのノードID、要求がクライアントサーバ104によって受信された時を示すタイムスタンプとのうちの少なくとも一方を含むこともできる。たとえば、フォロワキャッシュノード112に送信される書込要求を、object_add{ノードID,ノードタイプ,ペイロード,メタデータ}の形であるものとすることができる。同様に、ノードを更新するために、クライアントサーバ104は、ノードIDがその中に格納されるシャードを格納するフォロワキャッシュノード112に、object_modify{ノードID,ノードタイプ,ペイロード,メタデータ}の形の書込要求を送信することができる。同様に、ノードを削除するために、クライアントサーバ104は、シャードIDがその中に格納されるシャードを格納するフォロワキャッシュノード112に、object_delete{ノードID}の形の要求を送信することができる。特定の実施形態では、フォロワキャッシュノードは、その後、対応するノードIDを格納するシャードを格納するリーダキャッシュノード114に要求を送信し、その結果、リーダキャッシュノード114は、シャードを更新できるようになる。その後、リーダキャッシュノード114は、要求をデータベース110の言語に変換し、変換された要求をデータベース110に送信し、その結果、データベースを更新できるようにする。図4に、2つのノードの間の関連付けを追加する要求assoc_addを処理する例示的な方法を示す。図4に示されているように、フォロワキャッシュノード112は、assoc_add要求たとえば、assoc_addid1,type,id2,メタデータを受信する時に、インデックスにアクセスして、id1およびタイプtypeに対応する関連付けセットオブジェクトを識別する402。フォロワキャッシュノード112は、ハッシュテーブルと関連付けセットオブジェクトの環状バッファとの両方にid2を追加し、関連付けセットオブジェクトのカウント値をインクリメントする404。関連付けセットオブジェクトは、今、ノードid1とノードid2との間の所与のタイプの新しい関連付けを維持する。id2に対する相対的な関連付けの検索を容易にするために、フォロワキャッシュノード112は、ノード識別子id2に対応するシャードIdを識別し、識別されたシャードを処理するクラスタ内のフォロワキャッシュノード112にassoc_add要求を転送する406。現在のフォロワキャッシュノード112がそのシャードを処理する場合には、現在のフォロワキャッシュノード112が、assoc_add要求を処理する。1実装形態では、転送するフォロワキャッシュノード112は、変更されたassoc_add要求を送信することができる。変更されたassoc_add要求は、キャッシュレイヤ内の双方向関連付けを確立するのに必要な更新であることをシグナリングする。フォロワキャッシュノード112は、id1が含まれるシャードに対応するリーダキャッシュノード114にもassoc_add要求を転送する408。リーダキャッシュノード114は、同様の工程を実行して、リーダキャッシュクラスタ内で双方向関連付けを確立する。また、リーダキャッシュノード114は、新しい関連付けをデータベース110内で永続させる。このように、ノードid1とノードid2との間の関連付けは、今、インデックス内で、id1およびタイプならびに別々にid2およびタイプへの参照を用いて検索可能である。特定の実施形態では、グラフは、ユーザ、ページ、イベント、ウォールポスト、コメント、写真、ビデオ、背景情報、コンセプト、興味、およびノードとして表すのに有用である任意の他の要素など、様々な異なるノードタイプを維持することができる。エッジタイプは、ノード同士の間の関連付けに対応し、友達、フォロワ、サブスクライバ、ファン、いいねまたは興味の他の表示、ウォールポスト、コメント、リンク、提案、推奨、およびノード同士の間の他のタイプの関連付けを含むことができる。1実装形態では、グラフの一部を、ソーシャルネットワーク環境のそれぞれのユーザにそれぞれが対応するユーザノードを含むソーシャルグラフとすることができる。ソーシャルグラフは、トピックノードだけでなく、それぞれが特定のコンセプトの専用であるかこれを対象とするコンセプトノードなどの他のノードをも含むことができる。トピックノードは、一時的ephemeralであってもなくてもよく、それぞれは、ソーシャルネットワーク環境のユーザの間で現在興味を持たれている特定のトピックの専用であるかこれを対象とする。特定の実施形態では、各ノードは、ソーシャルネットワーク環境内でホスティングされまたはアクセス可能である対応するウェブページプロファイルページを有し、表し、またはこれによって表される。たとえば、ユーザノードは、対応するユーザプロファイルページを有することができる。対応するユーザプロファイルページでは、対応するユーザは、コンテンツを追加し、宣言を行い、他の形で彼自身または彼女自身を表現することができる。たとえば、下で説明するように、たとえばユーザプロファイルページ、コンセプトプロファイルページ、またはトピックプロファイルページなど、ソーシャルネットワーク環境内でホスティングされまたはアクセス可能である様々なウェブページは、ユーザが、コンテンツをポストし、ステータス更新をポストし、メッセージをポストし、そのユーザまたは他のユーザによってサブミットされた他のポストに対するコメントを含むコメントをポストし、興味を宣言し、前述のポストならびにページおよび特定のコンテンツのいずれかに向かっていいね下で説明するを宣言し、あるいは、他の形で彼ら自身を表現するか様々なアクション以下では、これらおよび他のユーザアクションを、集合的にポストまたはユーザアクションと呼ばれる場合があるを実行することを可能にする。或る実施形態では、ポスティングpostingは、メディアコンテンツたとえば、写真、ビデオ、音楽、テキストなど、uniformresourcelocatorURL、および他のノードなどの追加コンテンツに、そのそれぞれのプロファイルページ、他のユーザプロファイルページ、コンセプトプロファイルページ、トピックページ、または他のウェブページもしくはウェブアプリケーションを介してリンクしまたは他の形で参照することを含むことができる。そのようなポスト、宣言、またはアクションを、作成するユーザならびに他のユーザによって可視とすることができる。特定の実施形態では、ソーシャルグラフはさらに、それぞれがソーシャルグラフ内のノードの対応するペアのノード同士の間の接続を定義しまたは表す複数のエッジを含む。上で述べたように、コンテンツの各アイテムを、他のノードにリンクされたグラフ内のノードとすることができる。すぐ上で説明したように、様々な例示的な実施形態では、1または複数の説明されるウェブページまたはウェブアプリケーションは、ソーシャルネットワーク環境またはソーシャルネットワーキングサービスに関連する。本明細書で使用される時に、ユーザは、そのようなソーシャルネットワーク環境とまたはこれを介してやり取りしまたは通信する、個人人間のユーザ、エンティティたとえば、企業、商店、またはサードパーティアプリケーション、またはたとえば、個人のまたはエンティティのグループとすることができる。本明細書で使用される時に、登録ユーザは、ソーシャルネットワーク環境内で公式に登録されたユーザを指す一般に、本明細書で説明されるユーザおよびユーザノードは、登録ユーザだけを指すが、これは、他の実施形態では必ずしも要件ではない;すなわち、他の実施形態では、本明細書で説明されるユーザおよびユーザノードが、本明細書で説明されるソーシャルネットワーク環境に登録されていないユーザを指す場合がある。特定の実施形態では、各ユーザは、対応するプロファイルページを有し、対応するプロファイルページは、ソーシャルネットワーク環境によって格納され、ホスティングされ、またはアクセス可能であり、他のユーザのすべてまたは選択されたサブセットによって可視である。一般に、ユーザは、彼または彼女自身のそれぞれのプロファイルページのすべてまたは一部に対する、ならびに潜在的に、たとえば他の可能性の中でも、ホームページ、ウェブアプリケーションをホスティングするページを含む特定のユーザによってまたはこれのために作成された他のページに対する管理権を有する。本明細書で使用される時に、認証されたユーザは、そのユーザが管理権を有する対応するプロファイルページで主張されるユーザであるものとしてソーシャルネットワーク環境によって認証されたユーザを、または代替では、主張されるユーザの適切に信頼される代理人を指す。2つのユーザ同士またはコンセプト同士の間の接続は、ソーシャルネットワーク環境のユーザ同士またはコンセプト同士の間の定義された関係を表すことができ、それに関して関連付けが行われたソーシャルネットワーク環境のユーザ、コンセプト、イベント、または他のノードに対応するノード同士の間のエッジとしてソーシャルネットワーク環境の適切なデータ構造内で論理的に定義され得る。本明細書で使用される時に、friendshipは、ソーシャルネットワーク環境のユーザのペアのユーザ同士の間の、定義されたソーシャル関係などの関連付けを表す。本明細書で使用される時に、友達は、別のユーザが接続、friendship、関連付け、または関係を形成し、2人のユーザの間にエッジを生成させた、ソーシャルネットワーク環境の任意のユーザを指すことができる。たとえば、2人の登録ユーザは、たとえば、2人のユーザの一方が、他方のユーザにfriendship要求を送信するか送信させた結果としてfriendshipについて他方を選択することによるなど、明示的にお互いに友達になることができる。その要求について、他方のユーザは、受け入れまたは拒否することができる。代替案では、friendshipまたは他の接続を、自動的に確立することができる。そのようなソーシャルfriendshipを、他のユーザ、特に彼ら自身が登録ユーザの一方または両方の友達であるユーザに可視とすることができる。登録ユーザの友達は、登録ユーザのプロファイルまたは他のページ上のコンテンツ、特にユーザ生成コンテンツまたは宣言されたコンテンツに対する高められたアクセス特権increasedaccessprivilegesを有することもできる。しかし、ソーシャルグラフ内で彼らの間に友達接続を確立させた2人のユーザが、実生活ソーシャルネットワーキング環境の外部では必ずしも通常の意味での友達ではない場合があることに留意されたい。たとえば、或る実装形態で、あるユーザが、ビジネスまたは他の人間以外のエンティティであり、したがって、この単語の伝統的な意味で、人間のユーザの友達になることができない場合がある。本明細書で使用される時に、ファンは、特定のユーザ、ウェブページ、ウェブアプリケーション、またはソーシャルネットワーク環境内でアクセス可能な他のウェブコンテンツのサポータまたはフォロワであるユーザを指すことができる。特定の実施形態では、あるユーザが特定のウェブページのファンである特定のウェブページを愛好するfan時に、そのユーザを、他の登録ユーザまたは一般大衆が見るために、ファンとしてそのページ上でリストすることができる。さらに、ユーザのアバタまたはプロファイル写真を、そのページにまたは、下で説明されるページのいずれかの中/上に示すことができる。本明細書で使用される時に、いいねは、ユーザ、特に登録ユーザまたは認証されたユーザが、限定ではなく例として、彼または彼女がそれをいいねと思い、そのファンであり、それを支持し、楽しみ、または他の形で肯定的に捉えていることを宣言しまたは他の形で実証した、他の可能性の中でもポスト、コメント、興味、リンク、媒体たとえば、写真、写真アルバム、ビデオ、音楽など、コンセプト、エンティティ、またはページなどのものを指すことができる或る実装形態では、ユーザは、ソーシャルネットワークシステムまたはソーシャルネットワーク環境によってホスティングされまたはアクセス可能である任意のページに対して、いいねまたは事実上何でも示しまたは宣言することができる。1実施形態では、いいねを示しもしくは宣言することまたはユーザがあるもののファンであることを示しもしくは宣言することを、ソーシャルネットワーキング環境内で同等に処理し、定義することができ、交換可能に使用することができる。同様に、自分自身がコンセプトもしくはコンセプトプロファイルページなど、何かのファンであると宣言することまたは自分自身があることをいいねと思うことを宣言することを、ソーシャルネットワーキング環境内で同等に定義し、本明細書で交換可能に使用することができる。さらに、本明細書で使用される時に、興味は、ユーザのプロファイルページ内で提示される、ユーザの宣言した興味など、ユーザが宣言した興味を指すことができる。本明細書で使用される時に、ほしいwantは、ユーザが欲しがる事実上すべてのものを指すことができる。上で説明したように、コンセプトは、たとえば、スポーツ、スポーツチーム、音楽のジャンル、作曲家、趣味、会社企業、エンティティ、グループ、有名人、登録ユーザではない人、またはイベント、或る実施形態では別のユーザたとえば、認証されないユーザ、その他などへの興味、いいねと思う気持ち、または関係をユーザが宣言しまたは他の形で実証できる事実上すべてのものを指すことができる。たとえば、複数のユーザのうちの1または複数たとえば、ジェリーライス以外によって作成され、管理される、有名なプロフットボールプレイヤであるジェリーライスのコンセプトノードおよびコンセプトプロファイルページがあると同時に、ソーシャルグラフが、さらに、ジェリーライス自身またはジェリーライスの信頼されもしくは認可された代理人によって作成され、管理されるジェリーライスのユーザノードおよびユーザプロファイルページを含む場合がある。図5に、分散冗長システムを示す。図示の実装形態では、分散冗長システムは、少なくとも第1データセンタ102aおよび第2データセンタ102bを含む。データセンタ102aおよび102bのそれぞれは、1または複数のフォロワキャッシュクラスタ106ならびにリーダキャッシュクラスタ108aおよび108bを含む。1実装形態では、リーダキャッシュクラスタ108aは、主マスタキャッシュクラスタとして働き、リーダキャッシュクラスタ108bは、副スレーブキャッシュクラスタとして働く。1実装形態では、データセンタ102a、102bは、データベース110の複製されたコピーを達成するために同期化機能が使用されるという意味で、冗長である。1実装形態では、データセンタ102aを、ある地理的領域米国の西海岸などに物理的に配置して、その領域からのトラフィックにサービス提供することができ、データセンタ102bを、別の地理的領域米国の東海岸などに物理的に配置することができる。これらの領域のいずれからのユーザも、同一のデータおよび関連付けにアクセスできると仮定すると、効率的な同期化機構が望ましい。図6に、リーダキャッシュノード114が書込コマンドをどのように処理するのかの例示的な方法を示す。上で図5を参照して述べたように、フォロワキャッシュノード112が、オブジェクトまたは関連付けを追加/更新する書込コマンドをクライアントサーバ104から受信する場合がある図5、1。フォロワキャッシュノード112は、この書込コマンドを、対応するリーダキャッシュノード114に転送する図5、2。リーダキャッシュノード114は、フォロワキャッシュノードから書込コマンドを受信する602時に、リーダキャッシュクラスタ108aによって維持されるキャッシュ内の1または複数のエントリを更新するために書込コマンドを処理し604、更新を永続データベース110aに書き込む606図5、3。また、リーダキャッシュノード114は、フォロワキャッシュノード112に書込コマンドを肯定応答しACK、更新をデータセンタ102aの他のフォロワキャッシュクラスタ106図5、4aおよび副リーダキャッシュクラスタ108bにブロードキャストし、副リーダキャッシュクラスタ108bは、更新をそのフォロワキャッシュクラスタ106に転送する図5、4b608。図6に示されているように、リーダキャッシュノード114は、更新をレプリケーションログにも追加する610。データベース110a、110bは、永続データベースを同期化するために、MySQLReplicationなどの同期化機構を実施する。図7に、本発明の1実装形態によるメッセージフローを示す。書込コマンドが、主リーダキャッシュクラスタ108aに直接には関連しないリング106内のフォロワキャッシュノード112で受信される図7、1時に、そのフォロワキャッシュノード112は、書込メッセージを処理のために主リーダキャッシュクラスタ108aに転送する図7、2。主リーダキャッシュクラスタ108a内のリーダキャッシュノード114は、そのフォロワキャッシュクラスタ106に更新をブロードキャストし図7、3、変更をデータベース110aに書き込むことができる図7、4。図7に示されているように、書込コマンドを受信したフォロワキャッシュノード112も、書込コマンドをその副リーダキャッシュクラスタ108bに転送することができ図7、5、この副リーダキャッシュクラスタ108bは、他のフォロワキャッシュクラスタ106に更新をブロードキャストする図7、6。したがって、前述のアーキテクチャは、データベース110a、110bの間の別々のレプリケーションがデータセキュリティを可能にすると同時に、キャッシングレイヤに対する変更をデータセンタにまたがってすばやく複製することを可能にする。本明細書で説明されるアプリケーションまたは工程を、実行された時に1または複数のプロセッサに上で説明した動作を実施させるように動作可能である、有形のデータ記憶媒体上でまたはこれの中で実施されまたは符号化される一連のコンピュータ可読命令として実施することができる。前述の工程および機構を、様々な物理システムによってならびに様々なネットワーク環境およびコンピューティング環境内で実施することができるが、下で説明されるコンピューティングシステムは、限定する目的ではなく教訓的な目的のために、上で説明されるサーバシステムおよびクライアントシステムの例示的なコンピューティングシステムアーキテクチャを提供する。図2に、サーバ22a、22bを実施するのに使用できる、例示的なコンピューティングシステムアーキテクチャを示す。1実施形態では、ハードウェアシステム1000は、プロセッサ1002、キャッシュメモリ1004、ならびに、有形のコンピュータ可読媒体上に格納された、明細書で説明される機能を対象とする、1または複数の実行可能モジュールおよびドライバを備える。さらに、ハードウェアシステム1000は、高性能入出力I/Oバス1006および標準I/Oバス1008を含む。ホストブリッジ1010は、プロセッサ1002を高性能I/Oバス1006に結合し、I/Oバスブリッジ1012は、2つのバス1006および1008を互いに結合する。システムメモリ1014および1または複数のネットワーク/通信インターフェース1016は、バス1006に結合される。ハードウェアシステム1000はさらに、ビデオメモリ図示せずおよびビデオメモリに結合された表示デバイスを含むことができる。マスストレージ1018およびI/Oポート1020は、バス1008に結合される。ハードウェアシステム1000は、オプションで、キーボードおよびポインティングデバイスと、バス1008に結合された表示デバイス図示せずとを含むことができる。集合的に、これらの要素は、米国カリフォルニア州サンタクララのインテルIntelCorporationによって製造されるx86互換プロセッサおよび米国カリフォルニア州サニーベールのアドバンスドマイクロデバイセズAdvancedMicroDevicesAMD,Inc.によって製造されるx86互換プロセッサ、ならびに任意の他の適切なプロセッサに基づく汎用コンピュータシステムを含むがこれに限定されないコンピュータハードウェアシステムの広いカテゴリを表すことが意図されている。ハードウェアシステム1000の要素を、下でより詳細に説明する。具体的には、ネットワークインターフェース1016は、ハードウェアシステム1000と、ETHERNET登録商標たとえば、IEEE802.3ネットワーク、バックプレーン、その他など、広範囲のネットワークのいずれかとの間の通信を提供する。マスストレージ1018は、サーバ22a、22b内で実施される上で説明した機能を実行するためのデータおよびプログラミング命令の永久ストレージを提供し、システムメモリ1014たとえば、DRAMは、プロセッサ1002によって実行される時にデータおよびプログラミング命令の一次ストレージを提供する。I/Oポート1020は、ハードウェアシステム1000に結合され得る追加の周辺デバイス同士の間の通信を提供する、1または複数のシリアル通信ポートおよび/またはパラレル通信ポートである。ハードウェアシステム1000は、様々なシステムアーキテクチャを含むことができ、ハードウェアシステム1000の様々なコンポーネントは、再配置されうる。たとえば、キャッシュ1004を、プロセッサ1002と共にオンチップとすることができる。その代わりに、キャッシュ1004およびプロセッサ1002を、プロセッサモジュールとして一緒にパックすることができ、その場合、プロセッサ1002は、プロセッサコアと呼ばれる。さらに、本発明の或る種の実施形態は、上記のコンポーネントのすべてを、必要としないかまたは含まなくてもよい。たとえば、標準I/Oバス1008に結合されて図示された周辺デバイスを、高性能I/Oバス1006に結合することができる。さらに、或る実施形態では、単一のバスだけが存在する場合があり、ハードウェアシステム1000のコンポーネントは、その単一のバスに結合される。さらに、ハードウェアシステム1000は、追加のプロセッサ、ストレージデバイス、またはメモリなど、追加のコンポーネントを含むことができる。1実装形態では、本明細書で説明される実施形態の動作は、ハードウェアシステム1000によって実行される一連の実行可能モジュールとして、分散コンピューティング環境内で個別にまたは集合的に実施される。特定の実施形態では、1組のソフトウェアモジュールおよび/またはドライバは、ネットワーク通信プロトコルスタック、ブラウジング機能および他のコンピューティング機能、最適化工程、ならびに類似物を実施する。前述の機能モジュールは、ハードウェア、コンピュータ可読媒体上に格納された実行可能モジュール、またはこの両方の組合せによって実現されうる。たとえば、機能モジュールは、プロセッサ1002など、ハードウェアシステム内のプロセッサによって実行される複数のまたは一連の命令を備えることができる。当初に、一連の命令を、マスストレージ1018などのストレージデバイス上に格納することができる。しかし、一連の命令を、ディスケット、CD-ROM、ROM、EEPROM、その他などの任意の適切な記憶媒体上に有形に格納することができる。さらに、一連の命令を、ローカルに格納する必要はなく、ネットワーク/通信インターフェース1016を介して、ネットワーク上のサーバなどのリモートストレージデバイスから受信することができる。命令は、マスストレージ1018などのストレージデバイスからメモリ1014にコピーされ、その後、プロセッサ1002によってアクセスされ、実行される。オペレーティングシステムは、ソフトウェアアプリケーション図示せずへおよびソフトウェアアプリケーションからのデータの入力および出力を含む、ハードウェアシステム1000の動作を管理し、制御する。オペレーティングシステムは、システム上で実行されつつあるソフトウェアアプリケーションとシステムのハードウェアコンポーネントとの間のインターフェースを提供する。LINUX登録商標オペレーティングシステム、米国カリフォルニア州カパティーノのアップルコンピュータAppleComputerInc.から入手可能なAppleMacintoshオペレーティングシステム、UNIX登録商標オペレーティングシステム、マイクロソフトMicrosoft登録商標Windows登録商標オペレーティングシステム、BSDオペレーティングシステム、および類似物など、任意の適切なオペレーティングシステムを使用することができる。もちろん、他の実装形態が可能である。たとえば、本明細書で説明されるニックネーム生成機能を、ファームウェア内または特定用途向け集積回路上で実施することができる。さらに、上で説明した要素および動作は、記憶媒体上に格納される命令からなるものとすることができる。命令を、処理システムによって取り出し、実行することができる。命令の或る例は、ソフトウェア、プログラムコード、およびファームウェアである。記憶媒体の或る例は、メモリデバイス、テープ、ディスク、集積回路、およびサーバである。命令は、処理システムによって実行される時に、本発明に従って動作するように処理システムに指示するように動作可能である。用語処理システムは、単一の処理デバイスまたは相互動作可能な処理デバイスのグループを指す。処理デバイスの或る例は、集積回路および論理回路網である。当業者は、命令、コンピュータ、および記憶媒体を熟知している。本開示は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。同様に、適当である場合には、添付の特許請求の範囲は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。たとえば、本発明の実施形態は、ソーシャルネットワーキングウェブサイトに関連して動作するものとして説明されたが、本発明を、ウェブアプリケーションをサポートし、関連付けのグラフとしてデータをモデル化する任意の通信ファシリティに関連して使用することができる。さらに、或る実施形態では、用語ウェブサービスおよびウェブサイトが、交換可能に使用される場合があり、さらに、サーバに直接にAPI呼出しを行う、モバイルデバイスたとえば、セルラ電話機、スマートホン、パーソナルGPS、携帯情報端末、パーソナルゲーミングデバイスなどなどのデバイス上のカスタムAPIまたは一般化されたAPIを指すことができる。"