図は単に例示のために本発明の様々な実施形態を示し、図において同様の要素を識別するために同様の参照番号を使用する。本明細書に説明される本発明の原理から逸脱することなく、図に示される構造および方法の代替実施形態が使用され得ることは、以下の説明から当業者には容易に理解されるであろう。
ソーシャル・ネットワーキング・ユーザ、またはデジタル・コンテンツ(または「コンテンツ」)の提供者は、ソーシャル・ネットワーキング・システムを通してデジタル・コンテンツを配信したいと希望することがある。たとえば、広告主が、ビデオや対話的プレゼンテーションのようなデジタル・コンテンツ・アイテム(または「コンテンツ・アイテム」)を有する広告を、ソーシャル・ネットワーキング・システムのユーザに対して配信したいと希望することがある。たとえば、映画スタジオが、映画の予告編をソーシャル・ネットワーキング・システムのユーザに対して提供したいと希望することがある。同様に、音楽会社、書籍出版社、およびビデオ・ゲーム・メーカなどが、ソーシャル・ネットワーキング・システムのユーザに使用可能なある種の形態のデジタル・コンテンツ・アイテムを作成したいと希望することがある。また、ソーシャル・ネットワーキング・システムのユーザは、ストリーミング・ビデオに対するリンクをユーザのソーシャル・ネットワーキング投稿に含めることや、ストリーミング音声コンテンツをソーシャル・ネットワーク投稿に埋め込むことなどによって、ユーザ間でデジタル・コンテンツ・アイテムを共有することがある。
しかしながら、ソーシャル・ネットワーキング・システムを通じてデジタル・コンテン
ツを配信するのを達成することは難しい場合がある。しばしば、デジタル・コンテンツ・アイテムは大量のデータを含んでいる。たとえば、ソーシャル・ネットワーキング・ニュースフィードに出現する単純なビデオ広告は、静止画像フレームごとの画像データ、音声データ、対話的ハイパーリンク、および他のコンテンツ・データを含み得る。ユーザは、802.11Wi−Fi、第3世代(3G)、第4世代(4G)、および第5世代(5G)ネットワークを含む様々なタイプのネットワークを通してソーシャル・ネットワーキング・システムにアクセスを試みる可能性があり、それらの各ネットワークは、異なる性能特性(たとえば、データ速度、帯域幅、およびスループット)を有する傾向がある。無線ネットワークにアクセスしているユーザに対するデジタル・コンテンツ・アイテムのストリーミングは、他の手法によって可能な品質よりも比較的低い品質のバージョンのデジタル・コンテンツ・アイテムをユーザに対して提供する可能性があり、あるいはストリーミング・コンテンツに対するアクセスの遅延(たとえば、ジッタ)をもたらす可能性がある。
本明細書で提供される技法は、オンライン・コンテンツ・ソースからのコンテンツ・アイテムに対するクライアント・デバイスによるアクセスを改善することができるシステムおよび方法を実装する。いくつかの実施形態によれば、ネットワークを通じてオンライン・コンテンツ・ソース(たとえば、コンテンツ・サーバ)からクライアント・デバイスに対してコンテンツがストリーミングされるとき、クライアント・デバイスにおいてローカルにデジタル・コンテンツをキャッシュするために、中間コンテンツ・ストリーミング・システムがクライアント・デバイス上に実装される。本明細書で使用される場合、コンテンツ・アイテムは、たとえば、テキスト、音声、ビデオ、画像、およびプレゼンテーションなどを含む1つまたは複数のタイプのコンテンツを含み得る。クライアント・デバイスにおける中間コンテンツ・ストリーミング・システムを通じて、クライアント・デバイスにおけるマルチメディア・プレーヤなどのコンテンツ・アクセス・アプリケーションは、コンテンツ・データ(たとえば、ビデオ・データ)のストリームとしてコンテンツ・アイテム(たとえば、ビデオ)の一部または全部を要求し次いで受信することができる。詳細には、中間コンテンツ・ストリーミング・システムが、オンライン・コンテンツ・ソースによって提供されたコンテンツ・アイテムを求める要求を受信することができ、次いで、中間コンテンツ・ストリーミング・システムは、コンテンツ・データ(たとえば、音声データ)のストリームとしてコンテンツ・アイテム(たとえば、音声)の一部または全部をコンテンツ・アクセス・アプリケーションに対して提供することができる。これは、コンテンツ・アクセス・アプリケーションの代わりに、中間コンテンツ・ストリーミング・システムが、オンライン・コンテンツ・ソースからのコンテンツ・データを要求し取得することによって達成され得る。オンライン・コンテンツ・ソースからのコンテンツ・データは、データ・ストリームとして中間コンテンツ・ストリーミング・システムによって受信され得る。要求されたコンテンツ・アイテムについてのコンテンツ・データがオンライン・コンテンツ・ソースから中間コンテンツ・ストリーミング・システムに対してストリーミングされると、中間コンテンツ・ストリーミング・システムは、コンテンツ・データをコンテンツ・アクセス・アプリケーションに対して提供することができる。さらに、中間コンテンツ・ストリーミング・システムがオンライン・コンテンツ・ソースからストリーミングされたコンテンツ・データを受信すると、それは、ストリーミングされたコンテンツ・データをクライアント・デバイスにローカルにキャッシュし、同じコンテンツ・アイテムを求める将来の要求のために、キャッシュされたコンテンツ・データを維持することができる。
コンテンツ・アクセス・アプリケーションから中間コンテンツ・ストリーミング・システムによって受信される要求は、HTTP、FTP、およびRTPなどを含む様々なタイプのネットワーク・プロトコルを利用し得る。同様に、中間コンテンツ・ストリーミング・システムからオンライン・コンテンツ・ソースに対して送信される要求も、様々なタイ
プのネットワーク・プロトコルを利用し得る。いくつかの実施形態では、中間コンテンツ・ストリーミング・システムからオンライン・コンテンツ・ソースに対して送信される要求は、中間コンテンツ・ストリーミング・システムがコンテンツ・アクセス・アプリケーションから受信する要求と同様である、またはその要求とフォーマットが対応することが可能である。実施形態によっては、中間コンテンツ・ストリーミング・システムは、クライアント・デバイスでローカルに動作するサーバ・プロセスとして実装され得る。
その後、中間コンテンツ・ストリーミング・システムが、中間コンテンツ・ストリーミング・システムを通じて以前にストリーミングされたコンテンツ・アイテムを求める要求(たとえば、以前のように同じコンテンツ・アクセス・アプリケーションによる、またはクライアント・デバイスにおける別のコンテンツ・アクセス・アプリケーションによる要求)を受信したとき、中間コンテンツ・ストリーミング・システムは、中間コンテンツ・ストリーミング・システムによって以前に受信されたコンテンツ・アイテムのそうした部分に対応するコンテンツ・データを、ローカル・キャッシュから提供することによって、要求を実現することができる。また、中間コンテンツ・ストリーミング・システムは、オンライン・コンテンツ・ソースに対し要求をして、中間コンテンツ・ストリーミング・システムによって以前に受信されていないコンテンツ・アイテムのそうした部分についてのコンテンツ・データを、コンテンツ・アクセス・アプリケーションに対して提供することによって、要求を実現することができる。このようにして、中間コンテンツ・ストリーミング・システムは、クライアント・デバイスにおける独立したコンテンツ・アクセス・アプリケーションが、コンテンツ・アイテムの以前のストリーミング・セッション中にクライアント・デバイスにおいて既にローカルにキャッシュされたコンテンツ・データから恩恵を受けることを可能にすることができる。要求によっては、中間コンテンツ・ストリーミング・システムは、特定のシーク時間(たとえば、ビデオの最初より後の時間)に基づいてコンテンツ・アイテムについてのコンテンツ・データをクライアント・デバイスにおけるコンテンツ・アクセス・アプリケーションに対して提供し、それにより、中間サーバがコンテンツ・アイテムを最初からまたはその全体を要求および受信することを不要にするように構成され得る。また、実施形態によっては、中間コンテンツ・ストリーミング・システムは、コンテンツ・データをデータ・ストリームとして提供することができ、中間コンテンツ・ストリーミング・システムによって提供されるデータ・ストリームは、オンライン・コンテンツ・ソースから中間コンテンツ・ストリーミング・システムに対してコンテンツ・データを提供するデータ・ストリームと同様である(たとえば、フォーマットまたはプロトコルについて同様である)ことが可能である。
いくつかの実施形態によれば、キャッシュは、クライアント・デバイスにおけるコンテンツ・アクセス・アプリケーション(たとえば、ストリーミング・ビデオ・プレーヤ)のバッファとは別個であり独立して維持される。そのようなバッファは、典型的には、コンテンツがストリーミングされコンテンツ・アクセス・アプリケーションによってアクセスされるときに、コンテンツ・アクセス・アプリケーションによってコンテンツ・データの一時的なデータ記憶のために使用される。
本明細書で使用される場合、コンテンツ・アクセス・アプリケーションは、音声プレーヤ、ビデオ・プレーヤ、またはプレゼンテーション・プレーヤ(たとえば、スライド・ショーもしくはベクトル・ベースのグラフィックス)など、任意のタイプのマルチメディア・プレーヤを含み得る。コンテンツ・アクセス・アプリケーションはまた、マルチメディア・エディタ(たとえば、音声もしくはビデオ・エディタ)または文書エディタ(たとえば、ワープロ・アプリケーション)など、様々なタイプのコンテンツ・エディタを含み得る。また、コンテンツ・アクセス・アプリケーションは、コンテンツ・アクセス・アプリケーションと適合したコンテンツにアクセスするときにウェブ・ブラウザなど他のスタンドアロン・アプリケーションによって利用され得る1つまたは複数のソフトウェア・モジ
ュールとして実装され得る。たとえば、コンテンツ・アクセス・アプリケーションは、ウェブ・ページに埋め込まれたビデオ(たとえば、ソーシャル・ネットワークのウェブ・ページ上に提示された投稿またはメッセージに埋め込まれたビデオ)にアクセスするときにウェブ・ブラウザによって利用されるスタンドアロン・ビデオ・プレーヤまたはビデオ・プレーヤ・モジュールを含み得る。コンテンツ・アクセス・アプリケーションは、1つまたは複数の特定のタイプのコンテンツにアクセスするように制限されてもよい。ビジュアル・コンテンツにアクセスすることは、ビデオまたはプレゼンテーション・コンテンツなどのビジュアル・コンテンツをクライアント・デバイスのディスプレイ上に提示することを含むことができる。音声コンテンツにアクセスすることは、ビデオ内の音声コンテンツなどの音声コンテンツをクライアント・デバイスのスピーカを通じて出力することを含むことができる。
本明細書で使用される場合、オンライン・コンテンツ・ソースは、1つまたは複数のコンテンツ・アイテムを要求元クライアント・デバイスに対してネットワーク接続を通じて提供するように構成されたサーバなどのコンピュータ・システムに及ぶ。オンライン・コンテンツ・ソースは、コンテンツをデータ・ストリームとして提供するように構成されてよく、それにより、クライアント・デバイスが、(コンテンツ・アイテムの全ての部分がクライアント・デバイスで受信されるまで待つ必要なく)コンテンツ・アイテムの一部が受信されるとそれらにアクセスするのを可能にすることができる。
実施形態によっては、コンテンツ・アイテムを求めるコンテンツ・アクセス・アプリケーションからオンライン・コンテンツ・ソースに対する元の要求が、中間コンテンツ・ストリーミング・システムに対して宛てられ、もしくは転送され、または中間コンテンツ・ストリーミング・システムによってインターセプトされ得る。たとえば、コンテンツ・アクセス・アプリケーションは、オンライン・コンテンツ・ソースに対してコンテンツ・アイテムを求める要求を、中間コンテンツ・ストリーミング・システムに対して直接的に送信するように構成され得る。次いで、中間ストリーミング・コンテンツ・システムが、要求されたコンテンツ・アイテムについてのコンテンツ・データを使用可能な範囲でローカル・キャッシュからコンテンツ・アクセス・アプリケーションに対して提供すること、またはローカル・キャッシュに存在しないコンテンツ・データをオンライン・コンテンツ・ソースから取得してコンテンツ・アクセス・アプリケーションに対して取得されたコンテンツ・データを提供すること、あるいは両方を行うことができる。
いくつかの実施形態によれば、クライアント・デバイスにおけるユーザが、ソーシャル・ネットワーキング・システムによって提供されるニュース・フィードなどを通じてコンテンツ・アイテムに対するアクセスを提示される前に、クライアント・デバイスに対するコンテンツ・アイテム(たとえば、ストリーミング・コンテンツ・アイテム)の優先度ベースの事前ダウンロードを円滑にするために、優先度ベースのコンテンツ・ダウンロード・システムがクライアント・デバイス上に実装される。たとえば、優先度ベースのコンテンツ・ダウンロード・システムは、ソーシャル・ネットワーキング・システムに対する投稿に出現するビデオ(たとえば、ソーシャル投稿に埋め込まれたオンライン・ビデオ)を、ユーザがそのような投稿に遭遇する(たとえば、そのような投稿を閲覧する)前に、部分的または完全にクライアント・デバイスに対して事前ダウンロードすることができる。ユーザは、ソーシャル・ネットワーク・ニュース・フィードにおいてそのような投稿に遭遇する可能性があり、1つまたは複数のニュース・アイテム(以下「ニュース投稿」)は、コンテンツ・サーバによって提供される1つまたは複数のオンライン・コンテンツ・アイテム(たとえば、オンライン・ビデオ)を含む。ユーザがニュース・フィードを閲覧するとき、ニュース・フィードの1つまたは複数の投稿に含まれるコンテンツ・アイテムが、そのようなニュース投稿がニュース・フィードを通じてユーザにアクセス可能にされる(たとえば、クライアント・デバイス上でユーザにとって可視になる)前に、クライアン
ト・デバイスに対して全てまたは部分的に事前ダウンロードされ得る。
コンテンツ・アイテムが優先度ベースのコンテンツ・ダウンロード・システムによってクライアント・デバイスに対して事前ダウンロードされると、コンテンツ・アイテムはクライアント・デバイスのローカル・キャッシュに記憶され得る。いくつかの実施形態によれば、本明細書に説明されている優先度ベースのコンテンツ・ダウンロード・システムは、本明細書に説明されている中間コンテンツ・ストリーミング・システムと同じローカル・キャッシュを利用することができる。このようにローカル・キャッシュを共有することにより、クライアント・デバイス上の中間コンテンツ・ストリーミング・システムは、同じクライアント・デバイス上の優先度ベースのコンテンツ・ダウンロード・システムと相互動作することができる。たとえば、コンテンツ・アイテムがクライアント・デバイス上にアクセスのために提示される前に、優先度ベースのコンテンツ・ダウンロード・システムは、コンテンツ・アイテムの少なくとも一部を、中間コンテンツ・ストリーミング・システムと共有されたローカル・キャッシュに対して事前ダウンロードすることができ、コンテンツ・アイテムを求める要求が中間コンテンツ・ストリーミング・システムによって受信される前にそれを行うことができる。続いて、コンテンツ・アイテムを求める要求が中間コンテンツ・ストリーミング・システムによって受信されると、優先度ベースのコンテンツ・ダウンロード・システムによってローカル・キャッシュに対して事前ダウンロードされたコンテンツ・アイテムの部分を使用して、その要求が中間コンテンツ・ストリーミング・システムによって実現され得る。
コンテンツ事前ダウンロードの優先度付けは、様々なファクタに基づくことが可能であり、以下に限定されないが、それらのファクタは、コンテンツ・アイテムが、ユーザによって遭遇されたときに(たとえば、ビデオがユーザのソーシャル・ネットワーキング・ニュース・フィードを通じてユーザの見える範囲に入ったときに)ソーシャル・ネットワーキング・ニュース・フィードにおいて自動再生されるものであるか否か、いくつのソーシャル・ネットワーキングの「いいね」またはコメントが、コンテンツ・アイテムに関連付けられているか、コンテンツ・アイテムに関連付けられているソーシャル・ネットワーキングの「いいね」またはコメントの質(たとえば、ビデオに対して誰が「いいね」を表明しているまたはコメントしているか)、クライアント・デバイスに関する詳細(たとえば、ハードウェアまたはソフトウェア仕様)、クライアント・デバイスで使用可能なコンピューティング・リソース(たとえば、メモリ)、コンテンツ・アイテムがユーザによって遭遇される確率(たとえば、ビデオがユーザのソーシャル・ネットワーキング投稿フィードを通じてユーザの見える範囲に入る蓋然性)、コンテンツ・アイテムの主題(たとえば、広告または非広告)、および、コンテンツ・アイテムにアクセスする(たとえば、再生する)際のユーザ・プリファレンスを含む。優先度ベースのコンテンツ・ダウンロード・システムは、クライアント・デバイスでローカルに動作するサーバ・プロセスとして実装され得る。
図1は、本発明の実施形態による、例示的な中間コンテンツ・ストリーミング・システム106および例示的な優先度ベースのコンテンツ・ダウンロード・システム108を示す。図示されるように、クライアント・デバイス100は、中間コンテンツ・ストリーミング・システム106、優先度ベースのコンテンツ・ダウンロード・システム108、およびクライアント・アプリケーション・モジュール110を含む。図1では、クライアント・デバイス100は、中間コンテンツ・ストリーミング・システム106と優先度ベースのコンテンツ・ダウンロード・システム108との両方を有するように示しているが、いくつかの実施形態によっては、クライアント・デバイス100は、一方(たとえば、中間コンテンツ・ストリーミング・システム106)のみを含み、他方(たとえば、優先度ベースのコンテンツ・ダウンロード・システム108)を含んでいない。
図示されるように、クライアント・デバイス100は、ネットワーク102を通じてコンテンツ・サーバ104に対して通信可能に結合される。実施形態に応じて、クライアント・デバイス100は、ネットワーク102を通じてコンテンツ・データなどのデータをコンテンツ・サーバ104と交換することができるデスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピューティング・デバイス、データ対応携帯電話、または他の何らかのネットワーク対応デバイスであり得る。ネットワーク102は、様々なネットワーク・プロトコルに対応することができ、コンピュータ・ネットワークなどの通信ネットワークを含むことができる。ネットワーク102は、それぞれ異なるデータ速度、帯域幅、およびスループットを提供する802.11Wi−Fi、第3世代(3G)、第4世代(4G)ネットワーク、および第5世代(5G)ネットワークを含む1つまたは複数の有線または無線ネットワークを含み得る。ネットワーク102は、コンテンツ・サーバ104から、中間コンテンツ・ストリーミング・システム106および優先度ベースのコンテンツ・ダウンロード・システム108のうちの1つまたは複数に対して、コンテンツ・アイテムを提供することができる。実施形態によっては、ネットワーク102は、クライアント・デバイス100、中間コンテンツ・ストリーミング・システム106、優先度ベースのコンテンツ・ダウンロード・システム108、およびコンテンツ・サーバ104のうちの1つまたは複数内の内部構成要素の結合を円滑にすることができる。
中間コンテンツ・ストリーミング・システム106および優先度ベースのコンテンツ・ダウンロード・システム108を説明するにあたり、クライアント・デバイス100のクライアント・アプリケーション・モジュール110をまず説明することが役立つはずである。いくつかの実施形態によれば、クライアント・アプリケーション・モジュール110は、ユーザとクライアント・デバイス100との間の対話を円滑にするように構成されたソフトウェアベースの構成要素またはスタンドアロン・アプリケーションである。たとえば、クライアント・アプリケーション・モジュール110は、クライアント・デバイス100上で動作するように構成され、ユーザがソーシャル・ネットワーキング・システムにアクセスしその中で提供される様々なものと対話することを可能にするスタンドアロン・アプリケーションであり得る。本明細書でさらに詳細に説明されているように、ソーシャル・ネットワーキング・システムは、1つまたは複数のソーシャル・ネットワーキング・ユーザ間でコンテンツ・アイテムを配信または共有するために利用され得る。
図示されるように、クライアント・アプリケーション・モジュール110は、クライアント・アプリケーション・モジュール110を通じた1つまたは複数のタイプのコンテンツ・アイテムに対するアクセスを円滑にするためのコンテンツ・アクセス・モジュール112を含む。図1ではコンテンツ・アクセス・モジュール112はクライアント・アプリケーション・モジュール110に含まれるものとして示されているが、コンテンツ・アクセス・モジュール112は、クライアント・デバイス100上で動作するように構成され、1つまたは複数のコンテンツ・タイプに対するアクセスを円滑にするソフトウェアベースのコンポーネントまたはスタンドアロン・アプリケーションであってもよい。たとえば、コンテンツ・アクセス・モジュール112は、クライアント・アプリケーション・モジュール110の外部のソフトウェア・コンポーネントであって、クライアント・デバイス100におけるユーザがクライアント・アプリケーション・モジュール110を通じてコンテンツ・アイテムにアクセスしているときにクライアント・アプリケーション・モジュール110によって利用されるソフトウェア・コンポーネントであり得る。たとえば、クライアント・アプリケーション・モジュール110は、ソーシャル・ネットワーキング・システムのウェブ・ページにアクセスしているウェブ・ブラウザであり、クライアント・アプリケーション・モジュール110は、マルチメディア・プレーヤなどのコンテンツ・アクセス・モジュール112を利用して、ウェブ・ページに埋め込まれたマルチメディア・コンテンツ・アイテム(たとえば、音声またはビデオ)にアクセスすることができる。
本明細書で使用される場合、コンテンツ・アイテムにアクセスすることは、コンテンツ・アイテムを開くこと、およびコンテンツ・アイテムに関連付けられているコンテンツ・データを読み取る、書き込む、または編集することを含むことができる。たとえば、ビデオ・コンテンツ・アイテムにアクセスすることは、ビデオ・コンテンツ・アイテムを開くこと、ビデオ・コンテンツ・アイテムに関連付けられているビデオ・コンテンツ・データを読み取ること、およびクライアント・デバイス100に結合されたディスプレイにビデオ・コンテンツ・データを表示することを備えることができる。コンテンツ・アイテムにアクセスするための方法は、コンテンツ・タイプ間で異なることがある。コンテンツ・アイテムがクライアント・デバイス100から離れて配置され(たとえば、コンテンツ・サーバ104に配置され)ていて、ネットワーク102を通じて(たとえば、コンテンツ・サーバ104から)受信された場合、コンテンツ・アクセス・モジュール112は、ネットワーク102を通じて送信されたデータ・ストリーム(以下「コンテンツ・データ・ストリーム」)を通じてコンテンツ・アイテムにアクセスすることができる。コンテンツ・アクセス・モジュール112は、関連付けられているコンテンツ・データ・ストリームを通じて受信されたコンテンツ・アイテムの少なくとも一部を、コンテンツ・バッファ・データ・ストア114に記憶する(たとえば、コミットする)ことによって、コンテンツ・アイテムのそのようなストリームベースのアクセスを円滑にすることができる。たとえば、コンテンツ・サーバ104からクライアント・デバイス100に対してストリーミングされたコンテンツ・アイテムにアクセスするために、コンテンツ・サーバ104から受信されたコンテンツ・データ・ストリームは、まずコンテンツ・バッファ・データ・ストア114に記憶されることが可能であり、コンテンツ・アクセス・モジュール112は、コンテンツ・バッファ・データ・ストア114に記憶されたコンテンツ・データにアクセスして、記憶されたコンテンツ・データに対応するコンテンツ・アイテムの部分にアクセスすることが可能である。本明細書でさらに詳細に説明されているように、コンテンツ・アクセス・モジュール112は、中間コンテンツ・ストリーミング・システム106、優先度ベースのコンテンツ・ダウンロード・システム108、または両方の何らかの組合せを通じて、データ・ストリームを受信することができる。
コンテンツ・バッファ・データ・ストア114は、コンテンツ・アクセス・モジュール112がコンテンツ・アイテムの特定の量をそれがアクセスされる前にバッファすることを可能にし、そうすることにより、クライアント・デバイス100におけるユーザによるコンテンツ・アイテムに対するアクセスを、よりスムーズまたは連続的にすることができる。たとえば、コンテンツ・バッファ・データ・ストア114は、ストリーミングされたビデオの最初の10秒を、そのビデオがクライアント・デバイス100におけるユーザにアクセス(たとえば、再生)される前またはアクセス可能(たとえば、再生可能にされる)にされる前に、コンテンツ・アクセス・モジュール112がバッファすることを可能にすることができる。不整合なコンテンツ・データ・ストリームを生じ得るネットワーク状態(たとえば、パケット遅延、パケット誤り、ネットワーク接続の一時的喪失、またはネットワーク速度の低下)に影響されやすい、ネットワーク102を通じたコンテンツ・データ・ストリームとしてコンテンツ・サーバ104からのコンテンツ・アイテムに対してコンテンツ・アクセス・モジュール112がアクセスしている場合に、コンテンツ・バッファ・データ・ストア114は特に有用であり得る。
コンテンツ・バッファ・データ・ストア114は、コンテンツ・アクセス・モジュール112を通じてユーザによって現在アクセスされているコンテンツ・アイテムの少なくともそうした部分についてのコンテンツ・データを一時的に記憶するように構成され得る。また、コンテンツ・バッファ・データ・ストア114は、コンテンツ・アクセス・モジュール112を通じてユーザによって最近アクセスされたコンテンツ・アイテムのそうした部分についてのコンテンツ・データを一時的に記憶するように構成されてよく、それにより、オンライン・ソース(たとえば、コンテンツ・サーバ104)からの再取得の必要な
しにそのような部分に再アクセスすることを可能にする。
一時的なデータ記憶を実装するために、コンテンツ・バッファ・データ・ストア114は、記憶限度(storage limit)、データ年齢、最終アクセス時間、アクセスの頻度、コンテンツ・データのタイプ、コンテンツ・アイテムの部分への対応、またはコンテンツ・データが対応するコンテンツ・アイテムの優先度などに基づいて、コンテンツ・データを除去(たとえば、消去)することができる。たとえば、コンテンツ・バッファ・データ・ストア114に現在記憶されているコンテンツ・データ全体が記憶限度に達するまたはそれを超えたとき、コンテンツ・データがコンテンツ・バッファ・データ・ストア114から追い出され得る。別の例では、いつコンテンツ・データが受信されたか(たとえば、30秒前に受信された)、またはコンテンツ・データが過去にいつアクセスされたコンテンツ・アイテムの部分に対応するか(たとえば、30秒より前にアクセスされた部分に対応する)に基づいて、コンテンツ・データがコンテンツ・バッファ・データ・ストア114から追い出され得る。
中間コンテンツ・ストリーミング・システム106は、コンテンツ・アイテムについてのコンテンツ・データがコンテンツ・サーバ104からネットワーク102を通じてクライアント・デバイス100に対してストリーミングされると、そのコンテンツ・アイテムのためのコンテンツ・データとしてクライアント・デバイスにローカルにキャッシュするように構成され得る。クライアント・アプリケーション・モジュール110に含まれ得るクライアント・デバイス100におけるコンテンツ・アクセス・モジュール112は、中間コンテンツ・ストリーミング・システム106を通じてコンテンツ・サーバ104にコンテンツ・アイテムを要求することができ、次いで、中間コンテンツ・ストリーミング・システム106は、コンテンツ・データ(たとえば、音声データ)のストリームとしてコンテンツ・アイテム(たとえば、音声)の一部または全部をコンテンツ・アクセス・モジュール112に対して提供することができる。これは、コンテンツ・アクセス・モジュール112の代わりに、中間コンテンツ・ストリーミング・システム106が、ネットワーク102を通じてコンテンツ・サーバ104からのコンテンツ・データを要求し取得することによって達成され得る。コンテンツ・サーバ104からのコンテンツ・データは、データ・ストリームとして中間コンテンツ・ストリーミング・システム106によって受信され得る。要求されたコンテンツ・アイテムについてのコンテンツ・データがコンテンツ・サーバ104から中間コンテンツ・ストリーミング・システム106に対してストリーミングされると、中間コンテンツ・ストリーミング・システム106は、コンテンツ・データをコンテンツ・アクセス・モジュール112に対して提供することができる。また、中間コンテンツ・ストリーミング・システム106がコンテンツ・サーバ104からストリーミングされたコンテンツ・データを受信すると、それは、ストリーミングされたコンテンツ・データをクライアント・デバイス100にローカルにキャッシュし(たとえば、システム106により含まれるコンテンツ・キャッシュ・データ・ストアに記憶される)、同じコンテンツ・アイテムを求める将来の要求のために、キャッシュされたコンテンツ・データを維持することができる。中間コンテンツ・ストリーミング・システム106は、コンテンツ・データがクライアント・デバイス100にローカルにキャッシュされた前または後に、あるいはコンテンツ・データがクライアント・デバイス100にローカルにキャッシュされるのと同時に、ストリーミングされたコンテンツ・データをコンテンツ・アクセス・モジュール112に対して提供することができる。要求されたコンテンツ・アイテムについてのコンテンツ・データをコンテンツ・アクセス・モジュール112に対して提供するとき、中間コンテンツ・ストリーミング・システム106は、コンテンツ・データをデータ・ストリームとして提供することができる。また、中間コンテンツ・ストリーミング・システム106からコンテンツ・アクセス・モジュール112に対するデータ・ストリームは、要求されたコンテンツ・アイテムについてのコンテンツ・データをコンテンツ・サーバ104から中間コンテンツ・ストリーミング・システム106に対して提
供するデータ・ストリームとフォーマットまたはプロトコルが同様であってよい。
いくつかの実施形態によれば、キャッシュされたコンテンツ・データは、クライアント・デバイス100上の様々なコンテンツ・アクセス・モジュールのバッファに保有されるコンテンツ・データとは独立して保有される。また、いくつかの実施形態によれば、キャッシュされたコンテンツ・データは、コンテンツ・アクセス・モジュールのバッファがコンテンツ・データを保有する期間よりも長い期間にわたり保有される。実施形態によっては、中間コンテンツ・ストリーミング・システム106は、クライアント・デバイス100でローカルに動作するサーバ・プロセスとして実装され得る。
コンテンツ・アクセス・モジュール112から中間コンテンツ・ストリーミング・システム106によって受信される要求は、HTTP、FTP、およびRTPなどを含む様々なタイプのネットワーク・プロトコルを利用し得る。同様に、中間コンテンツ・ストリーミング・システム106からコンテンツ・サーバ104に対して送信される要求も、様々なタイプのネットワーク・プロトコルを利用し得る。いくつかの実施形態において、中間コンテンツ・ストリーミング・システム106からコンテンツ・サーバ104に対して送信される要求は、中間コンテンツ・ストリーミング・システム106がコンテンツ・アクセス・モジュール112から受信するコンテンツ・アイテムを求める要求と同様である、またはその要求とフォーマットが対応することが可能である。
コンテンツ・サーバ104からクライアント・デバイス100に対してストリーミングされているコンテンツ・アイテムに関して受信されたコンテンツ・データをローカルにキャッシュすることに続いて、中間コンテンツ・ストリーミング・システム106は、同じコンテンツ・アイテムについての別の要求を受信することがある。この別の要求は、同じコンテンツ・アイテムを以前に要求したクライアント・デバイス100におけるコンテンツ・アクセス・モジュール(たとえば、コンテンツ・アクセス・モジュール112)から、またはクライアント・デバイス100における別のクライアント・アクセス・モジュールによって生じ得る。中間コンテンツ・ストリーミング・システム106は、中間コンテンツ・ストリーミング・システム106によって以前に受信されたコンテンツ・アイテムのそうした部分に対応するコンテンツ・データを、ローカル・キャッシュから提供することによって、要求を実現することができる。また、中間コンテンツ・ストリーミング・システム106は、コンテンツ・サーバ104に対し要求をして、中間コンテンツ・ストリーミング・システム106によって以前に受信されていないコンテンツ・アイテムのそうした部分についてのコンテンツ・データを、コンテンツ・アクセス・モジュール(たとえば、コンテンツ・アクセス・モジュール112)に対して提供することによって、要求を実現することができる。このようにして、中間コンテンツ・ストリーミング・システム106は、クライアント・デバイス100における独立したコンテンツ・アクセス・モジュールが、コンテンツ・アイテムの以前のストリーミング・セッション中にクライアント・デバイスにおいて既にローカルにキャッシュされたコンテンツ・データから恩恵を受けることを可能にすることができる。
たとえば、ユーザは、コンテンツ・アクセス・モジュール112を使用してクライアント・アプリケーション・モジュール110を通じて、ソーシャル・ネットワーキング・システムによって提供されたストリーミング・ビデオ・コンテンツ・アイテムをプレビューすることを選択することができる。コンテンツ・アクセス・モジュール112は、ユーザがストリーミング・ビデオ・コンテンツ・アイテムをプレビューするとき、ストリーミング・ビデオ・コンテンツ・アイテムの全画面より小さいビューを提供するように構成され得る。続いて、ユーザが第2のコンテンツ・アクセス・モジュール(図示せず)を使用してクライアント・アプリケーション・モジュール110を通じてストリーミング・ビデオ・コンテンツ・アイテムを閲覧することを選択することができ、第2のコンテンツ・アク
セス・モジュールは、クライアント・デバイス100上にストリーミング・ビデオ・コンテンツ・アイテムの全画面ビューを提供する。第2のコンテンツ・アクセス・モジュールが、同じストリーミング・ビデオ・コンテンツ・アイテムに対するアクセスを要求するとき、中間コンテンツ・ストリーミング・システム106は、そのローカル・キャッシュから、ストリーミング・ビデオ・コンテンツ・アイテムに関るクライアント・デバイス100に以前のストリーミング・セッション中に既に受信されたストリーミング・ビデオ・コンテンツ・アイテムのそうした部分を提供することができる。使用される部分は、コンテンツ・アクセス・モジュール112を通じたプレビューに関る以前のセッションの間に受信されたそうした部分を含み得る。
要求によっては、中間コンテンツ・ストリーミング・システム106は、特定のシーク時間(たとえば、ビデオの最初より後の時間)に基づいてコンテンツ・アイテムについてのコンテンツ・データをクライアント・デバイス100におけるコンテンツ・アクセス・モジュール(たとえば、コンテンツ・アクセス・モジュール112)に対して提供し、それにより、中間サーバがコンテンツ・アイテムを最初からまたはその全体を要求および受信することを不要にするように構成され得る。たとえば、クライアント・デバイス100におけるユーザによる選択に基づいて、コンテンツ・アクセス・モジュール112は、コンテンツ・サーバ104によって提供されたストリーミング・ビデオ・コンテンツ・アイテムの特定の部分にアクセスするための要求を送信することができ、その部分は、ストリーミング・ビデオ・コンテンツ・アイテム内の特定の時間部分(たとえば、特定の分および秒)に対応している。中間コンテンツ・ストリーミング・システム106は、要求を受信し、要求に基づいて、特定の時間位置に対応する特定の部分を求める要求を実現するためにコンテンツ・アクセス・モジュール112にどのコンテンツ・データが提供される必要があるか識別する。たとえば、識別されたコンテンツ・データに基づいて、中間コンテンツ・ストリーミング・システム106は、コンテンツ・データをそのローカル・キャッシュからコンテンツ・アクセス・モジュール112に対して提供すること、またはコンテンツ・サーバ104からコンテンツ・データを取得してコンテンツ・アクセス・モジュール112に対して取得されたコンテンツ・データを提供すること、あるいは両方を行うことができる。
実施形態によっては、コンテンツ・アイテムを求めるコンテンツ・アクセス・モジュール112からコンテンツ・サーバ104に対する元の要求が、中間コンテンツ・ストリーミング・システム106に対して宛てられ、もしくは転送され、または中間コンテンツ・ストリーミング・システム106によってインターセプトされ得る。たとえば、コンテンツ・アクセス・アプリケーションは、オンライン・コンテンツ・ソース(たとえば、コンテンツ・サーバ104)から提供されるコンテンツ・アイテムを求める要求を、中間コンテンツ・ストリーミング・システム106に対して直接的に送信するように構成され得る。次いで、中間ストリーミング・コンテンツ・システム106が、要求されたコンテンツ・アイテムについてのコンテンツ・データを使用可能な範囲でローカル・キャッシュからコンテンツ・アクセス・モジュール112に対して提供すること、またはローカル・キャッシュに存在しないコンテンツ・データをコンテンツ・サーバ104から取得してコンテンツ・アクセス・モジュール112に対して取得されたコンテンツ・データを提供すること、あるいは両方を行うことができる。このようにして、コンテンツ・アクセス・モジュール112およびクライアント・デバイス100上の他のコンテンツ・アクセス・モジュールに代わって、中間コンテンツ・ストリーミング・システム106が、コンテンツ・アクセス・モジュールの要求を実現するのに必要とされるコンテンツ・データがローカルにキャッシュされていない場合に、コンテンツ・データをコンテンツ・サーバ104に対して要求することができる。
優先度ベースのコンテンツ・ダウンロード・システム108は、クライアント・デバイ
ス100におけるユーザがコンテンツ・アイテムに対するアクセスを提示される前に、コンテンツ・アイテムのクライアント・デバイス100に対する優先度ベースの事前ダウンロードを円滑にするように構成され得る。たとえば、投稿に出現するオンライン・コンテンツ・アイテム(たとえば、ビデオ・コンテンツ・アイテム)のソーシャル・ネットワーキング・システムに対するストリーミングは、クライアント・デバイス100におけるユーザがそのような投稿に遭遇する(たとえば、そのような投稿を閲覧する)前に、優先度ベースのコンテンツ・ダウンロード・システム108によってクライアント・デバイス100に対して部分的にまたは完全に事前ダウンロードすることができる。クライアント・デバイス100におけるソーシャル・ネットワーク・ユーザは、ソーシャル・ネットワーク・ニュース・フィードにおいてそのような投稿に遭遇する可能性があり、1つまたは複数のニュース投稿は、1つまたは複数のオンライン・コンテンツ・アイテムを含む。ユーザがクライアント・アプリケーション・モジュール110を通じてニュース・フィードを閲覧するとき、ニュース・フィードの1つまたは複数のニュース投稿に含まれるコンテンツ・アイテムは、そのようなニュース投稿がニュース・フィードを通じて(たとえば、ニュース・フィードの)ユーザにアクセス可能にされる前に、クライアント・デバイス100に対して全てまたは部分的に事前ダウンロードされ得る。
コンテンツ・アイテムが優先度ベースのコンテンツ・ダウンロード・システム108によってクライアント・デバイス100に対して事前ダウンロードされると、コンテンツ・アイテムはクライアント・デバイス100のローカル・キャッシュに記憶され得る。いくつかの実施形態によれば、優先度ベースのコンテンツ・ダウンロード・システム108は、中間コンテンツ・ストリーミング・システム106と同じローカル・キャッシュを利用する。このようにローカル・キャッシュを共有することにより、中間コンテンツ・ストリーミング・システム106は、優先度ベースのコンテンツ・ダウンロード・システム108と相互動作することができる。たとえば、コンテンツ・アイテムがクライアント・デバイス100上にアクセスのために提示される前に、優先度ベースのコンテンツ・ダウンロード・システム108は、コンテンツ・アイテムの少なくとも一部を、中間コンテンツ・ストリーミング・システム106と共有されたローカル・キャッシュに対して事前ダウンロードすることができ、コンテンツ・アイテムを求める要求が中間コンテンツ・ストリーミング・システム106によって受信される前にそれを行うことができる。続いて、コンテンツ・アイテムを求める要求が中間コンテンツ・ストリーミング・システム106によって受信されると、優先度ベースのコンテンツ・ダウンロード・システム108によってローカル・キャッシュに対して事前ダウンロードされたコンテンツ・アイテムの部分を使用して、その要求が中間コンテンツ・ストリーミング・システム106によって実現され得る。
本明細書でさらに詳細に説明されているように、コンテンツ事前ダウンロードの優先度付けは、様々なファクタに基づくことが可能であり、以下に限定されないが、それらのファクタは、コンテンツ・アイテムが、クライアント・デバイス100におけるユーザによって遭遇されたときにソーシャル・ネットワーキング・ニュース・フィードにおいて自動再生されるものであるか否か、いくつのソーシャル・ネットワーキングの「いいね」またはコメントが、コンテンツ・アイテムに関連付けられているか、コンテンツ・アイテムに関連付けられているソーシャル・ネットワーキングの「いいね」またはコメントの質、クライアント・デバイス100に関する詳細、クライアント・デバイス100で使用可能なコンピューティング・リソース、コンテンツ・アイテムがクライアント・デバイス100におけるユーザによって遭遇される確率、コンテンツ・アイテムの主題、および、コンテンツ・アイテムにアクセスする際のユーザ・プリファレンスを含む。優先度ベースのコンテンツ・ダウンロード・システム108は、クライアント・デバイス100でローカルに動作するサーバ・プロセスとして実装され得る。
コンテンツ・サーバ104は、音声、ビデオ、または他のマルチメディア・コンテンツ・アイテムなどのコンテンツ・アイテムを、ネットワーク102を通じてクライアント・デバイス100に対して提供することができる。本明細書でさらに詳細に説明されているように、コンテンツ・アイテムは、テキスト、画像、音声、ビデオ、および対話的コンテンツ・アイテムなどを含み得る。コンテンツ・アイテムは、音声またはビデオ広告などの広告を含むことが可能であり、オンライン音声またはビデオ・ストリームなどの、ネットワークを通じてユーザによって一般に共有されるコンテンツ・アイテムを含むことが可能である。コンテンツ・アイテムはまた、たとえば、テキスト・メッセージに埋め込まれるビデオのように、他のコンテンツ・アイテムに埋め込まれることも可能である。コンテンツ・アイテムはまた、コンテンツ・サーバ104によってネットワーク102を通じてクライアント・デバイス100に対して提供され得る音楽ファイル、ビデオ・ファイル、および文書などに対するハイパーリンクを含むこともできる。このようにすることで、コンテンツ・サーバ104は、実際のコンテンツ・アイテム(たとえば、音楽、ビデオ、文書など)を提供する必要がなく、代わりに、クラウドベースのサービスまたはサーバのようなオンライン・コンテンツ・リソースによって使用可能なコンテンツ・アイテムのネットワーク位置に対するリンクを提供することができる。いくつかの実施形態では、第1のコンテンツ・アイテムに対するハイパーリンクを第2のコンテンツ・アイテム内に含める結果として、第1のコンテンツ・アイテムが第2のコンテンツ・アイテムに埋め込まれる。
コンテンツ・アイテムは、クライアント・デバイス100に対して従来ダウンロードされる、または従来ストリーミングされるコンテンツ・アイテムを含み得る。たとえば、オンラインで提供されるマルチメディア・ファイルに対するアクセスは、クライアント・デバイスに対するデータ・ストリームによって、または初めにクライアント・デバイスに対してマルチメディア・ファイルをまずダウンロードして次いでクライアント・デバイスにおけるダウンロードされたマルチメディア・ファイルに対するアクセスを円滑にすることによって、円滑にされ得る。したがって、いくつかの実施形態では、コンテンツ・アイテム(たとえば、音声またはビデオ・ファイル)は、コンテンツ・サーバ104によってクライアント・デバイス100に対してコンテンツ・データのストリームとして提供され得る。コンテンツ・サーバ104からストリーミングされたコンテンツ・データを受信すると、クライアント・デバイス100は、本明細書に説明されているように、ストリーミングされたコンテンツ・データを、中間コンテンツ・ストリーミング・システム106、優先度ベースのコンテンツ・ダウンロード・システム108、または両方を通じて、コンテンツ・アクセス・モジュール112に対して提供することができる。次いで、コンテンツ・アクセス・モジュール112が、ストリーミングされたコンテンツ・データをコンテンツ・バッファ・データ・ストア114に一時的に記憶することができ、コンテンツ・アクセス・モジュール112は、コンテンツ・バッファ・データ・ストア114内のデータに対応するコンテンツ・アイテムのそうした部分に対するアクセスを、クライアント・デバイス100におけるユーザに対して提供することができる。
いくつかの実施形態では、コンテンツ・サーバ104は、図7に示されるように、ソーシャル・ネットワーキング環境700に組み込まれる。たとえば、コンテンツ・サーバ104は、図7の参照番号722を有する外部システムのような外部システムによって実装され得る。また、中間コンテンツ・ストリーミング・システム106、優先度ベースのコンテンツ・ダウンロード・システム108、または両方が、図7で参照番号718および720によってそれぞれ示されるように、ソーシャル・ネットワーキング環境700に組み込まれ得る。
図1および本明細書の全ての図に示される構成要素は、単に例示であり、他の実施形態は、追加的な、より少ない、または異なる構成要素を含んでもよい。別の例として、実施形態によっては、2つ以上のクライアント・デバイスまたは2つ以上のコンテンツ・サー
バを含んでよいことは理解されるであろう。また、重要な細部を不明瞭にしないために、いくつかの構成要素は図1および本明細書の他の図に示されないことがある。
図2は、本発明の実施形態による中間コンテンツ・ストリーミング・システム106を示す。図2において、中間コンテンツ・ストリーミング・システム106は、クライアント・コンテンツ要求モジュール200、コンテンツ・キャッシュ・モジュール202、サーバ・コンテンツ要求モジュール204、コンテンツ・ストリーミング・モジュール206、コンテンツ消去モジュール208、およびコンテンツ・キャッシュ・データ・ストア210を含む。いくつかの実施形態によれば、コンテンツ・キャッシュ・データ・ストア210は、中間コンテンツ・ストリーミング・システム106によってサービスされるクライアント・デバイス(たとえば、クライアント・デバイス100)用のローカル・キャッシュとして働く。いくつかの実施形態において、コンテンツ・キャッシュ・データ・ストア210は、中間コンテンツ・ストリーミング・システム106と本明細書に説明されている優先度ベースのコンテンツ・ダウンロード・システムとの間で共有されるローカル・キャッシュとして働く。図2に示されている構成要素は、追加的な、より少ない、または異なる構成要素を含んでもよい。また、重要な細部を不明瞭にしないために、いくつかの構成要素は図2に示されないことがある。
クライアント・コンテンツ要求モジュール200は、クライアント・アクセス・モジュールからコンテンツ・アイテムを求める要求を受信するように構成されてよく、コンテンツ・アイテムは、ネットワークを通じてコンテンツ・サーバによって提供される。実施形態によっては、クライアント・コンテンツ要求モジュール200は、転送によって、またはインターセプトによって、クライアント・アクセス・モジュールから要求を直接的に受信することができる。受信される要求は、HTTP、FTP、およびRTPを含む様々ネットワーク・プロトコルを含むものであり得る。クライアント・コンテンツ要求モジュール200はまた、受信された要求を分析し、要求を実現するのに使用され得る情報を取得するように構成され得る。たとえば、要求を分析することにより、クライアント・コンテンツ要求モジュール200は、要求されているコンテンツ・アイテムを識別する、コンテンツ・アイテムが求められた先のコンテンツ・サーバを識別する、要求のタイプを識別する、またはコンテンツ・アイテムの特定の要求された部分(たとえば、コンテンツ・アイテムにおける時間位置)を識別することができる。
要求分析に基づいて、クライアント・コンテンツ要求モジュール200は、コンテンツ・キャッシュ・データ・ストア210に記憶されているコンテンツ・アイテムの識別された部分のうちの1つまたは複数に対応する第1のセットのコンテンツ・データを識別することができる。コンテンツ・キャッシュ・データ・ストア210におけるコンテンツ・データがコンテンツ・アイテムの識別された部分に対応しない場合、第1のセットのコンテンツ・データは空であってよく、または第1のセットのコンテンツ・データは生成されなくてよい。また、要求分析に基づいて、クライアント・コンテンツ要求モジュール200は、コンテンツ・キャッシュ・データ・ストア210に記憶されていない(またはそこから欠けている)コンテンツ・アイテムの識別された部分のうちの1つまたは複数に対応する第2のセットのコンテンツ・データを識別することもできる。コンテンツ・アイテムの全てが(たとえば、以前のコンテンツ・ストリーミング・セッション中に)既に受信されコンテンツ・キャッシュ・データ・ストア210に記憶されている場合、第2のセットのコンテンツ・データは空であってよく、または第2のセットのコンテンツ・データは生成されなくてよい。
第1のセットのコンテンツ・データ、第2のセットのコンテンツ・データ、または両方を識別することは、要求されているコンテンツ・アイテムに対応する記憶されたコンテンツ・データがあるか否かについてコンテンツ・キャッシュ・データ・ストア210を検査
することと、記憶されたコンテンツ・データがコンテンツ・アクセス・モジュールによって要求された特定の部分に対応するか否かを決定することとを備えることができる。また、第2のセットのコンテンツ・データを識別することは、コンテンツ・キャッシュ・データ・ストアに記憶されているコンテンツ・データを、コンテンツ・アクセス・モジュールによってコンテンツ・アイテムが要求されている先のコンテンツ・サーバから入手可能なコンテンツ・データと比較することを備えることができる。
コンテンツ・キャッシュ・モジュール202は、コンテンツ・キャッシュ・データ・ストア210に対するアクセスを円滑にするように構成され得る。たとえば、コンテンツ・キャッシュ・モジュール202は、どのようなコンテンツ・データがコンテンツ・キャッシュ・データ・ストア210に記憶されているかを決定する、どのようなコンテンツ・データがコンテンツ・キャッシュ・データ・ストア210から欠けているかを決定する、(たとえば、コンテンツ・サーバ104から受信された)コンテンツ・データのコンテンツ・キャッシュ・データ・ストア210に対する記憶を円滑にする、または(たとえば、コンテンツ消去モジュール208による)コンテンツ・キャッシュ・データ・ストア210からのコンテンツ・データの除去を円滑にするために利用され得る。コンテンツ・キャッシュ・モジュール202はまた、コンテンツ・データ年齢、最終アクセスの時間、およびメタデータなどを含むがそれらに限定されない、コンテンツ・キャッシュ・データ・ストア210に記憶されたコンテンツ・データに関する情報を取得することもできる。コンテンツ・キャッシュ・モジュール202はさらに、コンテンツ・アクセス・モジュールによる要求に応答してコンテンツ・アクセス・モジュールに対して提供されるべきコンテンツ・データを取得し中間コンテンツ・ストリーミング・システム106に対して提供するために利用され得る。
サーバ・コンテンツ要求モジュール204は、コンテンツ・キャッシュ・データ・ストア210から欠けているコンテンツ・アイテムの識別された部分に対応する第2のセットのコンテンツ・データを求める要求を生成し、コンテンツ・サーバに対して送出するように構成され得る。いくつかの実施形態によれば、サーバ・コンテンツ要求モジュール204は、第2のセットのコンテンツ・データを求める要求を送出し、要求された第2のセットのコンテンツ・データの一部または全部を応答として受信する。サーバ・コンテンツ要求モジュール204によって送出される要求は、当初はクライアント・デバイスのコンテンツ・アクセス・モジュールからクライアント・コンテンツ要求モジュール200によって受信された要求とフォーマットまたはプロトコルが同様であってよい。コンテンツ・サーバからコンテンツ・データを受信すると、サーバ・コンテンツ要求モジュール204は、コンテンツ・アイテムを要求しているコンテンツ・アクセス・モジュールに対して(たとえば、コンテンツ・ストリーミング・モジュール206を通じて)それが提供される前に、受信されたコンテンツ・データを(たとえば、コンテンツ・キャッシュ・モジュール202を通じて)コンテンツ・キャッシュ・データ・ストア210に記憶することができる。
コンテンツ・ストリーミング・モジュール206は、中間コンテンツ・ストリーミング・システム106で受信されたコンテンツ・データを、コンテンツ・アイテムを要求しているコンテンツ・アクセス・モジュールに対してデータ・ストリームとして提供するように構成され得る。いくつかの実施形態によれば、コンテンツ・ストリーミング・モジュール206は、コンテンツ・データ・ストリームを生成して提供し、そのコンテンツ・データ・ストリームは、サーバ・コンテンツ要求モジュール204による要求に応答したコンテンツ・サーバから受信されたコンテンツ・データ・ストリームとフォーマットまたはプロトコルが同様であり得る。コンテンツ・データ・ストリームは、コンテンツ・キャッシュ・モジュール202によってコンテンツ・キャッシュ・データ・ストア210から提供されるコンテンツ・データ、要求されたコンテンツ・アイテムを提供するコンテンツ・サ
ーバからサーバ・コンテンツ要求モジュール204によって取得され提供されるコンテンツ・データ、または両方を含むことができる。いくつかの実施形態によれば、サーバ・コンテンツ要求モジュール204によって取得されたコンテンツ・データは、まず(たとえば、コンテンツ・キャッシュ・モジュール202を通じて)コンテンツ・キャッシュ・データ・ストア210に記憶され、コンテンツ・ストリーミング・モジュール206が、コンテンツ・キャッシュ・データ・ストア210に記憶されているコンテンツ・データからコンテンツ・データ・ストリームを生成する。
コンテンツ消去モジュール208は、コンテンツ・キャッシュ・データ・ストア210に記憶されたコンテンツ・データ、いくつかのファクタに対して構成されることが可能であり、以下に限定されないが、それらのファクタは、クライアント・デバイスの記憶限度、コンテンツ・データの年齢、コンテンツ・データの最終アクセス時間、コンテンツ・データのアクセスの頻度、コンテンツ・データのタイプ、コンテンツ・アイテムの部分への対応、またはコンテンツ・データが対応するコンテンツ・アイテムの優先度などを含む。いくつかの実施形態によれば、コンテンツ消去モジュール208は、より高い優先度を有する第2のコンテンツ・アイテムに対応するコンテンツ・データを消去する前に、より低い優先度を有する第1のコンテンツ・アイテムに対応するコンテンツ・データを消去する。コンテンツ・アイテムの優先度の決定に関するさらなる詳細が本明細書に説明される。
図3は、本発明の実施形態による優先度ベースのコンテンツ・ダウンロード・システム108を示す。図3において、優先度ベースのコンテンツ・ダウンロード・システム108は、ニュース・フィード監視モジュール300、コンテンツ優先度モジュール302、コンテンツ事前ダウンロード・モジュール304、およびコンテンツ・キャッシュ・モジュール306、ならびにコンテンツ・キャッシュ・データ・ストア308を含む。いくつかの実施形態によれば、コンテンツ・キャッシュ・データ・ストア308は、優先度ベースのコンテンツ・ダウンロード・システム108によって提供されるクライアント・デバイス(たとえば、クライアント・デバイス100)用のローカル・キャッシュとして働く。いくつかの実施形態において、コンテンツ・キャッシュ・データ・ストア308は、優先度ベースのコンテンツ・ダウンロード・システム108と本明細書に説明されている中間コンテンツ・ストリーミング・システムとの間で共有されるローカル・キャッシュとして働く。図3に示されている構成要素は、追加的な、より少ない、または異なる構成要素を含んでもよい。また、重要な細部を不明瞭にしないために、いくつかの構成要素は図3に示されないことがある。
ニュース・フィード監視モジュール300は、ニュース・フィードを通じてユーザにアクセス可能にされた1つまたは複数のコンテンツ・アイテムについてニュース・フィードを監視するように構成され得る。本明細書でさらに詳細に説明されているように、ニュース・フィードは、1つまたは複数のニュース投稿を備えることができ、ニュース投稿のそれぞれが1つまたは複数のコンテンツ・アイテムを含むことができる。監視されるニュース・フィードは、ソーシャル・ネットワーキング・システムによって提供され、ソーシャル・ネットワーキング・アプリケーションまたはソーシャル・ネットワーキング・ウェブ・ページにアクセスするウェブ・ブラウザのようなスタンドアロン・アプリケーションを通じてアクセス可能なものであり得る。ニュース・フィード監視モジュール300によって監視対象とされているコンテンツ・アイテムは、ニュース・フィードを通じてユーザにとって現在可視であるもの(たとえば、ユーザにとって現在可視であるニュース投稿に含まれたもの)、ニュース・フィードを通じて提示されるようにスケジューリングされたもの、または両方であり得る。
監視中、ニュース・フィード監視モジュール300は、ニュース・フィードを通じてユーザに対して提示されるようにスケジューリングされた1つまたは複数のアイテムを識別
することができる。本明細書でさらに詳細に説明されているように、ニュース・フィードを通じて提示されるようにスケジューリングされたコンテンツ・アイテムは、ニュース・フィード上に提示されるようにスケジューリングされたニュース投稿に含まれるものであり得る。また、ニュース・フィード上に提示されるようにスケジューリングされたニュース投稿は、ニュース・フィードにまだ追加されていないもの、ニュース・フィードから以前に除去された後にニュース・フィードに対してまだ再追加されていないもの、ニュース・フィードに対して既に追加されているがニュース・フィードを通じてユーザによってまだ閲覧されていないもの、またはニュース・フィードを通じてユーザによって少なくとも一度は既に閲覧されているが現在はユーザのビュー内にないものであり得る。ニュース・フィード監視モジュール300は、定期的または継続的に1つまたは複数のコンテンツ・アイテムを検出するように構成され得る。ニュース・フィードがソーシャル・ネットワーキング・システムによって提供されている場合、ニュース・フィード監視モジュール300は、ソーシャル・ネットワーキング・システムによって維持されているソーシャル・グラフ・データを使用して、コンテンツ・アイテムに関してニュース・フィードを監視することができる。
コンテンツ優先度モジュール302は、コンテンツ・アイテムに関係するファクタに基づいて、所与のコンテンツ・アイテムの優先度を決定するように構成され得る。実施形態によっては、コンテンツ・アイテムの優先度を使用して、コンテンツ・アイテムの事前ダウンロードの順序(たとえば、より高い優先度を有するコンテンツ・アイテムをまず事前ダウンロードする)、ローカルにキャッシュされたコンテンツ・データがクライアント・デバイスから消去されるべき順序(たとえば、より低い優先度を有するコンテンツ・アイテムについてのコンテンツ・データがまず消去される)、またはコンテンツ・アイテムが事前ダウンロードされるべきか否か(たとえば、コンテンツ・アイテムの優先度が事前ダウンロードに対する閾値を満たすか否かに基づく)を決定することができる。いくつかの実施形態では、優先度は、所与のコンテンツ・アイテムに対する他の操作を決定することができる。コンテンツ・アイテムに対して優先度を決定することは、いくつものファクタに基づくことが可能であり、以下に限定されないが、それらのファクタは、コンテンツ・アイテムがユーザにとって可視であるときに自動再生されるか否か、コンテンツ・アイテムが広告に関連付けられているか否か、ユーザのプリファレンス、クライアント・デバイスのリソースの可用性(たとえば、メモリ、プロセッサ速度、ネットワーク帯域幅など)、コンテンツ・アイテムのコンテンツ・タイプ(たとえば、ストリーミング・ビデオ、音声、またはプレゼンテーション)、第1のコンテンツ・アイテムのメタデータ(たとえば、作成者、発行者、主題、タイトルなど)、コンテンツ・アイテムに関連付けられているソーシャル・ネットワーキング情報を含む。いくつかの実施形態において、ソーシャル・ネットワーキング情報は、ソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムの「いいね」の量(たとえば、友達または親近者であるソーシャル・ネットワーク・ユーザによって「いいね」を表明されたコンテンツ・アイテムに対して、より高い優先度)、ソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムの共有の量(たとえば、「いいね」がより多いと、コンテンツ・アイテムがより人気があり、したがって優先度がより高い)、またはソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムに関連付けられているコメントの量(たとえば、コメントがより多いと、コンテンツ・アイテムがより関心をひき、したがって優先度がより高い)を備える。ソーシャル・ネットワーキング情報は、ソーシャル・ネットワーク上の第1のコンテンツ・アイテムに対して「いいね」を表明している1または複数のソーシャル・ネットワーク・ユーザを識別する、ソーシャル・ネットワーク上の第1のコンテンツ・アイテムを共有している1または複数のソーシャル・ネットワーク・ユーザを識別する、あるいはソーシャル・ネットワーク上の第1のコンテンツ・アイテムに対してコメントしている1または複数のソーシャル・ネットワーク・ユーザを識別することができる。コンテンツ・アイテムの優先度を決定
するために使用されるソーシャル情報は、ソーシャル・ネットワーキング・システムによってその様々な機能を支援するために維持されるソーシャル・グラフによって提供され得る。
コンテンツ事前ダウンロード・モジュール304は、ニュース・フィード監視モジュール300によって監視されているニュース・フィード内に提示されるようにスケジューリングされた1つまたは複数のコンテンツ・アイテムを、クライアント・デバイスに対して全てまたは部分的に事前ダウンロードするように構成され得る。また、コンテンツ事前ダウンロード・モジュール304は、クライアント・デバイス上のクライアント・アクセス・モジュールがクライアント・アイテムに対するアクセスを要求する前に、クライアント・デバイスに対して1つまたは複数のコンテンツ・アイテムを全てまたは部分的に事前ダウンロードするように構成され得る。本明細書でさらに詳細に説明されているように、コンテンツ・アイテムのコンテンツ・データがコンテンツ事前ダウンロード・モジュール304によってクライアント・デバイスに対して事前ダウンロードされると、それはコンテンツ・キャッシュ・データ・ストア308に記憶され得る。続いて、事前ダウンロードされるコンテンツ・アイテムに対するアクセスを要求しているコンテンツ・アクセス・モジュールは、コンテンツ・キャッシュ・データ・ストア308から可能な限りコンテンツ・データを提供され得る。このようにして、コンテンツ・アイテムの少なくとも事前ダウンロードされた部分に対するアクセスが、コンテンツ・サーバからコンテンツ・アイテムについてのコンテンツ・データを直接的に取得しなければならないときよりも迅速になり得る。コンテンツ・アイテムに関連付けられているコンテンツ・データのすべてに満たないコンテンツ・データがコンテンツ・キャッシュ・データ・ストア308に記憶されている場合、コンテンツ・アクセス・モジュールは、直接的にコンテンツ・サーバから、または本明細書に説明されている中間コンテンツ・ストリーミング・システムを通じて、あるいは両方の何らかの組合せを用いて、必要とされるコンテンツ・データを取得することができる。
実施形態によっては、所与のコンテンツ・アイテムのどのくらいがコンテンツ事前ダウンロード・モジュール304によって事前ダウンロードされるかは、様々なファクタに応じて変わることが可能であり、以下に限定されないが、それらのファクタは、ユーザ・プリファレンス(たとえば、最初の30秒のみを事前ダウンロードする)、システム・プリファレンス(たとえば、ソーシャル・ネットワーキング・システムの初期設定)、コンテンツ・アイテムの全体サイズ、コンテンツ・アイテムのタイプ(たとえば、ビデオまたは音声コンテンツ・アイテム)、コンテンツ・アイテムの優先度(たとえば、コンテンツ優先度モジュール302によって決定される)、クライアント・デバイスのリソースの可用性(たとえば、メモリ、プロセッサ速度、ネットワーク帯域幅など)、クライアント・デバイスにおけるユーザに対する関連性、およびクライアント・デバイスにおけるユーザによる関心の蓋然性を含む。たとえば、高い優先度を有するコンテンツ・アイテムは、低い優先度を有するコンテンツ・アイテムより多くのコンテンツ・データを事前ダウンロードされ得る。
コンテンツ・キャッシュ・モジュール306は、コンテンツ・キャッシュ・データ・ストア308に対するアクセスを円滑にするように構成され得る。たとえば、コンテンツ・キャッシュ・モジュール306は、どのようなコンテンツ・データがコンテンツ・キャッシュ・データ・ストア308に記憶されているかを決定する、どのようなコンテンツ・データがコンテンツ・キャッシュ・データ・ストア308から欠けているかを決定する、(たとえば、コンテンツ事前ダウンロード・モジュール304によって受信され事前ダウンロードされた)コンテンツ・データのコンテンツ・キャッシュ・データ・ストア308に対する記憶を円滑にする、またはコンテンツ・キャッシュ・データ・ストア308からのコンテンツ・データの除去を円滑にするために利用され得る。コンテンツ・キャッシュ・
モジュール306はまた、コンテンツ・データ年齢、最終アクセスの時間、およびメタデータなどを含むがそれらに限定されない、コンテンツ・キャッシュ・データ・ストア308に記憶されたコンテンツ・データに関する情報を取得することもできる。
図3ではニュース・フィードに関して図示され説明されているが、いくつかの実施形態では、優先度ベースのコンテンツ・ダウンロード・システム108は、スタンドアロン・アプリケーションを通じて提供されたコンテンツ・アイテムまたはウェブ・ブラウザによって閲覧可能なウェブ・ページに埋め込まれたコンテンツ・アイテムを含むがそれらに限定されないコンテンツ・アイテムを配信するための他の方法と共に利用される。
図4は、本発明の実施形態に従って使用される例示的なニュース・フィード400を示す。ニュース・フィード400は、ソーシャル・ネットワーキング・システムによって提供されるものでよく、また、1つまたは複数のニュース・アイテム(以下「ニュース投稿」)を提供するように構成されてよく、ニュース・アイテムのそれぞれが、ソーシャル・ネットワーキング・システムに検出されまたは投稿された1つまたは複数のイベントを記述している。たとえば、ニュース・フィード400は、ソーシャル・ネットワーキング・システムを支援するソーシャル・グラフ・データのノード、エッジ、または係数に基づいて1つまたは複数のニュース投稿を含むことができる。
本明細書でさらに詳細に説明されているように、ソーシャル・ネットワーキング・システムは、複数のエッジによって相互接続された複数のノードを備える「ソーシャル・グラフ」を生成し維持することができ、ソーシャル・グラフ内の各ノードは、別のノードに対して作用すること、および/または別のノードによって作用されることが可能なエンティティを表すことができる。ソーシャル・グラフは、たとえば、ユーザ、人以外のエンティティ、コンテンツ・アイテム、ウェブ・ページ、グループ、アクティビティ、メッセージ、コンセプト、およびソーシャル・ネットワーキング・システム内のオブジェクトによって表現され得る任意の他のものを含む、様々なタイプのノードを含むことができる。また、ソーシャル・グラフは、ソーシャル・グラフ内のノード間のパスに対する重みを反映し、ソーシャル・グラフ内のノード間の関係性の尺度の役割をする係数を含むことができる(たとえば、重みに基づいて、係数は、ユーザが、その親友に対して、ユーザが友達になった別の人物よりも近いことを示すことができる)。したがって、ソーシャル・グラフ・データに含まれるノード、エッジ、または係数に基づいて、ニュース・フィード400は、1つまたは複数のニュース投稿を、ソーシャル・ネットワーキング・システムのソーシャル・グラフ内の所与のノードに対するそれらのニュース投稿の関係に応じて投入され得る。たとえば、ニュース・フィード400は、特定のソーシャル・ネットワーキング・ユーザを表すノードに対して生成される個別のソーシャル・ネットワーキング・ニュース・フィードであり得る。
図4に示されるように、ニュース・フィード400は、複数のニュース投稿402−1、402−2、402−3、402−4、および402−5(以下「ニュース投稿402」)を含む。ニュース・フィード400は、ソーシャル・ネットワーキング・システムによって提供され、ソーシャル・ネットワーキング・アプリケーションまたはソーシャル・ネットワーキング・ウェブ・ページにアクセスするウェブ・ブラウザのようなスタンドアロン・アプリケーションを通じてアクセス可能であり得る。図4において、ニュース投稿P−1およびP−2は、クライアント・デバイス・ディスプレイ404を通じてユーザによって既に閲覧されたニュース投稿であり、ニュース投稿P+1およびP+2は、クライアント・デバイスのユーザによるアクセスのためにクライアント・デバイス・ディスプレイ404を通じて提示されるようにスケジューリングされたニュース投稿であり得る。実施形態によっては、ニュース投稿402は、それらがニュース・フィード400において投稿される順序に従って閲覧され得る。さらに詳細に本明細書で使用される場合、ニュー
ス・フィード上に提示されるようにスケジューリングされたニュース投稿またはコンテンツ・アイテムは、たとえば、ニュース・フィードにまだ追加されていないもの、ニュース・フィードから以前に除去された後にニュース・フィードに対してまだ再追加されていないもの、ニュース・フィードに対して既に追加されているがニュース・フィードを通じてユーザによってまだ閲覧されていないもの、またはニュース・フィードを通じてユーザによって少なくとも一度は既に閲覧されているが現在はユーザのビュー内にないものを含み得る。
実施形態によっては、ニュース投稿402のそれぞれが、1つまたは複数のコンテンツ・アイテムを含むことができる。コンテンツ・アイテムを含むとき、ニュース投稿402は、ハイパーリンクによって、またはニュース投稿のコンテンツにコンテンツ・アイテムを埋め込むことによって、あるいは両方によって、コンテンツ・アイテムを含むことができる。ソーシャル・ネットワーキング・システムの文脈において、ニュース・フィード400は、ソーシャル・ネットワーキング・システムを支援するソーシャル・グラフ・データに対する1つもしくは複数の変更、またはニュース・フィード400を現在閲覧しているソーシャル・ネットワーキング・ユーザの挙動を含む様々なファクタに基づいて、追加のニュース投稿によって更新され得る。ソーシャル・グラフ・データに対する変更は、ソーシャル・ネットワーク・イベントがノードとしてソーシャル・グラフ・データに対して追加されたときを含み得る。ニュース・フィード400を現在閲覧しているソーシャル・ネットワーキング・ユーザに対する、それら追加されるノードの関係に基づいて、ニュース投稿は、ニュース・フィード400に対して追加されてよい。
図4にも示されるように、ニュース・フィード400は、ニュース・フィード400の特定の部分がクライアント・デバイス・ディスプレイ404を通して可視になるように、クライアント・デバイス・ディスプレイ404に対して位置付けられる。図4に示されるように、クライアント・デバイス・ディスプレイ404に対するニュース・フィード400の位置によって、クライアント・デバイス・ディスプレイ404を通してニュース・フィード400を閲覧するユーザに、ニュース投稿P0、ニュース投稿P−1の下部、およびニュース投稿P+1の上部だけを閲覧させることが可能である。ユーザがクライアント・デバイス・ディスプレイ404に対して上下方向にニュース・フィード400を再配置すると(たとえば、クライアント・デバイスに対するユーザ入力に基づいてニュース・フィード400をスクロール・アップまたはダウンすると)、クライアント・デバイス・ディスプレイ404におけるユーザによるニュース投稿402の一部または全部の可視性が増大または減少し得る。また、ユーザがクライアント・デバイス・ディスプレイ404に対して上下方向にニュース・フィード400を再配置すると、ニュース・フィード400は、追加のニュース投稿が自動的に投入され、またはニュース・フィード400上に現在あるニュース投稿が削除され、あるいは両方が行われ得る。たとえば、ニュース・フィード400のニュース投稿P+2がクライアント・デバイス・ディスプレイ400のビューに入るように、ユーザがニュース・フィード400を再配置したとすると、ニュース投稿P−2がニュース・フィード400の上部から除去され、ニュース投稿P+3(図示せず)がニュース・フィード400の下部に対して追加され得る。
ニュース・フィード400に関連して、本明細書でさらに詳細に説明されているように、ニュース投稿P+1およびニュース投稿P+2は、ニュース・フィード400を通じたアクセスのためにユーザに対して最終的に提示されるようにスケジューリングされたニュース投稿であると考えられ得る(ただし、それらは、クライアント・デバイス・ディスプレイ404を通してユーザによってまだ閲覧されていない)。いくつかの実施形態では、ニュース・フィード400の様々な態様、たとえば、挙動、方向、概観、および動作などが、図4に示されたもの、または本明細書に説明されたものと異なる場合がある。
ニュース・フィード400を通じて、ニュース投稿402のうちの1つに含まれるコンテンツ・アイテムが、クライアント・デバイスにおけるユーザによってアクセス可能であり得る。たとえば、ニュース・フィード400に含まれるニュース投稿がクライアント・デバイス・ディスプレイ404を通して可視となると、ニュース投稿に含まれる任意のコンテンツ・アイテム(たとえば、ストリーミング・ビデオ・コンテンツ・アイテム)が、クライアント・デバイスにおけるユーザにアクセス可能となり得る。いくつかの実施形態によれば、コンテンツ・アイテムを有するニュース投稿402のうちの1つがニュース・フィード400を通じてアクセス可能になる前に、優先度ベースのコンテンツ・ダウンロード・システムが、クライアント・デバイスに対してコンテンツ・アイテムを全てまたは部分的に事前ダウンロードすることができる。たとえば、ユーザがニュース・フィード400に対してクライアント・デバイス・ディスプレイ404を再配置することで、ニュース投稿P+2がクライアント・デバイス・ディスプレイ404を通して可視状態になる(かつ、ビュー内でユーザにアクセス可能になる)前に、ニュース投稿P+2に含まれる任意のコンテンツ・アイテムが全てまたは部分的にクライアント・デバイスに対して事前ダウンロードされ得る。そうする場合、ニュース投稿P+2に含まれるコンテンツ・アイテム(たとえば、自動再生されるビデオまたは音声)は、ニュース投稿P+2がクライアント・デバイス・ディスプレイ404を通してビューに入り次第、アクセスされる準備ができていることになる。いくつかの実施形態によれば、優先度ベースのコンテンツ・ダウンロード・システムは、ニュース投稿P+1に含まれる第1のコンテンツ・アイテムに対して第1の優先度を決定し、ニュース投稿P+2に含まれる第2のコンテンツ・アイテムに対して第2の優先度を決定し、第1の優先度が第2の優先度よりも高い(またはそれと等しい)場合に、第2のコンテンツ・アイテムを事前ダウンロードする前にクライアント・デバイスに対して第1のコンテンツ・アイテムの一部または全部を事前ダウンロードし、第2の優先度が第1の優先度よりも高い場合に、第1のコンテンツ・アイテムを事前ダウンロードする前にクライアント・デバイスに対して第2のコンテンツ・アイテムの一部または全部を事前ダウンロードする。
図5は、本発明の実施形態による中間コンテンツ・ストリーミングのための例示的なプロセス500を示す。いくつかの実施形態によれば、プロセス500は、クライアント・デバイス100上で中間コンテンツ・ストリーミング・システム106によって行われるプロセスとすることができる。ブロック502で、コンテンツ・サーバからコンテンツ・アイテムを求めるコンテンツ・アクセス・アプリケーションによる要求が受信され得る。本明細書でさらに詳細に説明されているように、コンテンツ・アクセス・アプリケーションは、クライアント・デバイス上で動作していることが可能であり、コンテンツ・アクセス・アプリケーションによる要求は、同じクライアント・デバイスにおいて受信され得る。実施形態によっては、要求は、直接的に受信、転送(たとえば、クライアント・デバイス上の構成要素が、ブロック502による処理のために全てのオンライン・コンテンツ・アイテム要求を転送するように構成される)、またはインターセプトによって受信され得る。また、要求は、HTTP、FTP、およびRTPなどを含むがそれらに限定されない1つまたは複数のタイプのネットワーク・プロトコルを含み得る。
ブロック504で、要求が分析され得る。要求を分析することによって、プロセス500は、要求されているコンテンツ・アイテムを識別する、コンテンツ・アイテムが求められた先のコンテンツ・サーバを識別する、要求のタイプを識別する、またはコンテンツ・アイテムの特定の要求された部分(たとえば、コンテンツ・アイテムにおける時間位置)を識別することができる。
ブロック506で、要求されたコンテンツ・アイテムの1つまたは複数の部分が識別され得る。たとえば、プロセス500は、ブロック504によって提供された要求分析を利用して、コンテンツ・アイテムの要求された部分を識別することができる。
ブロック508で、第1のセットのコンテンツ・データが識別されることが可能であり、それにより、第1のセットのコンテンツ・データは、ローカル・キャッシュに記憶されているコンテンツ・アイテムの識別された部分のうちの1つまたは複数に対応する。ローカル・キャッシュにおけるコンテンツ・データがコンテンツ・アイテムの識別された部分に対応しない場合、第1のセットのコンテンツ・データは空であってよく、第1のセットのコンテンツ・データは生成されなくてよく、またはブロック508と510の一方もしくは両方が省略されてよい。いくつかの実施形態において、ローカル・キャッシュは、ブロック502でコンテンツ・アイテムを求める要求を受信し、かつコンテンツ・アイテムを要求しているクライアント・アクセス・アプリケーションを動作させているクライアント・デバイスと同じクライアント・デバイスに配置される。第1のセットのコンテンツ・データを識別することは、要求されているコンテンツ・アイテムに対応する記憶されたコンテンツ・データがあるか否かについてローカル・キャッシュを検査することと、記憶されたコンテンツ・データがコンテンツ・アクセス・アプリケーションによって要求された特定の部分に対応するか否かを決定することとを備えることができる。
ブロック510で、第1のセットのコンテンツ・データの少なくともいくつかが、ローカル・キャッシュからコンテンツ・アクセス・アプリケーションに対して提供される。本明細書でさらに詳細に述べられているように、ローカル・キャッシュは、ブロック502でコンテンツ・アイテムを求める要求を受信し、かつコンテンツ・アイテムを要求しているクライアント・アクセス・アプリケーションを動作させているクライアント・デバイスと同じクライアント・デバイスに配置され得る。また、コンテンツ・データは、ローカル・キャッシュからコンテンツ・アクセス・アプリケーションに対してコンテンツ・データ・ストリームとして提供され得る。
ブロック512で、第2のセットのコンテンツ・データが識別されることが可能であり、それにより、第2のセットのコンテンツ・データは、ローカル・キャッシュから欠けているコンテンツ・アイテムの識別された部分のうちの1つまたは複数に対応する。コンテンツ・アイテムの全てが(たとえば、以前のコンテンツ・ストリーミング・セッション中に)既に受信されローカル・キャッシュに記憶されている場合、第2のセットのコンテンツ・データは空であってよく、第2のセットのコンテンツ・データは生成されなくてよく、またはブロック512〜520のうちの1つまたは複数が省略されてよい。本明細書でさらに詳細に述べられているように、ローカル・キャッシュは、ブロック502でコンテンツ・アイテムを求める要求を受信し、かつコンテンツ・アイテムを要求しているクライアント・アクセス・アプリケーションを動作させているクライアント・デバイスと同じクライアント・デバイスに配置され得る。また、第2のセットのコンテンツ・データを識別することは、要求されているコンテンツ・アイテムに対応する記憶されたコンテンツ・データがあるか否かについてローカル・キャッシュを検査することと、記憶されたコンテンツ・データがコンテンツ・アクセス・アプリケーションによって要求された特定の部分に対応するか否かを決定することとを備えることができる。また、第2のセットのコンテンツ・データを識別することは、ローカル・キャッシュに記憶されているコンテンツ・データを、コンテンツ・アクセス・アプリケーションによってコンテンツ・アイテムが要求されている先のコンテンツ・サーバから入手可能なコンテンツ・データと比較することを備えることができる。
ブロック514で、第2のセットのコンテンツ・データの少なくとも一部がコンテンツ・サーバに対して要求されることが可能であり、ブロック516で、コンテンツ・サーバからのコンテンツ・データがコンテンツ・サーバから受信される。いくつかの実施形態によれば、プロセス500は、ブロック504によって提供された要求分析を利用して、コンテンツ・サーバに対する第2のセットのコンテンツ・データを求める要求を生成する。
プロセス500は、分析に基づいて、ブロック502でコンテンツ・アクセス・アプリケーションから受信された要求と同様である(たとえば、フォーマットまたはプロトコルについて同様である)。コンテンツ・サーバに対する要求を生成することができる。ブロック516で、コンテンツ・サーバからのコンテンツ・データがデータ・ストリームとして受信されることが可能であり、このデータ・ストリームは、コンテンツ・サーバがコンテンツ・データをコンテンツ・アクセス・アプリケーションに対して直接的に提供していた場合(たとえば、中間コンテンツ・ストリーミング・システム106がコンテンツ・データ・ストリームに関与しなかった場合)、コンテンツ・アクセス・アプリケーションに対してコンテンツ・サーバに対して提供されたデータ・ストリームと同様であり得る。
ブロック518で、(たとえば、ブロック514の要求に応答して)コンテンツ・サーバから受信された第2のセットのコンテンツ・データが、ローカル・キャッシュに記憶され得る。本明細書でさらに詳細に述べられているように、ローカル・キャッシュは、ブロック502でコンテンツ・アイテムを求める要求を受信し、かつコンテンツ・アイテムを要求しているクライアント・アクセス・アプリケーションを動作させているクライアント・デバイスと同じクライアント・デバイスに配置され得る。
ブロック520で、第2のセットのコンテンツ・データの少なくとも一部が、ローカル・キャッシュからコンテンツ・アクセス・アプリケーションに対して提供され得る。ブロック510と同様に、コンテンツ・データは、ローカル・キャッシュからコンテンツ・アクセス・アプリケーションに対してコンテンツ・データ・ストリームとして提供され得る。いくつかの実施形態において、ブロック510、ブロック520、または両方によってコンテンツ・アクセス・アプリケーションに対して提供されたデータ・ストリームは、ブロック516でコンテンツ・サーバからコンテンツ・データを受信するために使用されたデータ・ストリームと同様であり得る。
実施形態によっては、図5で示された動作は、図示されたのと別の順序で行われてよく、1つまたは複数の動作が直列または実質的に並列に行われてもよい。たとえば、第1のセットのコンテンツ・データに関るブロック508の動作は、第2のセットのコンテンツ・データに関るブロック512、514、516、および518のうちの1つまたは複数の動作と並列または実質的に並列に行われることがある。別の例では、ブロック518の動作とブロック520の動作が並列または実質的に並列に行われることがある。さらに別の例では、ブロック520の動作がブロック518の動作の前に行われることがある。いくつかの実施形態において、中間コンテンツ・ストリーミングに関するプロセスは、図示された動作よりも多数または少数の動作を行う。
図6は、本発明の実施形態による優先度ベースのコンテンツ・ダウンロードのための例示的なプロセス600を示す。いくつかの実施形態によれば、プロセス600は、優先度ベースのコンテンツ・ダウンロード・システム108によって行われるものであり得る。ブロック602で、クライアント・デバイスのディスプレイ上のニュース・フィード(たとえば、ニュース・フィード400)が、コンテンツ・アイテムに関して監視され得る。本明細書でさらに詳細に説明されているように、監視対象とされているコンテンツ・アイテムは、ニュース・フィードを通じてユーザにとって現在可視であるもの、ニュース・フィードを通じて提示されるようにスケジューリングされたもの、または両方であり得る。
ブロック604で、ニュース・フィードを通じてユーザに対して提示されるようにスケジューリングされた第1のコンテンツ・アイテムが識別され得る。本明細書でさらに詳細に説明されているように、ニュース・フィードを通じて提示されるようにスケジューリングされたコンテンツ・アイテムは、ニュース・フィード上に提示されるようにスケジューリングされたニュース投稿に含まれるものであり得る。また、ニュース・フィード上に提
示されるようにスケジューリングされたニュース投稿は、ニュース・フィードにまだ追加されていないもの、以前にニュース・フィードから除去された後にニュース・フィードに対してまだ再追加されていないもの、ニュース・フィードに対して既に追加されているがニュース・フィードを通じてユーザによってまだ閲覧されていないもの、またはニュース・フィードを通じてユーザによって少なくとも一度は既に閲覧されているが現在はユーザのビュー内にないものであり得る。
ブロック606で、第1のコンテンツ・アイテムに対する第1の優先度が決定され得る。本明細書でさらに詳細に説明されているように、コンテンツ・アイテムに対して優先度を決定することは、いくつものファクタに基づくことが可能であり、以下に限定されないが、それらのファクタは、コンテンツ・アイテムがユーザにとって可視であるときに自動再生されるか否か、コンテンツ・アイテムが広告に関連付けられているか否か、ユーザのプリファレンス、クライアント・デバイスのリソースの可用性(たとえば、メモリ、プロセッサ速度、ネットワーク帯域幅など)、コンテンツ・アイテムのコンテンツ・タイプ(たとえば、ストリーミング・ビデオ、音声、またはプレゼンテーション)、第1のコンテンツ・アイテムのメタデータ(たとえば、作成者、発行者、主題、タイトルなど)、コンテンツ・アイテムに関連付けられているソーシャル・ネットワーキング情報を含む。いくつかの実施形態において、ソーシャル・ネットワーキング情報は、ソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムの「いいね」の量、ソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムの共有の量、またはソーシャル・ネットワーク上のソーシャル・ネットワーク・ユーザによるコンテンツ・アイテムに関連付けられているコメントの量を備える。ソーシャル・ネットワーキング情報は、ソーシャル・ネットワーク上の第1のコンテンツ・アイテムに対して「いいね」を表明している1または複数のソーシャル・ネットワーク・ユーザを識別する、ソーシャル・ネットワーク上の第1のコンテンツ・アイテムを共有している1または複数のソーシャル・ネットワーク・ユーザを識別する、あるいはソーシャル・ネットワーク上の第1のコンテンツ・アイテムに対してコメントしている1または複数のソーシャル・ネットワーク・ユーザを識別することができる。コンテンツ・アイテムの優先度を決定するために使用されるソーシャル情報は、ソーシャル・ネットワーキング・システムによってその様々な機能を支援するために維持されるソーシャル・グラフによって提供され得る。
ブロック608で、ニュース・フィードを通じてユーザに対して提示されるようにスケジュールされた第2のコンテンツ・アイテムが識別されることが可能であり、ブロック610で、第2のコンテンツ・アイテムに対する第2の優先度が決定されることが可能である。第2のコンテンツ・アイテムに対する第2の優先度は、ブロック606で第1の優先度が第1のコンテンツ・アイテムに対して決定されたのと同様の手法により決定されてよい。
ブロック612で、第2の優先度に照らした第1の優先度に基づいて、第2のコンテンツ・アイテムがクライアント・デバイスに対して事前ダウンロードされる前に、第1のコンテンツ・アイテムの少なくとも一部がクライアント・デバイスに対して事前ダウンロードされ得る。これは、たとえば、第1の優先度と第2の優先度が比較されて、第1の優先度が第2の優先度よりも高いと決定された場合に起こり得る。コンテンツ・アイテムをクライアント・デバイスに対して事前ダウンロードすると、事前ダウンロードされたコンテンツ・アイテムの部分が、クライアント・デバイスに配置されたローカル・キャッシュに記憶され得る。利用されるローカル・キャッシュは、本明細書に説明されている中間コンテンツ・ストリーミング・システムと共有されるものであってよい。いくつかの実施形態では、コンテンツ・アイテムの事前ダウンロードは、本明細書に説明されている中間コンテンツ・ストリーミング・システムに、プロセス600の代わりにコンテンツを事前ダウ
ンロードするように命令することによって円滑にされ得る。
ブロック614で、第1の優先度に照らした第2の優先度に基づいて、第1のコンテンツ・アイテムの少なくとも一部がクライアント・デバイスに対して事前ダウンロードされた後に、第2のコンテンツ・アイテムの少なくとも一部がクライアント・デバイスに対して事前ダウンロードされ得る。いくつかの実施形態によれば、第1のコンテンツ・アイテムのクライアント・デバイスに対する事前ダウンロードが開始した後であるが、第1のコンテンツ・アイテムの事前ダウンロードが完了する前に、第2のコンテンツ・アイテムのクライアント・デバイスに対する事前ダウンロードが開始する。このようにして、第1のおよび第2のコンテンツ・アイテムが、可能ならば実質的に並列でクライアント・デバイスに対して事前ダウンロードされ得る。
ブロック616で、第1のコンテンツ・アイテムがニュース・フィードを通じてユーザに対して提示され得る。また、ブロック618で、第2のコンテンツ・アイテムがニュース・フィードを通じてユーザに対して提示され得る。ニュース・フィードを通じてコンテンツ・アイテムを提示することにより、コンテンツ・アイテムはニュース・フィードを通じてユーザにアクセス可能になり得る。いくつかの実施形態では、コンテンツ・アイテムがクライアント・デバイスに対して事前ダウンロードされニュース・フィードを通じて提示されると、コンテンツ・アイテムが、(たとえば、クライアント・デバイス・ディスプレイ404上で)ユーザのビュー内にあるときにアクセスされ、ユーザによって選択される(たとえば、ユーザがコンテンツ・アイテムを再生することを選択する)。いくつかの実施形態では、コンテンツ・アイテムがクライアント・デバイスに対して事前ダウンロードされニュース・フィードを通じて提示されると、コンテンツ・アイテムが(たとえば、クライアント・デバイス・ディスプレイ404上で)ユーザのビューに入ったときに、コンテンツ・アイテムは自動アクセスされる(たとえば、自動再生される)。
実施形態によっては、図6で示された動作は、図示されたのと別の順序で行われてよく、1つまたは複数の動作が直列または実質的に並列に行われてもよい。また、いくつかの実施形態において、優先度ベースのコンテンツ・ダウンロードのためのプロセスは、図示された動作よりも多数または少数の動作を行う。
図7は、本開示の実施形態に係るソーシャル・ネットワーキング環境700における、中間コンテンツ・ストリーミングおよび優先度ベースのコンテンツ・ダウンロードのためのシステムの例示的なネットワーク図を例示する。ソーシャル・ネットワーキング・システム700は、1つまたは複数のユーザ・デバイス710と、1つまたは複数の外部システム722と、ソーシャル・ネットワーキング・システム730と、ネットワーク750とを含む。例示の目的のために、図7によって示される、ソーシャル・ネットワーキング環境700の実施形態は、単一の外部システム722と、単一のユーザ・デバイス710とを含む。ただし、他の実施形態において、ソーシャル・ネットワーキング環境700は、より多くのユーザ・デバイス710、およびより多くの外部システム722を含んでもよい。特定の実施形態において、ソーシャル・ネットワーキング・システム730は、ソーシャル・ネットワーク・プロバイダによって運営されるのに対して、外部システム722は、異なるエンティティによって運営され得るという点で、ソーシャル・ネットワーキング・システム730とは別個のものである。しかしながら、様々な実施形態において、ソーシャル・ネットワーキング・システム730および外部システム722は、共に動作して、ソーシャル・ネットワーキング・システム730のユーザ(またはメンバー)に対してソーシャル・ネットワーキング・サービスを提供する。この意味において、ソーシャル・ネットワーキング・システム730は、外部システム722などの他のシステムがインターネット上のユーザに対してソーシャル・ネットワーキング・サービスおよび機能性を提供するために使用し得るプラットフォームまたはバックボーンを提供する。
ユーザ・デバイス710は、ユーザから入力を受け取り、ネットワーク750を通じてデータを送受信することができる1つまたは複数のコンピューティング・デバイスを備える。一実施形態において、ユーザ・デバイス710は、例えば、マイクロソフト・ウィンドウズ(登録商標)と互換性のあるオペレーティング・システム(OS)、Apple OS X、および/またはLinux(登録商標)ディストリビューションを実行する従来のコンピュータ・システムである。別の実施形態において、ユーザ・デバイス710は、スマートフォン、タブレット、携帯情報端末(PDA:personal digital assistant)、携帯電話等などのコンピュータ機能性を有するデバイスであってもよい。ユーザ・デバイス710は、ネットワーク750を通じて通信するように構成される。ユーザ・デバイス710は、アプリケーション、例えば、ユーザ・デバイス710のユーザがソーシャル・ネットワーキング・システム730と相互作用することを可能にするブラウザ・アプリケーションを実行することができる。別の実施形態において、ユーザ・デバイス710は、iOSおよびANDROID(登録商標)などの、ユーザ・デバイス710のネイティブ・オペレーティング・システムによって提供されるアプリケーション・プログラミング・インタフェース(API)を通じてソーシャル・ネットワーキング・システム730を相互作用する。ユーザ・デバイス710は、ネットワーク750を通じて外部システム722およびソーシャル・ネットワーキング・システム730と通信するように構成される。ネットワーク750は、有線通信システムおよび/または無線通信システムを使用する、ローカル・エリア・ネットワークおよび広域ネットワークの任意の組み合わせを備え得る。
1つの実施形態において、ネットワーク750は、標準的な通信技術およびプロトコルを使用する。したがって、ネットワーク750は、イーサネット(登録商標)、702.11、マイクロ波アクセスのための世界的相互運用性(WiMAX:worldwide
interoperability for microwave access)、3G、4G、CDMA、GSM(登録商標)、LTE、デジタル加入者線(DSL:digital subscriber line)等などの技術を使用するリンクを含み得る。同様に、ネットワーク750上で使用されるネットワーキング・プロトコルは、マルチプロトコル・ラベル・スイッチング(MPLS:multiprotocol label switching)、送信制御プロトコル/インターネット・プロトコル(TCP/IP)、ユーザ・データグラム・プロトコル(UDP)、ハイパーテキスト転送プロトコル(HTTP)、簡易メール転送プロトコル(SMTP:simple mail transfer protocol)、ファイル転送プロトコル(FTP)などを含み得る。ネットワーク750上で交換されるデータは、ハイパーテキスト・マークアップ言語(HTML)および拡張マークアップ言語(XML)を含む技術および/またはフォーマットを使用して表現され得る。また、全部または一部のリンクは、セキュア・ソケット・レイヤ(SSL)、トランスポート・レイヤ・セキュリティ(TLS)、およびインターネット・プロトコル・セキュリティ(IPsec)などの従来の暗号化技術を使用して暗号化され得る。
1つの実施形態において、ユーザ・デバイス710は、外部システム722から、およびソーシャル・ネットワーキング・システム730から受信されるマークアップ言語文書714を、ブラウザ・アプリケーション712を使用して処理することによって、外部システム722からのコンテンツおよび/またはソーシャル・ネットワーキング・システム730からのコンテンツを表示し得る。マークアップ言語文書714は、コンテンツと、そのコンテンツのフォーマッティングまたは表示方法を記述する1つまたは複数の命令とを識別する。マークアップ言語文書714内に含まれる命令を実行することによって、ブラウザ・アプリケーション712は、マークアップ言語文書714によって記述されたフォーマットまたは表示方法を使用して、識別されたコンテンツを表示する。例えば、マー
クアップ言語文書714は、外部システム722およびソーシャル・ネットワーキング・システム730から得られたテキストおよび/または画像データを含む複数のフレームを有するウェブ・ページを生成および表示するための命令を含む。様々な実施形態において、マークアップ言語文書714は、拡張マークアップ言語(XML)データ、拡張ハイパーテキスト・マークアップ言語(XHTML)データ、または、他のマークアップ言語データを含むデータ・ファイルを備える。また、マークアップ言語文書714は、外部システム722とユーザ・デバイス710との間のデータ交換を容易にするためのジャバスクリプト・オブジェクト・ノーテーション(JSON:JavaScript(登録商標)Object Notation)データ、パディング付きのJSON(JSONP:JSON with padding)データ、およびジャバスクリプト・データを含み得る。ユーザ・デバイス710上のブラウザ・アプリケーション712は、ジャバスクリプト・コンパイラを使用して、マークアップ言語文書714を復号し得る。
マークアップ言語文書714は、FLASH(商標)アプリケーションまたはUnity(商標)アプリケーション、SilverLight(商標)アプリケーション・フレームワーク等などの、アプリケーションまたはアプリケーション・フレームワークも含み、または、これらに対してもリンクし得る。
1つの実施形態において、ユーザ・デバイス710は、ユーザ・デバイス710のユーザがソーシャル・ネットワーキング・システム730へログインしたかを示すデータを含む、1つまたは複数のクッキー716も含む。クッキー716は、ソーシャル・ネットワーキング・システム730からユーザ・デバイス710へ通信されるデータのカスタム化を可能にし得る。
外部システム722は、1つまたは複数のウェブ・ページ724a、724bを含む、1つまたは複数のウェブ・サーバを含む。1つまたは複数のウェブ・ページ724a、724bは、ネットワーク750を使用して、ユーザ・デバイス710へ通信される。外部システム722は、ソーシャル・ネットワーキング・システム730とは別個である。例えば、外部システム722は、第1のドメインに対して関連付けられるが、ソーシャル・ネットワーキング・システム730は、別個のソーシャル・ネットワーキング・ドメインに対して関連付けられる。外部システム722に含まれるウェブ・ページ724a、724bは、コンテンツを識別し、識別されたコンテンツのフォーマッティングおよび表示方法を特定する命令を含むマークアップ言語文書714を備える。
一実施形態では、ユーザ・デバイス710は、コンテンツ・アイテムについてのコンテンツ・データが外部システム722などのコンテンツ・サーバからネットワーク750を通じてユーザ・デバイス710に対してストリーミングされると、そのコンテンツ・アイテムをユーザ・デバイス710にローカルにキャッシュするように構成された中間コンテンツ・ストリーミング・システム718を含む。ユーザ・デバイス710におけるブラウザ・アプリケーション712は、ソーシャル・ネットワーキング・システム730により提供されたウェブ・ページにアクセスしていることがあり、ユーザ・デバイス710における中間コンテンツ・ストリーミング・システム718を通じて、ウェブ・ページに含まれるが外部システム722によって提供されたコンテンツ・アイテム(たとえば、音声)の一部または全部を要求することができる。コンテンツ・データは、外部システム722から中間コンテンツ・ストリーミング・システム718によって(たとえば、データ・ストリームとして)受信されると、中間コンテンツ・ストリーミング・システム718によってブラウザ・アプリケーション712(たとえば、ブラウザ・アプリケーション712内のコンテンツ・アクセス・プラグイン)に対してデータ・ストリームとして提供され得る。また、外部システム722から中間コンテンツ・ストリーミング・システム718によって受信されたコンテンツ・データは、ユーザ・デバイス710にローカルにキャッシ
ュされ得る。ユーザ・デバイス710におけるローカル・キャッシュは、ユーザ・デバイス710による同じコンテンツ・アイテムを求める将来の要求のために維持され得る。同じコンテンツ・アイテムを求める後続の要求に対して、中間コンテンツ・ストリーミング・システム718は、外部システム722から以前に受信されたコンテンツ・アイテムのそうした部分を、ユーザ・デバイス710におけるローカル・キャッシュから提供し、ユーザ・デバイス710にローカルにキャッシュされていないそうした部分を、外部システム722から取得し、したがって、取得されたそうした部分を提供することができる。
一実施形態では、ユーザ・デバイス710は、ソーシャル・ネットワーキング・システム730によって提供されブラウザ・アプリケーション712を通してアクセス可能であるソーシャル・ネットワーク・ニュース・フィードを通じるなどして、ユーザ・デバイス710におけるユーザがコンテンツ・アイテムに対するアクセスを提示される前に、ユーザ・デバイス710に対するコンテンツ・アイテムの優先度ベースの事前ダウンロードを円滑にするように構成された優先度ベースのコンテンツ・ダウンロード・システム720を含む。たとえば、ユーザがブラウザ・アプリケーション712を通じてそのようなニュース・フィードを閲覧しているとき、ニュース・フィードの1つまたは複数のニュース投稿に含まれるコンテンツ・アイテムは、そのようなニュース投稿がニュース・フィードを通じて(たとえば、ニュース・フィードの)ユーザにアクセス可能にされる前に、ユーザ・デバイス710に対して全てまたは部分的に事前ダウンロードされ得る。
ソーシャル・ネットワーキング・システム730は、複数のユーザを含み、ソーシャル・ネットワークのユーザに対して、ソーシャル・ネットワークの他のユーザと通信および相互作用するための能力を提供する、ソーシャル・ネットワークのための1つまたは複数のコンピューティング・デバイスを含む。さらに詳細に説明されるように、ソーシャル・ネットワークは、グラフ、すなわち、エッジとノードとを含むデータ構造によって表現され得る。データベース、オブジェクト、クラス、メタ要素、ファイル、または任意の他のデータ構造を含むが、これらに限定されない、他のデータ構造も、ソーシャル・ネットワークを表現するために使用され得る。
ユーザは、ソーシャル・ネットワーキング・システム730に加入し、次いで、そのユーザがつなげられることを望む、ソーシャル・ネットワーキング・システム730の任意の数の他のユーザへのつながりを追加し得る。本明細書において、「友達」という用語は、ユーザがソーシャル・ネットワーキング・システム730を通じてつながり、関連、または関係を形成した、ソーシャル・ネットワーキング・システム730の任意の他のユーザに及ぶ。例えば、一実施形態において、ソーシャル・ネットワーキング・システム730内のユーザが、ソーシャル・グラフ内のノードとして表現される場合、「友達」という用語は、2つのユーザ・ノード間に形成され、かつ、2つのユーザ・ノードを直接的に接続するエッジを指し得る。
つながりは、ユーザによって明示的に追加されても、または、ユーザの共通の特性(例えば、同じ教育機関の卒業生であるユーザ)に基づいて、ソーシャル・ネットワーキング・システム730によって自動的に作成されてもよい。例えば、第1のユーザは、友達になりたい特定の他のユーザを具体的に選択する。ソーシャル・ネットワーキング・システム730におけるつながりは、通常は双方向であるが、双方向である必要はなく、そのため、「ユーザ」および「友達」という用語は、枠組みに依存する。ソーシャル・ネットワーキング・システム730のユーザ間のつながりは、通常は、双務的(「二方向」)または「相互的」であるが、つながりは、片務的、または「一方向」であってもよい。例えば、ボブおよびジョーの両者が、ソーシャル・ネットワーキング・システム730のユーザであり、互いにつながっている場合、ボブおよびジョーは、互いのつながりである。他方で、ボブは、ジョーによってソーシャル・ネットワーキング・システム730へ通信され
たデータを見るためにジョーとつながることを欲するが、ジョーは、相互的なつながりを形成することを欲しない場合、片務的なつながりが確立され得る。ユーザ間のつながりは、直接的なつながりであり得る。ただし、ソーシャル・ネットワーキング・システム730のいくつかの実施形態は、つながりが、1つまたは複数のつながりのレベルまたは分離度を通じた間接的なものとなることを可能にする。
ユーザ間のつながりを確立および維持し、ユーザ間の相互作用を可能にすることに加えて、ソーシャル・ネットワーキング・システム730は、ソーシャル・ネットワーキング・システム730によってサポートされる様々なタイプのアイテムに対してアクションを行うための能力をユーザに対して提供する。こうしたアイテムは、ソーシャル・ネットワーキング・システム730のユーザが所属し得るグループまたはネットワーク(すなわち、人々、エンティティ、およびコンセプトのソーシャル・ネットワーク)、ユーザが興味を持ち得るイベントまたはカレンダー入力、ユーザがソーシャル・ネットワーキング・システム730を通じて使用し得るコンピュータベースのアプリケーション、ソーシャル・ネットワーキング・システム730によって提供されるサービスを通じてまたはソーシャル・ネットワーキング・システム730を通じてユーザがアイテムを購入または販売することを可能にする取引、ならびにユーザがソーシャル・ネットワーキング・システム730内外で実行し得る広告との相互作用を含み得る。これらは、ユーザがソーシャル・ネットワーキング・システム730上で作用を与え得るアイテムのわずかな例にすぎず、多くの他の例が可能である。ユーザは、ソーシャル・ネットワーキング・システム730において、または、ソーシャル・ネットワーキング・システム730とは別個の外部システム722もしくはネットワーク750を通じてソーシャル・ネットワーキング・システム730に対して結合される外部システム722において表現されることが可能なありとあらゆるものと相互作用し得る。
ソーシャル・ネットワーキング・システム730は、多様なエンティティとリンクすることも可能である。例えば、ソーシャル・ネットワーキング・システム730は、ユーザが互いに相互作用すること、および、API、ウェブ・サービス、または他の通信チャネルを通じて外部システム722または他のエンティティと相互作用することを可能にする。ここで説明するように、ソーシャル・ネットワーキング・システム730は、複数のエッジによって相互接続された複数のノードを備える「ソーシャル・グラフ」を生成および維持する。ソーシャル・グラフ内の各ノードは、別のノードに対して作用を与え得るエンティティおよび/または別のノードによって作用を与えられ得るエンティティを表現し得る。ソーシャル・グラフは、例えば、ユーザ、非人間エンティティ、コンテンツ・アイテム、ウェブ・ページ、グループ、アクティビティ、メッセージ、コンセプト、およびソーシャル・ネットワーキング・システム730内のオブジェクトによって表現され得る任意の他のものを含む、様々なタイプのノードを含み得る。ここにさらに詳細に説明されるように、ソーシャル・グラフ内の2つのノード間のエッジは、ノード関係から、またはノードのうちの一方によって他方に対して実行されたアクションから生じ得る、2つのノード間の特定の種類のつながり、または関連を表現し得る。さらに説明されるように、ノード間のエッジは、重み付けされ得る。エッジの重みは、ノード間のつながりまたは関連の強度などの、そのエッジに対して関連付けられている属性を表現し得る。異なるタイプのエッジが、異なる重みと共に提供され得る。
ソーシャル・ネットワーキング・システム730は、ユーザによるソーシャル・ネットワーキング・システム730との相互作用を高める、ユーザにより生成されたコンテンツも含む。ユーザにより生成されたコンテンツは、ユーザがソーシャル・ネットワーキング・システム730に対して追加し、アップロードし、送信し、または「投稿し」得るあらゆるものを含み得る。例えば、ユーザは、ユーザ・デバイス710からソーシャル・ネットワーキング・システム730への投稿を通信する。投稿は、ステータス・アップデート
もしくは他の文字情報などのデータ、位置情報、写真などの画像、ビデオ、リンク、音楽、または、他の同様のデータおよび/もしくはメディアを含み得る。コンテンツも、第三者によってソーシャル・ネットワーキング・システム730に対して追加され得る。コンテンツ「アイテム」は、ソーシャル・ネットワーキング・システム730においてオブジェクトとして表現される。このようにして、ソーシャル・ネットワーキング・システム730のユーザは、様々な通信チャネルを通じて様々なタイプのテキストおよびコンテンツ・アイテムを投稿することによって、互いに通信することを促される。そのような通信は、ユーザ同士の相互作用を増加させ、ユーザがソーシャル・ネットワーキング・システム730と相互作用する頻度を増加させる。
ソーシャル・ネットワーキング・システム730は、ウェブ・サーバ732と、API要求サーバ734と、ユーザ・プロファイル・ストア736と、つながりストア738と、アクション・ロガー740と、アクティビティ・ログ742と、認証サーバ744とを含む。本発明の一実施形態において、ソーシャル・ネットワーキング・システム730は、様々なアプリケーションのための追加的な構成要素、より少ない構成要素、または異なる構成要素を含み得る。ネットワーク・インタフェース、セキュリティ機構、負荷分散装置、フェイルオーバ・サーバ、管理およびネットワーク操作コンソールなどの他の構成要素は、本システムの詳細を曖昧にしないように、図示されていない。
ユーザ・プロファイル・ストア736は、ユーザによって申告され、またはソーシャル・ネットワーキング・システム730によって推測された職歴、学歴、趣味または嗜好、住所などの経歴的情報、人口学的情報、および他のタイプの記述的情報を含む、ユーザ・アカウントに関する情報を維持する。この情報は、各ユーザが一意に識別されるように、ユーザ・プロファイル・ストア736内に記憶される。ソーシャル・ネットワーキング・システム730は、異なるユーザ間の1つまたは複数のつながりを記述するデータも、つながりストア738内に記憶する。つながり情報は、同様または共通の職歴、グループ・メンバーシップ、趣味、または学歴を有するユーザを示し得る。また、ソーシャル・ネットワーキング・システム730は、ユーザの他のユーザとの関係をユーザが特定することを可能にする、異なるユーザ間におけるユーザによって定義されたつながりを含む。例えば、ユーザによって定義されたつながりは、友達、同僚、パートナー等などの、ユーザの実生活の関係と並行する、他のユーザとの関係をユーザが生成することを可能にする。ユーザは、予め定義されたタイプのつながりから選択しても、またはユーザ自身のつながりタイプを必要に応じて定義してもよい。非人間エンティティ、バケット、クラスタ・センタ、画像、興味、ページ、外部システム、コンセプト等などの、ソーシャル・ネットワーキング・システム730内の他のノードとのつながりも、つながりストア738内に記憶される。
ソーシャル・ネットワーキング・システム730は、ユーザが相互作用し得るオブジェクトに関するデータを維持する。このデータを維持するために、ユーザ・プロファイル・ストア736およびつながりストア738は、ソーシャル・ネットワーキング・システム730によって維持されるオブジェクトの対応するタイプのインスタンスを記憶する。各オブジェクト・タイプは、オブジェクトのタイプに適した情報を記憶するのに適した情報フィールドを有する。例えば、ユーザ・プロファイル・ストア736は、ユーザのアカウントおよびユーザのアカウントに関連した情報を記述するのに適したフィールドを有するデータ構造を含む。特定のタイプの新たなオブジェクトが作成される場合、ソーシャル・ネットワーキング・システム730は、対応するタイプの新たなデータ構造を初期化し、その新たなデータ構造に対して一意のオブジェクト識別子を割り当て、必要に応じて、そのオブジェクトに対してデータを追加することを開始する。これは、例えば、ユーザがソーシャル・ネットワーキング・システム730のユーザになった場合に発生し、ソーシャル・ネットワーキング・システム730は、ユーザ・プロファイル・ストア736内にユ
ーザ・プロファイルの新たなインスタンスを生成し、ユーザ・アカウントに対して一意の識別子を割り当て、ユーザによって提供される情報をユーザ・アカウントのフィールドへ投入し始める。
つながりストア738は、他のユーザに対するユーザのつながり、外部システム722に対するつながり、または他のエンティティに対するつながりを記述するのに適したデータ構造を含む。つながりストア738は、つながりタイプもユーザのつながりと関連付け得る。つながりタイプは、ユーザのプライバシー設定と共に使用されて、ユーザに関する情報に対するアクセスを規制し得る。本発明の一実施形態において、ユーザ・プロファイル・ストア736およびつながりストア738は、連合データベースとして実装され得る。
つながりストア738、ユーザ・プロファイル・ストア736、およびアクティビティ・ログ742内に記憶されるデータは、ノードを使用して、ノードを接続する様々なオブジェクトおよびエッジを識別して、異なるオブジェクト間の関係を識別するソーシャル・グラフをソーシャル・ネットワーキング・システム730が生成することを可能にする。例えば、第1のユーザが、ソーシャル・ネットワーキング・システム730内で第2のユーザとのつながりを確立する場合、ユーザ・プロファイル・ストア736からの第1のユーザおよび第2のユーザのユーザ・アカウントは、ソーシャル・グラフ内のノードとして動作し得る。つながりストア738によって記憶される、第1のユーザと第2のユーザとの間のつながりは、第1のユーザおよび第2のユーザに対して関連付けられるノード間のエッジである。この例を続けると、第2のユーザは、次いで、第1のユーザに対して、ソーシャル・ネットワーキング・システム730内でメッセージを送信し得る。メッセージを送信するアクションは、第1のユーザおよび第2のユーザを表現する、ソーシャル・グラフ内の2つのノード間の別のエッジであり、メッセージを送信するアクションは、記憶され得る。また、メッセージ自体が、第1のユーザを表現するノードおよび第2のユーザを表現するノードに対して接続される別のノードとして、ソーシャル・グラフにおいて識別され、ソーシャル・グラフに含まれ得る。
別の例において、第1のユーザは、ソーシャル・ネットワーキング・システム730によって維持される画像において(または、代替的に、ソーシャル・ネットワーキング・システム730の外部の別のシステムによって維持される画像において)第2のユーザをタグ付けし得る。画像は、それ自体がソーシャル・ネットワーキング・システム730内のノードとして表現され得る。このタグ付けアクションは、ユーザの各々と画像との間にエッジを作成するだけでなく、第1のユーザと第2のユーザとの間のエッジも作成し得る。画像もソーシャル・グラフ内のノードである。また別の例において、ユーザが、イベントへ参加することを確かめる場合、そのユーザおよびそのイベントは、ユーザ・プロファイル・ストア736から取得されるノードであり、そのイベントへの参加は、アクティビティ・ログ742から得られ得るノード間のエッジである。ソーシャル・グラフを生成および維持することによって、ソーシャル・ネットワーキング・システム730は、多くの異なるタイプのオブジェクトを記述するデータ、ならびに、それらのオブジェクト間の相互作用およびつながりを含み、社会的に関連する情報の豊富なソースを提供する。
ウェブ・サーバ732は、ソーシャル・ネットワーキング・システム730を、ネットワーク750を通じて、1つもしくは複数のユーザ・デバイス710および/または1つもしくは複数の外部システム722に対してリンクする。ウェブ・サーバ732は、ウェブ・ページ、およびJava(登録商標)、JavaScript、Flash、XMLなどの他のウェブ関連コンテンツを供給する。ウェブ・サーバ732は、メール・サーバを含み、または、ソーシャル・ネットワーキング・システム730と1つもしくは複数のユーザ・デバイス710との間のメッセージを受信およびルーティングするための他のメ
ッセージング機能性を含み得る。メッセージは、インスタント・メッセージ、キュー・メッセージ(例えば、電子メール)、テキストおよびSMSメッセージ、または任意の他の適切なメッセージング・フォーマットであり得る。
API要求サーバ734は、1つまたは複数の外部システム722およびユーザ・デバイス710が、1つまたは複数のAPI関数を呼び出すことによって、ソーシャル・ネットワーキング・システム730からのアクセス情報を呼び出すことを可能にする。API要求サーバ734は、外部システム722が、APIを呼び出すことによって、ソーシャル・ネットワーキング・システム730に対して情報を送信することも可能にし得る。外部システム722は、1つの実施形態において、ネットワーク750を通じてソーシャル・ネットワーキング・システム730へAPI要求を送信し、API要求サーバ734は、そのAPI要求を受信する。API要求サーバ734は、API要求に対して関連付けられているAPIを呼び出すことによって要求を処理して、適当な応答を生成する。API要求サーバ734は、その適当な応答を、ネットワーク750を通じて外部システム722へ通信する。例えば、API要求に応答して、API要求サーバ734は、外部システム722に対してログインしたユーザのつながりなどの、ユーザに対して関連付けられているデータを収集し、収集されたデータを外部システム722へ通信する。別の実施形態において、ユーザ・デバイス710は、外部システム722と同じ手法で、APIを通じてソーシャル・ネットワーキング・システム730と通信する。
アクション・ロガー740は、ソーシャル・ネットワーキング・システム730内での、および/またはソーシャル・ネットワーキング・システム730外でのユーザ・アクションに関する通信をウェブ・サーバ732から受信することが可能である。アクション・ロガー740は、ユーザ・アクションに関する情報をアクティビティ・ログ742へ投入し、ソーシャル・ネットワーキング・システム730の内部で、およびソーシャル・ネットワーキング・システム730の外部で、そのユーザによって行われた様々なアクションをソーシャル・ネットワーキング・システム730が発見することを可能にする。特定のユーザが、ソーシャル・ネットワーキング・システム730上の別のノードに関して行う任意のアクションは、アクティビティ・ログ742内または同様のデータベースもしくは他のデータ・レポジトリ内で維持される情報を通じて、各ユーザのアカウントに対して関連付けられ得る。識別および記憶される、ソーシャル・ネットワーキング・システム730内でユーザによって行われるアクションの例は、例えば、別のユーザに対するつながりを追加すること、別のユーザへメッセージを送信すること、別のユーザからのメッセージを読むこと、別のユーザに対して関連付けられるコンテンツを視聴すること、別のユーザによって投稿されたイベントに参加すること、画像を投稿すること、画像を投稿しようと試行すること、または、別のユーザもしくは別のオブジェクトと相互作用する他のアクションを含み得る。ユーザが、ソーシャル・ネットワーキング・システム730内でアクションを行う場合、そのアクションは、アクティビティ・ログ742内に記録される。一実施形態において、ソーシャル・ネットワーキング・システム730は、アクティビティ・ログ742をエントリのデータベースとして維持する。アクションが、ソーシャル・ネットワーキング・システム730内で行われる場合、そのアクションについてのエントリが、アクティビティ・ログ742に対して追加される。アクティビティ・ログ742は、アクション・ログと称され得る。
また、ユーザ・アクションは、ソーシャル・ネットワーキング・システム730とは別個の外部システム722などの、ソーシャル・ネットワーキング・システム730の外部のエンティティ内で発生するコンセプトおよびアクションに対して関連付けられ得る。例えば、アクション・ロガー740は、ユーザによる外部システム722との相互作用を記述するデータを、ウェブ・サーバ732から受信し得る。この例において、外部システム722は、ソーシャル・グラフにおける構造化されたアクションおよびオブジェクトに従
って、ユーザによる相互作用を報告する。
ユーザが外部システム722と相互作用するアクションの他の例は、ユーザが外部システム722もしくは別のエンティティにおいて興味を表現すること、外部システム722もしくは外部システム722内のウェブ・ページ724aと議論するソーシャル・ネットワーキング・システム730に対してユーザがコメントを投稿すること、ユーザがソーシャル・ネットワーキング・システム730に対してユニフォーム・リソース・ロケータ(URL)もしくは外部システム722に対して関連付けられる他の識別子を投稿すること、ユーザが外部システム722に対して関連付けられるイベントへ参加すること、または、外部システム722に関連する、ユーザによる任意の他のアクションを含む。したがって、アクティビティ・ログ742は、ソーシャル・ネットワーキング・システム730のユーザと、ソーシャル・ネットワーキング・システム730とは別個の外部システム722との間の相互作用を記述するアクションを含み得る。
認証サーバ744は、ソーシャル・ネットワーキング・システム730のユーザの1つまたは複数のプライバシー設定を強化する。ユーザのプライバシー設定は、ユーザに対して関連付けられる特定の情報がどのように共有され得るかを決定する。プライバシー設定は、ユーザに対して関連付けられる特定の情報の仕様、および情報が共有され得る1つまたは複数のエンティティの仕様を備える。情報が共有され得るエンティティの例は、他のユーザ、アプリケーション、外部システム722、または、その情報に潜在的にアクセスし得る任意のエンティティを含み得る。ユーザによって共有され得る情報は、プロフィール写真などのユーザ・アカウント情報、ユーザに対して関連付けられる電話番号、ユーザのつながり、つながりを追加すること、ユーザ・プロフィール情報を変更することなどのユーザによって行われるアクション等を備える。
プライバシー設定仕様は、異なるレベルの粒度で提供され得る。例えば、プライバシー設定は、他のユーザと共有されるべき具体的な情報を識別し得る。プライバシー設定は、職場電話番号、または、プロフィール写真、自宅電話番号、およびステータスを含む個人情報などの関連情報の具体的なセットを識別する。代替的に、プライバシー設定は、ユーザに対して関連付けられる全ての情報に対して適用されてもよい。特定の情報にアクセスすることができるエンティティのセットの仕様も、様々なレベルの粒度で特定され得る。情報が共有され得るエンティティの様々なセットは、例えば、ユーザの全ての友達、友達の全ての友達、全てのアプリケーション、または全ての外部システム722を含み得る。1つの実施形態は、エンティティのセットの仕様がエンティティの一覧表を備えることを可能にする。例えば、ユーザは、一定の情報に対してアクセスすることを許可される外部システム722のリストを提供し得る。別の実施形態は、情報に対してアクセスすることを許可されない例外と共にエンティティのセットを仕様が備えることを可能にする。例えば、ユーザは、全ての外部システム722がユーザの職場情報に対してアクセスすることを許可し得るが、職場情報に対してアクセスすることを許可されない外部システム722のリストを特定し得る。一定の実施形態は、一定の情報に対してアクセスすることを許可されない例外のリストを「ブロック・リスト」と呼ぶ。ユーザによって特定されるブロック・リストに所属する外部システム722は、プライバシー設定において特定される情報に対してアクセスすることをブロックされる。情報の仕様の粒度と、情報が共有されるエンティティの仕様の粒度との様々な組み合わせが可能である。例えば、全ての個人情報は、友達と共有され得るのに対して、全ての職場情報は、友達の友達と共有され得る。
認証サーバ744は、ユーザに対して関連付けられる一定の情報がユーザの友達、外部システム722、ならびに/または他のアプリケーションおよびエンティティによってアクセスされ得るかを決定するためのロジックを含む。外部システム722は、ユーザの職場電話番号などの、ユーザのより個人的かつ機密的な情報に対してアクセスするために、
認証サーバ744からの認証を必要とし得る。ユーザのプライバシー設定に基づいて、認証サーバ744は、別のユーザ、外部システム722、アプリケーション、または別のエンティティが、ユーザによって行われるアクションに関する情報を含む、ユーザに対して関連付けられる情報に対してアクセスすることを許可されているかを決定する。
前述のプロセス、システムおよび特徴は、多種多様なマシンおよびコンピュータ・システム・アーキテクチャによって、ならびに、多種多様なネットワークおよびコンピューティング環境において実装され得る。図8は、本明細書において識別されたコンピューティング・デバイスのうちの1つまたは複数を実装するために使用され得るコンピュータ・システム800の例を例示する。コンピュータ・システム800は、コンピュータ・システム800に対して、本明細書において議論されるプロセスおよび特徴を実行させるための命令のセットを含む。コンピュータ・システム800は、他のマシンへ接続され(例えば、ネットワーク化され)得る。ネットワーク化された配置において、コンピュータ・システム800は、クライアント/サーバ・ネットワーク環境内のサーバ・マシンもしくはクライアント・マシンの資格において動作し、または、ピア・ツー・ピア(もしくは分散)・ネットワーク環境内のピア・マシンとして動作し得る。本発明の一実施形態において、コンピュータ・システム800は、クライアント・デバイス100、ソーシャル・ネットワーキング・システム730の全部、またはこれらの構成要素のうちの1つであってもよい。
コンピュータ・システム800は、プロセッサ802と、メモリ804と、コンピュータ読取可能な媒体上に記憶され、本明細書において説明されるプロセスおよび特徴へ向けられた、1つまたは複数の実行可能なモジュールおよびドライバとを含む。また、コンピュータ・システム800は、高性能入出力(I/O)バス806と、標準I/Oバス808とを含む。ホスト・ブリッジ810は、プロセッサ802を高性能I/Oバス806に対して結合する一方で、I/Oバス・ブリッジ812は、2つのバス806および808を互いに結合する。システム・メモリ814および1つまたは複数のネットワーク・インタフェース816は、バス806へ結合される。コンピュータ・システム800は、ビデオ・メモリと、ビデオ・メモリに対して結合される表示デバイスとをさらに含んでもよい(図示せず)。マス・ストレージ818およびI/Oポート820は、バス808へ結合される。コンピュータ・システム800は、バス808に対して結合される、キーボードおよびポインティング・デバイス、表示デバイス、または他の入出力デバイス(図示せず)を随意的に含んでもよい。全体的に、これらの要素は、カリフォルニア州サンタ・クララのインテル・コーポレーション社(Intel Corporation)によって製造されるx86互換性のあるプロセッサ、カリフォルニア州サニーベルのアドバンスト・マイクロ・デバイス社(AMD:Advanced Micro Devices,Inc)によって製造されるx86互換性のあるプロセッサ、および任意の他の適切なプロセッサを含むが、これらに限定されない、広範なカテゴリのコンピュータ・ハードウェア・システムを表現することが意図される。
オペレーティング・システムは、ソフトウェア・アプリケーション(図示せず)へのデータの入力およびソフトウェア・アプリケーションからのデータの出力を含む、コンピュータ・システム800の動作を管理および制御する。オペレーティング・システムは、システム上で実行されているソフトウェア・アプリケーションと、システムのハードウェア構成要素との間のインタフェースを提供する。任意の適切なオペレーティング・システム、例えば、LINUXオペレーティング・システム、カリフォルニア州クパチーノのアップル・コンピュータ社(Apple Computer,Inc.)から市販されているアップル・マッキントッシュ・オペレーティング・システム、UNIX(登録商標)オペレーティング・システム、マイクロソフト(登録商標)ウィンドウズ(登録商標)オペレーティング・システム、BSDオペレーティング・システム等などが使用され得る。他の
実装も可能である。
コンピュータ・システム800の要素は、下記においてより詳細に説明される。具体的には、ネットワーク・インタフェース816は、コンピュータ・システム800と、幅広いネットワークのうちの任意のもの、例えば、イーサネット(例えば、IEEE802.3)・ネットワーク、バックプレーン等などとの間の通信を提供する。マス・ストレージ818は、上記に識別されたそれぞれのコンピューティング・システムによって実装される上述されたプロセスおよび特徴を実行するためのデータおよびプログラミング命令のための永続的なストレージを提供するのに対して、システム・メモリ814(例えば、DRAM)は、プロセッサ802によって実行される場合のデータおよびプログラミング命令のための一時的なストレージを提供する。I/Oポート820は、コンピュータ・システム800へ結合され得る付加的な周辺デバイス間の通信を提供する、1つまたは複数のシリアル通信ポートおよび/またはパラレル通信ポートであり得る。
コンピュータ・システム800は、多様なシステム・アーキテクチャを含むことができ、コンピュータ・システム800の様々な構成要素は、再配置されてもよい。例えば、キャッシュ804は、プロセッサ802と共にチップ上に実装されてもよい。代替的に、キャッシュ804およびプロセッサ802は、「プロセッサ・モジュール」としてまとめられて、プロセッサ802が「プロセッサ・コア」と称されてもよい。さらに、本発明の一定の実施形態は、上記構成要素の全部を必要としなくても、または、含まなくてもよい。例えば、標準I/Oバス808へ結合される周辺デバイスは、高性能I/Oバス806へ結合されてもよい。また、いくつかの実施形態において、単一のバスのみが存在して、コンピュータ・システム800の構成要素が、その単一のバスへ結合されてもよい。さらに、コンピュータ・システム800は、付加的なプロセッサ、記憶デバイス、またはメモリなどの付加的な構成要素を含んでもよい。
一般に、本明細書において説明されるプロセスおよび特徴は、オペレーティング・システムの一部もしくは特定のアプリケーション、構成要素、プログラム、オブジェクト、モジュール、または「プログラム」と称される一連の命令として実装され得る。例えば、1つまたは複数のプログラムは、本明細書において説明される具体的なプロセスを実行するために使用され得る。プログラムは、典型的には、1つまたは複数のプロセッサによって読み出され、実行される場合に、コンピュータ・システム800に対して、本明細書において説明されるプロセスおよび特徴を実行するための動作を実行させる、1つまたは複数の命令を、コンピュータ・システム800内の様々なメモリおよび記憶デバイスにおいて備える。本明細書において説明されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア(例えば、特定用途向け集積回路)、または、これらの任意の組み合わせにおいて実装され得る。
1つの実装において、本明細書において説明されるプロセスおよび特徴は、分散コンピューティング環境において個々にまたはまとめて、コンピュータ・システム800によって実行される一連の実行可能なモジュールとして実装される。前述のモジュールは、ハードウェア、コンピュータ読取可能な媒体(もしくはマシン読取可能な媒体)上に記憶される実行可能なモジュール、または、両者の組み合わせによって実現され得る。例えば、モジュールは、プロセッサ802などの、ハードウェア・システム内のプロセッサによって実行されるべき複数の命令または一連の命令を備え得る。まず、一連の命令は、マス・ストレージ818などの記憶デバイス上に記憶され得る。ただし、一連の命令は、任意の適切なコンピュータ読取可能な記憶媒体上に記憶されてもよい。さらに、一連の命令は、局所的に記憶される必要はなく、ネットワーク上のサーバなどの遠隔記憶デバイスからネットワーク・インタフェース816を通じて受信されてもよい。命令は、マス・ストレージ818などの記憶デバイスからシステム・メモリ814内へコピーされ、次いで、プロセ
ッサ802によってアクセスされ、実行される。様々な実施形態において、1つまたは複数のモジュールは、並列処理環境内の複数のサーバなどの、1つまたは複数の位置における、1つまたは複数のプロセッサによって実行され得る。
コンピュータ読取可能な媒体の例は、揮発性メモリ・デバイスおよび不揮発性メモリ・デバイスなどの記録可能なタイプの媒体、ソリッド・ステート・メモリ、フロッピー(登録商標)ディスクおよび他の取り外し可能なディスク、ハード・ディスク・ドライブ、磁気媒体、光ディスク(例えば、コンパクト・ディスク読取専用メモリ(CD ROMS)、デジタル多用途ディスク(DVD))、他の同様の非一時的で(もしくは一時的で)、有形の(もしくは無形の)記憶媒体、または、本明細書において説明されるプロセスおよび特徴のうちの任意の1つもしくは複数を実行すべく、コンピュータ・システム800による実行のために一連の命令を記憶し、符号化し、もしくは担持するのに適切な任意のタイプの媒体を含むが、これらに限定されない。
説明の目的のために、多くの具体的な詳細が、本説明の完全な理解を提供するために述べられている。しかしながら、こうした具体的な詳細なしに本開示の実施形態が実施され得ることは、当業者には明らかであろう。いくつかの例において、モジュール、構造、プロセス、特徴、およびデバイスは、本説明を曖昧にすることを回避するために、ブロック図の形式で示される。他の例において、機能ブロック図およびフロー図は、データおよび論理フローを表現するために示される。ブロック図およびフロー図の構成要素(例えば、モジュール、ブロック、構造、デバイス、特徴等)は、本明細書において明示的に説明および図示されたような手法以外の手法で、様々に組み合わされ、分離され、除去され、順序を並べ替えられ、置換されてもよい。
この明細書における、「1つの実施形態」、「一実施形態」、「他の実施形態」、「別の実施形態」、「一連の実施形態」、「いくつかの実施形態」、「様々な実施形態」等への言及は、実施形態に関連して説明される特定の特徴、設計、構造、または特性が本開示の少なくとも1つの実施形態に含まれることを意味する。本明細書内の様々な部分における「1つの実施形態において」、「一実施形態において」または「別の実施形態」という句の出現は、必ずしも全て同じ実施形態に言及するものとは限らず、別個の実施形態または代替的な実施形態は、他の実施形態と相互排他的ではない。さらに、「実施形態」等への明示的な言及が存在しても存在しなくても、様々な特徴が説明され、様々な特徴は、いくつかの実施形態において様々に組み合わされ、含まれ得るが、他の実施形態においては様々に省略され得る。同様に、いくつかの実施形態にとっては選好事項または要件であり得るが、他の実施形態にとっては選好事項または要件ではない、様々な特徴が説明される。
本明細書において使用される文言は、主に、読みやすさと教育的目的のために選択されており、発明の主題の輪郭を描くため、または境界線を描くために選択されたものではない。そのため、本発明の範囲は、この詳細な説明によって限定されるのではなく、むしろ、本明細書に基づく出願について発行される任意の請求項によって限定されることが意図される。したがって、本発明の実施形態の開示は、本発明の範囲の例示とはなるが、限定とはならないことが意図され、本発明の範囲は、下記の特許請求の範囲において述べられる。