(57)【要約】オブジェクトモデルと、ワールド（ｗｏｒｌｄ）という概念をサポートするｋｅｙ−ｖａｌｕｅデータモデルとの間の、マッピングを行うことにより、データアクセスを容易化する。オブジェクトモデルは、統合言語クエリをサポートするプログラミング言語で表現され得る。統合言語クエリを構成する１つ以上のクエリ演算子がｋｅｙ−ｖａｌｕｅワールドに関して指定され実行され得る。
2014500544.tif 000002
【特許請求の範囲】
【請求項１】
データのやりとりを容易にする方法であって、
以下の動作を実施するために、メモリに格納されたコンピューター実行可能な命令を実行するように構成された、少なくとも１つのものを使用し、
前記動作は、オブジェクトモデルと、１つ以上のワールドの概念をサポートするｋｅｙ−ｖａｌｕｅデータモデルとの間のデータのマッピングすること、
を含むことを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、前記オブジェクトモデルに対して指定された少なくとも１つのクエリ演算子を、前記ｋｅｙ−ｖａｌｕｅデータモデルにマッピングすることをさらに含み、前記クエリ演算子は、前記ｋｅｙ−ｖａｌｕｅデータモデル及びあるワールドに対するデータの作成、読み出し、更新、削除のうち少なくとも１つを行うことを特徴とする方法。
【請求項３】
請求項２に記載の方法であって、少なくとも１つのｋｅｙ−ｖａｌｕｅワールドに対して指定された前記少なくとも１つのクエリ演算子をマッピングすることをさらに含むことを特徴とする方法。
【請求項４】
請求項３に記載の方法であって、前記少なくとも１つのｋｅｙ−ｖａｌｕｅワールドを個別のサブワールドに分割することを指定するクエリ演算子をマッピングすることをさらに含む
ことを特徴とする方法。
【請求項５】
請求項３に記載の方法であって、複数のｋｅｙ−ｖａｌｕｅペアのワールドを結合して単一のｋｅｙ−ｖａｌｕｅペアのワールドにすることを指定するクエリ演算子をマッピングすることをさらに含むことを特徴とする方法。
【請求項６】
請求項３に記載の方法であって、値によってｋｅｙ−ｖａｌｕｅのペアをワールド間で移動させることを指定するクエリ演算子をマッピングすることをさらに含むことを特徴とする方法。
【請求項７】
請求項３に記載の方法であって、プロキシによる参照により、ｋｅｙ−ｖａｌｕｅのペアをワールド間で移動させることを指定するクエリ演算子をマッピングすることをさらに含むことを特徴とする方法。
【請求項８】
データのやりとりを容易にするシステムであって、
メモリに結合されたプロセッサであって、前記メモリに格納されたコンピューター実行可能なコンポーネントを実行するように構成され、コンピューター実行可能なコンポーネントが、
ｋｅｙ−ｖａｌｕｅデータモデルをオブジェクトモデルにマッピングするように構成された第１のコンポーネントであって、前記オブジェクトモデルは、１つ以上のワールドに広がるｋｅｙ−ｖａｌｕｅデータストアに対する統合言語クエリの指定を可能とするプログラミング言語で表現される、前記第１のコンポーネントを含むことを特徴とするシステム。
【請求項９】
請求項８に記載のシステムであって、前記統合言語クエリは、ｋｅｙ−ｖａｌｕｅワールドに関連する機能を表現するクエリ演算子を含むことを特徴とするシステム。
【請求項１０】
請求項９に記載のシステムであって、ｋｅｙ−ｖａｌｕｅワールドに基づき、キーにより値がインデックスされることを特徴とするシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
データモデルは、どのようにデータが格納されアクセスされるかを示すものである。より形式的には、データモデルは、データエンティティ及びデータエンティティ間における関連を定義する。データモデルを利用する主な目的は、大量のデータの管理及び処理を容易に行うために、データの定義及び形式を提供することにある。データモデルの一応用例として、データベース又はその他のストアがどのように構築され使用されるかを定義したデータベースモデルがある。データベースモデルには、リレーショナル又はノンリレーショナルがある。
【０００２】
リレーショナルモデル、又は、より具体的には、リレーショナルデータベースにおいて、データは、１つ以上のテーブルの観点で構築される。テーブルは、複数の列及び行を備える関係であり、名前をつけられた列は、属性として参照され、そして列はある特定のエンティティインスタンスに関するデータを保存する。例えば、テーブルは、例えば本といったある特定のエンティティの情報を、タプルとも呼ばれる行、および列に保存し得る。列はエンティティの様々な属性、例えば、本についての、タイトル、著者、発行年等を特定する。行は、特定の本といったあるエンティティのインスタンスを保存する。言い換えれば、テーブルにおける各行は、特定の本の属性群を示す。または、テーブルは主キー及び外部キーを含み、１つ以上のテーブルを互いにリンクすることが可能である。
【０００３】
ノンリレーショナルなモデルの様々な実装において、ｋｅｙ−ｖａｌｕｅモデルは、最も良く用いられるモデルの１つである。ｋｅｙ−ｖａｌｕｅデータベース又はｋｅｙ−ｖａｌｕｅストアは、ユニークキーを１つ以上の値のセットにマッピングするシンプルなデータモデルを表す。より具体的には、ｋｅｙ−ｖａｌｕｅストアは、キーに基づいて格納された値の位置の特定を容易にするために、値及びインデックスを格納している。例えば、タイトル、著者、本の発行に関するデータを特定するキーを配置することができる。
【０００４】
リレーショナルデータベースは、しばしば、ＳＱＬデータベースとよばれ、一方、ノンリレーショナルデータベースは、ｎｏＳＱＬ又はストアとよばれる。ＳＱＬとは、Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅを表し、リレーショナルデータベースにおいて、クエリを投げたり、あるいはデータのやりとりをしたりする際に用いられる主な言語である。リレーショナルデータベースとあわせて、ＳＱＬが用いられる際には、データベースは、ＳＱＬベースのリレーショナルデータベースとよばれる。しかしながら、ＳＱＬベースのリレーショナルデータベースは、単に、ＳＱＬデータベースとよばれ、リレーショナルデータベースの同意語として使用されることが多い。ｎｏＳＱＬは、ＳＱＬベースのリレーショナルデータベースとは異なるデータベースを指すのに使用される言葉である。言い換えれば、ｎｏＳＱＬという言葉は、ノンリレーショナルデータベース又はデータストアの同意語として用いられるが、ｋｅｙ−ｖａｌｕｅストアに限定されるものではない。
【発明の概要】
【０００５】
以下に、開示された主題におけるいくつかの態様における基本的な理解を提供するために、簡略化された形式の要約を提供する。本要約は、本発明の全体的な概要を説明するものではない。本要約は、主要／必須の要素を特定すること、又は、請求項に係る主題の範囲を定めることを目的とするものではない。本要約は単に、下記に記載されるより詳細な説明に対する導入として、簡略化された形式で、本発明のいくつかのコンセプトを提示するに過ぎない。
【０００６】
簡潔に説明すると、本開示は、一般に、オブジェクトモデルと、ワールド（ｗｏｒｌｄ）という概念をサポートするｋｅｙ−ｖａｌｕｅデータモデルとの間をマッピングすることにより、データのやりとりを容易に行うことに関する。開示内容の態様に従えば、統合言語クエリ（ｌａｎｇｕａｇｅ−ｉｎｔｅｇｒａｔｅｄ  ｑｕｅｒｙ  （ＬＩＮＱ））インフラストラクチャを用いて、そのようなマッピングを提供することができる。より具体的には、クエリを備える１つ以上のクエリ演算子が、オブジェクトに対するやりとりを指定することができる。これらの演算子はｋｅｙ−ｖａｌｕｅデータストアにおけるやりとりにマッピングされることができ、返された結果は、オブジェクトに再びマッピングされる。さらには、クエリ演算子を、１つ以上のｋｅｙ−ｖａｌｕｅワールドに対して指定し、実行することができ、ここで、ワールドとは、値（ｖａｌｕｅ）の間の関係性に対する特定のコンテキストを表す。さらには、ワールドを分割したり、複数のワールドを結合したり、ワールド間でデータの移動を可能とする演算子を用いることもできる。また、さらには、一実施形態によると、リレーショナルモデルの数学的双対（例えば、ｃｏＳＱＬ）であるｋｅｙ−ｖａｌｕｅデータモデルに対してマッピングを行うことができる。
【０００７】
上記のもの及び関連する目的を達成するために、請求項に係る主題のある例示的な態様が以下の詳細な説明及び添付された図面との関連で説明されている。これらの態様は、本主題が実施され得る様々な方法を示し、これらは全て、請求項に係る主題の範囲に属するように意図されている。他の利点および新規な機能は、図面とともに以下の詳細な説明を参酌することにより明らかになる。
【図面の簡単な説明】
【０００８】
【図１】データインタラクションを容易にするシステムを説明するブロック図である。
【図２】データインタラクションを容易にするシステムの一実施形態のブロック図である。
【図３】２つの例示的なｋｅｙ−ｖａｌｕｅ  ワールドを例示する図である。
【図４】例示的なクエリ演算子のブロック図である。
【図５】分割及び結合演算子のグラフィカルな例を示す図である。
【図６Ａ】コピーによって実装されるマーシャル演算子を示すブロック図である。
【図６Ｂ】参照によって実装されるマーシャル演算子を例示するブロック図である。
【図７】例示的なリレーショナル表現を示す図である。
【図８】テーブル間のポインターを含む例示的なリレーショナル表現を示す図である。
【図９】例示的なノンリレーショナルｋｅｙ−ｖａｌｕｅ表現を示す図である。
【図１０】一般化されたｋｅｙ−ｖａｌｕｅ表現を示す図である。
【図１１】オブジェクトモデルとｋｅｙ−ｖａｌｕｅデータモデルとの間をマッピングする方法のフローチャート図である。
【図１２】データインタラクションを容易にする方法のフローチャート図である。
【図１３】最適化方法のフローチャート図である。
【図１４】本開示の態様に適した動作環境を示す概略図である。
【発明を実施するための形態】
【０００９】
下記における詳細な説明は、一般に、オブジェクトモデルと、ワールドの概念をサポートするｋｅｙ−ｖａｌｕｅデータモデルとの間をマッピングすることによりデータアクセスを容易にすることを対象としている。一実施形態においては、統合言語クエリ（ＬＩＮＱ）インフラストラクチャが、コンピュータープログラムとデータストア間のマッピングを実施するために用いられている。従って、データは、ノンリレーショナルのｎｏＳＱＬ又はｃｏＳＱＬデータモデルからも、リレーショナルＳＱＬデータモデルと同様の手法でアクセスされ得る。より具体的には、本明細書においてワールドとして参照される、特定のｋｅｙ−ｖａｌｕｅのコンテキストに関して、クエリ演算子を指定することができる。結果的に、ｋｅｙ−ｖａｌｕｅデータに関するやりとりは、ワールドベースとされる。さらに、ワールドは、分割及び／又は結合され、データは移動され、さもなければワールドにわたってアクセスされる。
【００１０】
本開示における様々な態様は、添付された図面を参照して説明され、図面において、同じ参照番号は類似又は対応する要素を示している。しかしながら、図面及び本明細書における詳細な説明は、請求項に係る主題を開示された特定の形態に限定するためのものではないことに留意すべきである。むしろ、請求項に係る主題の理念及び範囲内において、全ての改変、等価物、そして、代替を網羅するためのものである。
【００１１】
まず、図１を参照すると、データのやりとりを容易にするシステム１００が図示されており、ここで、データのやりとりとは、データを生成、読み出し（クエリ）、更新、そして、削除などを指す。システム１００は、オブジェクトモデル１２０、ｋｅｙ−ｖａｌｕｅデータモデル１３０（本明細書において定義されるように、オブジェクトモデル１２０及びｋｅｙ−ｖａｌｕｅデータモデル１３０はコンポーネントとすることができる）と連結されるマップコンポーネント１１０を含む。オブジェクトモデル１２０は、中でも、特定のコンピュータプログラミング言語のアプリケーションに関して使用されるときに、例えば、データを表現し、やりとりを行うのに、オブジェクト及びオブジェクトのプロパティを参照する。ｋｅｙ−ｖａｌｕｅデータモデル１３０は、データがどのように格納され、アクセスされるかを指定する。特に、ｋｅｙ−ｖａｌｕｅデータモデル１３０は、所与のキー、データ、又は特定の値が代わりに提供されるように、ユニークキーでインデックスされた値を格納する。さらに、ｋｅｙ−ｖａｌｕｅデータモデル１３０は、ワールドという概念をサポートする。マップコンポーネント１１０は、ｋｅｙ−ｖａｌｕｅデータモデル１３０と、オブジェクトモデル１２０との間をマッピングする、言い換えると、翻訳を提供するように構成される。限定ではなく例示であるが、ｋｅｙ−ｖａｌｕｅストアに対するデータの要求は、オブジェクトモデル表現で取得され、オブジェクトモデル表現から、ｋｅｙ−ｖａｌｕｅデータモデル表現にマッピング又は翻訳され得る。その後、いずれの結果として得られるデータも、ｋｅｙ−ｖａｌｕｅデータモデル表現からオブジェクトモデル表現に、マッピング又は翻訳され得る。より具体的には、アプリケーションデータを示すオブジェクトクラスを指定することができ、クエリなど、アプリケーションデータに対するやりとりを、そのオブジェクトクラスを介して指定することができる。このやりとりを、ｋｅｙ−ｖａｌｕｅストアにおけるローカル又はリモートの実行のために翻訳され、結果として得られるデータを、個々のオブジェクトの表現に戻すように翻訳することができる。このように、データアクセスは、モデル間、すなわち、オブジェクトモデル１２０とｋｅｙ−ｖａｌｕｅデータモデル１３０との間をブリッジするか又は経路を提供することにより容易化される。
【００１２】
図２は、データインタラクション２００を容易にするシステムの一実施形態を図示する。図示されているように、ＬＩＮＱコンポーネント２１０は、マップコンポーネント１１０の実施形態に対応することがあり、アプリケーションコンポーネント２２０は特定のオブジェクトモデル１２０のインスタンスであり、ｋｅｙ−ｖａｌｕｅストア２３０は図１におけるｋｅｙ−ｖａｌｕｅデータモデル１３０のインスタンスである。ＬＩＮＱコンポーネント２１０、すなわち統合言語クエリコンポーネントは、プログラム言語からのデータのやりとりを容易にすることに関する機能を提供する。より具体的に言えば、ＬＩＮＱコンポーネント２１０により、プログラミング言語（例えば、Ｃ＃（登録商標），Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）等）における「クエリ」の指定について、便利で宣言的な簡単な形式のクエリのクエリシンタックスを可能にし、ここで、クエリは、データの要求、又はデータを操作するかデータとやりとりする（例えば、更新、挿入、削除）命令に対応することができる。より具体的に言えば、ＬＩＮＱコンポーネント２１０は、メソッド及びラムダなどの下位レベル言語のコンストラクタ又はプリミティブにマッピングされるクエリ演算子２１２を提供する。クエリ演算子２１２は、様々なオペレーション（例えば、フィルタリング、プロジェクション、結合、グルーピング、順序づけ）のために提供され、これらに限定されないが、“ｗｈｅｒｅ”及び“ｓｅｌｅｃｔ”演算子を含むことができ、これらの演算子は、その名前によって表される演算子を実装するメソッドにマッピングされ得る。１つ以上のクエリ演算子２１２は、クエリの一部として、言い換えれば、クエリ表現として指定され得る。例えば、ユーザーは、クエリを“ｆｒｏｍ  ｎ  ｉｎ  ｎｕｍｂｅｒｓ  ｗｈｅｒｅ  ｎ＜１０  ｓｅｌｅｃｔ  ｎ”などの形式で指定することができ、ここで“ｎｕｍｂｅｒｓ”はデータソースであり、このクエリは、そのデータソースから１０未満の整数を返す。さらに、クエリ演算子２１２は、様々な態様で結合されて、任意の複合性を有するクエリを生成する。
【００１３】
アプリケーションコンポーネント２２０は、ｋｅｙ−ｖａｌｕｅストア２３０へのデータのやりとりを試みるコンピュータープログラムに対応し、例えば、そのコンピュータープログラムは、オブジェクトモデルを利用して、データの提示及びやりとりを行い、ｋｅｙ−ｖａｌｕｅストア２３０は、ｋｅｙ−ｖａｌｕｅモデルによるやりとりを許容する。より具体的に言えば、特にデータのやりとりをクエリとして表す、言い換えれば、クエリ表現で表すのに、１つ以上のクエリ演算子２１２を用いて、統合言語クエリを、アプリケーションコンポーネント２２０中で指定することができる。一実施形態においては、クエリ演算子２１２は、ｋｅｙ−ｖａｌｕｅストアに対して、ＳＱＬのようなクエリを表すことを可能にする。言い換えれば、リレーショナルデータベースにおける使用のために開発された親しみのあるクエリ言語シンタックスが、ｋｅｙ−ｖａｌｕｅストア２３０といったノンリレーショナルデータベースに対して利用可能となる。
【００１４】
ｋｅｙ−ｖａｌｕｅストア２３０は、ｋｅｙによってデータがインデックスされアクセス可能な、ｋｅｙ−ｖａｌｕｅモデルの特定のインスタンスに応答する。ｋｅｙ−ｖａｌｕｅストア２３０は、元来のリレーショナルデータベースシステムとは異なるｎｏＳＱＬデータベースシステムと呼ばれる一実装である。実際に、ｎｏＳＱＬに対する共通の解釈は、ノンリレーショナルであることである。その他の実施形態においては、ｋｅｙ−ｖａｌｕｅストア２３０は、ｃｏＳＱＬデータベースシステムの実装形態であってもよく、ここで、ｃｏＳＱＬは、ＳＱＬモデル又はリレーショナルモデルを双対化（ｄｕａｌｉｚｉｎｇ）させた結果として得られるデータモデルである。言い換えれば、ｃｏＳＱＬとは、以下でさらに説明されるように、数学的に双対なＳＱＬである。簡潔に言えば、ｃｏＳＱＬデータモデルは、ｃｏＳＱＬデータモデルを双対化した場合にＳＱＬデータモデルが返されるような、ｋｅｙ−ｖａｌｕｅデータモデルの真の形式のデータモデルである。これは、従来のｎｏＳＱＬデータモデルにはないものである。さらに、ｋｅｙ−ｖａｌｕｅストア２３０は、１つ以上のワールドを備えることができる。  
【００１５】
クエリ演算子２１２を、ワールドに対して指定して、実行することが可能である。ここで、ワールドとは、値同士又は値の集合体同士の関連性に関する特定のコンテキストを示す様相論理の概念（ｍｏｄａｌ  ｌｏｇｉｃ  ｃｏｎｃｅｐｔ）である。より形式的には、ワールドは、値間における推移閉包、又は、別の言い方をすれば、ワールドはルートから遷移して到達可能な値の集合体を表す。より具体的には、ｋｅｙ−ｖａｌｕｅストアにおいて、あるコンテキスト又はワールド中の関連するキーを探すことで値を得ることができる。ある意味においては、ワールドとは、アドレス空間に類似するものであり、一意に特定された識別子を利用してアドレスが明確にされる。
【００１６】
図３を参照すると、ワールド１  ３００とワールド２  ３１０と呼ばれる二つのワールドが図示されている。双方のワールドは共に、表形式で表されている複数のキーと値を含む。さらに、点線矢印で示されているように、参照される値は、単一のルート（例えば、キー０）から到達可能である。ここで示されているように、ワールド１  ３００は、“０”，“１”，及び“２”の３つのキーを有し、この３つのキーはそれぞれ、「｛Ｓ：１，Ｓ：２｝」、「ＨＥＬＬＯ」及び“４２”という値を有する。他の形式では、これらを、“（０，［０｜−＞｛Ｓ：１，Ｖ：２｝，１｜−＞“ＨＥＬＬＯ”，２｜−＞４２］）”として指定することができる。このようなｋｅｙ−ｖａｌｕｅ構造において演算子を定義するためには、ワールドの概念を明確にさせることが役に立つ。キーを解釈するために、どちらのワールドに値が存在するのか見分けることは、重要なことである。図示されているように、ワールド２  ３１０はコンテキスト中に“０”，“１”及び“２”の３つのキーを有し、それぞれは、“｛Ｓ：２，Ｓ：１｝”，“４２”，及び“ＨＥＬＬＯ”という値を参照する。別の書き方では、ワールドを“（０，［０｜−＞｛Ｓ：２，Ｖ：１｝，２｜−＞“ＨＥＬＬＯ”，１｜−＞４２］）“として指定することができる。ここで、ワールド１  ３００及びワールド２  ３１０のｋｅｙ−ｖａｌｕｅ構造は、同一構造であるが、値は異なる場所に置かれている。これは、プロセス毎に異なるオブジェクトグラフが存在するオペレーティングシステムにおける２つのプロセスに類似する。
【００１７】
図４は、ローカル又はリモートのｋｅｙ−ｖａｌｕｅストアに対するやりとりを容易にするために、指定及び実行される例示的なクエリ演算子２１２を図示する。一例示的な演算子は、１つ以上の値を指定して、特定のｋｅｙ−ｖａｌｕｅワールドから取得するセレクト（ｓｅｌｅｃｔ）演算子４１０である。このような演算子における正式なシグネチャは、“Ｍｗ＜Ｔ＞Ｓｅｌｅｃｔｗ＜Ｓ，Ｔ＞（Ｍｗ＜Ｓ＞ｓｒｃ，Ｆｕｎｃ＜Ｓ，Ｔ＞ｓｅｌｅｃｔｏｒ）,”であり、ここで、“Ｓｅｌｅｃｔ”は、“Ｍｗ＜Ｓ＞ｓｒｃ”という特定のワールドにおいてセレクタ関数“Ｆｕｎｃ＜Ｓ，Ｔ＞ｓｅｌｅｃｔｏｒ”を用いてｋｅｙ−ｖａｌｕｅペアのソースの集合体にわたって実施され、ワールド”ｗ”，”Ｍｗ＜Ｔ＞におけるｋｅｙ−ｖａｌｕｅペアの集合体を返す。セレクト演算子４１０は、より特定の形式のｓｅｌｅｃｔ、すなわち、“Ｍｗ＜Ｔ＞ＳｅｌｅｃｔＭａｎｙｗ＜Ｓ，Ｔ＞（Ｍｗ＜Ｔ＞ｓｒｃ，Ｆｕｎｃ＜Ｓ，Ｍｗ＜Ｔ＞＞ｓｅｌｅｃｔｏｒ），”といったシグネチャを持つ、“ＳｅｌｅｃｔＭａｎｙ”に対応することもあり、これは、ソースワールド“Ｍｗ＜Ｔ＞ｓｒｃ”から各要素を集合体に射影（ｐｒｏｊｅｃｔ）し、その結果を平坦化してワールド“Ｍｗ＜Ｔ＞”ワールドにおけるｋｅｙ−ｖａｌｕｅの単一の集合体とするものである。平坦化（ｆｌａｔｔｅｎ）演算子（具体的に明示していない）は、以下のシグネチャによって指定されるように、複数の集合体からある集合体を受け取り、単一の集合体を返す。“Ｍｗ＜Ｓ＞Ｆｌａｔｔｅｎｗ＜Ｓ＞（Ｍｗ＜Ｍｗ＜Ｓ＞＞ｓｒｃ．”
【００１８】
結合（ｃｏｍｂｉｎｅ）演算子４２０及び分割（ｓｐｌｉｔ）演算子４３０を含め、その他様々な演算子がワールドの操作を対象としている。結合演算子４２０は、２つのワールドからｋｅｙ−ｖａｌｕｅペアの集合体を取得して結合し、ｋｅｙ−ｖａｌｕｅペアの単一のワールドを生成する。このオペレーションにより、コンフリクトを避けるためにキーを再マッピングすることができ、形式的には、下記のシグネチャで指定できる。“Ｍｗ＋ｖ＜Ｓ＞Ｃｏｍｂｉｎｅｗ，ｖ＜Ｓ＞（Ｍｖ＜Ｓ＞ｌｅｆｔ，Ｍｖ＜Ｓ＞ｒｉｇｈｔ）．”反対に、分割演算子４３０は、単一のワールドのｋｅｙ−ｖａｌｕｅペアの集合体を取得して、２つの異なるワールドに分割する。分割演算子４３０は、リレーショナルコンテキストにおけるシャーディング（ｓｈａｒｄｉｎｇ）に対応し、以下のシグネチャを有する。“Ｍｗ＜Ｓ＞ｘＭｖ＜Ｓ＞Ｓｐｌｉｔ，ｗ＋ｖ＜Ｓ＞（Ｍｗ＋ｖ＜Ｓ＞ｓｒｃ）．”
【００１９】
さらに、集合体“Ｍｗ＜Ｓ＞”は、分割演算子４３０を繰り返し適用することにより、最大限に高密度の独立した集合体“Ｍｗ０＜Ｓ＞，．．．，Ｍｗｎ−１＜Ｓ＞”に分割され、これによりサブコレクションを並行して操作することが可能になる。分割は、親のワールドに対するインデックスの実施を前提とするよりはむしろ、分割又はワールドに対して独立にインデックスされることに留意されたい。
【００２０】
図５に移ると、分割オペレーション５００及び結合オペレーション５１０が図示されている。分割オペレーション５００をワールド１  ３００の集合体に適用すると、ワールドＡ  ５０２の集合体及びワールドＢ  ５０４の集合体を返す。図示されているように、ワールド１  ３００は、サブセット、より詳細にはサブワールドに分割され、ここで、サブセットは、１つのルートで到達可能である値のセットを含む。このケースにおいては、“０｜−＞｛Ｓ：２，Ｖ：１｝，２｜−＞“ＨＥＬＬＯ”，１｜−＞４２”は、“０｜−＞Ｓ：１，１｜−＞“ＨＥＬＬＯ””，と“０｜−＞Ｖ：２，１｜−＞４２”に分割される。サブセットはワールドによってインデックスされることに留意されたい。分割オペレーション５００は、ワールドＡ  ５０２及びワールドＢ  ５０４を結合してワールド１  ３００にする、結合オペレーション５１０を適用することにより、元に戻すことが出来る。そのオペレーションにおいては、キーは適切に再マッピングされる。
【００２１】
単一のワールドに関して、多数のクエリ演算子は指定され実行され得る。しかしながら、複数のワールドから値を取得したい状況も存在し得る。図４におけるマーシャル（Ｍａｒｓｈａｌ）演算子４４０を用いてそのような状況を解決することができる。マーシャル演算子４４０のシグネチャは、“Ｍｖ＜Ｓ＞Ｍａｒｓｈａｌ，ｗ＋ｖ＜Ｓ＞（Ｍｗ＜Ｓ＞ｓｒｃ），”であり、ワールド”ｗ“におけるｋｅｙ−ｖａｌｕｅペアの集合体中の、あるｋｅｙ−ｖａｌｕｅペアの値“Ｓ”はワールド”ｙ”においても利用可能にされる。そのような機能は、少なくとも２つの異なる方法、すなわち値又は参照（ｒｅｆｅｒｅｎｃｅ）によって実現可能である。
【００２２】
図６Ａは、マーシャル演算子４４０の一実装形態を示すブロック図である。ここで示されているように、２つのワールド、すなわち“ワールド“Ｘ６１０及び“ワールド“Ｙ６２０がある。例えば、値によりｋｅｙ−ｖａｌｕｅペアを参照する場合において、“ワールド“Ｘ６１０は値“Ａ”及び“Ｂ”を含み、一方、“ワールド“Ｙ６２０は最初に単に値“Ｃ”のみを含む。“ワールドＹ６２０における値“Ｂ”を利用したい場合、コピーオペレーション６３０が実施され、“ワールド“Ｘ６１０”の値を、“ワールド“Ｙ６２０にコピーする。これは、値によるマーシャリングに対応する。
【００２３】
図６Ｂは、マーシャル演算子４４０の代替的な実装形態を示すブロック図である。図６Ａにおける例と同様に、例えば、値がｋｅｙ−ｖａｌｕｅペアを参照する場合において、“ワールド“Ｘ６１０は“Ａ”及び“Ｂ”の値を含み、“ワールド“Ｙ６２０は最初に単に値“Ｃ”のみを含む。“ワールド“Ｙ６２０における値“Ｂ”を利用したい場合、プロキシ６４０を用いてワールドにまたがって値を参照する。ここでは、“Ｃ”がプロキシ６４０を参照して、プロキシ６４０が次に“ワールド“Ｘ６１０における値“Ｂ”を参照する。より具体的には、プロキシ６４０は、キーとワールドである値に対応することがあり、そのワールドから値を返す。例えば、プロキシ６４０は、値（１、ワールドＸ）に対応することがあり、ここで、１は値Ｂのキーであり、指定のワールドは、“ワールドＸ“６１０を意味する。このように、異なるワールドからの値の取得を容易にするために間接指定（インダイレクション）の付加的なレイヤーが追加される。この実施形態は、参照によるマーシャリングに対応するものである。
【００２４】
図２に戻ると、ＬＩＮＱコンポーネント２１０は、あるワールドに関して指定されている１つ以上のクエリ演算子２１２を含むクエリ表現を最適化する最適化コンポーネント２１４も含む。言い換えれば、最適化コンポーネント２１４は、クエリ表現を補強して、１つ以上のワールドに応じて実行を最適化するか、又は少なくとも改良する。制限目的ではなく例示目的として、ワールドを分割して複数のサブセット又はサブワールドにして、複数のワールドに対する並列の処理を促進することができる。同様に、複数のワールドを、値が複数のワールドからアクセスされる単一のワールドに結合することができ、さもなければ、データのやりとりにネガティブな影響を及ぼし得るかなりの量のマーシャリングを生ずる可能性がある。もちろん、ワールドに応じて様々な他の最適化の手法が用いられる。
【００２５】
ある特定の利用形態として、各クライアントに対して個別のハードウェアを用いる形態ではなく、ハードウェアの単一の部分が複数のクライアント又はテナントにサービスをする形態の、マルチテナント型が挙げられる。例えば、データベースプロバイダーが、データベース毎に対価を支払い、それぞれのデータベースが利用可能な５０ＧＢのストレージを有する状況について想定する。もし、データベースプロバイダーが、それぞれ５ＧＢのストレージを必要とする１０人のカスタマーを持つとすると、カスタマーは単一のデータベースを利用することができ、そしてプロバイダーは単一のデータベースを持てばよい。ここで、ｋｅｙ−ｖａｌｕｅワールドを用いてリソースのセグメント化を論じ、促進することができる。特に、データは物理的に同じデータベース又はストアに格納されるが、論理的には、データは、それぞれ異なるワールドに存在する。このように、上記のようなシナリオにおいて、クロスワールドのデータのやりとりは制限又は禁止され、異なるエンティティのデータに関するプライバシー及びセキュリティがもたらされる。
【００２６】
前述したとおり、そして、ある実施形態に従って、請求項に係る主題の態様は、従来のＳＱＬデータモデルの双対モデルである、ｃｏＳＱＬデータモデルに対して作用することができる。本明細書で使用されるとき、双対及び諸式の用語は、カテゴリ理論に関するように数学上の双対性を指し示すように意図されている。より具体的には、双対性とは、カテゴリＣのプロパティと反対のカテゴリ“Ｃｏｐ”の双対プロパティとの間の対応関係である。カテゴリＣについてのステートメントを考慮すると、各々の射（ｍｏｒｐｈｉｓｍ）（マッピング）のソースとターゲットを入れ替え、同様に構成物である２つの射の順番を入れ替えることによって、反対のカテゴリである“Ｃｏｐ”について、対応する双対のステートメントを取得することができる。例えば、カテゴリ“Ｃ”は、あるデータモデルに対応し、反対のカテゴリ“Ｃｏｐ”は、双対又は共同データ（ｃｏ−ｄａｔａ）モデルを示すことが出来る。例えば、“双対化すること”とは、あるデータモデルから双対を生成する行為を意味する。
【００２７】
以下は、リレーショナルデータモデルから双対を派生させること、又はｃｏＳＱＬデータモデルについてのハイレベルな議論である。ここで示されるように、結果は、ノンリレーショナルモデル又は具体的にはｋｅｙ−ｖａｌｕｅデータモデルとすることができる。
【００２８】
図７は、製品情報を格納する例示的なリレーショナル表現７００を図示するものである。ここで示されているように、主キーと外部キーによって相互にリンクされた３つのテーブルがある。製品テーブル７１０は、主キーのＩＤ７１２と、タイトル、著者、発行年、総ページ数といった製品情報についての他の列を提供する。評価テーブル７２０は、製品の評価情報、および、製品テーブル７１０の１つのレコードを参照する外部キー“ＰＲＯＤＵＣＴ  ＩＤ”７２２を提供する。同様に、キーワードテーブル７３０は、製品と関連付けられたキーワードを提供し、製品テーブル７１０の対応するレコードを参照する外部キー“ＰＲＯＤＵＣＴ  ＩＤ”７３２を含む。
【００２９】
図８を簡単に参照すると、図７におけるリレーショナル表現７００において、外部キーと主キーとの間に、ポインターが挿入されている。特に、ポインター８１０は、評価テーブル７２０の外部キー“ＰＲＯＤＵＣＴ  ＩＤ”７２２から、製品テーブル７１０の主キー“ＩＤ”７１２で識別される対応するレコードにポイントする。同様に、ポインター８２０は、キーワードテーブル７３０の外部キー“ＰＲＯＤＵＣＴ  ＩＤ”７３２から、製品テーブル７１０の主キー“ＩＤ”７１２で識別される対応するレコードにポイントする。
【００３０】
図９は、図７及び図８における例示的なリレーショナル表現に関して提供されるデータと同じデータの例示的なノンリレーショナルｋｅｙ−ｖａｌｕｅ表現９００を図示するものである。ここでは、９１０、９２０及び９３０などの行は、値に対するポインター、又は、スカラー値として示されるキーのいずれかを格納することができる。例えば、行９１０は、タイトル、著者、キーワード、評価、そして発行年および総ページ数のスカラー値についてのキーを有する。行９２０は、３つのキーワードにマッピングされた３つのキーを含み、行９３０は２つの評価表現にマッピングされた２つのキーを含む。
【００３１】
図１０を参照すると、例示的なノンリレーショナルｋｅｙ−ｖａｌｕｅ表現１０００が示されている。ここでは、行に、スカラーとキーのみの包含を許容する制限を緩和して、さまざまなタイプのデータを保持することを許容している。先の図９における行９１０に対応する行１０１０は、タイトル及び著者の値、及びキーワード１０２０と評価１０３０双方のキーの集合をそれぞれ含む。より具体的には、キー１０２０はキーワードにポイントし、キー１０３０は評価情報にポイントする。
【００３２】
図８の例示的なリレーショナル表現を、図１０の例示的なノンリレーショナル表現と比較してみる。明確にそれぞれを区別する特徴は、矢印が反対方向に伸びている点であることに留意されたい。より具体的には、リレーショナルの矢印は、外部キーの行から、対応するプライマリキーの行に伸びており、ノンリレーショナルの矢印は、行からデータが格納されている場所に伸びている。言い換えれば、リレーショナルコンテキストにおいては、子が親をポイントし、ノンリレーショナルコンテキストにおいては、親が子をポイントする。ここで示されているのは、ノンリレーショナルｋｅｙ−ｖａｌｕｅデータモデルは、リレーショナルの主−外部キーデータモデルの双対（ｄｕａｌ）であるということである。
【００３３】
上記のシステム、アーキテクチャ、環境などは、複数のコンポーネント間のやりとりに関して説明されている。このようなシステム及びコンポーネントは、本明細書において指定されたこれらのコンポーネント又はサブコンポーネント、指定されたコンポーネント又はサブコンポーネントの一部、及び／又は追加のコンポーネントを含み得ることを理解されたい。サブコンポーネントは、親のコンポーネント中に存在するというよりむしろ、他のコンポーネントと通信可能に結合されるコンポーネントとしても実装され得る。さらに、１つ以上のコンポーネント及び／又はサブコンポーネントは、組み合わされて１つのコンポーネントとなり、集合的な機能を提供し得る。システム、コンポーネント、及び／又はサブコンポーネントの間の通信は、ｐｕｓｈ及び／又はｐｕｌｌモデルのいずれに従って達成され得る。説明を簡潔にするため、本明細書では具体的に言及していないが、当技術分野の当業者には公知であるように、コンポーネントは、１つ以上の他のコンポーネントとやりとりをすることもできる。
【００３４】
さらに、上記に開示されたシステムや下記に開示される方法の様々な部分は、人口知能、機械学習、又は知識又はルールベースのコンポーネント、サブコンポーネント、プロセス、手段、方法論、メカニズム（例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク（Ｂａｙｅｓｉａｎ  ｂｅｌｉｅｆ  ｎｅｔｗｏｒｋｓ）、ファジィ理論、データフュージョンエンジン、分類子（ｃｌａｓｓｉｆｉｅｒｓ））等を含むか、又はこれらで構成されていてもよい。それらのコンポーネントにおいては特に、実行される或る特定のメカニズム又はプロセスを自動化し、これによりシステム及び方法の部分をより適用しやすくするとともに、より効率的そしてインテリジェントにすることが可能である。限定ではなく、例示であるが、最適化コンポーネント２１４は、そのようなメカニズムを用いて、クエリ表現の実行を効率化させる変更を決定又は推論し得る。
【００３５】
上記に開示された例示のシステムを参考にして、図１１から１３に記載されたフローチャートを参照することにより、開示された主題に従って実装される方法がより理解され得る。説明を簡潔にするために、方法は、一連のブロックとして開示及び説明されているが、請求項に係る主題は、ここで開示されているブロックの順番に限定されるものではなく、ここで開示及び説明されているブロックの処理は、異なる順番、及び／又は同時に発生することもあり得ることを理解されたい。さらに、図示された全てのブロックが、ここで説明されている実施形態を実現するために必要とされるわけではない。
【００３６】
図１１を参照すると、オブジェクトモデルとｋｅｙ−ｖａｌｕｅデータモデルとの間のマッピングを行う方法１１００が図示されている。参照番号１１１０において、オブジェクトモデルに関する命令が取得される。例えば、命令は、アプリケーションデータを表現するオブジェクトに関する、作成、読み出し、更新、削除等に関するものであってもよい。番号１１２０において、命令は、オブジェクトモデルにおけるオペレーションからローカル又はリモート接続におけるｋｅｙ−ｖａｌｕｅデータモデルにおけるオペレーションにマッピングされる。参照番号１１３０において、データは、マッピングされた命令の実行に応答して、ｋｅｙ−ｖａｌｕｅデータモデルから受信される。例えば、命令がデータに対するクエリ又は要求である場合において、その結果のデータを受信することができる。番号１１４０において、受信されたデータはオブジェクトモデルに再びマッピングしなおされる。このようにして、プログラマやその他の人々は、オブジェクトモデルに対してオペレーションを指定し、その背景でシーンのマッピングが行われ、特定のｋｅｙ−ｖａｌｕｅストアとのやりとりを容易にすることができる。さらには、１つ以上のワールドを命令が指定し、ｋｅｙ−ｖａｌｕｅモデルが、1つ以上のワールドをサポートすることができる。
【００３７】
図１２は、データインストラクションを容易にする方法１２００を図示している。参照番号１２１０において、ｋｅｙ−ｖａｌｕｅワールドに対して指定されたクエリ演算子が、例えば、クエリ表現の（例えば、クエリ表現を統合したプログラミング言語等）の一部として特定される。ここでは、ワールドは、値と値の間、又は値の集合体と値の集合体の間における関係についての特定のコンテキストを表す様相論理の概念を参照する。ある意味においては、ワールドは、一意に識別される修飾子を用いてアドレスを明確にするアドレス空間に類似する。番号１２２０において、ｋｅｙ−ｖａｌｕｅワールドに対してクエリ演算子の実行が開始される。参照番号１２３０において、クエリ演算子の実行に関連付けられた結果が返される。例えば、結果はプログラム言語のオブジェクトモデルにマッピングされて返される。
【００３８】
図１３は最適化の方法１３００を示すフローチャートである。参照番号１３１０において、コンテキスト情報を、１つ以上のｋｅｙ−ｖａｌｕｅワールド及びワールドにおけるデータのやりとりに関与する１つ以上のソースから受信し、取り出し、そうでなければ取得又は獲得することができる。参照番号１３２０において、１つ以上のｋｅｙ−ｖａｌｕｅワールドがコンテキスト情報に応じて変更される。例えば、コンテキスト情報は、ワールドが閾値サイズを超過しており、コンテンツへのアクセスを最適化するのに２つのワールドに分割され得ることを示す。他の例では、コンテキストが２つのワールド間でかなりの量のマーシャリングが生じていることを示す場合に、２つのワールドを結合して、単一のワールドにすることができる。もちろん、変更を、特に、想定される使用シナリオの予測を含むその他のコンテキスト情報から推測される情報に応じて開始することもできる。
【００３９】
本明細書で使用されているように、「コンポーネント」、「システム」等の用語や形式は、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または実行されるソフトウェアのいずれかの、コンピューターに関連するエンティティを指すように意図されている。例えば、限定して解釈されるべきではないが、コンポーネントは、プロセッサにおいて実行されるプロセス、プロセッサ、オブジェクト、インスタンス、実行ファイル、実行されるスレッド、プログラム、及び／又はコンピューターであってもよい。例示するならば、コンピューターで実行されるアプリケーション及びコンピューターの双方がコンポーネントであり得る。１つ以上のコンポーネントは、実行されるプロセス及び／又はスレッド中にあり、１つのコンポーネントを、１つのコンピューターに局所化してもよく、及び／又は２つ以上のコンピューターに分散させてもよい。
【００４０】
本明細書においては、実施例や事例、実例として提示されていることを示すように、「例示」という言葉や様々な形式の表現が使用されている。本明細書中において、「例示」として説明されている任意の態様又は設計について、他の態様又は設計に比して、必ずしも好ましく又は優位性を有するものとして解釈する必要はない。さらに、本明細書における実施例は、単に明確化や理解の一助となるために提示されているものであって、請求項に係る主題又はこの開示の関連する部分を制限又は限定するためのものではない。範囲が変更された無数の追加又は代替可能な実施例が提示され得るが、簡潔化のために省略されていることを理解されたい。
【００４１】
本明細書においては使用されるとき、「推論（ｉｎｆｅｒｅｎｃｅ）」、「推測する（ｉｎｆｅｒ）」という用語は、全般的に、イベント及び／又はデータを通じてキャプチャされる観測値のセットから、システム、環境、及び／又はユーザーの状態について推測又は推論する過程について言及するものである。推論を用いて特定のコンテキスト又はアクションを特定し、又は、例えば、状態における確率分布を生成することができる。推論は、確率的なもの、つまり、データ及びイベントの考察に基づき、関心事項の状態における確率分布の計算である。推論は、イベント及び／又はデータのセットから、ハイレベルイベントを構成するために用いられる技術を指すこともある。そのような推論により、イベントが時間的近接性において相関性があるかないか、ならびにイベント及びデータは、１つ又は複数のイベント及びデータソースから発生したかどうかにかかわらず、観測されたイベント及び／又は格納されたイベントデータのセットから、新しいイベント又はアクションの構築が生み出される。様々な分類のスキーム及び／又はシステム（例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク、ファジィ理論、データフュージョンエンジなど）を、請求項に係る主題に関する、自動及び／又は推論されたアクションを実施することに関して用いることができる。
【００４２】
さらに、本明細書においては、「含む（ｉｎｃｌｕｄｅｓ）」、「含む（ｃｏｎｔａｉｎｓ）」、「持つ（ｈａｓ）」、「持っている（ｈａｖｉｎｇ）」の用語またはその変形が詳細な説明又は請求項のいずれかにおいて使用されているが、「備える（ｃｏｍｐｒｉｓｉｎｇ）」という用語が、請求項において変形語として用いられるときに解釈されるように、それらの用語は、「備える（ｃｏｍｐｒｉｓｉｎｇ）」という用語と同様に包括的なものとしていとされている。
【００４３】
請求項に係る主題のコンテキストを提供するために、図１４と以下の説明は、本主題における様々な態様が実施され得る適切な環境についての簡潔かつ一般的な説明を提供するように意図される。適切な環境は、しかしながら、単に例示であり、本発明の利用又は機能の範囲に関するいかなる限定をも提示するものではない。
【００４４】
上記で開示されたシステム及び方法は、１つ以上のコンピューターで実行されるプログラムのコンピューター実行可能な命令の一般的なコンテキストで説明されているが、当業者であれば諸態様をその他のプログラムモジュールなどとの組み合わせで又は同等の方法で実装できることは理解され得るであろう。一般的に、プログラムモジュールはルーチン、プログラム、コンポーネント、データ構造、特定のタスクを実施するその他のもの及び／又は特定の抽象データタイプを実装するその他のものを含む。さらに、当業者であれば、上記のシステム及び方法は、例えば、シングルプロセッサー、マルチプロセッサー、又はマルチコアプロセッサーのコンピューターシステム、ミニコンピューティングデバイス、メインフレームコンピューター、ならびにパーソナルコンピューター、ハンドヘルドコンピューティングデバイス（例えば、ＰＤＡ、電話、時計等）、マイクロプロセッサベース又はプログラマブル家庭用又は業務用電子機器などを含む、様々なコンピューターシステム構成において実施されることが理解されよう。同様に、諸実施形態を、通信ネットワークを通じて接続されたリモートの処理装置によってタスクが実行される、分散コンピューティング環境においても実施することができる。たとえ、請求項に係る主題の全ての態様をスタンドアロンのコンピューターで実施できなかったとしても、その一部は実施することができる。分散コンピューティング環境においては、プログラムモジュールを、ローカル及びリモートのメモリストレージデバイスのいずれか１つまたは双方に置くことができる。
【００４５】
図１４を参照すると、図示されているのは、例示の汎用コンピューター１４１０又はコンピューターデバイス（例えば、デスクトップ、ラップトップ、サーバー、ハンドヘルド、プログラマブル家庭用又は業務用電子機器、セットトップボックス、ゲームシステム等）である。コンピューター１４１０は、１つ以上のプロセッサ１４２０、メモリ１４３０、システムバス１４４０、大容量ストレージ１４５０、そして１つ以上のインターフェースコンポーネント１４７０を含む。システムバス１４４０は、少なくとも上記のシステムコンポーネントを通信可能に連結する。しかしながら、この最も簡略化された形態において、コンピューター１４１０は、さまざまなコンピューター実行可能な動作、命令、及び又はメモリ１４３０に格納されたコンポーネントを実行する、１つ以上のメモリ１４３０と接続されたプロセッサ１４２０を含むことができる。
【００４６】
プロセッサ１４２０は、汎用プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）又はその他のプログラマブルな論理デバイス、個別のゲート又はトランジスタ論理回路、個別のハードウェアコンポーネント、あるいは本明細書で開示されている機能を実行するように設計されたものの任意の組み合わせで実装され得る。汎用プロセッサは、マイクロプロセッサであってもよく、あるいはまた、任意のプロセッサ、コントローラー、マイクロコントローラー、又は状態マシン（ｓｔａｔｅ  ｍａｃｈｉｎｅ）であってもよい。プロセッサ１４２０は、また、コンピューティングデバイスの組み合わせ、例えば、ＤＳＰとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、マルチコアプロセッサ１４２０、１つ以上のマイクロプロセッサとＤＳＰコア等からなる組み合わせ、また、その他の構成として実装されていてもよい。
【００４７】
コンピューター１４１０は、様々なコンピューター読取可能媒体を含み、又はやりとりをして、請求項に係る主題の１つ以上の態様を実施するようにコンピューター１４１０の制御を容易にすることができる。コンピューター読取可能媒体は、コンピューター１４１０がアクセスすることができる任意の利用可能な媒体とすることができ、揮発性及び不揮発性媒体、取り外し可能及び取り外し不能媒体を含む。限定ではなく例示であるが、コンピューター読取可能媒体は、コンピューター記憶媒体や通信媒体を備えていてもよい。
【００４８】
コンピューター記憶媒体は、コンピューター読取可能命令、データ構造、プログラムモジュール、又はその他のデータ等の情報を記憶するための手段又は技術で実装される、揮発性及び不揮発性、取り外し可能及び取り外し不能媒体を含む。コンピューター記憶媒体は、限定ではないが、メモリデバイス（例えば、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、ＥＥＰＲＯＭ等）、磁気記憶装置（例えば、ハードディスク、フロッピー（登録商標）ディスク、カセット、テープ等）、光学ディスク（例えば、コンパクトディスク（ＣＤ）、ＤＶＤ等）そして、半導体装置（例えば、半導体ドライブ（ＳＳＤ）、フラッシュメモリドライブ（例えば、カード、スティック、キードライブ等））又はコンピューター１４１０からアクセス可能であり、所望の情報の格納に使用することができる任意の他の媒体を含む。
【００４９】
通信用媒体は、典型的に、コンピューター読取可能な命令、データ構造、プログラムモジュール、又は搬送波やその他伝達メカニズムなどの変調されたデータ信号で他のデータを保持し、任意の情報伝送媒体を含む。「変調されたデータ信号」という言葉は、信号中の情報のエンコードに関する手法等によって設定又は変更された特徴の１つまたは複数を有する信号を意味する。限定ではなく例示であるが、通信用媒体は、有線ネットワーク又は直接有線接続等の有線媒体と、音響、ＲＦ、赤外線および等その他の無線媒体などの無線媒体を含む。上記の任意の組み合わせも、コンピューター読取可能媒体の範囲に含まれる。
【００５０】
メモリ１４３０及び大容量ストレージ１４５０は、コンピューター読取可能媒体の例である。特定の構成及びコンピューターデバイスの種類に応じて、メモリ１４３０は、揮発性（例えばＲＡＭ）、不揮発性（例えばＲＯＭ、フラッシュメモリ）又はそれらの組み合わせとすることができる。例として、コンピューターの起動中等にコンピューター１４１０中の各要素間において情報を転送する基本ルーチンを含む基本入出力システム（ＢＩＯＳ）は、不揮発性メモリに格納され、一方、揮発性メモリは、特にプロセッサ１４２０による処理を容易にするために外部キャッシュメモリとして機能し得る。
【００５１】
大容量ストレージ１４５０は、メモリ１４３０に関連した大量のデータの格納のために、取り外し可能／取り外し不能、揮発性／不揮発性のコンピューター記憶媒体を含む。例えば、大容量ストレージ１４５０は、限定ではないが、１つ以上の装置、例えば磁気又は光学ディスクドライブ、フロッピーディスクドライブ、フラッシュメモリ、半導体ドライブ、またはメモリスティック等を含む。
【００５２】
メモリ１４３０及び大容量ストレージ１４５０は、オペレーティングシステム１４６０、１つ以上のアプリケーション１４６２、１つ以上のプログラムモジュール１４６４、そしてデータ１４６６を含むか、または格納し得る。オペレーティングシステム１４６０は、コンピューター１４１０のリソースを制御し割り当てるように動作する。アプリケーション１４６２は、システム及びアプリケーションソフトウェアの一方又は双方を含み、メモリ１４３０及び／又は大容量ストレージ１４５０に格納されたプログラムモジュール１４６４及びデータ１４６６を通じて、オペレーティングシステム１４６０によるリソース管理を利用して、１つ以上のアクションを実施することができる。したがって、アプリケーション１４６２は、それにより提供されるロジックに従って、汎用コンピューター１４１０を、特別なコンピューターに変化させることができる。
【００５３】
請求項に係る主題の全て又は一部を、標準的なプログラミング及び／又はエンジニアリング技術を使用して、開示された機能を実現するようにコンピューターを制御するようにソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを構成することにより実装することができる。限定ではなく例示であるが、マップコンポーネント１１０及びＬＩＮＱコンポーネント２１０は、アプリケーショ１４６２の一部又は全てとすることができ、メモリ及び／又は大容量ストレージ１４５０に格納され、１つ以上のプロセッサ１４２０によって実行されるときにその機能が発揮される、１つ以上のモジュール１４６４及びデータ１４６６を含むことができる。
【００５４】
ある特定の実施形態によれば、プロセッサ１４２０は、単一の集積回路の基板上にハードウェアとソフトウェアの双方を含む、言い換えれば統合した、システムオンチップ（ＳＯＣ）又は類似のアーキテクチャに対応し得る。ここでは、プロセッサ１４２０は、少なくともプロセッサ１４２０及びメモリ１４３０に類似するような１つ以上のプロセッサ及びメモリを含むことができる。一般的なプロセッサは、最小限のハードウェア及びソフトウェアを有し、外部のハードウェア及びソフトウェアの動作に大幅に依存する。一方、ＳＯＣ実装のプロセッサは、よりパワフルであり、外部のハードウェア及びソフトウェアに最小限の依存で又は依存することなく特定の機能を実施し得るハードウェアおよびソフトウェアを組み込む。例えば、マップコンポーネント１１０、ＬＩＮＱコンポーネント２１０及び／又は関連する機能を、ＳＯＣアーキテクチャのハードウェア内に組み込むことができる。
【００５５】
コンピューター１４１０はまた、システムバス１４４０に通信可能に接続されコンピューターとのやりとりを容易にする１つ以上のインターフェースコンポーネント１４７０も含む。例示であるが、インターフェースコンポーネント１４７０は、ポート（例えば、シリアル、パラレル、ＰＣＭＣＩＡ、ＵＳＢ、ファイヤーワイヤー等）やインターフェースカード（例えば、サウンド、ビデオ等）等であってもよい。ある例示的な実装として、インターフェースコンポーネント１４７０は、ユーザーがコマンドや情報をコンピューターに１つ以上の入力装置（例えば、マウス等のポインティングデバイス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナ、カメラ、その他等）を介して入力するのを可能にするユーザー入力／出力インターフェースとして構成されていてもよい。その他の例示的な実装として、インターフェースコンポーネント１４７０は、出力をディスプレイ（例えば、ＣＲＴ、ＬＣＤ、プラズマ等）、スピーカー、プリンター、及び／又はその他のコンポーネントに対して供給するための出力周辺インターフェースとして構成されていてもよい。さらに、インターフェースコンポーネント１４７０は、（図示されていない）その他のコンピューターデバイスとの有線又は無線通信リンクを介した通信を可能とする、ネットワークインターフェースとして構成されていてもよい。
【００５６】
説明された内容は、請求項に係る主題の諸態様の例示を含む。当然、請求項に係る主愛について説明するために、コンポーネント又は方法についてのすべての想定し得る組み合わせを開示することは不可能であるが、当業者であれば、開示された主題のさらなる組み合わせや順序変えが可能であることを認識し得る。したがって、開示された主題は、添付された特許請求の範囲の思想及び範囲内にある、全てのそのような代替、変更、バリエーションが包含されることが意図されている。
【図１】
2014500544.tif 000003
【図２】
2014500544.tif 000004
【図３】
2014500544.tif 000005
【図４】
2014500544.tif 000006
【図５】
2014500544.tif 000007
【図６Ａ】
2014500544.tif 000008
【図６Ｂ】
2014500544.tif 000009
【図７】
2014500544.tif 000010
【図８】
2014500544.tif 000011
【図９】
2014500544.tif 000012
【図１０】
2014500544.tif 000013
【図１１】
2014500544.tif 000014
【図１２】
2014500544.tif 000015
【図１３】
2014500544.tif 000016
【図１４】
2014500544.tif 000017
【国際調査報告】
2014500544.tif 000018
2014500544.tif 000019