(58)【調査した分野】(Int.Cl.,DB名)
ソーシャル・グラフを維持するよう構成されるデータベースと、複数のキャッシュ・ノードを含むキャッシュ・レイヤとを備え、前記複数のキャッシュ・ノードは複数のデータ・シャードを格納するシステムであって、各データ・シャードは、
前記ソーシャル・グラフの少なくとも一部分を維持する工程であって、前記ソーシャル・グラフは、複数のグラフ・ノードと前記グラフ・ノード同士を接続する複数のグラフ・エッジとを含み、2つのグラフ・ノード同士を接続する各グラフ・エッジは、前記2つのグラフ・ノード間の関連付けを示す、維持する工程と、
第1のグラフ・ノードと第2のグラフ・ノードとの間の関連付けを格納する要求を受信する工程であって、前記第1および第2のグラフ・ノードは、それぞれ第1および第2の一意ノード識別子(ノードID)によって識別されており、前記第1および第2のグラフ・ノードの各々は、前記複数のデータ・シャードのうちの特定のデータ・シャードに対応する、受信する工程と、
前記要求に応答して、前記第1のグラフ・ノードに対応する前記データ・シャードおよび前記第2のグラフ・ノードに対応する前記データ・シャードを更新する工程と、が行われるように構成される、システム。
各データ・シャードは、前記第1のグラフ・ノードと前記第2のグラフ・ノードとの間の関連付けを更新するために要求を前記データベースへ転送する工程が行われるようにさらに構成される、請求項1に記載のシステム。
前記第1のグラフ・ノードは、第1のデータ・シャードに対応しており、前記第2のグラフ・ノードは、第2のデータ・シャードに対応している、請求項1に記載のシステム。
前記複数のグラフ・ノードは、それぞれ複数の一意ノードIDを割り当てられ、グラフ・ノードの各一意ノードIDは、前記複数のデータ・シャードのうちの特定のデータ・シャードに割り当てられる、請求項1に記載のシステム。
前記キャッシュ・レイヤは、複数のキャッシュ・クラスタをさらに備え、前記1以上のキャッシュ・クラスタの各々は、前記複数のキャッシュ・ノードのうちのキャッシュ・ノードのサブセットを備える、請求項1に記載のシステム。
前記複数のデータ・シャードは、それぞれ複数の一意シャード識別子(シャードID)を割り当てられ、各一意シャードIDは、前記複数のキャッシュ・ノードのうちの特定のキャッシュ・ノードに割り当てられる、請求項8に記載のシステム。
各フォロワ・キャッシュ・クラスタの前記データ・シャード内に格納されたデータ・オブジェクトは、前記フォロワ・キャッシュ・クラスタに割り当てられたリーダ・キャッシュ・クラスタの前記データ・シャード内にも格納される、請求項9に記載のシステム。
前記複数のキャッシュ・クラスタは、1以上のリーダ・キャッシュ・クラスタと、複数のフォロワ・キャッシュ・クラスタとを含み、各フォロワ・キャッシュ・クラスタは、前記リーダ・キャッシュ・クラスタの1つに割り当てられ、前記複数のデータ・シャードの一部は、各リーダ・キャッシュ・クラスタと前記リーダ・キャッシュ・クラスタに割り当てられたフォロワ・キャッシュ・クラスタとに分割される、請求項8に記載のシステム。
前記複数のデータ・シャードは、前記リーダ・キャッシュ・クラスタおよびフォロワ・キャッシュ・クラスタ内に格納された同一の情報を維持する、請求項14に記載のシステム。
ソーシャル・グラフの少なくとも一部分を維持する工程を備える方法であって、前記ソーシャル・グラフは、データベースおよびキャッシュ・レイヤ内に維持されており、前記キャッシュ・レイヤは、複数のキャッシュ・ノードを備えており、前記複数のキャッシュ・ノードは、複数のデータ・シャードを格納しており、各データ・シャードは、
ソーシャル・グラフの前記少なくとも一部分を維持する工程であって、前記ソーシャル・グラフは、複数のグラフ・ノードと前記グラフ・ノード同士を接続する複数のグラフ・エッジとをさらに含み、2つのグラフ・ノード同士を接続する各グラフ・エッジは、前記2つのグラフ・ノード間の関連付けを示す、維持する工程と、
第1のグラフ・ノードと第2のグラフ・ノードとの間の関連付けを格納する要求を受信する工程であって、前記第1および第2のグラフ・ノードは、それぞれ第1および第2の一意ノード識別子(ノードID)によって識別されており、前記第1および第2のグラフ・ノードの各々は、前記複数のデータ・シャードのうちの特定のデータ・シャードに対応する、受信する工程と、
前記要求に応答して、前記第1のグラフ・ノードに対応する前記データ・シャードおよび前記第2のグラフ・ノードに対応する前記データ・シャードを更新する工程と、が行われるように構成される、方法。
コンピュータ読み取り可能な命令を記憶した非一時的記憶媒体であって、前記命令は、実行されたとき、1以上のプロセッサにキャッシュ・レイヤのキャッシュ・ノード内に1以上のデータ・シャードを格納させ、前記1以上のデータ・シャードは、
ソーシャル・グラフの少なくとも一部分を維持する工程であって、前記ソーシャル・グラフは、データベース内に維持されており、複数のグラフ・ノードと前記グラフ・ノード同士を接続する複数のグラフ・エッジとを含み、2つのグラフ・ノード同士を接続する各グラフ・エッジは、前記2つのグラフ・ノード間の関連付けを示す、維持する工程と、
第1のグラフ・ノードと第2のグラフ・ノードとの間の関連付けを格納する要求を受信する工程であって、前記第1および第2のグラフ・ノードは、それぞれ第1および第2の一意ノード識別子(ノードID)によって識別されており、前記第1および第2のグラフ・ノードの各々は、前記複数のデータ・シャードのうちの特定のデータ・シャードに対応する、受信する工程と、
前記要求に応答して、前記第1のグラフ・ノードに対応する前記データ・シャードおよび前記第2のグラフ・ノードに対応する前記データ・シャードを更新する工程と、が行わ
れるように構成される、記憶媒体。
【背景技術】
【0002】
コンピュータ・ユーザは、プロプライエタリ・ネットワーク(proprietary
networks)ならびにインターネットなどの公衆ネットワークを含む様々なローカル・エリア・コンピュータ・ネットワークおよび広域コンピュータ・ネットワークを介して膨大な量の情報にアクセスし、共有することができる。通常、ユーザのコンピューティング・デバイスにインストールされたウェブ・ブラウザは、たとえば関連するuniform resource locator(URL)によって識別される様々なネットワーク・サーバに配置された情報へのアクセスおよびこれとのやり取り(interaction)を容易にする。ユーザ生成コンテンツの共有を可能にする従来の手法は、ソーシャル・ネットワーキング・ウェブサイトなどの様々な情報共有技術または情報共有プラットフォームを含む。そのようなウェブサイトは、ユーザが他のユーザによって作成されまたはカスタマイズされたウェブ・ページを見ることを可能にするアプリケーションのプラットフォームを含み、これにリンクされ、またはこれを提供することができ、ここで、他のユーザによるそのようなページの可視性およびこれとのやり取りは、ある特徴的なルールによって管理される(governed)。
【0003】
そのようなソーシャル・ネットワーキング情報およびほとんどの情報全般は、通常、関係データベースに格納される。一般に、関係データベース(relational database)は、関係の集合(しばしばテーブルと呼ばれる)である。関係データベースは、1組の数学用語(mathematical terms)を使用し、この数学用語は、構造化照会言語(SQL)データベース用語法を使用する場合がある。たとえば、関係を、同一の属性を有するタプル(tuples)の組として定義することができる。タプルは、通常、オブジェクトと、そのオブジェクトに関する情報とを表す。関係は、通常、テーブルとして記述され、テーブルは、行および列に編成される。一般に、ある属性によって参照されるすべてのデータは、同一のドメインにあり、同一の制約(constraints)に従う。
【0004】
関係モデルは、関係タプルが特定の順序を有しないことと、タプルが属性に順序を課さないこととを指定する。アプリケーションは、クエリを指定することによってデータにアクセスし、クエリは、演算を使用して、タプルを識別し、属性を識別し、関係を組み合わせる。関係を変更することができ、新しいタプルが明示的な値を供給することができ、またはクエリから新しいタプルを導出することができる。同様に、クエリは、更新または削除のためにタプルを識別することができる。関係タプルはそれぞれ、その属性値のある組合せ(1または複数)によって一意に識別可能であることが必要である。この組合せは、主キー(primary key)と呼ばれる。関係データベースでは、すべてのデータが、関係を介して格納され、アクセスされる。データを格納する関係は、通常、テーブルを用いて実施され、またはテーブルと呼ばれる。
【0005】
関係データベース管理システムによって実施される関係データベースは、たとえば金融記録、製造およびロジスティック情報、職員データ、および他のアプリケーションに使用されるデータベース内の情報の格納に関する最も主要な選択肢になっている。コンピュータ能力が高まるにつれて、関係データベースを以前に非実用的にしていた関係データベー
スの非効率性よりも、従来のアプリケーションに関する関係データベースの使い易さが優るようになった。3つの主導的なオープン・ソース実装は、MySQL、PostgreSQL、およびSQLiteである。MySQLは、複数のデータベースへのマルチユーザ・アクセスを提供するサーバとして実行される関係データベース管理システム(RDBMS)である。人気のあるLAMPソフトウェア・スタックの頭字語の「M」は、MySQLを指す。ウェブ・アプリケーションと共に使用することに関するその人気は、PHP(LAMPの「P」)に密接に結び付けられている。複数の高トラフィック・ウェブ・サイトは、データ・ストレージおよびユーザ・データのログ記録にMySQLを使用する。
【0006】
関係データベースとの通信が、しばしば速度ボトルネックになるので、多数のネットワークは、特定の情報クエリに応じるためにキャッシング・システムを利用する。たとえば、Memcachedは、汎用分散メモリ・キャッシング・システムである。これは、しばしば、外部データ・ソース(データベースまたはAPIなど)を読み取らなければならない回数を減らすために、データおよびオブジェクトをRAM内にキャッシングすることによって、動的なデータベース駆動のウェブサイトを高速化するのに使用される。MemcachedのAPIは、複数の計算機にまたがって分散された巨大なハッシュ・テーブルを提供する。テーブルが満杯の時には、後続の挿入により、より古いデータがleast recently used(LRU)順でパージされることになる。Memcachedを使用するアプリケーションは、通常、データベースなどのより低速のバッキング・ストアにフォール・バックする前に、要求および追加をコアにレイヤ化する。
【0007】
Memcachedシステムは、クライアント−サーバ・アーキテクチャを使用する。サーバは、キー−値連想配列を維持し、クライアントは、この配列を移植し、これに照会する。クライアントは、クライアント・サイド・ライブラリを使用して、サーバに連絡する。通常、各クライアントは、すべてのサーバを知っており、サーバは、お互いとは通信しない。クライアントが、あるキーに対応する値をセットするか読み取ることを望む場合には、クライアントのライブラリは、まず、使用されるサーバを判定するためにキーのハッシュを計算する。その後、クライアントは、そのサーバに連絡する。サーバは、キーの第2のハッシュを計算して、対応する値をどこに格納しまたはどこから読み取るべきかを判定する。通常、サーバは、その値をRAM内に保ち、サーバがRAMを使い果たした場合には、サーバは、最も古い値を破棄する。
【発明を実施するための形態】
【0012】
特定の実施形態は、ノードと、エッジがグラフ内で接続するノードの間の関連付けまたは関係を定義するエッジとを含むグラフとしてモデル化された情報を格納し提供する分散キャッシング・システムに関する。特定の実施形態では、グラフは、ソーシャル・グラフであるか又はソーシャル・グラフを含み、分散キャッシング・システムは、より大きいネットワーキング・システム、インフラストラクチャ、または統合ソーシャル・ネットワーク環境を可能にするプラットフォームの一部である。本開示では、ソーシャル・ネットワーク環境は、ソーシャル・グラフ情報を含むソーシャル・グラフに関して説明される場合がある。実際に、本開示の特定の実施形態は、ソーシャル・ネットワーク環境によってまたはソーシャル・ネットワーク環境のために格納されるデータのほとんどまたはすべてを、ソーシャル・グラフとして表すことができるという事実に依存し、これを活用し、またはこれを利用する。特定の実施形態は、本明細書で説明されるものなどのソーシャル・ネットワーク環境のユーザの指数関数的に増加する人数に伴って効率的に、知的に、かつ成功してスケーリングすることのできるコスト効率のよいインフラストラクチャを提供する。
【0013】
特定の実施形態では、本明細書で説明される分散キャッシング・システムおよびバックエンド・インフラストラクチャは、大規模での低レイテンシ、1要求あたりのより低いコスト、開発者にとって使い易いフレームワーク、マルチマスタをサポートするインフラストラクチャ、格納されたデータのアクセスをHypertext Preprocessor(PHP)以外の言語で記述されたクライアントに提供するインフラストラクチャ、本明細書で例によって説明される、ソーシャル・グラフの関連付け(エッジ)とオブジェクト(ノード)との両方を用いる組み合わされたクエリを可能にするインフラストラクチャ、および異なる永続データ・ストアを異なるタイプのデータに使用することを可能にするインフラストラクチャのうちの1または複数を提供する。さらに、特定の実施形態は、キャッシング+永続性+レプリケーション・インフラストラクチャからのデータ・アクセスAPIのきれいな分離(clean separation)を可能にするインフラストラクチャ、ライトスルー/リードスルー・キャッシングをサポートするインフラストラクチャ、計算をデータのより近くに移動するインフラストラクチャ、異なるストレージ・スキーマおよびバック・エンドへの透過的マイグレーションを可能にするインフラストラクチャ、およびデータ・オブジェクト・アクセスの効率を改善するインフラストラクチャ
のうちの1または複数を提供する。
【0014】
さらに、本明細書で使用される時に、「または」は、「および」ならびに「または」を意味する場合がある、すなわち、「または」は、明示的に述べられるか暗黙のうちに暗示されない限り、「および」を必ずしも除外しない。
【0015】
特定の実施形態は、インターネットなど、複数のネットワーク・アドレス可能システムを含む広域ネットワーク環境で動作することができる。
図3に、様々な例示的な実施形態がその中で動作することのできる、例示的なネットワーク環境を示す。ネットワーク・クラウド60は、一般に、本明細書で説明されるシステムおよびホストがそれを介して通信できる、1または複数の相互接続されたネットワークを表す。ネットワーク・クラウド60は、パケットベースの広域ネットワーク(インターネットなど)、プライベートネットワーク、無線ネットワーク、衛星ネットワーク、セルラ・ネットワーク、ページング・ネットワーク、および類似物を含むことができる。
図3に示されているように、特定の実施形態は、ソーシャル・ネットワーキング・システム20および1または複数のクライアント・デバイス30を備えるネットワーク環境内で動作することができる。クライアント・デバイス30は、ネットワーク・サービス・プロバイダ、無線搬送波、または任意の他の適切な手段を介してネットワーク環境に動作可能に接続される。
【0016】
1つの例示的な実施形態では、ソーシャル・ネットワーキング・システム20は、本明細書で説明されるように、ユーザがお互いと通信するか他の形でやり取りし、ユーザ・プロファイルなどのコンテンツにアクセスすることを可能にするコンピューティング・システムを備える。ソーシャル・ネットワーキング・システム20は、様々な例示的な実施形態で、1または複数の物理サーバ22およびデータ・ストア24を備えるネットワーク・アドレス可能システムである。1または複数の物理サーバ22は、たとえばルータおよび/またはネットワーキング・スイッチ26のセットを介してコンピュータ・ネットワーク60に動作可能に接続される。例示的な実施形態では、1または複数の物理サーバ22によってホスティングされる機能性は、ウェブ・サーバまたはHTTPサーバ、FTPサーバ、ならびに、限定なしに、Common Gateway Interface(CGI)スクリプト、PHP Hyper−text Preprocessor(PHP)、Active Server Pages(ASP)、ハイパーテキスト・マークアップ言語(HTML)、Extensible Markup Language(XML)、JAVA(登録商標)、JAVASCRIPT(登録商標)、Asynchronous JAVASCRIPT(登録商標) and XML(AJAX)、および類似物を使用して実施されたウェブ・ページおよびアプリケーションを含むことができる。
【0017】
物理サーバ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)、および/またはデータ・ウェアハウスを含む。
【0018】
データ・ストア24は、異なるソーシャル・ネットワーキング・システム20のユーザおよび/またはクライアント・デバイス30に関連するデータを含むことができる。特定の実施形態では、ソーシャル・ネットワーキング・システム20は、システム20のユーザごとにユーザ・プロファイルを維持する。ユーザ・プロファイルは、ソーシャル・ネットワークのユーザを記述するデータを含み、このデータは、たとえば、正式名称(人のファースト・ネーム、ミドル・ネーム、およびラスト・ネーム、企業の商号および/または会社名など)、生物学的、人口統計的、ならびに、職歴、学歴、趣味または好み、地理的位置、および追加の記述データなどの他のタイプの記述情報を含むことができる。たとえば、ユーザ・プロファイルは、ユーザの誕生日、関係状況(relationship status)、居住都市、および類似物を含むことができる。システム20はさらに、異なるユーザの間の1または複数の関係を記述するデータを格納することができる。関係情報は、類似するまたは共通の職歴、グループ・メンバシップ、趣味、または学歴を有するユーザを示すことができる。ユーザ・プロファイルは、他のユーザによるユーザの情報へのアクセスを管理するプライバシ・セッティングを含むこともできる。
【0019】
クライアント・デバイス30は、一般に、コンピュータ・ネットワークを介して(たとえば、リモートに)通信する機能性を含むコンピュータまたはコンピューティング・デバイスである。クライアント・デバイス30は、他の適切なコンピューティング・デバイスの中でも、デスクトップ・コンピュータ、ラップトップ・コンピュータ、携帯情報端末(PDA)、車内もしくは車外のナビゲーション・システム、スマートホンもしくは他のセルラホンもしくは携帯電話機、またはモバイル・ゲーミング・デバイスでもよい。クライアント・デバイス30は、ウェブ・ブラウザ(たとえば、Microsoft WINDOWS(登録商標) Internet Explorer、Mozilla Firefox、Apple Safari、Google Chrome、およびOperaなど)など、コンピュータ・ネットワークを介してコンテンツにアクセスし、これを見るための、1または複数のクライアント・アプリケーションを実行することができる。特定の実装形態では、クライアント・アプリケーションは、クライアント・デバイス30のユーザが、ソーシャル・ネットワーキング・システム20によってホスティングされるリソースなど、取り出されるべき特定のネットワーク・リソースのアドレスを入力することを可能にする。これらのアドレスを、Uniform Resource LocatorすなわちURLとすることができる。さらに、ページまたは他のリソースが取り出された後に、クライアント・アプリケーションは、ユーザが他のリソースへのハイパーリンクを「クリック」する時に、他のページまたは他のリソースへのアクセスを提供することができる。たとえば、そのようなハイパーリンクは、ウェブ・ページ内に配置され得、ユーザが
別のページへのURLを入力し、そのページを読み出すための自動化された形を提供することができる。
【0020】
図1に、
図3に示されたソーシャル・ネットワーキング・システム20のバック・エンド機能を実施することのできるネットワーキング・システム、アーキテクチャ、またはインフラストラクチャ100(以下ではネットワーキング・システム100と呼ばれる)の例示的な実施形態を示す。特定の実施形態では、ネットワーキング・システム100は、ネットワーキング・システム100のユーザが、ネットワーキング・システム100によって提供されるソーシャル・ネットワーキング・サービスを介してお互いとならびに第三者とやり取りすることを可能にする。たとえば、リモート・ユーザ・コンピューティング・デバイス(たとえば、パーソナル・コンピュータ、ネットブック、マルチメディア・デバイス、セルラ電話機(特にスマートホン)など)のユーザは、情報を見、情報を格納しもしくは更新(アップデート)し、情報を通信し、または他のユーザ、サード・パーティ・ウェブサイト、ウェブ・ページ、もしくはウェブ・アプリケーション、もしくはネットワーキング・システム100によって格納され、ホスティングされ、またはアクセス可能である他の情報と他の形でやり取り(相互作用)するために、少なくとも部分的にネットワーキング・システム100によってホスティングされまたはアクセス可能であるウェブサイト、ウェブ・ページ、またはウェブ・アプリケーションにアクセスするために、ウェブ・ブラウザまたは他のユーザ・クライアント・アプリケーションを介してネットワーキング・システム100にアクセスすることができる。特定の実施形態では、ネットワーキング・システム100は、下でより詳細に説明されるように、ユーザ、コンセプト、トピック、および他の情報(データ)を表すグラフ・ノードと、グラフ・ノードの間を接続するかその間の関係を定義するグラフ・エッジとを含むグラフを維持する。
【0021】
図1および
図5を参照すると、特定の実施形態で、ネットワーキング・システム100は、1または複数のデータ・センタ102を含む。たとえば、ネットワーキング・システム100は、様々な地理的領域内に配置されたユーザにサービス提供するためにそれぞれの領域内に戦略的に配置された複数のデータ・センタ102を含むことができる。特定の実施形態では、各データ・センタは、ネットワーキング・システム100のユーザへおよびネットワーキング・システム100のユーザから情報を通信する複数のクライアント・サーバまたはウェブ・サーバ104(以下ではクライアント・サーバ104)を含む。たとえば、リモート・ユーザ・コンピューティング・デバイスのユーザは、ロード・バランサ(load balancers)または他の適切なシステムを介し、ネットワークおよびサービス・プロバイダの任意の適切な組合せを介して、クライアント・サーバ104と通信することができる。クライアント・サーバ104は、ユーザ要求に応答するために構造化文書を生成するためにデータを取り出すために、本明細書で説明されるキャッシング・システムに照会することができる。
【0022】
クライアント・サーバ104のそれぞれは、1または複数のフォロワ分散キャッシュ・クラスタまたはフォロワ分散キャッシュ・リング106(以下ではフォロワ・キャッシュ・クラスタ106)と通信する。図示の実施形態では、データ・センタ102は、それぞれがウェブ・サーバ104のサブセットにサービス提供する3つのフォロワ・キャッシュ・クラスタ106を含む。特定の実施形態では、フォロワ・キャッシュ・クラスタ106とフォロワ・キャッシュ・クラスタ106とがサービス提供するクライアント・サーバ104は、ビルディング内、室内、または他の集中化された位置など、非常に近接して配置され、これは、インフラストラクチャに関連するコスト(たとえば、ワイヤまたは他の通信信号線など)ならびにクライアント・サーバ104とそれぞれのフォロワ・キャッシュ・ノード・クラスタ106との間のレイテンシを減らす。しかし、或る実施形態では、フォロワ・キャッシュ・クラスタ106のそれぞれおよびそれらがそれぞれサービス提供するクライアント・サーバ104を、集中化された位置内に配置することができるが、フォ
ロワ・キャッシュ・クラスタ106のそれぞれおよびそのフォロワ・キャッシュ・クラスタ106がそれぞれサービス提供するそれぞれのクライアント・サーバ104を、所与のデータ・センタの他のフォロワ・キャッシュ・クラスタ106およびそれぞれのクライアント・サーバ104とは異なる位置に配置することができる、すなわち、所与の領域の所与のデータ・センタのフォロワ・キャッシュ・クラスタ106(およびそのクラスタがサービス提供するそれぞれのクライアント・サーバ104)を、その領域内の様々な位置のいたるところに分散させることができる。
【0023】
特定の実施形態では、各データ・センタ102はさらに、所与のデータ・センタ102のフォロワ・キャッシュ・クラスタ106とその所与のデータ・センタ102の永続ストレージ・データベース110との間で情報を通信するリーダ・キャッシュ・クラスタ108を含む。特定の実施形態では、データベース110は、関係データベースである。特定の実施形態では、リーダ・キャッシュ・クラスタ108は、データベース110の任意の適切な実装形態と相互作用するように動作可能なプラグインを含むことができる。たとえば、データベース110は、動的可変プラグイン・アーキテクチャ(dynamically−variable plug−in architecture)として実施され得、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との間のキャッシング・レイヤと考えることができる。
【0024】
1実装形態では、キャッシング・レイヤは、ライトスルー/リードスルー・キャッシング・レイヤであり、すべての読取および書込は、キャッシング・レイヤをトラバースする(traverse)。1実装形態では、キャッシング・レイヤは、関連付け情報を維持し、したがって、そのような情報に関するクエリを処理することができる。他のクエリは、実行のためにデータベース110にパス・スルーされる。データベース110は、一般に、他のクエリ・タイプを処理するための他のキャッシング・レイヤをそれ自体で含むことができるデータベース・システムを意味する。
【0025】
各フォロワ・キャッシュ・クラスタ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と通信することだけができる。
【0026】
特定の実施形態では、ネットワーキング・システム100によって格納される情報は、各データ・センタ102内で、それぞれデータベース110内とフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれの中との両方に格納される。特定の実施形態では、各データベース110内に格納される情報は、関係的に(たとえば、MySQLを介してオブジェクトおよびテーブルとして)格納され、同一の情報は、フォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれの中で、グラフ・ノードおよびノードの間の関連付けまたは接続(以下ではグラフ・エッジと呼ばれる)を含むグラフの形で、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれによって格納される複数のデータ・シャード(data shard)内に格納される。特定の実施形態では、フォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれのデータ・シャードは、それぞれのキャッシュ・クラスタ内のキャッシュ・ノード112または114の間でグループ化されまたは分割される。すなわち、それぞれのキャッシュ・クラスタ内のキャッシュ・ノード112または114のそれぞれは、クラスタによって格納されるシャードのサブセットを格納する(また、リーダ・キャッシュ・クラスタが、所与のデータ・センタ102のキャッシュ・クラスタのそれぞれによって格納されるシャードを同期化し、或る実施形態でデータ・センタ102の間で同期化するので、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれによって格納されるシャードの各セットは、同一の情報を格納する)。
【0027】
特定の実施形態では、各グラフ・ノードは、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれと、データベース110とによって格納されるグラフ内のグラフ・ノードを一意に識別する一意識別子(ID)(以下ではノードIDと呼ばれる)に割り当てられる;すなわち、各ノードIDは、グローバルに一意である。1実装形態では、各ノードIDは、64ビット識別子である。1実装形態では、シャード(shard)は、ノードID空間のセグメントを割り当てられる。特定の実施形態では、各ノードIDは、一意の対応するシャードIDに(たとえば、算術的にまたは何らかの数学関数を介して)マッピングされる;すなわち、各シャードIDも、グローバルに一意であり、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれによって格納されるシャードの各セット内の同一のデータ・オブジェクトを参照する。言い換えると、すべてのデータ・オブジェクトは、一意ノードIDを有するグラフ・ノードとして格納され、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれのデータ・シ
ャード内のグラフ内に格納されるすべての情報は、同一の対応する一意シャードIDを使用して、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のそれぞれのデータ・シャード内に格納される。
【0028】
すぐ上で説明したように、特定の実施形態では、シャードID空間(シャードIDと、各キャッシュ・クラスタのすべてのシャードによって格納され、他のフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108のすべてにおいてレプリケーションされる関連する情報と)は、それぞれフォロワ・キャッシュ・クラスタ106またはリーダ・キャッシュ・クラスタ108内で、それぞれフォロワ・キャッシュ・ノード112またはリーダ・キャッシュ・ノード114の間で分割される。たとえば、所与のフォロワ・キャッシュ・クラスタ106内の各フォロワ・キャッシュ・ノード112は、それぞれのフォロワ・キャッシュ・クラスタ106によって格納されるシャードのサブセット(たとえば、数十個、数百個、または数千個のシャード)を格納することができる。各シャードは、特定のシャードによって格納される複数のシャードIDの範囲内のシャードIDにそのそれぞれのノードIDがマッピングされるノードに関する情報を含む情報を格納すべき複数のノードIDの範囲(range)を割り当てられる。同様に、リーダ・キャッシュ・クラスタ108内の各リーダ・キャッシュ・ノード114は、それぞれのリーダ・キャッシュ・クラスタ108によって格納されるシャードのサブセット(たとえば、数十個、数百個、または数千個のシャード)を格納することができる。各シャードは、特定のシャードによって格納される複数のシャードIDの範囲内のシャードIDにそのそれぞれのノードIDがマッピングされるノードに関する情報を含む情報を格納すべき複数のノードIDの範囲を割り当てられる。
【0029】
しかし、上で説明したように、所与のシャードIDは、それぞれフォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108によって格納される同一のデータ・オブジェクトに対応する。各フォロワ・キャッシュ・クラスタ106内のフォロワ・キャッシュ・ノード112の個数およびリーダ・キャッシュ・クラスタ108内のリーダ・キャッシュ・ノード114の個数は、静的に(たとえば、フォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタ108は、一般に、それぞれ異なる個数のフォロワ・キャッシュ・ノード112およびリーダ・キャッシュ・ノード114を含むことができる)または動的に(たとえば、所与のキャッシュ・クラスタ内のキャッシュ・ノードが、様々な理由から周期的にまたは修正、更新、もしくは保守の必要に応じてシャット・ダウンされる場合がある)変化する可能性があるので、フォロワ・キャッシュ・ノード112およびリーダ・キャッシュ・ノード114のそれぞれによって格納されるシャードの個数は、各キャッシュ・クラスタ内ならびにキャッシュ・クラスタの間で静的にまたは動的に変化する可能性がある。さらに、各シャードに割り当てられる複数のシャードIDの範囲も、静的にまたは動的に変化する可能性がある。
【0030】
特定の実施形態では、フォロワ・キャッシュ・ノード112およびリーダ・キャッシュ・ノード114のそれぞれは、それぞれのキャッシュ・ノード内でキャッシングされる情報の格納および提供を管理するグラフ管理ソフトウェアを含む。特定の実施形態では、所与のキャッシュ・クラスタのキャッシュ・ノードのそれぞれで実行されるグラフ管理ソフトウェアは、どのシャード(および対応するシャードID)がそれぞれのキャッシュ・クラスタ内のキャッシュ・ノードのそれぞれによって格納されるのかを判定するために通信することができる。さらに、キャッシュ・ノードがフォロワ・キャッシュ・ノード112である場合には、フォロワ・キャッシュ・ノード112上で実行されるグラフ管理ソフトウェアは、クライアント・サーバ104から要求(たとえば、書込要求または読取要求)を受信し、フォロワ・キャッシュ・ノード内の適当なシャード内の情報を取り出し、更新し、削除し、または格納することによってその要求に応え、フォロワ・キャッシュ・ノード112とそれぞれのフォロワ・キャッシュ・クラスタ106の他のフォロワ・キャッシ
ュ・ノード112との間の通信ならびにフォロワ・キャッシュ・ノード112とリーダ・キャッシュ・クラスタ108のリーダ・キャッシュ・ノード114との間の通信を管理しまたは容易にする。同様に、キャッシュ・ノードが、リーダ・キャッシュ・ノード114である場合には、リーダ・キャッシュ・ノード114上で実行されるグラフ管理ソフトウェアは、リーダ・キャッシュ・ノード114とフォロワ・キャッシュ・クラスタ106のフォロワ・キャッシュ・ノード112とリーダ・キャッシュ・クラスタ108の他のリーダ・キャッシュ・ノード114との間の通信ならびにリーダ・キャッシュ・ノード114とデータベース110との間の通信を管理する。キャッシュ・ノード112および114のそれぞれの上で実行されるグラフ管理ソフトウェアは、それがグラフの形の情報を格納し提供していることを理解する。
【0031】
特定の実施形態では、各フォロワ・キャッシュ・ノード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を格納するのかを知る。
【0032】
特定の実施形態では、グラフ内、特定の例示的な実施形態ではソーシャル・グラフ内の各ノードに関する情報は、そのシャード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のシャード内に格納することができる。
【0033】
ネットワーキング・システム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によって識別されるノードを用いて格納されたコンテンツを取り出させる。
【0034】
ここで、エッジ・クエリ(すぐ上で説明したノード・クエリではなく)を参照すると、
クエリ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を更新するのに使用することができる。
【0035】
1実装形態では、リーダ・キャッシュ・クラスタ108およびフォロワ・キャッシュ・クラスタ106のキャッシュによって実施されるキャッシング・レイヤは、1または複数のクエリ・タイプに関する高いクエリ・レートをサポートする形で1または複数のインデックス内の関連付けデータ(association data)を維持する。或る実装形態では、本発明は、グラフ内のノードの間の関連付けを対象とする効率的な共通部分クエリ、メンバシップ・クエリ、およびフィルタリング・クエリを容易にする。たとえば、1実装形態で、キャッシング・レイヤは、ノード同士の間の様々な関連付けに関するポイント・ルックアップ・クエリ、レンジ・クエリ、およびカウント・クエリを処理するために最適化された形で、情報をキャッシングする。たとえば、ページを構成する際に、クライアント・サーバ104は、所与のユーザのすべての友達に関するクエリを発行しうる。クライアント・サーバ104は、ユーザおよび「友達」エッジ・タイプを識別するassoc_getクエリを発行することができる。クエリの処理を容易にするために、キャッシング・レイヤ内のキャッシング・ノードは、第1ノード(たとえば、ユーザに対応するノード)とユーザの連絡先または友達に対応するノードとの間の所与のタイプの関連付け(「友達」、「ファン」、「メンバ」、「いいね」、その他など)を格納することができる。さらに、ページの別の当事者を構成するために、クライアント・サーバ104は、ユーザまたはユーザ・プロファイル、「ウォールポスト(wallpost)」エッジ・タイプ、および限度値を識別するassoc_getクエリを発行することによって、プロファイル上のウォール・ポストの最後のN個のセットのクエリを発行することができる。
同様に、特定のウォール・ポストに対するコメントを、同様の形で取り出すことができる。
【0036】
1実装形態では、フォロワ・キャッシュ・クラスタ106およびリーダ・キャッシュ・クラスタによって実施されるキャッシング・レイヤは、高速検索を容易にし、高いクエリ・レートを処理するグラフ内のノード(id1,id2)同士の間の関連付けのためのインメモリ構造のセットを維持する。たとえば、(id1,タイプ)関連付けセット(id1で始まり、所与のタイプを有するすべての関連付けのセット)ごとに、キャッシング・レイヤは、2つのインメモリ・インデックスを維持する。上で述べたように、これらの関連付けセットは、id1が含まれるシャードに基づく各クラスタ内のキャッシュ・ノードによって維持される。さらに、下で述べる構造を考慮すると、2つのノードの間の所与の関連付けを、関連付けのそれぞれのノードに向けられた2つの関連付けセットに格納することができる。第1インデックスは、時間的属性(たとえば、タイム・スタンプ)に基づいており、レンジ・クエリをサポートする。id2による第2インデックスは、レンジ・クエリをサポートしないが、挿入およびルック・アップのよりよい時間計算量(time
complexity)をサポートする。1実装形態では、第1インデックスは、環状バッファ内に格納される関連付けエントリの順序付き動的配列である。環状バッファ内の各エントリは、1つの関連付けを記述しまたはこれに対応し、以下のフィールドを含む:a)$flags(1バイト)(関連付けの可視性を示す)、b)$id2(8バイト)、c)$time(4バイト)、d)$data(8バイト)($dataは、固定サイズ8バイト・フィールドである(9バイト以上が$dataのために必要である時には、$dataは、完全な$data値を保持する別のメモリ・チャンクへのポインタになる。$dataは、所与のassoc型についてオプションである)、およびe)$link(8バイト)同一のid2インデックス・バケット内の次のエントリおよび前のエントリのオフセット(下を参照されたい)。1実装形態では、配列は、$time属性の昇順で順序付けられる。インデックス内のエントリの個数は、上限を設けられ(10000など)、関連付けタイプによって構成可能である。限度に達した時には、配列がラップ・アラウンドする。配列は、$timeによってソートされるので、最も新しいエントリが、既存の要素のいずれをもシフトせずに末尾に付加される。
【0037】
1実装形態では、主インデックスを、グローバルmemcachedハッシュ・テーブルを介して名前によってルック・アップできる単一のmemcacheキー(「assoc:<id1>:<タイプ>」)に格納することができる。配列は、以下のフィールドを含むヘッダを前に付けることができる:a)count(4バイト)(id1,タイプ)関連付けセット内の可視の関連付けのカウント(インデックス内のキャッシングされるエントリだけではなく、永続的に格納される)、b)head(4バイト)環状バッファ内の配列頭部(最大にソートされる要素)のバイト・オフセット、c)tail(4バイト)環状バッファ内の配列尾部(最小にソートされる要素)のバイト・オフセット、およびd)id2 index pointer(8バイト)id2ハッシュ・テーブルを含むブロックへのポインタ。
【0038】
第2($id2)インデックスは、1実施形態では、ハッシュ・テーブルとして実施され、所与の($id1,$type,$id2)関連付けに関する迅速な挿入およびルックアップをサポートする。ハッシュ・テーブル自体は、1実装形態で、memcachedのメモリ・アロケータを用いて割り当てられる別々のブロック内に格納することができる。このテーブルは、それぞれが対応するハッシュ・バケット内の最初の要素を識別する主インデックスへのオフセットの配列である。要素は、その$linkフィールドを介してバケットにリンクされる。別々のブロック内にハッシュ・テーブルを格納することは、実装者(implementers)が、テーブルおよび主インデックスのサイズを独立に変更することを可能にし、したがって、関連付けセットが増大する時にコピーされるメ
モリの量を減らす。インプレースでのバケットへの関連付けエントリのリンクも、メモリ効率を改善する。ハッシュ・テーブル(およびバケット・リスト)は、隠しまたは削除としてマークされたエントリがインデックスから抹消される時に、再構築される必要がある可能性があるが、これは、まれにしか行われない。
【0039】
したがって、同一<タイプ>の新しい関連付けが追加される時には、キャッシュ・ノード112および114は、新たに関連付けされたオブジェクトをハッシュ・テーブルおよび環状バッファに追加し、最も古いエントリを環状バッファから除去する。上で述べたように、<ソートキー>値を使用して、タイム・スタンプなどの属性に基づいて、一致するエントリをソートすることができる。さらに、<限度>値は、返される結果の個数を最初のN個の値に制限し、ここで、N=<限度>である。この構成は、非常に高いクエリ・レートでノード同士の間の関連付けに関するクエリに応じることを可能にする。たとえば、第1のクエリが、ウェブ・ページのセクション内に友達のセットを表示することを要求する場合がある。キャッシュ・ノードは、主インデックスにアクセスすることによってid1に対応する関連付けセットをルック・アップすることと、環状バッファ内の最初のN(N=限度)個のid2エントリを取り出すこととによって、get_assoc(id1,タイプ,ソートキー,限度)クエリにすばやく応答することができる。さらに、副インデックスのハッシュ・テーブルは、ポイント・ルック・アップを容易にする。さらに、キャッシング・レイヤによって維持されるカウント値は、所与の関連付けセット(id1,タイプ)のカウントに対する高速応答を容易にする。
【0040】
データの格納および提供のいくつかの一般的な例を、これから説明する(ソーシャル・グラフの特定の例示的な実装形態に関する、より特定の例は、その後、ソーシャル・グラフの特定の例示的な実装形態を説明した後に説明する)。たとえば、クライアント・サーバ104が、ネットワーキング・システム100のユーザからまたはネットワーキング・システム100の別のサーバ、コンポーネント、アプリケーション、もしくは処理から(たとえば、ユーザ要求に応答して)など、ウェブ・ページに関する要求を受信する時に、クライアント・サーバ104は、要求されたウェブ・ページを生成するために1または複数のクエリを発行する必要がある場合がある。さらに、ユーザがネットワーキング・システム100とやり取りする時に、クライアント・サーバ104が、オブジェクト・ノードを確立しもしくは変更する要求および/または関連付けがオブジェクト・ノードになることの要求を受信する場合がある。或る場合に、クライアント・サーバ104によって受信される要求は、一般に、クライアント・サーバ104への要求がそのユーザの代わりに行われたユーザを表すノードIDを含む。この要求は、それに加えてまたはその代わりに、ユーザが、見る、更新する、削除する、または接続するか(エッジに)関連付けることを望む可能性があるオブジェクトに対応する1または複数の他のノードIDを含むことができる。
【0041】
たとえば、要求は、ユーザが見ることを望む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は、この情報を、要求するユーザにサービス提供することができる。
【0042】
もう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}の形の要求を送信することができる。
【0043】
特定の実施形態では、フォロワ・キャッシュ・ノードは、その後、対応するノードIDを格納するシャードを格納するリーダ・キャッシュ・ノード114に要求を送信し、その結果、リーダ・キャッシュ・ノード114は、シャードを更新できるようになる。その後、リーダ・キャッシュ・ノード114は、要求をデータベース110の言語に変換し、変換された要求をデータベース110に送信し、その結果、データベースを更新できるようにする。
【0044】
図4に、2つのノードの間の関連付けを追加する要求(assoc_add)を処理する例示的な方法を示す。
図4に示されているように、フォロワ・キャッシュ・ノード112は、assoc_add要求(たとえば、assoc_add(id1,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およびタイプへの参照を用いて検索可能である。
【0045】
特定の実施形態では、グラフは、ユーザ、ページ、イベント、ウォール・ポスト、コメント、写真、ビデオ、背景情報、コンセプト、興味、およびノードとして表すのに有用である任意の他の要素など、様々な異なるノード・タイプを維持することができる。エッジ・タイプは、ノード同士の間の関連付けに対応し、友達、フォロワ、サブスクライバ、ファン、いいね(または興味の他の表示)、ウォールポスト、コメント、リンク、提案、推奨、およびノード同士の間の他のタイプの関連付けを含むことができる。1実装形態では、グラフの一部を、ソーシャル・ネットワーク環境のそれぞれのユーザにそれぞれが対応するユーザ・ノードを含むソーシャル・グラフとすることができる。ソーシャル・グラフは、トピックノードだけでなく、それぞれが特定のコンセプトの専用であるかこれを対象とするコンセプト・ノードなどの他のノードをも含むことができる。トピック・ノードは、一時的(ephemeral)であってもなくてもよく、それぞれは、ソーシャル・ネットワーク環境のユーザの間で現在興味を持たれている特定のトピックの専用であるかこれを対象とする。特定の実施形態では、各ノードは、ソーシャル・ネットワーク環境内でホスティングされまたはアクセス可能である対応するウェブ・ページ(「プロファイル・ページ)を有し、表し、またはこれによって表される。たとえば、ユーザ・ノードは、対応するユーザ・プロファイル・ページを有することができる。対応するユーザ・プロファイル・ページでは、対応するユーザは、コンテンツを追加し、宣言を行い、他の形で彼自身または彼女自身を表現することができる。たとえば、下で説明するように、たとえばユーザ・プロファイル・ページ、コンセプト・プロファイル・ページ、またはトピック・プロファイル・ページなど、ソーシャル・ネットワーク環境内でホスティングされまたはアクセス可能である様々なウェブ・ページは、ユーザが、コンテンツをポストし、ステータス更新をポストし、メッセージをポストし、そのユーザまたは他のユーザによってサブミットされた他のポストに対するコメントを含むコメントをポストし、興味を宣言し、前述のポストならびにページおよび特定のコンテンツのいずれかに向かって「いいね」(下で説明する)を宣言し、あるいは、他の形で彼ら自身を表現するか様々なアクション(以下では、これらおよび他のユーザ・アクションを、集合的に「ポスト」または「ユーザ・アクション」と呼ばれる場合がある)を実行することを可能にする。或る実施形態では、ポスティング(posting)は、メディア・コンテンツ(たとえば、写真、ビデオ、音楽、テキストなど)、uniform resource locator(URL)、および他のノードなどの追加コンテンツに、そのそれぞれのプロファイル・ページ、他のユーザ・プロファイル・ページ、コンセプト・プロファイル・ページ、トピック・ページ、または他のウェブ・ページもしくはウェブ・アプリケーションを介してリンクしまたは他の形で参照することを含むことができる。そのようなポスト、宣言、またはアクションを、作成するユーザならびに他のユーザによって可視とすることができる。特定の実施形態では、ソーシャル・グラフはさらに、それぞれがソーシャル・グラフ内のノードの対応するペアのノード同士の間の接続を定義しまたは表す複数のエッジを含む。上で述べたように、コンテンツの各アイテムを、他のノードにリンクされたグラフ内のノードとすることができる。
【0046】
すぐ上で説明したように、様々な例示的な実施形態では、1または複数の説明されるウェブ・ページまたはウェブ・アプリケーションは、ソーシャル・ネットワーク環境またはソーシャル・ネットワーキング・サービスに関連する。本明細書で使用される時に、「ユーザ」は、そのようなソーシャル・ネットワーク環境とまたはこれを介してやり取りしまたは通信する、個人(人間のユーザ)、エンティティ(たとえば、企業、商店、またはサード・パーティ・アプリケーション)、または(たとえば、個人のまたはエンティティの)グループとすることができる。本明細書で使用される時に、「登録ユーザ」は、ソーシャル・ネットワーク環境内で公式に登録されたユーザを指す(一般に、本明細書で説明されるユーザおよびユーザ・ノードは、登録ユーザだけを指すが、これは、他の実施形態では必ずしも要件ではない;すなわち、他の実施形態では、本明細書で説明されるユーザおよびユーザ・ノードが、本明細書で説明されるソーシャル・ネットワーク環境に登録され
ていないユーザを指す場合がある)。特定の実施形態では、各ユーザは、対応する「プロファイル」ページを有し、対応する「プロファイル」ページは、ソーシャル・ネットワーク環境によって格納され、ホスティングされ、またはアクセス可能であり、他のユーザのすべてまたは選択されたサブセットによって可視である。一般に、ユーザは、彼または彼女自身のそれぞれのプロファイル・ページのすべてまたは一部に対する、ならびに潜在的に、たとえば他の可能性の中でも、ホーム・ページ、ウェブ・アプリケーションをホスティングするページを含む特定のユーザによってまたはこれのために作成された他のページに対する管理権を有する。本明細書で使用される時に、「認証されたユーザ」は、そのユーザが管理権を有する対応するプロファイル・ページで主張されるユーザであるものとしてソーシャル・ネットワーク環境によって認証されたユーザを、または代替では、主張されるユーザの適切に信頼される代理人を指す。
【0047】
2つのユーザ同士またはコンセプト同士の間の接続は、ソーシャル・ネットワーク環境のユーザ同士またはコンセプト同士の間の定義された関係を表すことができ、それに関して関連付けが行われたソーシャル・ネットワーク環境のユーザ、コンセプト、イベント、または他のノードに対応するノード同士の間のエッジとしてソーシャル・ネットワーク環境の適切なデータ構造内で論理的に定義され得る。本明細書で使用される時に、「friendship」は、ソーシャル・ネットワーク環境のユーザのペアのユーザ同士の間の、定義されたソーシャル関係などの関連付けを表す。本明細書で使用される時に、「友達」は、別のユーザが接続、friendship、関連付け、または関係を形成し、2人のユーザの間にエッジを生成させた、ソーシャル・ネットワーク環境の任意のユーザを指すことができる。たとえば、2人の登録ユーザは、たとえば、2人のユーザの一方が、他方のユーザにfriendship要求を送信するか送信させた結果としてfriendshipについて他方を選択することによるなど、明示的にお互いに友達になることができる。その要求について、他方のユーザは、受け入れまたは拒否することができる。代替案では、friendshipまたは他の接続を、自動的に確立することができる。そのようなソーシャルfriendshipを、他のユーザ、特に彼ら自身が登録ユーザの一方または両方の友達であるユーザに可視とすることができる。登録ユーザの友達は、登録ユーザのプロファイルまたは他のページ上のコンテンツ、特にユーザ生成コンテンツまたは宣言されたコンテンツに対する高められたアクセス特権(increased access privileges)を有することもできる。しかし、ソーシャル・グラフ内で彼らの間に友達接続を確立させた2人のユーザが、実生活(ソーシャル・ネットワーキング環境の外部)では必ずしも(通常の意味での)友達ではない場合があることに留意されたい。たとえば、或る実装形態で、あるユーザが、ビジネスまたは他の人間以外のエンティティであり、したがって、この単語の伝統的な意味で、人間のユーザの友達になることができない場合がある。
【0048】
本明細書で使用される時に、「ファン」は、特定のユーザ、ウェブ・ページ、ウェブ・アプリケーション、またはソーシャル・ネットワーク環境内でアクセス可能な他のウェブ・コンテンツのサポータまたはフォロワであるユーザを指すことができる。特定の実施形態では、あるユーザが特定のウェブ・ページのファンである(特定のウェブ・ページを「愛好する(fan)」)時に、そのユーザを、他の登録ユーザまたは一般大衆が見るために、ファンとしてそのページ上でリストすることができる。さらに、ユーザのアバタまたはプロファイル写真を、そのページに(または、下で説明されるページのいずれかの中/上に)示すことができる。本明細書で使用される時に、「いいね」は、ユーザ、特に登録ユーザまたは認証されたユーザが、限定ではなく例として、彼または彼女がそれを「いいね」と思い、そのファンであり、それを支持し、楽しみ、または他の形で肯定的に捉えていることを宣言しまたは他の形で実証した、他の可能性の中でもポスト、コメント、興味、リンク、媒体(たとえば、写真、写真アルバム、ビデオ、音楽など)、コンセプト、エンティティ、またはページなどのものを指すことができる(或る実装形態では、ユーザは
、ソーシャル・ネットワーク・システムまたはソーシャル・ネットワーク環境によってホスティングされまたはアクセス可能である任意のページに対して、いいねまたは事実上何でも示しまたは宣言することができる)。1実施形態では、「いいね」を示しもしくは宣言することまたはユーザがあるものの「ファン」であることを示しもしくは宣言することを、ソーシャル・ネットワーキング環境内で同等に処理し、定義することができ、交換可能に使用することができる。同様に、自分自身がコンセプトもしくはコンセプト・プロファイル・ページなど、何かの「ファン」であると宣言することまたは自分自身があることを「いいね」と思うことを宣言することを、ソーシャル・ネットワーキング環境内で同等に定義し、本明細書で交換可能に使用することができる。さらに、本明細書で使用される時に、「興味」は、ユーザのプロファイル・ページ内で提示される、ユーザの宣言した興味など、ユーザが宣言した興味を指すことができる。本明細書で使用される時に、「ほしい(want)」は、ユーザが欲しがる事実上すべてのものを指すことができる。上で説明したように、「コンセプト」は、たとえば、スポーツ、スポーツ・チーム、音楽のジャンル、作曲家、趣味、会社(企業)、エンティティ、グループ、有名人、登録ユーザではない人、またはイベント、或る実施形態では別のユーザ(たとえば、認証されないユーザ)、その他などへの興味、いいねと思う気持ち、または関係をユーザが宣言しまたは他の形で実証できる事実上すべてのものを指すことができる。たとえば、複数のユーザのうちの1または複数(たとえば、ジェリー・ライス以外)によって作成され、管理される、有名なプロ・フットボール・プレイヤである「ジェリー・ライス」のコンセプト・ノードおよびコンセプト・プロファイル・ページがあると同時に、ソーシャル・グラフが、さらに、ジェリー・ライス自身(またはジェリー・ライスの信頼されもしくは認可された代理人)によって作成され、管理されるジェリー・ライスのユーザ・ノードおよびユーザ・プロファイル・ページを含む場合がある。
【0049】
図5に、分散冗長システムを示す。図示の実装形態では、分散冗長システムは、少なくとも第1データ・センタ102aおよび第2データ・センタ102bを含む。データ・センタ102aおよび102bのそれぞれは、1または複数のフォロワ・キャッシュ・クラスタ106ならびにリーダ・キャッシュ・クラスタ108aおよび108bを含む。1実装形態では、リーダ・キャッシュ・クラスタ108aは、主(マスタ)キャッシュ・クラスタとして働き、リーダ・キャッシュ・クラスタ108bは、副(スレーブ)キャッシュ・クラスタとして働く。1実装形態では、データ・センタ102a、102bは、データベース110の複製されたコピーを達成するために同期化機能が使用されるという意味で、冗長である。1実装形態では、データ・センタ102aを、ある地理的領域(米国の西海岸など)に物理的に配置して、その領域からのトラフィックにサービス提供することができ、データ・センタ102bを、別の地理的領域(米国の東海岸など)に物理的に配置することができる。これらの領域のいずれからのユーザも、同一のデータおよび関連付けにアクセスできると仮定すると、効率的な同期化機構が望ましい。
【0050】
図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)および副リーダ・キャッシュ・クラスタ108
bにブロードキャストし、副リーダ・キャッシュ・クラスタ108bは、更新をそのフォロワ・キャッシュ・クラスタ106に転送する(
図5、4b)(608)。
図6に示されているように、リーダ・キャッシュ・ノード114は、更新をレプリケーション・ログにも追加する(610)。データベース110a、110bは、永続データベースを同期化するために、MySQL Replicationなどの同期化機構を実施する。
【0051】
図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の間の別々のレプリケーションがデータ・セキュリティを可能にすると同時に、キャッシング・レイヤに対する変更をデータ・センタにまたがってすばやく複製することを可能にする。
【0052】
本明細書で説明されるアプリケーションまたは工程を、実行された時に1または複数のプロセッサに上で説明した動作を実施させるように動作可能である、有形のデータ記憶媒体上でまたはこれの中で実施されまたは符号化される一連のコンピュータ可読命令として実施することができる。前述の工程および機構を、様々な物理システムによってならびに様々なネットワーク環境およびコンピューティング環境内で実施することができるが、下で説明されるコンピューティング・システムは、限定する目的ではなく教訓的な目的のために、上で説明されるサーバ・システムおよびクライアント・システムの例示的なコンピューティング・システム・アーキテクチャを提供する。
【0053】
図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に結合された表示デバイス(図示せず)とを含むことができる。集合的に、これらの要素は、米国カリフォルニア州サンタ・クララのインテル(Intel Corporation)によって製造されるx86互換プロセッサおよび米国カリフォルニア州サニーベールのアドバンスド・マイクロ・デバイセズ(Advanced
Micro Devices(AMD),Inc.)によって製造されるx86互換プロセッサ、ならびに任意の他の適切なプロセッサに基づく汎用コンピュータ・システムを含むがこれに限定されないコンピュータ・ハードウェア・システムの広いカテゴリを表す
ことが意図されている。
【0054】
ハードウェア・システム1000の要素を、下でより詳細に説明する。具体的には、ネットワーク・インターフェース1016は、ハードウェア・システム1000と、ETHERNET(登録商標)(たとえば、IEEE 802.3)ネットワーク、バックプレーン、その他など、広範囲のネットワークのいずれかとの間の通信を提供する。マス・ストレージ1018は、サーバ22a、22b内で実施される上で説明した機能を実行するためのデータおよびプログラミング命令の永久ストレージを提供し、システム・メモリ1014(たとえば、DRAM)は、プロセッサ1002によって実行される時にデータおよびプログラミング命令の一次ストレージを提供する。I/Oポート1020は、ハードウェア・システム1000に結合され得る追加の周辺デバイス同士の間の通信を提供する、1または複数のシリアル通信ポートおよび/またはパラレル通信ポートである。
【0055】
ハードウェア・システム1000は、様々なシステム・アーキテクチャを含むことができ、ハードウェア・システム1000の様々なコンポーネントは、再配置されうる。たとえば、キャッシュ1004を、プロセッサ1002と共にオンチップとすることができる。その代わりに、キャッシュ1004およびプロセッサ1002を、「プロセッサ・モジュール」として一緒にパックすることができ、その場合、プロセッサ1002は、「プロセッサ・コア」と呼ばれる。さらに、本発明の或る種の実施形態は、上記のコンポーネントのすべてを、必要としないかまたは含まなくてもよい。たとえば、標準I/Oバス1008に結合されて図示された周辺デバイスを、高性能I/Oバス1006に結合することができる。さらに、或る実施形態では、単一のバスだけが存在する場合があり、ハードウェア・システム1000のコンポーネントは、その単一のバスに結合される。さらに、ハードウェア・システム1000は、追加のプロセッサ、ストレージ・デバイス、またはメモリなど、追加のコンポーネントを含むことができる。
【0056】
1実装形態では、本明細書で説明される実施形態の動作は、ハードウェア・システム1000によって実行される一連の実行可能モジュールとして、分散コンピューティング環境内で個別にまたは集合的に実施される。特定の実施形態では、1組のソフトウェア・モジュールおよび/またはドライバは、ネットワーク通信プロトコル・スタック、ブラウジング機能および他のコンピューティング機能、最適化工程、ならびに類似物を実施する。前述の機能モジュールは、ハードウェア、コンピュータ可読媒体上に格納された実行可能モジュール、またはこの両方の組合せによって実現されうる。たとえば、機能モジュールは、プロセッサ1002など、ハードウェア・システム内のプロセッサによって実行される複数のまたは一連の命令を備えることができる。当初に、一連の命令を、マス・ストレージ1018などのストレージ・デバイス上に格納することができる。しかし、一連の命令を、ディスケット、CD−ROM、ROM、EEPROM、その他などの任意の適切な記憶媒体上に有形に格納することができる。さらに、一連の命令を、ローカルに格納する必要はなく、ネットワーク/通信インターフェース1016を介して、ネットワーク上のサーバなどのリモート・ストレージ・デバイスから受信することができる。命令は、マス・ストレージ1018などのストレージ・デバイスからメモリ1014にコピーされ、その後、プロセッサ1002によってアクセスされ、実行される。
【0057】
オペレーティング・システムは、ソフトウェア・アプリケーション(図示せず)へおよびソフトウェア・アプリケーションからのデータの入力および出力を含む、ハードウェア・システム1000の動作を管理し、制御する。オペレーティング・システムは、システム上で実行されつつあるソフトウェア・アプリケーションとシステムのハードウェア・コンポーネントとの間のインターフェースを提供する。LINUX(登録商標)オペレーティング・システム、米国カリフォルニア州カパティーノのアップル・コンピュータ(Apple Computer Inc.)から入手可能なApple Macintosh
オペレーティング・システム、UNIX(登録商標)オペレーティング・システム、マイクロソフト(Microsoft)(登録商標)Windows(登録商標)オペレーティング・システム、BSDオペレーティング・システム、および類似物など、任意の適切なオペレーティング・システムを使用することができる。もちろん、他の実装形態が可能である。たとえば、本明細書で説明されるニックネーム生成機能を、ファームウェア内または特定用途向け集積回路上で実施することができる。
【0058】
さらに、上で説明した要素および動作は、記憶媒体上に格納される命令からなるものとすることができる。命令を、処理システムによって取り出し、実行することができる。命令の或る例は、ソフトウェア、プログラム・コード、およびファームウェアである。記憶媒体の或る例は、メモリ・デバイス、テープ、ディスク、集積回路、およびサーバである。命令は、処理システムによって実行される時に、本発明に従って動作するように処理システムに指示するように動作可能である。用語「処理システム」は、単一の処理デバイスまたは相互動作可能な処理デバイスのグループを指す。処理デバイスの或る例は、集積回路および論理回路網である。当業者は、命令、コンピュータ、および記憶媒体を熟知している。
【0059】
本開示は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。同様に、適当である場合には、添付の特許請求の範囲は、当業者が理解するはずの、本明細書の例示的な実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。たとえば、本発明の実施形態は、ソーシャル・ネットワーキング・ウェブサイトに関連して動作するものとして説明されたが、本発明を、ウェブ・アプリケーションをサポートし、関連付けのグラフとしてデータをモデル化する任意の通信ファシリティに関連して使用することができる。さらに、或る実施形態では、用語「ウェブ・サービス」および「ウェブサイト」が、交換可能に使用される場合があり、さらに、サーバに直接にAPI呼出しを行う、モバイル・デバイス(たとえば、セルラ電話機、スマートホン、パーソナルGPS、携帯情報端末、パーソナル・ゲーミング・デバイスなど)などのデバイス上のカスタムAPIまたは一般化されたAPIを指すことができる。
【解決手段】ノードと、エッジがグラフ内で接続するノード同士の間の関連付けまたは関係を定義するエッジとを含むグラフとしてモデル化された情報を格納し提供する、分散キャッシング・システム。