(58)【調査した分野】(Int.Cl.,DB名)
複数のノードと、前記ノード同士を接続する複数のエッジとを備えるソーシャル・グラフにアクセスする工程であって、前記ノードのうちの2つの間の前記エッジの各々は、それらの間の単一の分離度を表す、工程をさらに備え、前記ノードは、
前記第1のユーザに対応する第1のノードと、
前記オンライン・ソーシャル・ネットワークに関連付けられている複数のオブジェクトにそれぞれ対応する複数の第2のノードと、を含む、請求項1に記載の方法。
前記第1のオブジェクト・タイプは、前記オンライン・ソーシャル・ネットワークにおける1つのユーザに対応し、前記第2のオブジェクト・タイプは、前記オンライン・ソーシャル・ネットワークにおけるコンセプトに対応する、請求項1に記載の方法。
前記第1のオブジェクト・タイプまたは第2のオブジェクト・タイプは、ユーザ、投稿、写真、映像、オーディオ、ウェブ・ページ、およびアプリケーションから成る群から選択される、請求項1に記載の方法。
前記ランク付けは、前記検索結果に関連付けられている前記第1のユーザが「いいね」と表明したオブジェクトの数に少なくとも部分的に基づく、請求項9に記載の方法。
前記逆引きインデックスは、前記第1のオブジェクト・タイプに関連付けられている検索語を前記第2のオブジェクト・タイプの1以上のオブジェクトにマッピングする、請求項1に記載の方法。
前記正引きインデックスは、前記第2のオブジェクト・タイプに関連付けられている検索語を前記第1のオブジェクト・タイプの1以上のオブジェクトにマッピングする、請求項1に記載の方法。
1以上のプロセッサと、前記プロセッサによって実行可能な命令を含む、前記プロセッサに結合されている非一時的なメモリと、を備え、前記プロセッサは、前記命令を実行したとき、
オンライン・ソーシャル・ネットワークの第1のユーザのクライアント・システムから、第1のオブジェクト・タイプの1以上のオブジェクトを求める検索クエリを受信する工程であって、前記検索クエリは内部クエリおよび外部クエリを識別するように解析され、前記内部クエリは、第2のオブジェクト・タイプのオブジェクトだけを記憶する第2のデータ・ストア内に記憶された第2のオブジェクト・タイプの1以上のオブジェクトを要求
し、前記外部クエリは、前記第1のオブジェクト・タイプのオブジェクトだけを記憶する第1のデータ・ストア内に記憶された前記第1のオブジェクト・タイプの1以上のオブジェクトを要求する、工程と、
前記検索クエリを受信することに応答して、前記第2のオブジェクト・タイプに対応する前記第2のデータ・ストアの逆引きインデックスを使用して、前記内部クエリによって要求された前記第2のオブジェクト・タイプの前記1以上のオブジェクトを識別する、第2のオブジェクト・タイプ識別工程と、
識別された前記第2のオブジェクト・タイプの前記1以上のオブジェクトと、前記第2のオブジェクト・タイプに対応する前記第2のデータ・ストアの正引きインデックスとを使用して、前記外部クエリによって要求された前記第1のオブジェクト・タイプの前記1以上のオブジェクトを識別する工程であって、識別された前記第1のオブジェクト・タイプの前記1以上のオブジェクトは、識別された前記第2のオブジェクト・タイプの前記オブジェクトの1以上に前記オンライン・ソーシャル・ネットワーク内において関連している、第1のオブジェクト・タイプ識別工程と、
前記検索クエリに応答して1以上の検索結果を前記第1のユーザのクライアント・システムに送信する工程であって、各検索結果は、前記第1のデータ・ストアから識別された前記第1のオブジェクト・タイプのオブジェクトに対応する、工程と、を行うように構成される、システム。
【発明を実施するための形態】
【0005】
特定の実施形態は、第1のオブジェクト・タイプの第1の検索結果を要求する検索クエリを受信し、検索クエリは、第2のオブジェクト・タイプの第2の検索結果を要求する内部クエリを含む。特定の実施形態は、第2のオブジェクト・タイプに対応するデータ・ストアの逆引きインデックスにアクセスし、内部クエリによって要求された第2の検索結果を取り出す。特定の実施形態は、データ・ストアの正引きインデックスにアクセスし、第2の検索結果を使用して第1の検索結果を取り出す。
【0006】
図1は、ソーシャルネットワーキング・システムに関連付けられている例示的なネットワーク環境100を示す。ネットワーク環境100は、互いにネットワーク110によって接続されたユーザ101、クライアント・システム130、ソーシャルネットワーキング・システム160、およびサードパーティ・システム170を含む。
図1は、ユーザ1
01、クライアント・システム130、ソーシャルネットワーキング・システム160、サードパーティ・システム170、およびネットワーク110の特定の構成を示すが、この開示は、ユーザ101、クライアント・システム130、ソーシャルネットワーキング・システム160、サードパーティ・システム170、およびネットワーク110の任意の好適な構成を企図する。限定するものとしてではなく一例として、クライアント・システム130、ソーシャルネットワーキング・システム160、およびサードパーティ・システム170の2以上は、ネットワーク110をバイパスして互いに直接的に接続されてもよい。別の例として、クライアント・システム130、ソーシャルネットワーキング・システム160、およびサードパーティ・システム170の2以上が、全体として、または部分的に互いに物理的に、または論理的に同じ場所にあってもよい。さらに、
図1は、特定の数のユーザ101、クライアント・システム130、ソーシャルネットワーキング・システム160、サードパーティ・システム170、およびネットワーク110を示すが、この開示は、任意の好適な数のユーザ101、クライアント・システム130、ソーシャルネットワーキング・システム160、サードパーティ・システム170、およびネットワーク110を企図する。限定するものとしてではなく一例として、ネットワーク環境100は、複数のユーザ101、クライアント・システム130、ソーシャルネットワーキング・システム160、サードパーティ・システム170、およびネットワーク110を含んでもよい。
【0007】
特定の実施形態では、ユーザ101は、ソーシャルネットワーキング・システム160と、またはソーシャルネットワーキング・システム160を通じて対話、すなわち通信する個人(人間のユーザ)、エンティティ(たとえば、企業、事業者、またはサードパーティ・アプリケーション)、または(たとえば、個人またはエンティティの)グループであってよい。特定の実施形態では、ソーシャルネットワーキング・システム160は、オンライン・ソーシャル・ネットワークをホストするネットワークアドレス指定可能なコンピューティング・システムであってよい。ソーシャルネットワーキング・システム160は、たとえばユーザプロフィール・データ、コンセプトプロフィール・データ、ソーシャル・グラフ情報、またはオンライン・ソーシャル・ネットワークに関係する他の好適なデータなど、ソーシャルネットワーキング・データを生成、記憶、受信、および送信する。ソーシャルネットワーキング・システム160は、ネットワーク環境100の他の構成要素によって、直接的に、またはネットワーク110を通じてアクセスされてもよい。特定の実施形態では、ソーシャルネットワーキング・システム160は、ユーザ101がたとえば適切なプライバシ設定を設定することによってなど、自分達のアクションをソーシャルネットワーキング・システム160によって記録させる、または他のシステム(たとえば、サードパーティ・システム170)と共有させることについてオプトインまたはオプトアウトすることを可能にする認可サーバを含んでもよい。特定の実施形態では、サードパーティ・システム170は、ウェブサイトまたはアプリケーションをホストするネットワークアドレス指定可能なコンピューティング・システムであってよい。サードパーティ・システム170は、たとえば限定しないが、ウェブ・ページ、テキスト、画像、映像、オーディオ、またはアプリケーションなど、サードパーティ・システム・データを生成、記憶、受信、および送信する。サードパーティ・システム170は、ネットワーク環境100の他の構成要素によって、直接的に、またはネットワーク110を通じてアクセスされてもよい。特定の実施形態では、1または複数のユーザ101が1または複数のクライアント・システム130を使用し、ソーシャルネットワーキング・システム160またはサードパーティ・システム170にアクセスし、データを送り、それらからデータを受信してもよい。クライアント・システム130は、ソーシャルネットワーキング・システム160またはサードパーティ・システム170に直接的に、ネットワーク110を通じて、またはサードパーティ・システムを通じてアクセスしてもよい。限定するものとしてではなく一例として、クライアント・システム130は、サードパーティ・システム170にソーシャルネットワーキング・システム160を通じてアクセスしてもよい。クライアン
ト・システム130は、たとえばパーソナル・コンピュータ、ラップトップ・コンピュータ、携帯電話、スマートフォン、またはタブレット・コンピュータなど、任意の好適なコンピューティング・デバイスであってよい。
【0008】
この開示は、任意の好適なネットワーク110を企図する。限定するものとしてではなく一例として、ネットワーク110の1または複数の部分は、アドホック・ネットワーク、イントラネット、エクストラネット、仮想プライベート・ネットワーク(VPN)、ローカル・エリア・ネットワーク(LAN)、無線LAN(WLAN)、ワイド・エリア・ネットワーク(WAN)、無線WAN(WWAN)、メトロポリタン・エリア・ネットワーク(MAN)、インターネットの一部分、公衆交換電話網(PSTN)の一部分、携帯電話ネットワーク、またはこれらの2以上の組合せを含んでもよい。ネットワーク110は、1または複数のネットワーク110を含んでもよい。
【0009】
リンク150は、クライアント・システム130、ソーシャルネットワーキング・システム160、およびサードパーティ・システム170を通信ネットワーク110に、または互いに接続する。この開示は、任意の好適なリンク150を企図する。特定の実施形態では、1または複数のリンク150は、1または複数の有線(たとえば、デジタル加入者線(DSL)またはDOCSIS(Data Over Cable Service Interface Specification)など)、無線(たとえば、Wi−FiまたはWiMAX(Worldwide interoperability for
Microwave Access)など)、または光(たとえば、同期光ネットワーク(SONET)または同期デジタル・ハイアラーキ(SDH)など)リンクを含む。特定の実施形態では、1または複数のリンク150は、それぞれ、アドホック・ネットワーク、イントラネット、エクストラネット、VPN、LAN、WLAN、WAN、WWAN、MAN、インターネットの一部分、PSTNの一部分、セルラ技術ベースのネットワーク、衛星通信技術ベースのネットワーク、別のリンク150、または2以上のそのようなリンク150の組合せを含む。リンク150は、必ずしもネットワーク環境100全体を通じて同じであることを必要としない。1または複数の第1のリンク150は、1または複数の点で1または複数の第2のリンク150と異なってもよい。
【0010】
図2は、例示的なソーシャル・グラフ200を示す。特定の実施形態では、ソーシャルネットワーキング・システム160は、1または複数のソーシャル・グラフ200を1または複数のデータ・ストア内に記憶する。特定の実施形態では、ソーシャル・グラフ200は、複数のノード(複数のユーザノード202または複数のコンセプトノード204を含んでもよい)と、それらのノードを接続する複数のエッジ206とを含んでもよい。
図2に示されている例示的なソーシャル・グラフ200は、説明のために、2次元の視覚マップ表現で示されている。特定の実施形態では、ソーシャルネットワーキング・システム160、クライアント・システム130、またはサードパーティ・システム170は、適切な用途のためにソーシャル・グラフ200および関連するソーシャル・グラフ情報にアクセスする。ソーシャル・グラフ200のノードおよびエッジは、データ・オブジェクトとして、たとえばデータ・ストア(ソーシャル・グラフ・データベースなど)内に記憶されてもよい。そのようなデータ・ストアは、ソーシャル・グラフ200のノードまたはエッジの、1または複数の検索可能または照会可能なインデックスを含んでもよい。
【0011】
特定の実施形態では、ユーザノード202は、ソーシャルネットワーキング・システム160のユーザに対応する。限定するものとしてではなく一例として、ユーザは、ソーシャルネットワーキング・システム160と、またはソーシャルネットワーキング・システム160を通じて対話または通信する個人(人間のユーザ)、エンティティ(たとえば、企業、事業者、またはサードパーティ・アプリケーション)、または(たとえば、個人またはエンティティの)グループであってよい。特定の実施形態では、ユーザがアカウント
をソーシャルネットワーキング・システム160に登録するとき、ソーシャルネットワーキング・システム160は、そのユーザに対応するユーザノード202を作成し、そのユーザノード202を1または複数のデータ・ストア内に記憶する。本明細書に記載のユーザおよびユーザノード202は、適切な場合、登録されたユーザ、および登録されたユーザに関連付けられているユーザノード202に及ぶ。それに加えて、または代替として、本明細書に記載のユーザおよびユーザノード202は、適切な場合、ソーシャルネットワーキング・システム160に登録しなかったユーザに及ぶ。特定の実施形態では、ユーザノード202は、ユーザによって提供された情報、またはソーシャルネットワーキング・システム160を含む様々なシステムによって収集された情報に関連付けられてもよい。限定するものとしてではなく一例として、ユーザは、自分の名前、プロフィール写真、連絡先情報、誕生日、性別、婚姻状態、家族状態、雇用、学歴、好み、関心、または他の人口統計情報を提供してもよい。特定の実施形態では、ユーザノード202は、ユーザに関連付けられている情報に対応する1または複数のデータ・オブジェクトに関連付けられてもよい。特定の実施形態では、ユーザノード202は、1または複数のウェブ・ページに対応してもよい。
【0012】
特定の実施形態では、コンセプトノード204は、コンセプトに対応する。限定するものとしてではなく一例として、コンセプトは、場所(たとえば、映画館、レストラン、目印、または都市など)、ウェブサイト(たとえば、ソーシャルネットワーキング・システム160に関連付けられているウェブサイト、またはウェブアプリケーションサーバに関連付けられているサードパーティウェブサイトなど)、エンティティ(たとえば、人、事業者、グループ、スポーツチーム、または有名人など)、ソーシャルネットワーキング・システム160内、またはウェブアプリケーションサーバなど外部サーバ上に位置するリソース(たとえば、オーディオファイル、映像ファイル、デジタル写真、テキストファイル、構造化文書、またはアプリケーションなど)、実際の財産または知的財産(たとえば、彫刻、絵画、映画、ゲーム、楽曲、着想、写真、または書物など)、ゲーム、アクティビティ、着想もしくは理論、別の好適なコンセプト、または2以上のそのようなコンセプトに対応してもよい。コンセプトノード204は、ユーザによって提供されたコンセプトの情報、またはソーシャルネットワーキング・システム160を含む様々なシステムによって収集された情報に関連付けられてもよい。限定するものとしてではなく一例として、コンセプトの情報は、名前もしくはタイトル、1または複数の画像(たとえば、本の表紙の画像)、ロケーション(たとえば、住所または地理的ロケーション)、(URLに関連付けられる)ウェブサイト、連絡先情報(たとえば、電話番号または電子メール・アドレス)、他の好適なコンセプト情報、またはそのような情報の任意の好適な組合せを含んでもよい。特定の実施形態では、コンセプトノード204は、コンセプトノード204に関連付けられている情報に対応する1または複数のデータ・オブジェクトに関連付けられてもよい。特定の実施形態では、コンセプトノード204は、1または複数のウェブ・ページに対応してもよい。
【0013】
特定の実施形態では、ソーシャル・グラフ200内のノードは、ウェブ・ページを表しても、ウェブ・ページによって表されてもよい(「プロフィールページ」と呼ばれる)。プロフィールページは、ソーシャルネットワーキング・システム160によってホストされ、またはそこからアクセス可能であってもよい。また、プロフィールページは、サードパーティ・システム170に関連付けられているサードパーティウェブサイト上でホストされてもよい。限定するものとしてではなく一例として、特定の外部ウェブ・ページに対応するプロフィールページは、その特定の外部ウェブ・ページであってもよく、プロフィールページが、特定のコンセプトノード204に対応してもよい。プロフィールページは、他のユーザのすべてまたは選択されたサブセットによって閲覧可能であってもよい。限定するものとしてではなく一例として、ユーザノード202は、対応するユーザがコンテンツを追加し、宣言をし、または他の方法で自分を表現する、対応するユーザプロフィー
ルページを有してもよい。限定するものとしてではなく別の例として、コンセプトノード204は、1または複数のユーザがコンセプトノード204に対応するコンセプトに特に関連してコンテンツを追加し、宣言をし、またはユーザ自身を表現する、対応するコンセプトプロフィールページを有してもよい。
【0014】
特定の実施形態では、コンセプトノード204は、サードパーティ・システム170によってホストされるサードパーティウェブページまたはリソースを表す。サードパーティウェブページまたはリソースは、要素の中でもとりわけ、コンテンツ、選択可能なアイコンもしくは他のアイコン、またはアクションもしくはアクティビティを表す(たとえば、JavaScript(登録商標)、AJAX、またはPHPコードにより実装される)他の対話可能なオブジェクトを含んでもよい。限定するものとしてではなく一例として、サードパーティウェブページは、「いいね」、「チェックイン」、「食べる」、「推奨する」、または別の好適なアクションまたはアクティビティなど、選択可能なアイコンを含んでもよい。サードパーティウェブページを閲覧するユーザは、アイコンの1つ(たとえば、「食べる」)を選択することによって、アクションを行う。これによって、クライアント・システム130は、ユーザのアクションを示すメッセージをソーシャルネットワーキング・システム160へ送信する。ソーシャルネットワーキング・システム160は、メッセージに応答して、ユーザに対応するユーザノード202とサードパーティウェブページまたはリソースに対応するコンセプトノード204との間にエッジ(たとえば、「食べる」エッジ)を作成し、エッジ206を1または複数のデータ・ストア内に記憶する。
【0015】
特定の実施形態では、ソーシャル・グラフ200内の1対のノードが、1または複数のエッジ206によって互いに接続されてもよい。1対のノードを接続するエッジ206は、その対のノード間の関係を表す。特定の実施形態では、エッジ206は、1対のノード間の関係に対応する1または複数のデータ・オブジェクトまたは属性を含み、または表してもよい。限定するものとしてではなく一例として、第1のユーザは、第2のユーザが第1のユーザの「友達」であることを示してもよい。この示したことに応答して、ソーシャルネットワーキング・システム160は、「友達要求」を第2のユーザに送信してもよい。第2のユーザが「友達要求」を確認した場合、ソーシャルネットワーキング・システム160は、ソーシャル・グラフ200内で第1のユーザのユーザノード202を第2のユーザのユーザノード202に接続するエッジ206を作成し、エッジ206をソーシャル・グラフ情報としてデータ・ストア24の1または複数に記憶してもよい。
図2の例では、ソーシャル・グラフ200は、ユーザ「A」とユーザ「B」とのユーザノード202間の友達関係を示すエッジ206と、ユーザ「C」とユーザ「B」とのユーザノード202間の友達関係を示すエッジとを含む。本開示は特定のユーザノード202を接続する特定の属性を有する特定のエッジ206について記載し示しているが、本開示は、ユーザノード202を接続する任意の好適な属性を有する任意の好適なエッジ206を企図する。限定するものとしてではなく一例として、エッジ206は、友達関係、家族関係、仕事関係もしくは雇用関係、ファン関係、フォロワ関係、ビジタ関係、加入者関係、主従関係、相互的関係、非相互的関係、別の好適なタイプの関係、または2以上のそのような関係を表してもよい。さらに、本開示は一般にノードを接続されているものとして記載しているが、本開示は、ユーザまたはコンセプトも接続されているものとして記載している。本明細書では、接続されているユーザまたはコンセプトへの言及は、適切な場合、ソーシャル・グラフ200内で1または複数のエッジ206によって接続されているユーザまたはコンセプトに対応するノードに及ぶ。
【0016】
特定の実施形態では、ユーザノード202とコンセプトノード204との間のエッジ206は、コンセプトノード204に関連付けられているコンセプトに向かってユーザノード202に関連付けられているユーザによって行われる特定のアクションまたはアクティビティを表してもよい。限定するものとしてではなく一例として、
図2に示されているよ
うに、ユーザは、コンセプトに対して「いいね」と表明することができ、コンセプトに「通った」、コンセプトを「プレイした」、「聴いた」、「調理した」、コンセプトに「勤務した」、またはコンセプトを「見た」のであり、コンセプトのそれぞれは、エッジタイプまたはサブタイプに対応する。コンセプトノード204に対応するコンセプトプロフィールページは、たとえば、選択可能な「チェックイン」アイコン(たとえば、クリッカ可能な「チェックイン」アイコン)または選択可能な「お気に入りに追加」アイコンを含んでもよい。同様に、ユーザがこれらのアイコンをクリックした後、ソーシャルネットワーキング・システム160は、それぞれのアクションに対応するユーザのアクションに応答して「お気に入り」エッジ、または「チェックイン」エッジを作成する。限定するものとしてではなく別の例として、ユーザ(ユーザ「C」)は、特定のアプリケーション(オンラインミュージックアプリケーションであるSPOTIFY)を使用して特定の楽曲(ランブル・オン)を聴く。この場合には、ソーシャルネットワーキング・システム160は、ユーザに対応するユーザノード202と楽曲およびアプリケーションに対応するコンセプトノード204との間に「聴いた」エッジ206および「使用した」エッジ(
図2に図示)を作成し、ユーザがその楽曲を聞き、そのアプリケーションを使用したことを示す。さらに、ソーシャルネットワーキング・システム160は、楽曲およびアプリケーションに対応するコンセプトノード204間に「プレイした」エッジ206(
図2に図示)を作成し、特定の楽曲が特定のアプリケーションによってプレイされたことを示す。この場合には、「プレイした」エッジ206は、外部アプリケーション(SPOTIFY)によって外部オーディオファイル(楽曲「イマジン」)に対して行われたアクションに対応する。本開示は、ユーザノード202とコンセプトノード204とを接続する特定の属性を有する特定のエッジ206について記載しているが、本開示は、ユーザノード202とコンセプトノード204とを接続する任意の好適な属性を有する任意の好適なエッジ206を企図する。さらに、本開示は、ユーザノード202とコンセプトノード204の間の単一の関係を表すエッジについて記載しているが、本開示は、ユーザノード202とコンセプトノード204との間の1または複数の関係を表すエッジを企図する。限定するものとしてではなく一例として、エッジ206は、ユーザが「いいね」と表明したこと、および特定のコンセプトを使用したことの両方を表してもよい。あるいは、別のエッジ206が、ユーザノード202とコンセプトノード204(
図2に示されているように、ユーザ「E」に関するユーザノード202と「SPOTIFY」に関するコンセプトノード204)との間の関係の各タイプ(または単一の関係の複数)を表してもよい。
【0017】
特定の実施形態では、ソーシャルネットワーキング・システム160は、ソーシャル・グラフ200内でユーザノード202とコンセプトノード204との間にエッジ206を作成する。限定するものとしてではなく一例として、(たとえば、ウェブブラウザまたはユーザのクライアント・システム130によってホストされる専用アプリケーションを使用することによってなど)コンセプトプロフィールページを閲覧するユーザは、「いいね」アイコンをクリックまたは選択することによって、ユーザがコンセプトノード204によって表されたコンセプトに対して「いいね」と表明することを示す。これによって、ユーザのクライアント・システム130は、コンセプトプロフィールページに関連付けられているコンセプトに対してユーザが「いいね」と表明することを示すメッセージをソーシャルネットワーキング・システム160へ送信する。ソーシャルネットワーキング・システム160は、そのメッセージに応答して、ユーザとコンセプトノード204との間の「いいね」エッジ206によって示されているように、ユーザに関連付けられているユーザノード202とコンセプトノード204との間にエッジ206を作成してもよい。特定の実施形態では、ソーシャルネットワーキング・システム160は、エッジ206を1または複数のデータ・ストア内に記憶してもよい。特定の実施形態では、エッジ206は、特定のユーザアクションに応答してソーシャルネットワーキング・システム160によって自動的に形成されてもよい。限定するものとしてではなく一例として、第1のユーザが写真をアップロードし、映画を見たか、または楽曲を聴いた場合、エッジ206は、第1の
ユーザに対応するユーザノード202とそれらのコンセプトに対応するコンセプトノード204との間に形成されてもよい。本開示は、特定のエッジ206を特定の方法で形成することについて記載しているが、本開示は、任意の好適なエッジ206を任意の好適な方法で形成することを企図する。
【0018】
さらに、任意の2つのノード間の分離度は、一方のノードから他方のノードにソーシャル・グラフを横断するために必要とされるホップの最小数として定義される。2つのノード間の分離度は、ソーシャル・グラフ内の2つのノードによって表されるユーザ間またはコンセプト間の関連性の尺度と考えることができる。
【0019】
ソーシャルネットワーキング・システムによって記憶されるデータ(たとえば、ソーシャル・グラフのためのデータ)の量は、非常に大きなものとなり得る。たとえば、カリフォルニア州メンロー・パークのFacebook(登録商標)によって使用されるソーシャル・グラフは、10
8程度の多数のノードと、10
10程度の多数のエッジとを有する可能性がある。典型的には、大規模データベースなどデータの大規模な集まりは、いくつかのパーティションに分割され得る。各パーティションは、別々のサーバによって、または別々物理的ロケーションで保持され得る。データベースの各パーティションのためのインデックスがデータベース全体のためのインデックスより小さくなるにつれて、分割により、データベースにアクセスする際の性能を改善する。パーティションが多数のサーバにわたって分散され得るにつれて(一方、各パーティションは、地理的に多様なロケーションで複製されてもよい)、分割により、データベースにアクセスする際の性能および信頼性を改善することができる。通常、データベースは、データベースの行(または列)を別々に記憶することによって分割される。また、データベースは、ハッシング・アルゴリズムを使用することによって分割されてもよい。また、データベースは、データベースによって保持されるデータの任意の実世界の区分(たとえば、米国の各時間帯内の顧客)によって分割されてもよい。特定の実施形態は、オブジェクト・タイプに基づいてデータの集まりのストレージを分割する。特定の実施形態は、データ・オブジェクトを複数のパーティションで記憶することができ、各パーティションは、単一のオブジェクト・タイプに対応するデータ・オブジェクトを保持する。
【0020】
図3は、ソーシャルネットワーキング・システムのオブジェクトを記憶するための例示的な分割を示す。
図3の例では、複数のデータ・ストア、すなわちバーティカル(たとえば、P1、P2、P3など)が、ソーシャルネットワーキング・システムのオブジェクトを記憶する。特定の実施形態では、各データ・ストアは、複数のオブジェクト・タイプのうちの特定のオブジェクト・タイプのオブジェクトをそれぞれのデータ記憶デバイス340内に記憶するように構成されてもよい。また、各データ・ストアは、記憶された各オブジェクトに関連付けられている情報をデータ記憶デバイス340内に記憶するように構成されてもよい。オブジェクト・タイプは、ユーザ、写真、投稿、ウェブ・ページ、またはアプリケーションであってよい。オブジェクト・タイプの他の例は、音楽、コメント、イベント、メッセージ、オファー(たとえば、クーポン)、および評論であってもよい。この開示は、ソーシャルネットワーキング・システムにとっての任意の好適なオブジェクト・タイプを企図する。
【0021】
たとえば、
図3に示されているユーザ・バーティカルP1は、ユーザ・オブジェクトを記憶する。ユーザ・バーティカルP1内に記憶される各ユーザ・オブジェクトは、識別子(たとえば、文字列)、ユーザ名、およびソーシャルネットワーキング・システムのユーザ用のプロフィール写真を含む。また、ソーシャルネットワーキング・システムは、ユーザ・バーティカルP1内に、言語、ロケーション、教育、1または複数の電子メール・アドレス、関心、交際状態、友達のリスト、家族のリスト、プライバシ設定など、ユーザ・オブジェクトに関連付けられている情報を記憶してもよい。たとえば、
図3に示されてい
る投稿バーティカルP2は、投稿オブジェクトを記憶する。投稿バーティカルP2内に記憶される各投稿オブジェクトは、識別子、ソーシャルネットワーキング・システムに投稿される投稿のためのテキスト文字列を含む。また、ソーシャルネットワーキング・システムは、投稿バーティカルP2内に、タイム・スタンプ、作者、プライバシ設定、その投稿に対して「いいね」と表明するユーザ、「いいね」の総数、コメント、コメントの総数、ロケーションなど、投稿オブジェクトに関連付けられている情報を記憶してもよい。たとえば、写真バーティカルP3は、写真オブジェクト(または映像もしくはオーディオなど他の媒体タイプのオブジェクト)を記憶する。写真バーティカルP3内に記憶される各写真オブジェクトは、識別子および写真を含む。また、ソーシャルネットワーキング・システムは、写真バーティカルP3内に、タイム・スタンプ、作者、プライバシ設定、写真内でタグ付けされているユーザ、その写真に対して「いいね」と表明するユーザ、コメントなど、写真オブジェクトに関連付けられている情報を記憶してもよい。
【0022】
特定の実施形態では、各バーティカル内に記憶されるオブジェクトは、1または複数の検索インデックスによってインデックス付けされる。検索インデックスは、1または複数のコンピューティング・デバイス(たとえば、サーバ)を含むそれぞれのインデックス・サーバ330によってホストされてもよい。インデックス・サーバ330は、ユーザまたはソーシャルネットワーキング・システム(またはサードパーティ・システム)の他のプロセスによってソーシャルネットワーキング・システムにサブミットされたデータ(たとえば、写真、および写真に関連付けられている情報)に基づいて検索インデックスを更新する。また、インデックス・サーバ330は、定期的(たとえば、24時間ごと)に検索インデックスを更新する。インデックス・サーバ330は、検索語を含むクエリを受け取り、その検索語に対応する1または複数の検索インデックスからの検索結果にアクセスし取り出す。いくつかの実施形態では、特定のオブジェクト・タイプに対応するバーティカルは、それぞれがそれぞれの検索インデックスを備える複数の物理パーティションまたは論理パーティションを備えてもよい。
【0023】
特定の実施形態では、第1のオブジェクト・タイプに対応するバーティカルのための検索インデックスは、逆引きインデックスを含む。逆引きインデックスは、第2のオブジェクト・タイプに関連付けられている検索語を第1のオブジェクト・タイプの1または複数の検索結果にマッピングする。たとえば、
図3に示されている投稿バーティカルP2内の逆引きインデックスは、(posts_liked_by:<user>)などユーザ(user)に関連付けられている検索語を<user>から<user>によって「いいね」と表明されている投稿(posts_liked_by)のリストにマッピングする。逆引きインデックスは、<posts_commented_by:<user>)などユーザに関連付けられている検索語を<user>から<user>によってコメントされた投稿(posts_commented_by)のリストにマッピングする。たとえば、
図3に示されている写真バーティカルP3内の逆引きインデックスは、(photos_liked_by:<user>)などユーザに関連付けられている検索語を<user>から<user>によって「いいね」と表明されている写真(photos_liked_by)のリストにマッピングする。逆引きインデックスは、(photos_tagged_with:<user>)などユーザに関連付けられている検索語を<user>から<user>がタグ付けされている写真(photos_tagged_with)のリストにマッピングする。一実施形態では、特定のオブジェクト・タイプに対応するバーティカルのための逆引きインデックスは、特定のオブジェクト・タイプに関連付けられている検索語を、同じ特定のオブジェクト・タイプの1または複数の検索結果にマッピングする。たとえば、
図3に示されているユーザ・バーティカルP1内の逆引きインデックスは、(friends:<user>)などユーザに関連付けられている検索語を<user>から<user>の友達(friends)の(すなわち、ユーザ・オブジェクト・タイプの)リストにマッピングする。
【0024】
特定の実施形態では、第1のオブジェクト・タイプに対応するバーティカルのための検索インデックスは、正引きインデックスを備えてもよい。正引きインデックスは、第1のオブジェクト・タイプに関連付けられている検索語を第2のオブジェクト・タイプの1または複数の検索結果にマッピングする。たとえば、投稿バーティカルP2内の正引きインデックスは、(likers_of:<post>)など投稿(post)に関連付けられている検索語を<post>から<post>に対して「いいね」と表明している(likers_of)ユーザのリストにマッピングする。正引きインデックスは、(author_of:<post>)など投稿に関連付けられている検索語を<post>から<post>の作者(author_of)であるユーザにマッピングする。たとえば、写真バーティカルP3内の正引きインデックスは、(tagged_in:<photo>)など写真(photo)に関連付けられている検索語を<photo>から<photo>内でタグ付けされている(tagged_in)ユーザのリストにマッピングする。正引きインデックスは、(commenters_of:<photo>)など写真に関連付けられている検索語を<photo>から<photo>についてコメントしている(commenters_of)ユーザのリストにマッピングする。正引きインデックスは、検索語について1対1マッピングを備える。また、正引きインデックスは、検索語について1対少数マッピングを備える。一方、逆引きインデックスは、検索語について1対多マッピングを備える。たとえば、写真バーティカルP3の正引きインデックスは、写真をその写真の所有者(その写真をソーシャルネットワーキング・システムにアップロードしたユーザ)にマッピングする。たとえば、写真バーティカルP3の正引きインデックスは、写真をその写真にタグ付けされている数人のユーザ(たとえば、ユーザ10人未満)にマッピングする。一方、写真バーティカルP3の逆引きインデックスは、ユーザをそのユーザがタグ付けされている多数の写真(たとえば、写真100枚超)にマッピングする。
【0025】
特定の実施形態は、正引きインデックスを使用する効率的な検索のための方法を表す。
図4は、正引きインデックスを使用して検索するための例示的な方法400を示す。方法400は、ソーシャルネットワーキング・システムの1または複数のコンピューティング・デバイス(たとえば、サーバ)によって実装され得る。方法400は、ステップ410で始まる。特定の実施形態では、ステップ410で、1または複数のコンピューティング・デバイスは、第1のオブジェクト・タイプの1または複数の第1の検索結果を要求する検索クエリを受信する。検索クエリは、第2のオブジェクト・タイプの1または複数の第2の検索結果を要求する内部クエリを含む。たとえば、
図3に示されているアグリゲータ・プロセス320が検索クエリ(extract author(term posts_liked_by:<9>))を受け取る。検索クエリは、(抽出(extract)演算子で)<9>のユーザ識別子を有するユーザによって「いいね」と表明されている投稿(posts_liked_by)について1または複数の作者(author)における検索結果を要求する。検索クエリは、ユーザ<9>によって「いいね」と表明されている投稿(posts_liked_by)における検索結果を要求する検索語に対応する内部(内側の)クエリ(term posts_liked_by:<9>)を含む。すなわち、検索クエリは、第1のオブジェクト・タイプ(ユーザ)の第1の検索結果を要求し、一方、内部クエリは、第2のオブジェクト・タイプ(投稿)の第2の検索結果を要求する。
【0026】
アグリゲータ・プロセス320は、ソーシャルネットワーキング・システムの1または複数のコンピューティング・デバイス(たとえば、サーバ)によってホストされる1または複数のコンピューティング・プロセスであってよい。たとえば、アグリゲータ・プロセス320は、
図3に示されているPHP(ハイパーテキスト・プリプロセッサ)プロセス310からの検索要求に基づいて検索クエリを決定する。PHPプロセス310は、ソー
シャルネットワーキング・システムの1または複数のコンピューティング・デバイス(たとえば、サーバ)によってホストされる1または複数のコンピューティング・プロセスであってよい。検索要求は、ユーザまたはソーシャルネットワーキング・システム(またはサードパーティ・システム)の別のプロセスによってPHPプロセスにサブミットされた構造化テキスト文字列または実質的に構造化されていないテキスト文字列であってもよい。たとえば、アグリゲータ・プロセス320は、ユーザ<9>によってPHPプロセス310にサブミットされた検索要求「私が「いいね」と表明している投稿の作者は誰か」に基づいて検索クエリ(extract author(term posts_liked_by:<9>))を決定する。
【0027】
特定の実施形態では、ステップ420で、1または複数のコンピューティング・デバイスは、第2のオブジェクト・タイプに対応するデータ・ストアの逆引きインデックスにアクセスする。特定の実施形態では、ステップ430で、1または複数のコンピューティング・デバイスは、第2のオブジェクト・タイプに対応するデータ・ストアの逆引きインデックスを使用して、内部クエリによって要求された第2の検索結果を取り出す。たとえば、アグリゲータ・プロセス320は、上記の検索クエリ(extract author(term posts_liked_by:<9>))を
図3に示されている投稿バーティカルP2にサブミットし、投稿バーティカルP2のインデックス・サーバ330を投稿バーティカルP2の逆引きインデックスにアクセスさせる。逆引きインデックスは、<user>に関連付けられている検索語(posts_liked_by:<user>)を<user>によって「いいね」と表明されている投稿(posts_liked_by)のリストにマッピングする。インデックス・サーバは、逆引きインデックスにアクセスし、内部検索クエリ(term posts_liked_by:<9>)によって要求されたユーザ<9>によって「いいね」と表明されている投稿のリストを取り出す。たとえば、ユーザ<9>によって「いいね」と表明されている投稿のリストは、識別子<1000>、識別子<2000>、識別子<3000>、識別子<4000>、識別子<5000>、および識別子<6000>を有する投稿を含んでもよい。
【0028】
特定の実施形態では、ステップ440で、1または複数のコンピューティング・デバイスは、第2のオブジェクト・タイプに対応するデータ・ストアの正引きインデックスにアクセスする。特定の実施形態では、ステップ450で、1または複数のコンピューティング・デバイスは、第2の検索結果と第2のオブジェクト・タイプに対応するデータ・ストアの正引きインデックスとを使用して、検索クエリによって要求された第1の検索結果を取り出す。たとえば、上記の投稿バーティカルP2のインデックス・サーバは、投稿バーティカルP2の正引きインデックスにアクセスする。正引きインデックスは、<post>に関連付けられている検索語(author:<post>)を<post>の作者(author)にマッピングする。インデックス・サーバは、(前述の抽出演算子を使用して)内部検索クエリ(term posts_liked_by:<9>)についての投稿の結果リスト(<1000>、<2000>、<3000>、<4000>、<5000>、<6000>)を用いて正引きインデックスにアクセスし、投稿のリスト(<1000>、<2000>、<3000>、<4000>、<5000>、<6000>)についてそれぞれの作者のリスト(たとえば、<31>、<41>、<51>)を取り出す。
【0029】
前述のように、投稿バーティカルP2は、それぞれがそれぞれの検索インデックスを備える複数の物理パーティションまたは論理パーティションを備えてもよい。アグリゲータ・プロセスは、検索クエリ(extract author(term posts_liked_by:<9>))を投稿バーティカルP2の各パーティションにサブミットする。各パーティションのインデックス・サーバは、各パーティションの逆引きインデックスおよび正引きインデックスにアクセスし、上述のように検索結果をアグリゲータに返す
。次いで、アグリゲータ・プロセスは、パーティションからの検索結果を集約する。たとえば、第1のパーティションは、検索結果の作者<31>および作者<51>を返す。第2のパーティションは、検索結果の作者<41>および作者<51>を返す。アグリゲータ・プロセスは、結果を(たとえば、OR演算を実施することによって)集約し、<31>、<41>、および<51>の集約された結果をもたらす。
【0030】
正引きインデックスが存在する場合、
図4の方法は、検索性能を改善する。なぜなら、複雑な検索クエリ(たとえば、2以上の検索クエリを含むクエリ)でも、1つの特定のオブジェクト・タイプに対応する1つのバーティカルにアクセスするだけでよいからである。対照的に、正引きインデックスが存在しない場合、複雑な検索クエリは、異なる特定のオブジェクト・タイプにそれぞれが対応する2以上のバーティカルにアクセスすることを必要とし得る。一例として、上述のユーザ<9>によって「いいね」と表明されている投稿の作者を検索することなど複雑な検索クエリについて、アグリゲータ・プロセスは、最初に第1の検索クエリ(term posts_liked_by:<9>)を投稿バーティカルP2にサブミットする。投稿バーティカルP2のインデックス・サーバは、第1の検索クエリを用いて(ユーザをユーザによって「いいね」と表明されている投稿(posts_liked_by)にマッピングする)投稿バーティカルP2の逆引きインデックスにアクセスし、アグリゲータ・プロセスに、ユーザ<9>によって「いいね」と表明されている投稿のリスト(たとえば、<1000>、<2000>、<3000>、<4000>、<5000>、<6000>)を返す。次いで、アグリゲータ・プロセスは、検索クエリの第2のセット(term author:<1000>)、(term author:<2000>)、(term author:<3000>)などをユーザ・バーティカルP1にサブミットする。すなわち、投稿バーティカルP2内に正引きインデックスが存在しない場合、アグリゲータ・プロセスは、ユーザ・バーティカルP1を1回だけでなく複数回ルック・アップすることが必要となり得る。ユーザ・バーティカルP1のインデックス・サーバは、(投稿をその作者にマッピングする)ユーザ・バーティカルP1の逆引きインデックスにアクセスし、アグリゲータ・プロセスに、投稿のリスト(<1000>、<2000>、<3000>、<4000>、<5000>、<6000>)について作者(author)のリスト(たとえば、<31>、<41>、<51>)を返す。
【0031】
さらに、前述のように、正引きインデックスは、1対1または1対少数である検索語をインデックスする。したがって、バーティカルの正引きインデックスは、1対多マッピングを有する検索語をインデックスするバーティカルの逆引きインデックスより著しく小さいものとなり得る。したがって、正引きインデックスは、そのより小さいサイズにより検索クエリについてアクセス時間および取出し時間が改善され得るので、検索性能をさらに改善する。
【0032】
特定の実施形態では、アグリゲータ・プロセスは、第1のオブジェクト・タイプに対応する少なくとももう1つのデータ・ストアにアクセスすることによって第1の検索結果をランク付けする。たとえば、アグリゲータ・プロセスは、上記の作者のリスト(<31>、<41>、<51>)をユーザ・バーティカルP1にサブミットする。サーバ・プロセス(ソーシャルネットワーキング・システムの1または複数のコンピューティング・デバイスによってホストされる)は、作者<31>、作者<41>、および作者<51>を検索クエリ(extract author(term posts_liked_by:<9>))のユーザ<9>に対するそれらのそれぞれの関係に基づいてランク付けする。たとえば、サーバ・プロセスが(たとえば、1または複数の検索インデックスにアクセスすることによって)作者がユーザ<9>の家族であると決定した場合、サーバ・プロセスは作者をより高くランク付けしてもよい。たとえば、サーバ・プロセスが(たとえば、1または複数の検索インデックスにアクセスすることによって)作者が所定の数(たとえば
、3)より多い共通の関心(または、共通の一次友達)を有すると決定した場合、サーバ・プロセスは作者をより高くランク付けしてもよい。サーバ・プロセスは、作者<31>、<41>、<51>間のランク順をアグリゲータ・プロセスに返す。
【0033】
他の実施形態では、第2のオブジェクト・タイプに対応するデータ・ストアの1または複数のコンピューティング・デバイス(たとえば、インデックス・サーバ)は、第1の検索結果をランク付けする。たとえば、投稿バーティカルP2のインデックス・サーバは、上記の検索結果の作者<31>、作者<41>、および作者<51>を、それらの作者が書いた、ユーザ<9>によって「いいね」と表明されている投稿のリスト(<1000>、<2000>、<3000>、<4000>、<5000>、<6000>)内の投稿の数に基づいてランク付けする。たとえば、ユーザ<41>が投稿<1000>、<2000>、<3000>を書き、ユーザ<31>が投稿<5000>および投稿<6000>を書き、ユーザ<51>が投稿<4000>を書いた場合、インデックス・サーバは、ユーザ<41>がユーザ<9>によって「いいね」と表明されている投稿のリスト内の投稿の大多数を書いたので、ユーザ<41>を最高としてランク付けしてもよい。インデックス・サーバは、ランク付けされた検索結果(<41>、<31>、<51>)を第1の検索結果としてアグリゲータ・プロセスに返す。別の例として、インデックス・サーバは、投稿をその投稿の「いいね」の総数にマッピングする正引きインデックスにアクセスする。インデックス・サーバは、正引きインデックスにアクセスし、ユーザ<9>によって「いいね」と表明されている投稿のリストの各投稿について「いいね」の総数を取り出す。インデックス・サーバは、投稿のリスト内の投稿を、「いいね」のそれぞれの総数に基づいてランク付けし、上位にランク付けされた投稿(たとえば、3位までにランク付けされた、または最も多く「いいね」と表明された投稿)を第1の検索結果としてアグリゲータ・プロセスに返す。
【0034】
特定の実施形態は、適切な場合、
図4の方法の1または複数のステップを繰り返してもよい。この開示は、
図4の方法の特定のステップを、特定の順番で発生するものとして記載し示しているが、この開示は、任意の好適な順番で発生する
図4の方法の任意の好適なステップを企図する。さらに、この開示は、
図4の方法の特定のステップを実施する特定の構成要素、デバイス、またはシステムについて記載し示しているが、この開示は、
図4の方法の任意の好適なステップを実施する任意の好適な構成要素、デバイス、またはシステムの任意の好適な組合せを企図する。
【0035】
図5は、例示的なコンピュータ・システム500を示す。特定の実施形態では、1または複数のコンピュータ・システム500は、本明細書に記載され、または示されている1または複数の方法の1または複数のステップを実施する。特定の実施形態では、1または複数のコンピュータ・システム500は、本明細書に記載され、または示されている機能を提供する。特定の実施形態では、1または複数のコンピュータ・システム500上で動作するソフトウェアは、本明細書に記載され、または示されている1または複数の方法の1または複数のステップを実施し、または本明細書に記載され、または示されている機能を提供する。特定の実施形態は、1または複数のコンピュータ・システム500の1または複数の部分を含む。本明細書では、コンピュータ・システムに言及することは、適切な場合、コンピューティング・デバイスを包含してもよく、逆も同様である。さらに、コンピュータ・システムに言及することは、適切な場合、1または複数のコンピュータ・システムを包含してもよい。
【0036】
この開示は、任意の好適な数のコンピュータ・システム500を企図する。この開示は、任意の好適な物理形態をとるコンピュータ・システム500を企図する。限定するものとしてではなく一例として、コンピュータ・システム500は、組込みコンピュータ・システム、システム・オン・チップ(SOC)、シングルボード・コンピュータ・システム
(SBC)(たとえば、コンピュータ・オン・モジュール(COM)またはシステム・オン・モジュール(SOM)など)、デスクトップ・コンピュータ・システム、ラップトップもしくはノートブック・コンピュータ・システム、対話キオスク、メインフレーム、コンピュータ・システムのメッシュ、移動体電話、携帯情報端末(PDA)、サーバ、タブレット・コンピュータ・システム、またはこれらの2以上の組合せであってよい。適切な場合、コンピュータ・システム500は、1または複数のコンピュータ・システム500を含んでもよく、一元的なものであっても分散型であってもよく、複数のロケーションに跨ってもよく、複数のマシンに跨ってもよく、複数のデータ・センタに跨ってもよく、クラウド内にあってもよく、クラウドは、1または複数のネットワーク内で1または複数のクラウド・コンポーネントを含んでもよい。適切な場合、1または複数のコンピュータ・システム500は、実質的な空間的または時間的制限なしに、本明細書に記載され、または示されている1または複数の方法の1または複数のステップを実施してもよい。限定するものとしてではなく一例として、1つまたは複数のコンピュータ・システム500は、リアルタイムで、またはバッチ・モードで、本明細書に記載され、または示されている1または複数の方法の1または複数のステップを実施してもよい。1または複数のコンピュータ・システム500は、適切な場合、異なる時に、または異なるロケーションで、本明細書に記載され、または示されている1または複数の方法の1または複数のステップを実施してもよい。
【0037】
特定の実施形態では、コンピュータ・システム500は、プロセッサ502、メモリ504、ストレージ506、入力/出力(I/O)インターフェース508、通信インターフェース510、およびバス512を含む。この開示は、特定の数の特定の構成要素を特定の構成で有する特定のコンピュータ・システムについて記載し示しているが、この開示は、任意の好適な数の任意の好適な構成要素を任意の好適な構成で有する任意の好適なコンピュータ・システムを企図する。
【0038】
特定の実施形態では、プロセッサ502は、コンピュータ・プログラムを構成するものなど命令を実行するためのハードウェアを含む。限定するものとしてではなく一例として、命令を実行するために、プロセッサ502は、内部レジスタ、内部キャッシュ、メモリ504、またはストレージ506から命令を取り出し(またはフェッチし)、それらを復号および実行し、次いで、1または複数の結果を内部レジスタ、内部キャッシュ、メモリ504、またはストレージ506に書き込む。特定の実施形態では、プロセッサ502は、データ、命令、またはアドレス用に1または複数の内部キャッシュを含んでもよい。この開示は、適切な場合、任意の好適な数の任意の好適な内部キャッシュを含むプロセッサ502を企図する。限定するものとしてではなく一例として、プロセッサ502は、1または複数の命令キャッシュ、1または複数のデータ・キャッシュ、および1または複数の変換索引バッファ(TLB)を含んでもよい。命令キャッシュ内の命令は、メモリ504またはストレージ506内の命令のコピーであってもよく、命令キャッシュは、プロセッサ502によるこれらの命令の取り出しを高速化する。データ・キャッシュ内のデータは、プロセッサ502にて実行される命令が操作するための、メモリ504またはストレージ506内のデータのコピー、プロセッサ502で実行される後続の命令によるアクセスための、またはメモリ504もしくはストレージ506に書き込むための、プロセッサ502で実行された以前の命令の結果、あるいは他の好適なデータであってもよい。データ・キャッシュは、プロセッサ502による読出しまたは書込み動作を高速化する。TLBは、プロセッサ502のために仮想アドレス変換を高速化する。特定の実施形態では、プロセッサ502は、データ、命令、またはアドレス用に1または複数の内部レジスタを含む。この開示は、適切な場合、任意の好適な数の任意の好適な内部レジスタを含むプロセッサ502を企図する。適切な場合、プロセッサ502は、1または複数の算術論理演算ユニット(ALU)を含むことができ、マルチコア・プロセッサであってもよく、1または複数のプロセッサ502を含んでもよい。この開示は、特定のプロセッサについて記載
し示しているが、この開示は、任意の好適なプロセッサを企図する。
【0039】
特定の実施形態では、メモリ504は、プロセッサ502が実行するための命令、またはプロセッサ502が操作するためのデータを記憶するための主記憶装置を含む。限定するものとしてではなく一例として、コンピュータ・システム500は、ストレージ506または別のソース(たとえば、別のコンピュータ・システム500など)からメモリ504に命令をロードする。次いで、プロセッサ502は、メモリ504から内部レジスタまたは内部キャッシュに命令をロードする。命令を実行するために、プロセッサ502は、内部レジスタまたは内部キャッシュから命令を取り出し、それらを復号する。命令の実行中、または実行後、プロセッサ502は、1または複数の結果(中間結果であることも最終結果であることもある)を内部レジスタまたは内部キャッシュに書き込む。次いで、プロセッサ502は、それらの結果の1または複数をメモリ504に書き込む。特定の実施形態では、プロセッサ502は、1もしくは複数の内部レジスタもしくは内部キャッシュ内、または(ストレージ506もしくは他の場所ではなく)メモリ504内の命令だけを実行し、1もしくは複数の内部レジスタもしくは内部キャッシュ内、または(ストレージ806もしくは他の場所ではなく)メモリ504内のデータだけを操作する。1または複数のメモリ・バス(それぞれがアドレス・バスとデータ・バスを含むことがある)がプロセッサ502をメモリ504に結合してもよい。バス512は、下記に記載されているように、1または複数のメモリ・バスを含んでもよい。特定の実施形態では、1または複数のメモリ管理ユニット(MMU)が、プロセッサ502とメモリ504との間に存在し、プロセッサ502によって要求されるメモリ504へのアクセスを容易にする。特定の実施形態では、メモリ504は、ランダム・アクセス・メモリ(RAM)を含む。このRAMは、適切な場合、揮発性メモリであり得る。適切な場合、このRAMは、ダイナミックRAM(DRAM)またはスタティックRAM(SRAM)であってよい。さらに、適切な場合、このRAMは、シングルポート型またはマルチポート型RAMであってよい。この開示は、任意の好適なRAMを企図する。メモリ504は、適切な場合、1または複数のメモリ504を含んでもよい。この開示は、特定のメモリについて記載し示しているが、この開示は、任意の好適なメモリを企図する。
【0040】
特定の実施形態では、ストレージ506は、データまたは命令用のマス・ストレージを含む。限定するものとしてではなく一例として、ストレージ506は、ハード・ディスク・ドライブ(HDD)、フロッピー(登録商標)ディスク・ドライブ、フラッシュ・メモリ、光ディスク、光磁気ディスク、磁気テープ、もしくはユニバーサル・シリアル・バス(USB)ドライブ、またはこれらの2以上の組合せを含んでもよい。ストレージ506は、適切な場合、取外し式または非取外し式(または固定)媒体を含んでもよい。ストレージ506は、適切な場合、コンピュータ・システム500に対して内部であっても外部であってもよい。特定の実施形態では、ストレージ506は、不揮発性のソリッドステート・メモリである。特定の実施形態では、ストレージ506は、読出し専用メモリ(ROM)を含む。適切な場合、このROMは、マスクプログラムドROM、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、電気的書き換え可能ROM(EAROM)、もしくはフラッシュ・メモリ、またはこれらの2以上の組合せであってよい。この開示は、任意の好適な物理形態をとるマス・ストレージ506を企図する。ストレージ506は、適切な場合、プロセッサ502とストレージ506の間の通信を容易にする1または複数のストレージ制御ユニットを含んでもよい。適切な場合、ストレージ506は、1または複数のストレージ506を含んでもよい。この開示は、特定のストレージについて記載し示しているが、この開示は、任意の好適なストレージを企図する。
【0041】
特定の実施形態では、I/Oインターフェース508は、コンピュータ・システム500と1または複数のI/Oデバイスとの間の通信のために1または複数のインターフェー
スを提供するハードウェア、ソフトウェア、またはその両方を含む。コンピュータ・システム500は、適切な場合、これらのI/Oデバイスの1または複数を含んでもよい。これらのI/Oデバイスの1または複数は、人とコンピュータ・システム500の間の通信を可能にする。限定するものとしてではなく一例として、I/Oデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチル・カメラ、スタイラス、タブレット、タッチ・スクリーン、トラックボール、ビデオ・カメラ、別の好適なI/Oデバイス、またはこれらの2以上の組合せを含んでもよい。I/Oデバイスは、1または複数のセンサを含んでもよい。この開示は、任意の好適なI/Oデバイス、およびそれらのための任意の好適なI/Oインターフェース508を企図する。適切な場合、I/Oインターフェース508は、プロセッサ502がこれらのI/Oデバイスの1または複数を駆動することを可能にする1または複数のデバイスまたはソフトウェア・ドライバを含む。I/Oインターフェース508は、適切な場合、1または複数のI/Oインターフェース508を含んでもよい。この開示は、特定のI/Oインターフェースについて記載し示しているが、この開示は、任意の好適なI/Oインターフェースを企図する。
【0042】
特定の実施形態では、通信インターフェース510は、コンピュータ・システム500と1もしくは複数の他のコンピュータ・システム500または1もしくは複数のネットワークとの間の通信(たとえば、パケットベースの通信など)のために1または複数のインターフェースを提供するハードウェア、ソフトウェア、またはその両方を含む。限定するものとしてではなく一例として、通信インターフェース510は、ETHERNET(登録商標)もしくは他の有線ベースのネットワークとの通信のためのインターフェース・コントローラ(NIC)もしくはネットワーク・アダプタ、またはWI−FIネットワークなど無線ネットワークとの通信のための無線NIC(WNIC)もしくは無線アダプタを含んでもよい。この開示は、任意の好適なネットワーク、およびそのための任意の好適な通信インターフェース510を企図する。限定するものとしてではなく一例として、コンピュータ・システム500は、アドホック・ネットワーク、パーソナル・エリア・ネットワーク(PAN)、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、メトロポリタン・エリア・ネットワーク(MAN)、またはインターネットの1もしくは複数の部分、あるいはこれらの2以上の組合せと通信する。これらのネットワークの1または複数のうちの1または複数の部分は、有線であっても無線であってもよい。一例として、コンピュータ・システム500は、無線PAN(WPAN)(たとえば、BLUETOOTH(登録商標)WPANなど)、WI−FIネットワーク、WI−MAXネットワーク、携帯電話ネットワーク(たとえば、グローバル移動体通信システム(GSM(登録商標))ネットワークなど)、もしくは他の好適な無線ネットワーク、またはこれらの2以上の組合せと通信する。コンピュータ・システム500は、適切な場合、これらのネットワークのいずれかのための任意の好適な通信インターフェース510を含んでもよい。通信インターフェース510は、適切な場合、1または複数の通信インターフェース510を含んでもよい。この開示は、特定の通信インターフェースについて記載し示しているが、この開示は、任意の好適な通信インターフェースを企図する。
【0043】
特定の実施形態では、バス512は、コンピュータ・システム500の構成要素を互いに結合するハードウェア、ソフトウェア、またはその両方を含む。限定するものとしてではなく一例として、バス512は、アクセラレィティッド・グラフィックス・ポート(AGP)もしくは他のグラフィックス・バス、EISA(Enhanced Industry Standard Architecture)バス、フロントサイド・バス(FSB)、HT(HYPERTRANSPORT)相互接続、ISA(Industry Standard Architecture)バス、インフィニバンド相互接続、LPC(low−pin−count)バス、メモリ・バス、MCA(Micro Channel Architecture)バス、PCI(Peripheral Compo
nent Interconnect)バス、PCIエクスプレス(PCIe)バス、SATA(serial advanced technology attachment)バス、VLB(Video Electronics Standards Association local)バス、もしくは別の好適なバス、またはこれらの2以上の組合せを含んでもよい。バス512は、適切な場合、1または複数のバス512を含んでもよい。この開示は、特定のバスについて記載し示しているが、この開示は、任意の好適なバスまたは相互接続を企図する。
【0044】
本明細書では、1または複数の非一時的コンピュータ可読記憶媒体は、適切な場合、1または複数の半導体ベースの、もしくは他の集積回路(IC)(たとえば、フィールド・プログラマブル・ゲート・アレイ(FPGA)または特定用途向けIC(ASIC))、ハード・ディスク・ドライブ(HDD)、ハイブリッド・ハード・ドライブ(HHD)、光ディスク、光ディスク・ドライブ(ODD)、光磁気ディスク、光磁気ドライブ、フロッピー・ディスケット、フロッピー・ディスク・ドライブ(FDD)、磁気テープ、ソリッドステート・ドライブ(SSD)、RAMドライブ、セキュア・デジタル・カードもしくはセキュア・デジタル・ドライブ、任意の他の好適な非一時的コンピュータ可読記憶媒体、またはこれらの2以上の組合せを含んでもよい。非一時的コンピュータ可読記憶媒体は、適切な場合、揮発性、不揮発性、または揮発性と不揮発性の組合せであってよい。
【0045】
本明細書では、「または(もしくは)」は、別段明確に示されていない限り、または別段文脈によって示されない限り、包括的(inclusive)であり、排他的なものではない。したがって、本明細書では、「AまたはB」は、別段明確に示されていない限り、または別段文脈によって示されない限り、「A、B、またはその両方」を意味する。さらに、「および」は、別段明確に示されていない限り、または別段文脈によって示されない限り、共同であり、個別的でもある。したがって、本明細書では、「AおよびB」は、別段明確に示されていない限り、または別段文脈によって示されない限り、「AおよびBを共同で、または個別的に」意味する。
【0046】
この開示の範囲は、当業者であれば理解するであろう、本明細書に記載され、または示されている例示的な実施形態に対する変更、置換、変形、代替、および修正すべてを包含する。この開示の範囲は、本明細書に記載され、または示されている例示的な実施形態に限定されない。さらに、この開示は、それぞれの実施形態について、本明細書では、特定の構成要素、要素、機能、動作、またはステップを含むものとして記載し示しているが、これらの実施形態のいずれも、当業者であれば理解するであろう、本明細書のどこかに記載され、または示されている構成要素、要素、機能、動作、またはステップのいずれかの任意の組合せまたは並べ替えを含んでもよい。さらに、添付の特許請求の範囲において、特定の機能を実施するように適合された、するように配置された、することが可能な、するように構成された、することが可能である、するように動作可能である、またはするように動作する装置もしくはシステム、または装置もしくはシステムの構成要素に言及することは、その装置、システム、または構成要素がそのように適合され、配置され、動作可能であり、構成され、可能であり、動作可能であり、動作する限り、それ、またはその特定の機能が作動される、オンにされる、またはロック解除されるか否かにかかわらず、その装置、システム、構成要素を包含する。