JP5118059B2 - 検索可能なデータサービスのための方法及び装置 - Google Patents

検索可能なデータサービスのための方法及び装置 Download PDF

Info

Publication number
JP5118059B2
JP5118059B2 JP2008548794A JP2008548794A JP5118059B2 JP 5118059 B2 JP5118059 B2 JP 5118059B2 JP 2008548794 A JP2008548794 A JP 2008548794A JP 2008548794 A JP2008548794 A JP 2008548794A JP 5118059 B2 JP5118059 B2 JP 5118059B2
Authority
JP
Japan
Prior art keywords
query
searchable
node
storage
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008548794A
Other languages
English (en)
Other versions
JP2009522660A5 (ja
JP2009522660A (ja
Inventor
ランシル,パトリック・ダブリュ
マルトゥイノフ,アレクセイ・ブイ
ラーソン,ジェイムズ・エス
コレット,ジェイムズ・アール
シュ,ロバート・ワイ−チ
サハ,パーサ
Original Assignee
アマゾン・テクノロジーズ・インコーポレーテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アマゾン・テクノロジーズ・インコーポレーテッド filed Critical アマゾン・テクノロジーズ・インコーポレーテッド
Publication of JP2009522660A publication Critical patent/JP2009522660A/ja
Publication of JP2009522660A5 publication Critical patent/JP2009522660A5/ja
Application granted granted Critical
Publication of JP5118059B2 publication Critical patent/JP5118059B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Description

本発明はデータストレージ及び取り出し、さらに具体的には、データストアのための検索可能なインデックスに関する。
単に「ネット」と呼ばれることもあるインターネットは、いかなる1台のコンピュータを使用するクライアントが、許可を受け、その他のいかなるコンピュータから情報を獲得することができるコンピュータネットワークの世界的システムである。インターネットの中で最も広く一般的に使用されているのは、多くの場合「WWW」と略され、「ウェブ」と一般的に称される、ワールドワイドウェブである。ウェブとは、リソースにアクセスするために、ハイパーテキスト転送プロトコル(HTTP)、又はそのバリエーションを使用するインターネット上のすべてのリソース(例、ウェブページ及びウェブサイト)及びクライアントと定義される。ウェブサイトは、ホームページと呼ばれる開始ファイルを含むウェブファイルの関連集合体である。ホームページから、クライアントはウェブサイト上の別のウェブページへ移動することができる。ウェブサーバプログラムとは、クライアント/サーバモデル及びHTTPを使用して、ウェブサイトのウェブページを形成するファイルを、要求の転送、応答の表示を行うHTTPクライアントプログラム(例、ウェブブラウザ)を搭載するコンピュータを有するウェブクライアントに送信するプログラムである。ウェブサーバプログラムは、1つ以上のウェブサイトを所有する。
データストレージ
種々のアプリケーションによりアクセスするための様々なタイプのデータオブジェクトを保存するデータストレージは、コンピュータシステムとアプリケーション、ネットワーキング、インターネット、及び関連技術分野において、最も関心が高く、優先的に開発される分野である。従来、開発者は、データ保存ソリューションを開発するために、データオブジェクトを保存するための独自のデータストレージソリューションを作製するか、Oracle/MySQLデータベースなど既製のデータベース製品を調達するか、又は、データストレージソリューションを提供する第三者のプロバイダーに依存してきた。しかし、データストレージソリューションが提供されると、データオブジェクトをデータストアに保存し、また取り出すことができる。典型的に、データ保存ソリューションは、データストアからデータオブジェクトを取り出すために使用できる1種以上のロケータを提供する。一般的な「ロケータ」は、クライアントが、ファイルパスで特定されるデータストアと併せて、一部のロケーションから特定のデータオブジェクト(例、ファイル)を取り出すために、特定のファイル名を含むファイルパスを提供する、ファイルパスタイプのロケータである。しかしながら、ファイルパスは、所望のデータオブジェクトがパス/ファイル名のみでしか特定できないため、あまり柔軟性がない。ファイルパス機構、及びデータストアからデータオブジェクトを取り出すその他の従来の「ロケータ」機構は、一般的に、所望のデータオブジェクトの属性に従い、データストアからデータオブジェクトを取り出すための柔軟性を提供しない。例えば、クライアントは、カテゴリ、会社、種類、又はデータオブジェクトに関連するその他の無数の属性のいずれかに基づき、データストアからデータオブジェクを取り出すことを希望する場合もある。従来のファイルパスは、そのような柔軟な取り出し方法を提供しない。
ファイルパス/ファイル名以外のその他の属性に従い、データストアからデータオブジェクトをクエリし/取り出す、より柔軟な機構を提供することができる「1回限りの」データ保存ソリューションがある。従来より、様々な開発者は、他の問題に応用できず、その他のデータ保存ニーズに対処する柔軟性を持たない方法で、同一のデータストレージ問題を異なるアプリケーションで繰り返し解決しようとする傾向があり、及び/又は短期並びに/若しくは長期的に高価であると証明されたOracle/MySQLなどの「既製」技術によるソリューションに基いてきた。データストアが増大すると、これらの従来のデータ保存ソリューションは一般的に、モニタリング、分割、クエリ最適化、保存処理、新たなハードウェアの追加、危機/緊急処理(例、保存システムが故障した場合)などを実施又は管理するデータストアアドミニストレータを必要とする。さらに、これらの従来のデータストレージソリューションに対して、クライアントが、クエリ及びデータオブジェクトの取り出しに使用される可能性のある、さらなる属性を追加したい場合、当該の新しい属性をサポートするために、テーブルスキーマを変更する必要がある。
汎用の検索可能なデータサービスのための方法及び装置の種々の実施態様を説明する。一実施態様において、検索可能なデータサービスを、データストアに保存されるデータオブジェクト(エンティティ)に関連し、{名前、値}の1組として明示される属性の保存を可能にするウェブサービスとして実装することができる。エンティティに関連する属性は、検索で使用される場合に、自動的にインデックスが付けられる。検索可能なデータサービスの実施態様は、クライアントアプリケーションのためのデータストアに対するフロントエンド検索を開発し、信頼性があり迅速かつ拡張可能なデータストアに検索可能なインデックスを作成し更新するために、開発者にアクセス可能なアーキテクチャに従って実装することができる。検索可能なデータサービスの実装は、クライアント/開発者に透過的であってもよい。クライアント及び/又は開発者は、検索可能なデータサービスに対し、最少かつ外部に公開されるインターフェースのみを認識すればよい。
検索可能なデータサービスの実施態様は、検索可能なインデックスをバックエンドデータストアに、検索可能なインデックスを構築及びクエリするためにインターフェースを提供することで、クライアントアプリケーションが、各ロケータに関連する属性リストに従い、バックエンドデータストアの保存されたエンティティのロケータを検索し及び取り出せるようにする。エンティティは、エンティティのロケータにより、検索可能なデータサービスの検索可能なインデックスに指定される。各ロケータは、{名前、値}の1組で明示されるエンティティの関連属性群を有してもよい。ロケータ自体が、エンティティの属性の1つと考えられることができると考慮する。
検索可能なデータサービスの一実施態様は、検索データサービスの機能への1つ以上のコールをクライアントアプリケーションに接するウェブサービスインターフェースを伴うウェブサービスとして実装することができる。ウェブサービスインターフェースにより、開発者は、ウェブサービスインターフェースを介して、バックエンドデータストアに保存されているデータエンティティのロケータを検索し、取り出すために、検索可能なデータサービスの機能にアクセスする多様なクライアントアプリケーションの検索フロントエンドを構築することができる。データストアの検索フロントエンドとして検索可能なデータサービスを調達するアプリケーションは、スケーリングに必要なシステムアドミニストレーションオーバーヘッド有り又は無しで、いかなるサイズにも自動的に調製されてもよく、検索速度は、例えばインデックス、クエリプラン、及び並行処理を使用し、自動的に最適化される。
検索可能なデータサービスは、検索可能なインデックスを提供するが、それ自体がデータストアではない。検索可能なデータサービスの実施態様は、データの検索及びインデックスと実際のデータストレージとを分ける。バックエンドデータストアは、ロケータがエンティティを捜し、取り出すために使用される、データ保存システムの任意の種類として実装され、ネットワーク、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)のどこにでも、又はインターネット上に存在することができ、又はコンピュータシステム又はシステムにローカルに接続されるデータ保存上に実装されることもできる。検索可能なデータサービスの実施態様は、検索可能なインデックスをいかなる種類のデータにも提供する。例えば、実施態様は、データベースに保存されているデータ、及びテキスト、デジタル画像、及びデジタルオーディオファイルを含むがこれらに限定されない多様で特別又は混合された種類のファイル収納庫に、検索可能なインデックスを提供するために使用することができる。しかしながら、検索可能なインデックスの実施態様は、バックエンドデータストアが存在しないアプリケーションで使用されることを考慮する。これらのアプリケーションにおいて、検索可能なインデックスに、{名前、値}の1組として保存されている属性はデータである。
検索可能なデータサービスの実施態様は、検索可能なデータサービスのスケールを容易にし、クライアントアプリケーションの開発者によるいかなる知識又はさらなる労力を必要とすることなく、検索可能なインデックスの冗長性、信頼性、及び高い可用性を提供することを可能にする機構を含む。これらの機構は、検索可能なインデックスを構築する機構、検索可能なインデックスを区分する機構、検索可能なインデックスを複製する機構、検索可能なデータサービス内のノードの失敗を対処する機構、及び検索可能なデータサービス内のノードの自動モニタリング及びコントロールを司る機構を含むが、これらに限定されない。
検索可能なデータサービスの実施態様は、複数のホスト、又はノード上の分散型システムとして実装することができる。一実施態様において、ノードは、検索可能なデータサービス内の適切なノードへ、クライアントシステムからの要求を送るコーディネータノード、クエリ要求の処理をするクエリノード、及び検索可能なインデックスの保存及び管理をするストレージノードを含む。一実施態様において、検索可能なデータサービス実装のノード及びコンポーネント間の通信は、ゴシッププロトコル及びアンチエントロピープロトコルを少なくとも部分的に通じて実施することができる。
本発明は一部の実施形態及び例示的図面によって一例として示され、本明細書に詳述されるが、本発明は記載される実施形態又は図面に限定されないことを当業者は認識するであろう。この図面及び詳細な説明は、本発明を開示される特定の形態に制限することを意図せず、逆に、添付の請求項によって定義される本発明の精神及び範囲内に含まれるすべての修正、同等物、及び代替手段を扱うと理解されたい。本明細書で使用される表題は、組織目的に限り、説明又は請求項の範囲を限定するために意図されるわけではない。本願で使用される「してもよい」という語は、強制的な意味ではなく、許容的な意味(すなわち、可能性を有するという意味)で使用される。同様に、「含む」という語は、限定することなく含むという意味である。
汎用検索可能なデータサービスのための方法及び装置の種々の実施形態を説明する。一実施形態において、開発者が、検索可能なデータサービスをデータストアに保存されるデータオブジェクト(エンティティ)に関連し、{名前、値}の1組として明示される属性を保存することを可能にするウェブサービスとして実装することができる。エンティティに関連する属性は、検索で使用される場合に、自動的にインデックスが付けられる。検索式は、属性に論理及び算術演算子を実施し、エンティティを識別するロケータにより(識別子、又はeIDとも称される)識別される、データオブジェクト、又はエンティティの検索し、取り出しを実施する。検索可能なデータサービスの実施形態は、クライアントアプリケーションの検索フロントエンドの実装が容易であるデータストアに提供し、信頼性があり迅速かつ拡張可能なデータストアに検索可能なインデックスを作成及び更新するために、ウェブサービスを介して開発者にアクセス可能なアーキテクチャに従って実装することができる。
検索可能なデータサービスの実施形態は、検索可能なインデックスをバックエンドデータストアに、検索可能なインデックスを構築しクエリするためにインターフェースを提供することで、クライアントアプリケーションが、各ロケータに関連する属性リストに従い、バックエンドデータストアに保存された保存データ(データストアのデータ単位、又はデータオブジェクトは、本明細書においてエンティティと称する場合がある)のロケータを検索し、取り出せるようにする。バックエンドデータストアは、ロケータがエンティティを捜す及び取り出すために使用される、データストレージシステムの任意の種類として実装されてもよく、データオブジェクト(エンティティ)の任意の種類を保存することができる。エンティティは、識別子、又はeIDと称される、データストアのエンティティのロケータにより、エンティティは、検索可能なデータサービスに記載される。各ロケータは、{名前、値}の1組で明示されるエンティティの関連属性群を有してもよい。ロケータ、又はeID自体が、データストアのエンティティの属性の1つと考えられることができると考慮する。eIDに関連する1つ以上の属性に従い、検索可能なデータサービスからeIDのリストを問い合わせる、及び受け取るために使用される、クエリインターフェース及びプロトコルを提供してもよい。
従来のウェブモデルにより、クライアントは、ウェブブラウザなどのHTTPクライアントプログラムを介して、ウェブリソース(例、アプリケーション、サービス、及びデータ)にアクセスができる。ウェブサービスと称される技術は、ウェブリソースへのプログラム的なアクセスを提供するために使用することができる。ウェブサービスは、ウェブサーバシステムなどのウェブに接続されたコンピュータ上にある技術プラットフォーム(例、アプリケーション及びサービス)及びデータ(例、製品カタログ及びその他のデータベース)を含むウェブリソースへのプログラム的アクセスを、ウェブソフトウェア開発者に提供するために使用することができる。一般的に言うと、ウェブサービスインターフェースは、処理されるサービスを要求するクライアントとサービスプロバイダーの通信に関わる、標準的クロスプラットフォームAPI(アプリケーションプログラミングインターフェース)を提供するように構成されることがある。一部の実施形態において、ウェブサービスインターフェースは、サービス要求及び該要求への応答を解説する上方を含む、文書又はメッセージの交換を支援するように構成されることがある。このような文書、又はメッセージは、例えば、ハイパーテキスト・トランスファー・プロトコル(HTTP)などの標準化ウェブプロトコルを使用して交換することができ、例えば、eXtensible Markup Language(XML)などのプラットフォーム独立型データフォーマットでフォーマット化することができる。
図1は、ウェブサービスインターフェースを提供する例示的システム構造を例示するブロック図であり、ウェブサービスクライアント及びウェブサービスプロバイダー間の情報のやり取りを示している。本実施形態において、ウェブサービスインターフェース106は、インターネット100に接続されているサーバ130上に実装することができる。このサーバ130は、ウェブサービスプロバイダーと称される。サーバ130、又はサーバ130に接続される代替となる1つ以上のその他のサーバは、1つ以上のアプリケーション又はサービス108を含む。サーバ130は、データベース142に情報を保存するため、データストレージ140に接続される。データベース142は、いずれの種類のデータを含んでいてもよい。
サーバ120は、インターネット100に接続される。サーバ120は、ウェブサービスクライアント124を所有する。ウェブサービスクライアント124は、ウェブサービスインターフェース106を介して、サーバ130及び/又はデータベース142のアプリケーション又はサービス108に、プログラム的にアクセスするように構成されている。ウェブサービスインターフェースは、ウェブブラウザインターフェースを提供しないが、代わりに、アプリケーション又はサービス108の少なくとも一部の機能及び/又はデータベース142の少なくとも一部のデータが、ウェブサービスクライアント124によってプログラム的にアクセスされるAPIを介して、プログラム的インターフェースを提供することを考慮する。サーバ120は、ウェブブラウザを介して、クライアント122にアクセス可能なウェブサイトを提供することもまた考慮し、ウェブサービスクライアント124は、アプリケーション又はサービス108の少なくとも一部の機能及び/又はサーバ130のデータベース142の少なくとも一部のデータにアクセスするように構成されてもよく、サーバ120によって提供されるウェブサイトを介して、アプリケーション又はサービス108の少なくとも一部の機能及び/又はデータベース142の少なくとも一部のデータへのアクセスを提供する。さらに、ウェブサービスクライアント124自体が、別のウェブサービスであることを考慮する。
ウェブサービスプロバイダー130により提供されるアプリケーション、サービス又はデータにアクセスするために、ウェブサービスクライアント124は、インターネット100を介して、ウェブサービスインターフェース106に要求メッセージを送信してもよい。この要求メッセージは、ネットワーク及びインターネットインフラストラクチャーを通過し、ウェブサービスクライアント124のローカルネットワークルーター、スイッチ、ファイヤーウォールなどを通過し、インターネット骨格を通過し、ウェブサービスプロバイダーのローカルネットワーク、サーバ130、そしてウェブサービスインターフェース106に送信される。ウェブサービスプロバイダー130はその後、例えば、アプリケーション又はサービス108の指定機能を実施することで、又はデータベース142の指示データにアクセスすることで、要求を処理してもよい。ウェブサービスインターフェース106は、そしてインターネット100を介する応答メッセージにて、ローカルネットワーク及びインターネット基幹を通して処理結果をウェブサービスクライアント124に返す場合がある。
検索可能なデータサービスの一実施形態は、検索データサービスの機能への1つ以上のコールをクライアントアプリケーションに接するウェブサービスインターフェースを伴うウェブサービスとして実装することができる。このウェブサービスインターフェースにより、開発者は、ウェブサービスインターフェースを介して、バックエンドデータストアに保存されている多様なデータを検索し、取り出すために、検索可能なデータサービスの機能にアクセスする多様なクライアントアプリケーションの検索フロントエンドを容易に構築することができる。データストアの検索フロントエンドとして検索可能なデータサービスを調達するアプリケーションは、スケールに必要なシステムアドミニストレーションオーバーヘッド有り又は無しで、いかなるサイズにも自動的に調整されてもよく、検索速度は、例えばインデックス、クエリプラン、及び並行処理を使用し、自動的に最適化される。
検索可能なデータサービスの実施形態は、様々なアプリケーションへの検索要求を満たすデータストアに検索フロントエンドを提供するために調達される、低価格かつ実装、維持が容易な検索インデックスを提供する。検索可能なデータサービスは、検索可能なインデックスを提供するがそれ自体がデータストアではない。検索可能なデータサービスの実施形態は、データの検索及びインデックスと実際のデータストレージとを分ける。バックエンドデータストアは、ロケータがエンティティを捜し、取り出すために使用される、データ保存システムの任意の種類として実装され、ネットワーク、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)のどこにでも、又はインターネット上に存在することができ、又はコンピュータシステム又はシステムにローカルに接続されるデータ保存上に実装されることもできる。しかしながら、検索可能なインデックスの実施形態は、バックエンドデータストアが存在しないアプリケーションで使用されることを考慮する。これらのアプリケーションにおいて、検索可能なインデックスに、{名前、値}の1組として保存されている属性はデータである。
検索可能なデータサービスの実施形態により、開発者は望む場所どこにでもデータストアを置くことが可能になり、開発者はその後、検索可能なインデックスが構築される、{名前、値}の1組として明示されるeIDへの属性群に従い、ロケータ(eIDs)を検索可能なデータサービスに提供し、検索可能なデータサービスはその後、クエリを満たす検索インデックスからeIDのリストを戻すためにクエリされる。これらのeIDのリストは、バックエンドデータストアに保存されるデータ保存物にアクセスするために使用されてもよい。上述の通り、一実施形態は、開発者がeID及び関連属性を追加し、検索可能なインデックスを更新し(例、検索可能なインデックスのeID及び属性を変更、置換又は削除することにより)、さらにeIDのリストを獲得するために検索可能なデータサービスをクエリする、1つ以上のウェブサービスコールを提供するウェブサービスインターフェースを提供してもよい。
検索可能なデータサービスの実施形態は、検索可能なインデックスをいかなる種類のデータにも提供する。例えば、実施形態は、データベースに保存されているデータとテキスト、デジタル画像、及びデジタルオーディオファイルを含むがこれらに限定されない多様で特別又は混合された種類のファイル収納庫に、検索可能なインデックスを提供するために使用することができる。例えば、検索可能なデータサービスは、検索可能なインデックスをデジタル画像収納庫に提供するために使用されてもよい。ウェブサービスインターフェースから検索可能なデータサービスにおいて、インターネット上のクライアントは、アカウントを開き、デジタル画像を保存し、さらにデジタル画像のインデックス情報を提供してもよい。
一実施形態において、検索可能なデータサービスの実施形態は、データストアに、検索可能なインデックス及びデータストアを提供してもよい。一実施形態において、ウェブサービス又はその他のインターフェースから検索可能なデータサービスにおいて、クライアントは、エンティティをデータストアに保存し、データストアの検索可能なインデックスを作成するために使用される、エンティティのeID及び関連属性を提供してもよい。クライアントは、インターフェースを介して、検索可能なデータサービスへ、検索可能なインデックスをクエリし、さらにクエリ結果を使用して、インターフェースを介して検索可能なデータサービスへデータストアをクエリしてもよい。
検索可能なインデックスの実施形態が、本明細書において一般的に、バックエンドデータストアに検索可能なインデックスを提供すると言及される一方、実施形態はバックエンドデータストアが存在しないアプリケーションで使用されることを考慮する。これらのアプリケーションにおいて、検索可能なインデックスに、{名前、値}の1組として保存されている属性はデータである。これらのアプリケーションにおいて、バックエンドデータストアに「エンティティ」は存在せず、その意味で、各エンティティは、検索可能なインデックスにある属性である。一実施形態において、ウェブサービス又はその他のインターフェースから検索可能なデータサービスにおいて、クライアントは、検索可能なインデックスを作成するために使用される、データを、{名前、値}の1組として提供してもよい。クライアントはその後、インターフェースを介して、検索可能なインデックスをクエリし、所望のデータを獲得する。検索可能なデータサービスが使用され、バックエンドデータストアが存在しないアプリケーションの実施形態は、製品カタログ及び電話帳を含むが、これらに限定されない。
検索可能なデータサービスの実施形態は、検索可能なデータサービスのスケール化を容易にし、検索フロントエンドをバックエンドデータストアに提供する検索可能なデータサービスを調達する開発者のいかなる知識又はさらなる労力を必要とすることなく、検索可能なインデックスの冗長性、信頼性、及び高い可用性を提供することを可能にする機構を含む。これらの機構は、検索可能なインデックスを構築する機構、検索可能なインデックスを区分する機構、検索可能なインデックスを複製する機構、検索可能なデータサービス内のノードの失敗を対処する機構、及び検索可能なデータサービス内のノードの自動モニタリング及びコントロールを司る機構を含むが、これらに限定されない。
検索可能なデータサービスの一部の実施形態は、様々な機能を実施するよう構成されたシステム内にウェブサービスフロントエンド、多様なノードを搭載する分散型システムとして実装することができる。例えば、一実施形態において、クライアントシステムから1つ以上のその他の適切なノードへの要求の経路を調整する、例えば、ウェブサービスインターフェースを解して受け取ったクライアントのクエリ(読み取り)要求を1つ以上の適切なクエリノードに、及びウェブサービスインターフェースを解して受け取ったクライアントのストレージ(書き込み)要求を1つ以上の適切なストレージノードに送る、1つ以上のコーディネータノード、クエリ要求の適切なストレージノードへの経路決定を含むクエリ要求の処理を担当するクエリノード、ストレージ要求に応じるeID及び関連属性の保存、及びクエリノードから受け取ったクエリ要求に応じる保存されたeIDの取り出しを管理する1つ以上のストレージノードがある場合がある。
分散型システムの種々のノードは、検索可能なインデックスが拡張可能で、一貫性、有用性、及び耐性を有するように通信により協働することができる。一実施形態において、検索可能なデータサービス実装のノード間の通信は、ゴシッププロトコルを通じて、少なくとも部分的に実施される場合がある。一実施形態において、検索可能なデータサービス実装のノード間の通信は、アンチエントロピープロトコルを通じて、少なくとも部分的に実施することができる。一実施形態において、検索可能なデータサービス実装のノード間の通信は、ゴシッププロトコル及びアンチエントロピープロトコルを通じて、少なくとも部分的に実施することができる。一実施形態において、検索可能なデータサービス実装の2つ以上のノードは、パーティションの共同動作又はストレージノードグループ内のパーティションの共同複製など、グループ内ノード間の種々の共同機能を円滑にするために、ゴシッププロトコル及び/又はアンチエントロピープロトコルを使用する、グループ通信プロトコルに従い、グループに関与することができる。
一実施形態において、加入者により作製される検索可能なインデックス(ドメイン、又はバケットとも称される)は、最初に1つのパーティションとして作製され、そのパーティション(及びその後続いて作製されたパーティション)はストレージノード上に再分割され、新規に現れたパーティションの1つは、データセンタ又はその他のデータセンタ内の別のストレージノードに共同的に移動するため、検索可能なインデックスは、1つのノード又は1つのデータセンタのストレージリミットを越えて増大することができる。クライアントストレージ(書き込み)要求を2つ以上のノード間に分散されるようにすることで、能力を改善するために区分を使用することもできる。
ドメインのパーティションは、データセンタ内又はいくつかのデータセンタを渡って、その他のストレージノードに複製することができるため、検索可能なインデックスの有用性が維持され、耐性を有することを確実にする。クライアントクエリ(読み取り)要求を2つ以上のノード間に分散されるようにすることで、能力を改善するために複製を使用することもできる。一実施形態において、1つのストレージノードから別のストレージノードへパーティションを複製するためにアンチエントロピーを使用し、複製パーティションを最新型に更新するためにゴシッププロトコルを使用することで、複製を実施することができる。あるパーティションの複製を保存するストレージノードは、複製グループに共同的に関与することができ、またグループ通信は、最信情報をパーティションに伝播するためにグループ内で使用することができる。一実施形態において、複製パーティションへの書き込みはまず複製グループ内の1つ以上のストレージノードに直接適用され、その後ゴシッププロトコルを使用して複製グループ内のその他のストレージノードに伝播される。
グループ通信は、検索可能なデータサービス実装内の種々のノード、コンポーネント、及びその他のリソースのヘルス状態及び状況を観察するために使用されてもよく、さらに新規リソースを自動追加することで、何らかの理由で失敗又は利用不可能となる既存リソースを複製することが可能となる。例えば、既存ストレージノードの1つがオフラインになる場合、新規ストレージノードをストレージノードグループ(例、複製グループ)に自動的に補充するために、グループ通信を使用することができる。
検索可能なデータサービスの実施形態において、eIDストア内に、eID及びエンティティの関連属性({名前、値}の1組として明示される)を保存するキー値1組ストレージを使用することができる。eID自体が、関連エンティティの属性の1つと考えられ、キー値1組としてeIDに保存することができるということを考慮する。一実施形態において、キー値1組ストレージは、eID及びその他関連属性を保存するために、関連辞書データベースアーキテクチャに従って実装することができる。実施形態の属性を保存するために使用される関連辞書は、読み込みの場合は特に、高いスループットを比較的少量のCPUコストで提供することが可能である。関連辞書は、シンプルであり、使いやすさ及び柔軟性における信頼性の維持を支援する場合がある。さらに、関連辞書は、関連データベースなどの代替物と比較した際、低価格である場合がある。
一実施形態において、eIDストアは、Berkeley Databaseに従い実施することができる。Berkeley Databaseは、キー値1組を使用し、テーブル及びその他のデータ構造にインデックスを作製するために使用されるデータベースシステムに搭載されているオープンソースである。関連データベースとは違い、Berkeley DatabaseはSQLクエリをサポートしない。すべてのクエリ及びデータ分析は、代わりに、Berkeley Databaseアプリケーションプログラミングインターフェース(API)を通じたアプリケーションにより実施される。その他の実施形態は、eIDストアのその他のデータベース構造を使用できる。
検索可能なデータサービスの実施形態は、ウェブサービスを使用して、検索可能なインデックスをウェブ上で使用可能にする。実施形態は、開発者が検索能力をアプリケーションに容易に追加できるようにする。データストアに保存されるデータオブジェクトにアクセスする必要があるアプリケーションの開発者は、アプリケーションがいくつかの属性の1つ、又は属性の組み合わせに基づくデータオブジェクトを取り出せるようにすることを必要、又は所望する。関連辞書を検索インデックスと統合し、検索インデックスをウェブサービスインターフェースを通して使用可能にすることで、検索可能なデータサービスの実施形態により、開発者は、1つの属性又は属性の組み合わせに基づきデータストアに保存されたデータオブジェクトのロケータを取り出すための多数のアプリケーションに必要又は所望される速度及びクエリ電力源を提供するアプリケーションの検索可能なインデックスフロントエンドを低価格及び容易に実装するために、検索可能なデータサービスを調達することができる。
本明細書に記載される種々の機構、サブシステム、及び検索可能なデータサービスのコンポーネントを含む検索可能なデータサービスの実装は、クライアント/開発者に透過的であってもよいことを考慮する。クライアント及び/又は開発者は、ウェブサービスインターフェースを通して提供される、検索可能なデータサービスに対し、最少かつ外部に公開されるインターフェースのみを認識すればよいため、クライアント及び/又は開発者は、検索可能なインデックス(ドメイン)を構築及び更新、並びに検索可能なインデックスからeIDの検索可能なデータサービスをクエリすることができる。
図2は、一実施形態に従い、クライアント及び検索可能なデータサービス間の関係及びデータフローを例示している。データストア332は、ロケータと介してアクセス可能なデータエンティティを含んでもよい。検索可能なデータサービス340の実装は、ウェブサービスインターフェース350を介してAPIを公開してもよい。クライアント330は、ウェブサービスインターフェースを介して、検索可能なデータサービス340の機能へのアクセスを有してもよい。アプリケーションの開発者(例、クライアント330)は、ウェブサービスインターフェース350により提供されるコールを介して、検索可能なデータサービス340を調達し、データストア332にフロントエンド検索サービスを提供する。
クライアント330は、ウェブサービスインターフェース350を介して、データストア332にある少なくとも一部のエンティティのロケータ(eIDs)及び関連属性({名前、値}の組み合わせで明示される)を検索可能なデータサービス340に提供できる。検索可能なデータサービス340は、上述の通り、eID及び関連属性をバケット内に保存し、検索可能なインデックス342を生成するために、属性のインデックスを構築することができる。クライアント330はその後、ウェブサービスインターフェース350を介して、検索可能なデータサービス340をクエリしてもよい。検索可能なデータサービス340は、クエリを満たすeIDを捜すために、検索可能なインデックス342に対するクエリを実行する。検索可能なデータサービス340は、クエリを満たすeIDリストを含むクエリ結果をクライアント330に返すことができる。
以下は、検索可能なデータサービスの実施形態の局面を説明するために本明細書で使用される一部の用語の定義である。
・エンティティ:エンティティとは、ある種のデータストア332に保存され、開発者が属性を関連付けることを希望する、任意のデータオブジェクト又はエンティティを指す
・識別子(eID):開発者が、アプリケーションでエンティティを個別に識別するために使用する文字列(例、UTF−8などのコード化文字列)eIDはロケータとも称される。一部の場合、eIDはブロブ様エンティティを捜すために使用されてもよい。一実施形態において、検索可能なデータサービスは、開発者によって使用されるストレージソリューションに対し不透過的であってもよい。一実施形態において、UTF−8コード化は、eIDの序列を必要とする機構を支援するために、eIDに使用することもできる。一実施形態において、eIDは、バイトの任意配列(しかし、ドメイン又はバケット内では固有である)であってもよい
・属性:文字列で明示され、eIDに関連し、eIDのインデックス化及びクエリが基づく{名前、値}の1組を指す。一実施形態において、属性はUTF−8コード化文字列であるため、属性はUTF−8コード化クエリ式文字列で容易に使用することができる
・インデックス:eIDに関連する各エンティティは、クエリ式を満たすeIDリストを取り出すためにクエリされるインデックスを有する、又は提供することができる
・配列ID:最新要求の受信を認識し、最新情報の状態を追跡する、検索可能なデータサービス生成固有識別子。一実施形態において、配列IDは最新要求の一貫性の順列及び維持に使用することができ、高い配列IDを有する要求は世界的に、低い配列IDを有する要求に優先する。一実施形態において、配列IDはクライアントに公開されないことを留意されたい。
・クライアント(例、図2のクライアント330):用語クライアントは、検索可能なデータサービスシステムの使用を希望する検索可能なデータサービス加入者によって開発された、アプリケーション、スクリプト、ソフトウェアなどを表すために使用することができる
・加入者:検索可能なデータサービス加入者は、請求、計測、及び可能性のあるその他の目的のために、加入者識別子によって固有に識別されてもよい。各検索可能なデータサービス加入者は、同一の加入者識別子を使用して、検索可能なデータサービス内のデータにアクセスする1つ以上のクライアントを有してもよい。加入者識別子は、検索可能なデータサービスに保存されている加入者のeIDデータを捜すために、検索可能なデータサービス内で使用されてもよい。加入者は、1つ以上のバケットの所有者であってもよい。加入者は、顧客とも称される
・検索可能なデータサービス要求:クライアントが、本明細書に記載される1つ以上の検索可能なサービス操作を実施するために、ウェブサービスインターフェースを介して、検索可能なデータサービスに送信するコール(データを含む)を指す
・検索可能なデータサービス応答:クライアントにより送信された検索可能なデータサービス要求を処理した後、検索可能なデータサービスをクライアントに返信する応答を指す
・バケット:加入者が、意味的又はその他の目的のために保持することを希望する検索可能なデータサービスオブジェクト群を指す。クエリは、1つのバケット内で適用される。バケットは、ドメイン又は検索可能なインデックスとも称される。各バケットは、バケット識別子によって識別されてもよい。一実施形態において、各加入者識別子は、1つ以上のバケット識別子に関連され、バケット識別子は単一の加入者識別子と関連付けされてもよい
以下は、加入者、バケット、及びエンティティ識別子(eID)の関係を例示する。
加入者−>バケット−>eID
一実施形態において、検索可能なデータサービスは、各加入者バケットのeID−>属性テーブルを論理的に維持する。以下は、例示的eID−>属性テーブルの説明である。
eID 属性
k1 {{名前、値}}、{{名前、値}}、...
k2 {{名前、値}}、{{名前、値}}、...
k3 {{名前、値}}、{{名前、値}}、...
… …
一実施形態において、各eIDはテーブル内(バケット内)で固有であり、従って、eIDは加入者によって提供されるエンティティキーと見なされる。一実施形態において、eIDは印刷可能文字から構成されてもよい。
属性及び{名前、値}の1組の関係を考慮すると、属性は1つの{名前、値}の1組によって典型的に表される。しかしながら、一実施形態において、上記テーブル内のいかなる列に同一名で1つ以上の{名前、値}の1組を有することは可能で、該名の多値属性を表示する。例えば、eID−>属性テーブルの以下の例示的列は、キーワード属性は、eIDと特定される特別なURLに対して、多値であることを例示する。
eID 属性
<url> (名=“キーワード”、値=“xxx”)、(名=“キーワード”、値=“yyy”)、...
一実施形態において、{名前、値}1組のすべての値は、文字列として明示される。文字列の比較演算子を数字と同一の真理値に戻すには、該数字はゼロが詰め込まれてもよい。例えば、“>”が比較文字列である場合、“21”>“100”は真理であるが、比較数字である場合は誤りである。しかしながら、文字列又は数字を比較する場合、“021”及び“100”は同一の真理値を有する。一実施形態において、ISO8601などのフォーマットが、日時値を文字列として正確に比較するために使用することができる。
一実施形態において、eID−>属性テーブルの各列は、検索可能なデータサービスオブジェクトと見なされてもよい。検索可能なデータサービスオブジェクトは、以下の通り明示されてもよい。
加入者−>バケット−>eID−>{属性リスト}
検索可能なデータサービスオブジェクトは、加入者が、クライアントアプリケーションによって使用され、エンティティ識別子(eID)によって識別されるデータストア内のエンティティを検索するために使用され得るインデックスの構築を希望する場合、作成することができる。検索可能なデータサービスオブジェクトを作成する場合、加入者は少なくとも以下の入力を提供する。
・加入者ID
・バケット識別子−ドメインを識別する
・eID
・属性リスト−エンティティに関連する{名前、値}の1組のリスト
一実施形態において、検索可能なデータサービスは、検索可能なデータサービスデータオブジェクトに、{名前、値}の1組として明示される1つ以上の属性を自動的に提供してもよい。これらのその他の属性は、加入者によって提供される属性リストに加え、インデックス付け及び検索されうる。これらの属性は、基本属性とも称される。一実施形態において、すべてのドメイン内及びすべての加入者の検索可能なデータサービスオブジェクトは、これらの基本属性を含んでもよい。別の実施形態において、1つ以上のこれらの基本属性は、任意であってよい。基本属性は、以下を1つ以上含むが、これらに限定されない。
・作成時間/日付−検索可能なデータサービスオブジェクトが作成された日時を示すタイムスタンプ
・最新修正時間/日付−検索可能なデータサービスオブジェクトが最後に修正された日時を示すタイムスタンプ。初期状態では、作成時間/日付と同一であってよい
・最新アクセス時間/日付−検索可能なデータサービスオブジェクトが最後にアクセスされた日時を示すタイムスタンプ
・作成者−検索可能なデータサービスオブジェクトを作成した特定のユーザ/クライアントを示す
・最新修正者−検索可能なデータサービスオブジェクトを最後に修正した特定のユーザ/クライアントを示す
・サイズ−検索可能なデータサービスオブジェクトのサイズ(例、バイト)を示す
・アクセス権−検索可能なデータサービスオブジェクトへのアクセス権を示す
検索可能なデータサービスオブジェクトは、加入者によって指定される属性すべて、及び基本属性がインデックス付けされ、eIDが継続して保存されると、作成が滞りなく実行されたと見なされる。検索可能なデータサービスオブジェクトの作成に失敗した場合、エラーコード及びメッセージが加入者に送信され、オブジェクトの作成が失敗した理由を示すことができる。
一実施形態において、加入者は、検索可能なデータサービスオブジェクト及び検索可能なデータサービス内によってオブジェクトに関連する基本属性を読み込むことができる。一実施形態において、検索可能なデータサービスオブジェクトは、加入者識別子、バケット識別子、及び検索可能なデータサービスオブジェクトのeIDを指定することで、検索可能なデータサービスから読み込まれることができる。
一実施形態において、加入者は、更新情報と併せて、加入者識別子、バケット識別子、及び更新される検索可能なデータサービスオブジェクトのeIDを提供することで、検索可能なデータサービスオブジェクトの更新ができる。一実施形態において、加入者は、eIDの追加又は削除、eIDの属性の追加又は削除及び既存属性に関連する値の修正ができる。一実施形態において、加入者は、少なくとも一部の基本属性を追加、削除、又は修正することはできない。しかしながら、加入者が、検索可能なデータサービスオブジェクトを修正する場合、オブジェクト修正に関連する1つ以上の基本属性を更新することができる。
一実施形態において、検索可能なデータサービスオブジェクトは、加入者が要求メッセージで指定される通りに修正を希望するすべてのeID及び属性すべて、及び属性に関連するインデックスが更新された場合に限り、更新が滞りなく実行されたと見なされる。一実施形態において、部分的更新はできない。例えば、要求が修正する必要のある複数の属性を指定し、修正の1つが実施不可能である場合、全体的な更新要求は、修正が実施されることなく失敗する。検索可能なデータサービスオブジェクトの作成に失敗した場合、エラーコード及びメッセージが加入者に送信され、オブジェクトの作成が失敗した理由を示すことができる。
一実施形態において、加入者は、削除する加入者識別子、バケット識別子、オブジェクトのeIDを提供することで、ドメインから既存検索可能なデータサービスオブジェクトを削除できる。一実施形態において、検索可能なデータサービスオブジェクトは、オブジェクトがオブジェクトに関連するeIDにアクセス可能である保証がない場合、及びオブジェクトが検索可能でない場合に限り、検索可能なサービスオブジェクトは滞りなく削除される。一実施形態において、検索可能なデータサービスオブジェクトの削除後、オブジェクトにアクセスするためにeIDが継続して使用される期間があることもある。さらに、オブジェクトはある期間検索可能にすることが可能である。検索可能なデータサービスオブジェクト及びその関連インデックスが削除不可能である場合、削除要求は失敗し、加入者はエラーコード及びメッセージを介し、失敗の通知を受けることになる。一実施形態において、一度検索可能なデータサービスオブジェクトがドメインから削除されると、eIDはドメイン内で加入者によって再使用されることもある。
一実施形態において、加入者は、加入者のドメイン(バケット)、インデックス付き属性、検索可能なデータサービスオブジェクト、及びeIDのリストを要求することもある。検索可能なデータサービスオブジェクト及び加入者によって提供される属性と併せて、加入者は、検索可能なデータサービスオブジェクトを列記する場合、検索可能なデータサービスによって提供される基本属性へのアクセスも有することができる。一実施形態において、加入者は以下の列記操作の1つ以上を含むが、これらに限らない操作を実施することができる。
・指定プレフィックスに一致する検索可能なデータサービスオブジェクト及び/又はeIDの列記
・加入者に関連し、固有加入者識別子によって識別されるすべてのドメイン(バケット)の列記
・ドメイン下(バケット内)にインデックス付けされたすべての属性の列記
・ドメイン下のすべての検索可能なデータサービスオブジェクト及び/又はeIDの列記
・指定クライアントによってインデックス付けされたすべての属性の列記
・全ドメイン共通の顧客に対する、すべての検索可能なデータサービスオブジェクト及び/又はeIDの列記
・指定属性を有するすべての検索可能なデータサービスオブジェクト及び/又はeIDの列記
多数のドメイン、属性、検索可能なデータサービスオブジェクト又はロケータが、リスト要求の応答として返される場合、検索可能なデータサービスは、リスト結果にページ番号をつける場合がある。クライアントは複数の要求により、ピース(ページ)のリストを取り出すことができる。
一実施形態において、加入者は、ウェブサービスインターフェースにより使用可能なクエリ要求により、検索可能なデータサービスオブジェクト及びeIDを検索してもよい。加入者は、シングルドメイン(バケット)で、検索可能なデータサービスオブジェクトの1つ以上の属性に対してクエリを実行し、クエリ式を満たすeIDのリストを取得してもよい。一実施形態において、検索可能なデータサービスは、クエリ式の属性に対して、以下の操作の1つ以上をサポートする場合があるが、これだけに限定されない。これらの操作は、併用される場合がある。
・ブーリアン(例えば、AND、OR、NOT)
・算術演算子(例えば、<、>、=、!=、<=、>=、<>)
・文字列(特定された文字列を含む属性)
・開始文字列(特定された文字列を含む属性)
クエリ操作は、クエリ式を満たす、検索可能なデータサービスオブジェクトのeIDを返す場合がある。一実施形態において、完全な検索可能なデータサービスオブジェクトが任意に返される場合がある。一実施形態において、クエリの結果は、加入者によりクエリメッセージにて提供されるソート仕様に基づき、昇順又は降順のいずれかにソートされる場合がある。クエリの応答に多数のeIDが返される場合、検索可能なデータサービスは、クエリ結果にページ番号をつける場合がある。クライアントは、複数の要求により、ピース(ページ)のリストのeIDを取り出すことができる。一実施形態において、クライアントは、クエリメッセージにページ長の仕様を提供し、多数の入力(eID)をページ上に指定する場合がある。
一実施形態において、所望により、加入者は、ドメイン(バケット)を削除する場合がある。ドメインは、ドメイン及びドメインの検索可能なデータサービスオブジェクトの属性に関係するインデックスのすべてが削除された場合にのみ、正常に削除されたとみなされるであろう。ドメインの検索可能なデータサービスオブジェクト及びその関連インデックスが削除不可能である場合、削除要求は失敗し、加入者はエラーコード及びメッセージを介し、失敗の通知を受けることになる。
一実施形態において、加入者はドメイン内のインデックスを削除する場合がある。インデックスは、インデックス内のすべての属性が正常に削除された場合にのみ、正常に削除されたと見なされるであろう。ドメインのインデックスが削除不可能である場合、削除要求は失敗し、加入者はエラーコード及びメッセージを介し、失敗の通知を受けることになる。
検索可能なデータサービスの一実施形態は、ある機構を提供する場合があり、加入者は、当該機構により、少なくともいくつかのバッチモードのバケットに対して実行する操作を提出する場合がある。バッチモード機構は、例えば、検索可能なデータサービスにアップロードしたい、大きなデータセットを有する場合がある加入者により、使用される場合がある。例示的なバッチモード機構は、例えば、加入者が、各行が1つの作業、例えば、検索可能なデータサービスオブジェクトに追加するという作業を示すファイルを提出することを可能にする場合がある。そのようなファイルの例示的行は、以下を含んでもよいが、それらだけに限定されない。
・バケット識別子−ドメインを識別する
・作業−実行する作業を示す。例えば、追加、削除、又は修正
・eID
・属性リスト
例示的な検索可能なデータサービスAPI
このセクションは一実施形態に従い、ウェブサービスインターフェース350を介して、ウェブサービスとして開発者及びクライアントに公開される場合がある、検索可能なデータサービス340のための例示的なAPIを記載する。一実施形態において、APIは、THHP/THHPS上の完全に表現可能な状態の転送(Fully Representational State Transfer)(REST)及び/又はシンプルオブジェクトアクセスプロトコル(SOAP)を介して、ウェブサービスプラットフォームを通じ、開発者及びクライアントに提供される場合がある。その他の実施形態は、その他のプロトコルを使用する場合がある。提供されるウェブサービスインターフェース350は、アプリケーションアグノスティックである場合がある。
以下に、クライアントにより、一実施形態によるウェブサービスインターフェース350を介して、検索可能なデータサービスに対して作成される例示的な要求を記載する。これらの説明は、例示的であり、これらに限定されないことに留意されたい。その他の実施形態は、その他の要求を含む場合があり、及び/又は記載の要求の変化形を含む場合がある。
一実施形態において、検索可能なデータサービスにおいて、以下のクライアント作業の種類が可能である場合がある。これらの作業は、ウェブサービスインターフェースを介して、クライアントに公開される。
・更新:eID属性バケットを更新する作業。例えば、追加、置換、及び削除作業
・リスト属性:eID及びバケット識別子の場合、この作業はeIDの属性をリストする。これは、上記テーブルの左から右に進むに従って、視覚化される場合があり、例えば、引数として「k1」が与えられる場合、「k1」の右のすべての{名前、値}の1組が返される
・クエリeID:クエリ式の場合、式を満たすバケットから、すべてのeIDを返す。これは、上記テーブルの右から左に進むに従って、視覚化される場合がある。一実施形態において、クエリ式は、ブーリアン演算子(例えば、NOT、AND、OR)を使用して組み合わせた前提の集合である。前提は、属性リストの名前及び/又は値フィールドが、必ず真の状態を保持していなければいけないことを示す
更新作業
これらの検索可能なデータサービス作業は、加入者のeID属性バケットを更新するために、クライアントによりウェブサービスインターフェースを介して呼び出される場合がある。
一実施形態において、置換作業は、属性が存在しない場合、属性を作成する場合がある。置換作業の後続呼び出しは、値を修正(更新)し、その属性に対して、常に1つの値しかないようにする場合がある。固有の値を有する属性の更新は、この作業を行わなければいけない。一実施形態において、クライアントの置換作業の呼び出し要求は、1つ以上の、以下の情報を含むが、これらだけに限定されない。
・バケット識別子:加入者のバケットを識別する文字列。バケットが存在しない場合は、1つ作成される場合がある
・eID:クライアントがデータストアのエンティティを捜すために使用する場合がある文字列
・名前:属性の名前を示す文字列
・値:属性の値を示す文字列
・加入者識別子:検索可能なデータサービス加入者を識別し、加入者に請求及び加入者を認証するために使用される場合がある。一実施形態において、加入者の証明書も含まれている場合がある
一実施形態において、追加作業は、属性が存在しない場合、属性を作成する場合がある。同一名で異なる値による追加作業の後続呼び出しは、属性にその他の値を追加し、従って、多値属性の作成を可能にする場合がある。一実施形態において、クライアントの追加作業の呼び出し要求は、1つ以上の、以下の情報を含むが、これらだけに限定されない。
・バケット識別子:加入者のバケットを識別する文字列。バケットが存在しない場合は、1つ作成される場合がある
・eID:クライアントがデータストアのエンティティを捜すために使用する場合がある文字列
・名前:属性の名前を示す文字列
・値:属性の値を示す文字列
・加入者識別子:検索可能なデータサービス加入者を識別し、加入者に請求及び加入者を認証するために使用される場合がある。一実施形態において、加入者の証明書も含まれている場合がある
一実施形態において、削除作業は、任意の名前及び/又は{名前、値}の1組が指定されているかにより、以下の1つの操作を呼び出す場合がある。
・特定の名前又は値のいずれかがない場合、削除作業は、与えられたeIDに関するすべての属性を削除する場合がある。一実施形態において、eIDは、追加又は置換作業により、新しい属性が取り込まれない場合、一定時間経過後、ゴミ収集対象となる。一実施形態において、eIDを持たないバケットは、ゴミ収集対象となる。一実施形態において、属性は、削除済みとしてマークされる場合があり、アクティブなゴミ収集は実行されない
・名前のみを有し特定の値を有さない場合、削除作業は、その名前を有し、与えられたeIDに関する属性を削除する場合がある。属性は、固有値を有するか、又は多値であるかのいずれかである
・特定の名前及び値を有する場合、削除作業は、与えられたeIDに関する{名前、値}の1組を削除する。これは、クライアントが多値属性の1つの特定の値を削除することを可能にする
一実施形態において、クライアントの削除作業の呼び出し要求は、1つ以上の、以下の情報を含むが、これらだけに限定されない。
・バケット識別子:加入者のバケットを識別する文字列
・eID:クライアントがデータストアのエンティティを捜すために使用する場合がある文字列
・名前:属性の名前を示す文字列
・値:属性の値を示す文字列
・加入者識別子:検索可能なデータサービス加入者を識別し、加入者に請求及び加入者を認証するために使用される場合がある。一実施形態において、加入者の証明書も含まれている場合がある
上記に記載の各eID属性バケット更新作業は、更新結果を含むクライアントへの更新応答を生成する。一実施形態において、更新応答は、検索可能なデータサービスへのウェブサービスインターフェースを介して、クライアントに転送される場合がある。一実施形態において、更新応答は、正常に終了した更新作業に対して、クライアントに更新作業が正常に終了したことを通知する、及び更新作業が何かの理由で実行できなかった場合に、クライアントに更新作業に失敗したことを通知するために、クライアントに更新結果を報告するため、クライアントに、送信される場合がある。一実施形態において、上記に記載の各更新作業は、よく似た応答構造を使用する場合がある。以下は、更新作業要求に対する、例示的応答に含まれている場合がある情報を説明する。これは、例示的であり、これらに限定されないことに留意されたい。
・状態:「OK」又は「エラー」のいずれか。更新が正確に形成され、適応される場合、状態はOKとなり、そうでなければ、応答は、エラーメッセージ内に問題を説明する
・エラーメッセージ:更新作業要求が直面したいずれかの問題について、さらに説明する情報。例えば、「要求は、不適切です」
バッチ処理更新要求
一実施形態は、バッチ処理、又はバッチ作業として提出される場合がある更新要求を介して、機構を提供する場合がある。バッチ処理更新要求は、上記に記載の2つ以上の連続更新要求を含む場合があり、バッチ処理更新要求に対する応答は、バッチ処理更新要求に対応する更新状態の連続を含む場合がある。一実施形態において、バッチ処理更新要求に指定される更新作業を、リアルタイムで連続して処理するために、単独のバッチ更新要求に提出される場合のある、更新作業の数に制限がある場合がある。又は、バッチ処理更新要求の更新は、非同期的に実行される場合がある。
リスト属性作業
一実施形態は、ウェブサービスインターフェースを介して、クライアントにより呼び出される場合のある、リスト属性作業を提供する場合がある。リスト属性作業は、特定のeIDに関連する属性のリストを返す場合がある。以下は、更新作業要求に対する、例示的なリスト属性作業要求に含まれている場合がある情報を説明する。これは、例示的であり、これらに限定されないことに留意されたい。
・バケット識別子:加入者のバケットを識別する文字列
・eID:クライアントがデータストアのエンティティを捜すために使用する場合がある文字列
・フィルタ式:eIDに対して返される属性をフィルタするために使用される場合がある、文字列式。フィルタ式が指定されていない場合、eIDに関連するすべての属性が返される。フィルタの構文は、以下に記載の「クエリeID」に使用されるものに従う。このパラメータは任意である場合がある
・加入者識別子:検索可能なデータサービス加入者を識別し、加入者に請求及び加入者を認証するために使用される場合がある。一実施形態において、加入者の証明書も含まれている場合がある
以下は、更新作業要求に対する、クライアントへの例示的なリスト属性作業応答に含まれている場合がある情報を説明する。
・属性リスト:もしあれば、フィルタ式と一致する{名前、値}の1組のリスト要求に対して、フィルタ式が与えられていない場合は、特定のeIDのすべての属性が返される。エラーがない場合、これが予測される返答である
・エラーメッセージ:リスト属性作業要求が直面したいずれの問題について、さらに説明する情報。例えば、「未知のエンティティ識別子」、「未知のバケット」、又は「フィルタ式は、不正な構文」
クエリeID作業
一実施形態は、ウェブサービスインターフェースを介して、クライアントにより呼び出される場合のある、クエリeID作業、又は単にクエリ作業を提供する場合がある。クエリeID作業は、クエリ式により指定される条件と一致する、eIDのリストを返す。クエリ式は、文字列であり、タイトルが「クエリ構文及び検索式」である以下のセクションで与えられるルール一式に従う場合がある。検索可能なデータサービスの一部の実施形態では、いずれにせよ、暗黙の構文を有する非正規化検索式を受け入れ、1つ異常の正規化ルール(タイトルが「非正規化検索式」のセクションを参照)を使用する標準形に対するメッセージを削減する場合がある。クエリeID作業要求は、本明細書でクエリ、クエリ要求、又はクエリノード要求といわれる場合があることに留意されたい。
以下は、更新作業要求に対する、例示的なクエリeID作業要求に含まれている場合がある情報を説明する。これらに限定されないことに留意されたい。
・バケット識別子:加入者のバケットを識別する文字列
・クエリ式:文字列式であり、それに従い、eIDのリストが捜し出される、又は返される場合がある
・MoreToken:不透過的なオブジェクト(例、クッキー)であり、以前のクエリeID作業要求でクライアントに返されている場合がある。トークンが先のクエリeID作業から返される場合、トークンは、返された以前のクエリeID作業要求の応答にて捜し出されたeIDのリストの次のページを要求するために、後続のクエリeID作業要求に提供される場合がある。この任意のパラメータである
・加入者識別子:検索可能なデータサービス加入者を識別し、加入者に請求及び加入者を認証するために使用される場合がある。一実施形態において、加入者の証明書も含まれている場合がある
以下は、更新作業要求に対する、クライアントへの例示的なクエリeID作業応答に含まれている場合がある情報を説明する。
・エンティティ識別子リスト:クエリ要求に指定される検索条件に一致するeIDのリスト。これは、1つ以上のエラーメッセージが返される場合があるエラーがない限り、予測される返答である
・MoreToken:文字列であり、一実施形態において、MoreTokenは、クライアントから不透過的である。クエリ要求を満たすeIDのリストが、1つの応答に返すには大きすぎる場合、リストはページで返される場合がある。MoreToken「クッキー」は、「最新表示ページ」を示す場合がある。MoreTokenクッキーは、eIDの次のページを取り出すための後続のクエリ要求に含まれる場合がある
・エラーメッセージ:クエリeID作業要求が直面したいずれの問題について、さらに説明する情報。例えば、「未知のバケット」、「クエリ式は、正しい構文を持たない」、又は「無効なMoreToken」
検索可能なデータサービスアーキテクチャ
以前のセクションは、検索可能なデータサービスの実施形態の開発者/クライアントに公開される例示的なウェブサービスAPIを記載した。以下のセクションでは、検索可能なデータサービス、及び検索可能なデータサービスの実装に含まれている場合がある様々なサブシステム並びにコンポーネントの例示的なアーキテクチャを記載する。
図3は、一実施形態に従い、検索可能なデータサービスの例示的な高位機能構造を例示している。一実施形態において、検索可能なデータサービスは、以下の主なコンポーネント及びサブシステム、ウェブサービスプラットフォーム200、要求ルーター202、クエリサブシステム204、及びストレージサブシステム206の1つ以上を含む場合があるが、それだけに限定されない。その他の実施形態は、このアーキテクチャレベルにおいて、その他のコンポーネント及び/又はサブシステム、又は数々のコンポーネント及び/又はサブシステムの組み合わせを有する場合があることに留意されたい。
ウェブサービスプラットフォーム200は、検索可能なデータサービスのフロンドエンドとしての役割を果たす、1つ以上のウェブサーバを含む場合がある。ウェブサービスプラットフォーム200は、以下の機能の1つ以上を含む場合があるが、それだけに限定されない。
・要求インターセプタを通じて、ウェブサーバは、測定、請求、認証、及び検索可能なデータサービスへのアクセス権のために、1つ以上のその他のサービスと情報のやり取りを行う場合がある
・ウェブサーバは、1つ以上の完全に表現可能な状態の転送(Fully REpresentational State Transfer)(REST)及び/又はシンプルオブジェクトアクセスプロトコル(Simple Object Access Protocol)(SOAP)APIを提供する場合があり、検索可能なデータサービスへのデータの提出する、又は検索可能なデータサービスからのデータの取り出す際、開発者及びクライアントに公開される。その他の実施形態において、1つ以上のその他のプロトコル又はプロトコルの組み合わせが試用される場合があることに留意されたい。これらのAPIは、エンティティロケータ(eID)、及びエンティティID(eID)ストアのエンティティに関連する属性の受信及び保存を可能にする。属性のインデックスは、eIDストアから構築される場合がある。一実施形態において、APIは、eID及び属性(ストレージノード要求又はストレージ要求と称される場合がある)に対応する以上の1つ以上のAPIコールを提供する場合があるが、それだけに限定されない
・追加−属性({名前、値}の1組)をエンティティに追加する。2つ以上の値を有する場合がある「キーワード」のような属性など、複数の値を有する属性として使用される。
・削除−属性を削除する
・置換−既存の属性を置換する。最初に、1つの値を有する属性とともに使用される場合がある
・リスト属性−エンティティのすべての{名前、値}の1組をリストする
・ウェブサーバは、クエリ要求を検索可能なデータサービスに提出するために、1つ以上のREST及び/又はSOAP APIを提供する場合がある。その他の実施形態において、1つ以上のその他のプロトコル又はプロトコルの組み合わせが試用される場合があることに留意されたい。一実施形態において、1つのクエリAPIコール(クエリeID)がある場合がある。クエリ要求は、クエリノード要求とも称される
要求ルーター202は、以下の機能の1つ以上を実行する場合があるが、それだけに限定されない。
・要求ルーター202は、ウェブサービスプラットフォーム200からサービス要求を受け取り、サービス要求がストレージノード要求(例えば、1つ以上のeID及び関連属性の追加、削除、又は置換要求)であるか、又はクエリノード要求(1つ以上の保存されたeID及び/又は関連属性を取り出す要求)であるかを判断する場合がある
・サービス要求がストレージノード要求の場合、要求ルーター202は、ストレージノードロケータに、要求に指定のeID及びバケットを、適切なストレージノードまでマップするように要求する。一実施形態において、検索可能なデータサービスインデックス付けデータは、バケットに分離される場合がある。バケットは、シングルクエリに入ると考えられるデータのリミットを定義する
・サービス要求がクエリノード要求の場合、要求ルーター202は、クエリノードロケータに、バケット及びクエリ式を、適切なクエリノードまでマップするように要求する
・要求ルーター202は、サービス要求を適切なノードへ送り、結果を回収し、結果をウェブサービスプラットフォーム200に返す
要求ルーター204(クエリサービスと称される場合もある)は、以下の機能の1つ以上を実行する場合があるが、それだけに限定されない。
・クエリの処理する
・可能であれば、クエリサブシステム204により保持されるクエリキャッシュからのクエリを提供する
・クエリキャッシュからの満たしていないクエリを実行するために、ストレージサブシステム206上の1つ以上のストレージノードに送る小ドメイン(バケット)において、クエリは、一般的に単一ストレージノード上で実行される。より大きなバケットは、複数のストレージノードに渡り分割され、各パーティションの1つのストレージノード上でクエリを実行することを要求する場合がある。要求ルーター202と同様に、クエリサブシステム204は、適切なストレージノードを検出するために、ストレージノードロケータのローカルインスタンスを使用する場合がある
・2つ以上のストレージノードから受け取ったクエリ結果を集約し、必要に応じて、クエリ結果をソートする
・ウェブサービスプラットフォーム200に提供されるウェブサービスインターフェースを介して、クエリを実行したクライアントにクエリ結果を返す。一実施形態において、必要に応じて、結果にページ番号をつける
ストレージサブシステム206は、1つ以上のストレージノードを含む場合がある。ストレージノードは、1つ以上のデータセンタに位置する場合がある。ストレージノードは、以下の機能の1つ以上を実行する場合があるが、それだけに限定されない。
・ストレージノード上で、ローカルeIDストアは、eID及びそれらの属性に対する権限のあるストアとしての役割を果たす場合がある
・インデックスは、eIDストアから構築され、ローカルストレージノード上のeIDのすべての属性にインデックスを作成する場合がある
・ローカルクエリプロセッサは、ローカルeIDストアに対してクエリを実行する場合がある
・eID更新サービスは、ストレージノード要求(追加、置換、削除など)をローカルeIDストアに適用する場合がある
・ローカルパーティションマネージャーは、各ストレージノードのローカルリソース(ディスクスペース、CPU負荷、ネットワークバンド幅など)の使用を監視し、それに応じてバケットのパーティションを管理する場合があり、パーティションを移動するために、共同してその他のストレージノードと通信を行う場合がある。パーティションは、例えば、ストレージノード上のコンフォートゾーン内のストレージ空き容量を維持するため、及び/又は負荷バランシングを提供するために、移動可能である
・例えば、データの冗長性を提供するために、ストレージノードを渡るパーティションを複製するため、その他のストレージノードと共同して通信する場合がある。
一実施形態において、ウェブサービスプラットフォーム200は、クライアントが検索可能なデータサービスに対してAPIコールを生成した際の、コンタクトの第1ポイントである。ウェブサービスプラットフォーム200は、例えば、認証、アクセス制御、ロギング、計測、及び請求サービスを提供する場合がある。ウェブサービスプラットフォーム200により提供される検索可能なデータサービスAPIサービス要求に対するクライアントからのサービス要求は、2つのカテゴリに分類される場合がある。本明細書では、ストレージノード要求又はストレージ要求と称される場合もある、ストレージサブシステム206への書き込み要求、及び本明細書では、クエリノード要求、クエリ要求、又は単にクエリとも称される、クエリサブシステム204への読込み要求ストレージノード要求は、ストレージサブシステム206のバケットのロケータ(eID)及びそれらの関連属性の追加、置換、又は削除要求を含む場合がある。さらに、一実施形態は、クライアントが、eID及び関連属性が追加されうる新しいドメイン(バケット)の作成を要求できるようにする構築APIコールを提供する場合がある。クエリノード要求は、クエリノード要求のクエリ式に従い、ストレージサブシステム206のバケットからロケータ(eID)のリストを取得するためのクエリである。
ウェブサービスプラットフォーム200は、クライアントから入力される要求を、要求ルーター202に転送し、一実施形態においては、検索可能なデータサービスのコーディネータノード上で、インスタンス化されている場合がある。一実施形態において、単一障害点を防ぐことによって、負荷を分散し、冗長性を提供するために、2つ以上のコーディネータノード及び/又は要求ルーター202が存在する場合がある。1つ以上のコーディネータノード上に存在する場合がある要求ルーター202、及び1つ以上のその他の関連するコンポーネントは、調整サブシステム又は調整サービスを構成する場合がある。要求ルーター202は、要求がストレージノード要求であるか、又はクエリノード要求であるかを判断するために、入力サービス要求を調べ、要求の受け取りに適切なノード(例えば、ストレージノード又はクエリノード)を決定し、検索可能なデータサービス実装内の決定したノードに、要求を転送する。
要求がストレージノード要求の場合、クライアントは、バケット内に保存されたインデックス付け情報に対して、書き込み作業(例えば、追加、削除、又は置換)を要求している。ストレージノード要求は、リスト属性要求である場合もあることに留意されたい。バケットは、シングルクエリに入ると考えられるデータのリミットを定義する。一実施形態において、バケットは1つ以上のパーティションに分割され、異なるストレージノード上に保存される場合がある。しかし、ストレージノードは、1つ以上のパーティションを保存する場合があることに留意されたい。分割により、検索可能なデータサービスのクライアントは、単一ストレージノードに適合するものより大きな検索可能なインデックスを保存及び維持できるようになる場合がある。従って、バケットの異なるパーティションは、異なるストレージノード上に存在する場合がある。パーティションは、ストレージノードに渡り、複製される場合がある。ストレージノードに渡る(及び場合によってはデータセンタに渡る)パーティションの複製は、検索可能なデータサービスにおける、データの冗長性、従って、クライアントの検索可能なインデックスの耐性、信頼性、及び可用性を提供する場合がある。検索可能なデータサービスのパーティション及び複製機構は、本文献の後でさらに記載する。
一実施形態において、要求がストレージノード要求の場合、要求ルーター202は、ローカルストレージノードロケータに、ストレージノード要求に指定されるバケット及びeIDを、ストレージサブシステム206の特定のストレージノードまでをマップするように問い合わせる場合がある。また要求ルーター202は、ストレージノードロケータに、指定されたバケットが1つのパーティションを有するのか、又は2つ以上のパーティションを有するのかを判断するように問い合わせる場合もある。ストレージノードロケータから受け取った情報から、要求ルーター202は、ストレージサブシステム206の特定のストレージノードを決定し、そして決定したストレージノードに、ストレージノード要求を転送する。ストレージサブシステム206において、ストレージノードは、そのローカルeIDストアに対するストレージノード要求に指定される作業を実行する。ストレージノードは、そして必要に応じて、バケットのパーティションの複製を保存すストレージサブシステム206のその他のストレージノードに、ストレージノード要求を伝播する。
要求がクエリノード要求の場合、クライアントは、バケット内に保存されたインデックス付け情報に対して、読み取り作業又は問い合わせを要求している。一実施形態において、要求がクエリノード要求の場合、要求ルーター202は、ローカルクエリノードロケータに、要求により指定されるバケット及びクエリ式を、クエリサブシステム204の適したクエリノードまでをマップするように問い合わせる場合がある。要求ルーター202は、そしてクエリノード要求を、クエリサブシステム204の決定されたクエリノードに転送する。
クエリサブシステム204のクエリノードにおいて、クエリ要求のいくつかの前処理(例えば、正規化)、例えば、クエリ要求に指定されるクエリ式の正規化が実行される場合がある。一実施形態において、ローカルクエリキャッシュは、クエリキャッシュから、クエリを満たすことができるかどうかを判断するために、調べられる場合がある。ローカルクエリキャッシュから、クエリが満たされる場合、クエリサブシステム204は、クエリキャッシュからのクエリ結果を、ウェブサービスプラットフォーム200を介してクライアントに返す。クエリキャッシュからクエリが満たされない場合は、ストレージノードロケータのローカルインスタンスは、クエリが転送されるストレージサブシステム206の1つ以上のストレージノードを捜すように問い合わせられる場合がある。
小ドメイン(バケット)において、クエリは、単一ストレージノード上で実行される場合がある。より大きなドメイン(バケット)は、複数のストレージノードに渡り分割される場合があり、各パーティションに対して1つのストレージノード上でクエリを実行するように要求する場合がある。ストレージノードは、クエリサブシステム204のクエリノードに結果(eIDのリスト)を返す。一実施形態において、クエリサブシステム204のクエリノード上のクエリアグリゲータは、クエリノード要求の指定に従い、2つ以上のストレージノードから受け取った結果を集約する場合がある。クエリサブシステム204は、そしてストレージノードから受け取ったクエリ結果を、ウェブサービスプラットフォーム200を介して、クライアントに返す。一実施形態において、クエリサブシステム204は、必要に応じて、又は所望により、クエリ結果にページ番号を付ける。クエリノードにおいて、ストレージサブシステム206から受け取ったクエリ結果は、ローカルクエリキャッシュに書き込まれる場合がある。
上記に記載のように、要求ルーター202は、ローカルストレージノードロケータ及びローカルクエリノードロケータに対して、ストレージノード要求を受け取るストレージノード、及びクエリノード要求を受け取るクエリノードを捜すように問い合わせる場合がある。さらに、クエリノード上のローカルストレージノードロケータは、クエリ要求を受け取るストレージノードを捜すように問い合わせられる場合がある。ストレージノードロケータは、どのストレージノードがストレージサブシステム206に存在するか追跡し、クエリノードロケータは、どのクエリノードがクエリサブシステム204に存在するかを追跡する。両ノードロケータは、それぞれの追跡中のノード上に情報を記録するために、テーブル又はデータベースを使用する場合がある。一実施形態において、このテーブルは、バークレーデータベースに従い構築される場合がある。一実施形態において、ストレージサブシステム206に変更、例えば、バケットが再分割される、パーティションが複製される、新しいストレージノードが追加される、新しい入力がバケットに追加される、などがある場合、変更は、様々なノードロケータに伝達される。クエリノードの追加又は削除などのクエリサブシステム206への変更は、クエリノードロケータに伝達される場合がある。一実施形態において、1つのローカルノードロケータは、変更を受けて、最初に更新される場合があり、変更はそして、ゴシッププロトコルに従い、ノードロケータからその他のノード上のその他のノードロケータに伝播される場合がある。
検索可能なデータサービスは、様々なノード及びコンポーネント間の通信機構を含む場合があり、それにより、例えばストレージ及びクエリノードロケータは、検索可能なデータサービス実装(例えば、追加又は削除されたノード、置換、パーティション、ストレージサブシステム206への書き込みなど)における変更を監視し、従って、伝達された更新情報に従い、それらのそれぞれのテーブルに保存された情報を更新することが可能になる。一実施形態において、通信機構は、ゴシップ又はエピデミックプロトコルに従い、実装される場合がある。この通信機構は、1つのノード上の変更を、情報を要求する場合がある、検索可能なデータサービス実装すべてのノード及びコンポーネントに変更を伝播することを可能にする場合がある。一実施形態において、通信機構は、一貫性の低い更新を提供し、通信機構は情報を伝播し、従って、すべてのノードに対する即時更新を提供しない。しかし、通信システムは、情報を追跡している場合がある、様々なノード及びコンポーネント間の低一貫性を維持するために十分な速度の更新を伝播する場合がある。一実施形態において、通信機構は、伝達情報がシステムの通信バンド幅に負担をかけすぎないように更新情報を伝播する。一実施形態において、これは、その他の内部コンポーネント又は内部ノード通信上の少なくともいくつかの更新情報をピギーバッキングすることによって達成される場合がある。
一実施形態において、ストレージサブシステム206のエンティティID(eID)ストアは、エンティティロケータ(eID)のテーブルとして実装される場合があり、各eIDの{名前、値}の1組として表される属性のセットは、エンティティと関連する。eIDストアは、検索可能なデータサービスの情報の権限を有するストアである。検索可能なデータサービスのクライアントアプリケーションが、ウェブサービスプラットフォーム200により提供されるウェブサービスインターフェースに対するストレージノード要求を介して、検索可能なデータサービスに情報を書き込む場合、ストレージノード要求は、要求ルーター202により、ストレージサブシステム206内の特定のストレージノードへ送られ、ストレージノード上で、情報はローカルeIDストアに書き込まれる。情報は、特定のアプリケーションに関連する特定のバケットに書き込まれる場合があり、バケット情報は、ストレージノード要求に提供される場合があることに留意されたい。従って、異なるクライアントアプリケーションの情報は、異なるバケットに書き込まれる場合がある。一実施形態において、検索可能なデータサービスの加入者は、特定のアプリケーションの検索可能なインデックスの作成を開始する場合、加入者は、検索可能なインデックス(バケット)にバケット識別子を提供する場合がある。検索可能なインデックスに対して、要求(例えば、クエリ)が作成された場合、要求は、検索可能なインデックスのバケット識別子を参照する。加入者は、検索可能なデータサービスの複数の加入者を識別するために使用される場合がある、固有の加入者識別子が提供される場合があることに留意されたい。一実施形態において、ウェブサービスプラットフォームは、加入者に加入者識別子を割り当てる場合がある。特定の加入者は、1つ以上の検索可能なインデックスを有する場合があり、それぞれにバケットが割り当てられ、バケット識別子が与えられる。従って、特定の加入者識別子及び特定のバケット識別子は、検索可能なデータサービスのドメインを特定する。バケットは、2つ以上の異なるストレージノード上の2つ以上のローカルeIDストアに渡って分散されることがあることに留意されたい。ストレージノード要求又はクエリノード要求が送られる特定のストレージノードeIDストアは、要求内に指定される加入者識別子、バケット識別子、及びeIDにより決定される場合がある。
一度情報がeIDストアに追加されると、eIDストアのインデックスが構築される場合がある。上記に記載のように、eIDストアの各eIDは、{名前、値}の1組で保存される関連する属性のセットを有する。各名前は、インデックスに対応し、各インデックスは、{名前、値}の1組の特定の名前に対応する。一実施形態において、インデックス(インデックスの各行)は、名前に関連する値によりソートされている場合がある。一実施形態において、インデックスは、ローカルeIDストアに関連するローカルクエリインデックスストアに保存されている場合がある。インデックスは、特定のバケットに特有であることに留意されたい。一実施形態において、しかしながら、インデックスは小さなバケットがたくさんある場合は、多くの小さなデータ構造を有することを避けるために、バケットを渡って連結されている場合がある。
例として、eIDストア及び関連インデックスは、販売商品項目の情報データベース(データストア)、例えば、本を販売するオンライン商業ウェブサイトの本などに対して構築される場合がある。項目の1つの属性は、項目の販売価格である場合がある。従って、データベースの項目の情報のeIDは、eIDストアに提供され、追加される場合がある。各eIDは、関連する{名前、値}の1組のセットを有し、関連項目の様々な属性の名前及び値を示す。例えば、項目のこれら{名前、値}の1組の1つは、「販売価格−<金額>」である場合がある。従って、インデックスは、属性名「販売価格」に対して作成される。このインデックスは、「販売価格」の値でソートされてもよい。クライアントは、クライアントは、特定の「販売価格」、指定金額未満の「販売価格」、などを有するeIDを要求していることを示すクエリ式を含む、クエリ要求を提出する場合がある。インデックスは、そしてクエリ式を満たす「販売価格」値を有するデータストア内の項目を捜すために使用される場合がある。クエリを満たす「販売価格」値を有するデータストアの項目のすべてのeIDは、クエリ結果で、問い合わせているクライアントに返される場合がある。
一実施形態において、ストレージサブシステム206は、バケットを1つのパーティションとして初期化する場合がある。バケットに情報が追加されるに従い、バケットは、最終的に1つのストレージノードに適合するには大きすぎる、又はその付近点まで成長する場合がある。ストレージノードの空きストレージ容量が非常に少なくなる、ある程度前に(すなわち、ストレージノードの空きストレージ容量がコンフォートゾーンである間に)、バケットを、2つ(又はそれ以上)のパーティションに再分割し、パーティションの1つ(又はそれ以上)は、別のストレージノードに移動し、バケットが継続して成長できるようにする場合がある。このバケットの再分割は、クライアントアプリケーションからは透過的に実行される場合がある。分割は、その他の理由、例えば、サービス要求に負荷バランシングを提供するために実行される場合もあることに留意されたい。検索可能なデータサービスの分割機構は、本文献の後にさらに記載する。
検索可能なデータサービスの実施形態は、クライアントが、以前にバケットに追加された入力を削除することを可能にするインターフェースを提供する場合がある。一実施形態において、これらの入力は、eIDストアで削除済みとしてマークされるが、ディスクから削除されていない。別の実施形態において、これらの入力は削除対象としてマークされ、検索可能なデータサービスは、定期的又は不定期的にゴミ収集し、削除対象としてマークされた、いずれの入力を削除する機構を提供する場合がある。一実施形態において、バケットが、2つ以上のパーティションを作成するために、以前に再分割され、結果的に入力がバケットから削除されている場合は、検索可能なデータサービスは、ストレージノード上に単一の結合されたパーティションを保存するために十分なディスク容量がある場合は、2つ以上のパーティションを1つのパーティションに結合する機構を提供する場合がある。
バケットの再分割は、バケット(又はバケットのパーティション)が単一ストレージノードに適合するには大きすぎる、又はその付近点である場合に、実行される場合がある。従って、本明細書に記載のバケットの再分割は、バケットが、クライアントのストレージ要求の成長とともに、バケットが成長できるようにする場合がある。一方、例えば、ストレージノード及び/又はデータセンタに渡って冗長性、データ耐性、データ可用性、及び負荷分散を提供するために、2つ以上のストレージノードに渡るパーティションの置換が実行される場合がある。1つのデータセンタ内、又はデータセンタに渡る2つ以上のストレージノードへのパーティションの置換は、1つのパーティションしか有さないバケットに対しても実行される場合がある。
一実施形態において、検索可能なデータサービスは、物理的に2つ以上のデータセンタに存在するノード又はホスト上に実装される場合があるということに留意されたい。各データセンタは、検索可能なデータサービスの実装に関与する2つ以上のノードを含む場合がある。データセンタの検索可能なデータサービスノードは、1つ以上のコーディネータノード(要求ルーター202のインスタンスを受け入れるノード)、1つ以上のクエリノード、及び1つ以上のストレージノードを含む場合があるが、それらだけに限定されない。データセンタ内のストレージノード上のパーティションは、データセンタ内の1つ以上のその他のストレージノードに複製される場合があり、及び/又は1つ以上のその他のデータセンタ内の1つ以上のストレージノードに複製される場合があるデータセンタ内での複製は、データセンタ内でのノード障害を防グ場合があり、データセンタ内のノードに負荷バランシングを提供する場合がある。データセンタを渡る複製は、データセンタレベルでの障害を防ぎ、データセンタに渡る負荷バランシングを提供する場合がある。
一実施形態において、検索可能なデータサービスが2つ以上のデータセンタに渡って実装されている場合、単一パーティションを有するバケットは、少なくとも4つのパーティションの複製を有する場合がある。このバケットが存在する、いずれの特定のデータセンタにおいて、パーティションは、少なくとも2つのストレージノードに複製される場合があり、また少なくとも1つのその他のデータセンタにも複製される場合がある。その他のデータセンタにおいて、パーティションは、データセンタ内の少なくとも2つのストレージノードに複製される場合がある。バケットが1つ以上のパーティションを有する場合、各パーティションは、データセンタ内のストレージノードに渡って同様に複製される場合があり、及び/又はデータセンタに渡るストレージノードに複製される場合もある。
一実施形態において、遅延複製機構は、パーティションの複製に使用される場合がある。一実施形態において、パーティションを複製する際、2つの種類の通信がノード間で実行される場合がある。一実施形態において、パーティションの複製は、データセンタ内及びデータセンタに渡る検索可能なデータサービスノード、並びにコンポーネント間で、少なくとも部分的にゴシッププロトコル系の通信機構とアンチエントロピー系の通信機構を併用して実行される場合がある。アンチエントロピープロトコルは、ゴシッププロトコルより高速な通信を提供する場合がある。初期の一貫性を確実にするために、アンチエントロピープロトコルを使用し、パーティションのデータ構造全体を、その他のストレージノードに複製する場合がある。とはいうものの、それまでの間に、更新が受け取られ、元のパーティションに適用される場合がある。従って、アンチエントロピー複製の実行中に、元のストレージノード上で受け取った元のパーティションへの更新は、ゴシッププロトコルを使用し、その他のストレージノードの新しい複製に伝播される場合がある。アンチエントロピーを介して複製されるパーティションの複製は、時間の経過とともに、徐々に古くなっていく。しかし、受け取られたいずれの更新は、新しい複製に伝達される。パーティションのアンチエントロピー複製が完了し、新しい複製がオンラインになる準備が整うと、新しい複製は、伝達された更新により、最新である場合がある。
一実施形態において、検索可能なデータサービスは、24/7にできる限り近い、検索可能なインデックスの可用性及び信頼性をクライアントに提供するよう試みる場合があり、ストレージノード又はデータセンタ全体までもが、何かの理由で使用負荷になった場合でも、確実に検索可能なインデックスが使用可能であり、いずれの追加又は修正を含む最新であるようにする機構を提供する場合がある。データセンタ内及びデータセンタを渡る両方のストレージノードを渡るパーティションの複製は、本機構の一部である。使用可能な複製が確実に最新であることを助長するために、一実施形態において、データストアのエンティティへの入力が、ローカルeIDストアに追加された、又はローカルeIDストアで修正された場合、ストレージノード上のローカルeIDストアに対して行われた変更は、ストレージサブシステム206の更新サービスにより、その他のストレージノード上のその他のeIDストアの1つ以上に対しても行われる場合がある。一実施形態において、各ストレージノード上のeID更新管理コンポーネントのインスタンスは、更新サービス機能をストレージノードに実装する場合がある。一実施形態において、更新サービスは、各更新が、その他のストレージノード上の複製の2つ以上に確実に適用されるようにするが、必ずしもすべての複製に対してではない。ストレージノード間のゴシッププロトコルは、そして更新をすべての複製に伝播するために使用される場合がある。
一実施形態において、データセンタのストレージノード上のローカルeIDストアに更新が行われ、更新が正常に行われた事を示す応答がクライアントに返る前、ストレージサブシステム206の更新サービスは、データセンタのストレージノードのその他のeIDストアの少なくとも1つ、及びその他のデータセンタのストレージノードのその他のローカルeIDストアの少なくとも1つに確実に更新が行われるように動作する場合がある。一実施形態において、データセンタ内のストレージノード上のローカルeIDに最初の更新が行われた場合、ストレージサブシステム206の更新サービスは、更新が正常におこなわれたという応答をクライアントに送信する前に、他のデータセンタの少なくとも2つのローカルストレージノード、及び少なくとも1つのストレージノードに対して更新が正常に行われたという確認を待つ。従って、何らかの理由により、元のストレージノード又はデータセンタ全体までもがオフラインに成る場合、最新の複製は、同一データセンタの他のストレージノード、又は異なるデータセンタに存在する他のストレージノードから入手可能である場合がある。更新は、クライアントは、パーティションの複製を受け入れるすべてのストレージノードに更新が伝播される前に、更新が正常に行われたと通知されたとしても、パーティションのすべての複製は、ゴシッププロトコルを使用する更新サービスにより、一貫性が低く維持されるように他のストレージノードに伝播される場合があることに留意されたい。
特定のパーティション又はバケットのパーティションを複製するストレージノードは、複製グループと考えてもよい。複製グループのストレージノードは、パーティションの同一、又はほぼ同一のコピー又は複製である。一実施形態において、パーティションに対する更新は、ゴシッププロトコルを使用し、複製グループ内のストレージノードに伝播される場合がある。従って、「同一」は、低い一貫性を提供するゴシッププロトコルの制限を受けやすい場合がある。ある時点において、複製グループ内のパーティションは、必ずしも同一である必要はないが、ゴシッププロトコルを介して更新が伝播されると同時に、同一になるよう収束しなければいけない。
一実施形態において、複製グループ内に維持されるパーティションの複製の数は、データセンタのハードウェアの監視される可用性及び信頼性の統計による場合がある。検索可能なデータサービスがハードウェアはあまり信頼性又は可用性がないと認める場合、複製グループ内により多くの複製が作成される場合がある。より信頼性があり、可用性があるハードウェアは、より少ない複製を維持することを可能にする。一実施形態において、複製グループ内に、少なくとも4つから、最高6つまでのパーティションの複製が存在する場合がある。これは、データの耐性、信頼性、及び可用性を提供するために作成され、維持される複製に関連することに留意されたい。一実施形態において、複製グループ内で維持されるパーティションの複製の数は、2つ以上のデータセンタに渡るハードウェアの監視される可用性及び信頼性の統計による場合がある。一実施形態において、複製グループ内に維持されるパーティションの複製の数は、少なくともネットワークの操作特性の機能の一部でもある場合がある。本実施形態において、例えば、ネットワークの障害モード、ネットワークの応答時間、ネットワーク上でのデータ取り出しのエラー率、又は1つ以上のその他の要素又はその組み合わせの1つ以上を含む場合があるが、それらだけに限定されない要素に基づき、データの耐性が向上される場合がある。
一実施形態において、パーティションの複製は、検索可能なデータサービスのグループメンバーシップ及びヘルスコンポーネントにより、特定のパーティション又はパーティションの特定の複製の読み取りが非常に盛んであり、パーティション又は複製グループ内の特定の複製がたくさんの読み取り(クエリメッセージ)を受け取っていることが検出される状況において、実行される場合もある。検索可能なデータサービスは、パーティション又は複製が、読み込みのコンフォートゾーンを越えそうな限界のクエリを受信しているということの検出に伴い、より多くの複製に渡ってクエリを分散し、従って、追加ストレージノードに渡る読み取り(クエリ)負荷の負荷バランシングを提供するために、パーティションの追加複製を1つ以上作成する場合がある。
バケットに対する高書き込み負荷(例えば、クライアントからバケットへの追加又は更新入力メッセージ)が検出された場合、パーティション又はバケット内のパーティションの追加複製を作成することは、役に立たない場合がある。変わりに、追加複製の作成は、更新は、ゴシッププロトコルを使用して複製に伝播され、より多くの複製がより多くのゴシップを複製グループ内に生成する傾向にあることから、逆効果を生じる場合がある。従って、一実施形態において、検索可能なデータサービスにより、バケットが書き込みが盛んであり、少なくとも一部のストレージノードがそれらのコンフォートゾーンの境界線に接近している場合があることが検出された場合、検索可能なデータサービスは、より多くのパーティションの複製を作成するよりは、バケット内のデータがより多くのストレージノードを渡り分散されるようにバケットを再分割する場合があり、従って、書き込み負荷はより多くのストレージノードに渡って負荷バランシングされる場合がある。
一実施形態において、複製が必要なパーティションを有するストレージノードは、この情報を1つ以上のその他のストレージノードに、例えばゴシッププロトコルを使用して伝達する場合がある。データセンタ内又は別のデータセンタのその他のストレージノードの1つ以上は、パーティションの複製を進んで受け入れる場合がある。別のストレージノードへの実際の複製における情報は、検索可能なデータサービスのドメイン内(バケット内)の複製の状態のトラックできるようにするために、検索可能なデータサービスのノード上のその他のコンポーネント(例えば、コーディネータノード及びクエリノード上のストレージノードロケータ)に伝達される場合がある。
ストレージノード上のパーティションの再分割に関する情報は、検索可能なデータサービスのドメイン内のパーティションの状態がトラックできるように、同様に、その他のノードのその他のコンポーネントに伝達される場合がある。パーティションをあるストレージノードから別のストレージノードに移動する必要がある場合、この情報は、1つ以上のその他のストレージノードに伝達される場合があり、この情報を受け取るストレージノードは、そして進んでこのパーティションを受け入れる場合がある。パーティションを移動する必要のあるストレージノードは、そしてパーティションを受け取るために最適なストレージノード候補を選択する。検索可能なデータサービスシステムの一実施形態におけるストレージノード上のディスク負荷を管理するためのストレス管理アルゴリズムを実装し、パーティションを受け取るために最適なストレージノード候補を2つ以上のストレージノード候補から選択するために使用される場合がある、例示的なストレス管理機構を、本文献の後部、表題「ストレス管理」のセクションに記載する。
問題又は危機状態に対する反動応答としてパーティションを再分割又は複製する代わりに、検索可能なデータサービスは、ノードが、ストレージサブシステム206内のストレージノード上のストレージリソースを含むノード上の様々なリソースの使用及びヘルスを監視し、ヘルス情報を検索可能なデータサービス内のノード間で共有し、検索可能なデータサービス内の様々なリソースの潜在的高ストレス又は負荷を避けるように積極的に働くことを可能にする、1つ以上の機構を提供する場合がある。一実施形態において、コンフォートゾーンは、検索可能なデータサービス内の様々なリソースに対して定義され、検索可能なデータサービスは、リソースが、それらの個々のコンフォートゾーンを越えないように積極的に働く場合がある。
検索可能なデータサービスは、リソースがそのコンフォートゾーンの境界に近づきつつあることを検出した場合、特定のアクションを実行する場合がある。ストレージサブシステム206のストレージノードに対するこれらのアクションは、複製及び再分割を含むが、それらだけに限定されない。検索可能なデータサービスは、ストレージノードの使用及びヘルス、並びにクエリノード及びコーディネータノードなどのその他の種類のリソースを監視する場合があり、潜在的危機に先立ち(いわゆる、リソースがまだコンフォートゾーンにある間に)、リソースが既にストレス下になるまで待たずに、アクション(例えば、ストレージノードの再分割又は複製)の実行を試みる場合がある。システムが、リソースが既にストレスを受けるようになるまで、ストレスを開放するための、再分割又は複製などのいくつかのアクションの実行を試みることを待つとすると、リソースは既に内部及び外部要求により過剰状態となる場合があり、アクションの実行がさらに困難になる。従って、検索可能なデータサービスは、システム内のリソースの可用性及び信頼性をサポートするヘルス管理に対して、反応性アプローチとは反対である、先を見越したアプローチを提供する。
一実施形態において、検索可能なデータサービスの各ノードは、ノードのコントロール及びモニタリングエージェントとしての役割を果たす、ノードマネージャーコンポーネントのインスタンスを含む場合がある。ノードマネージャーコンポーネントは、ノード上の様々なリソースのヘルス情報を監視する自己モニタリングエージェントとしての役割を果たす場合があり、リソースは、ディスク使用量、バンド幅使用量、CPU使用量、読み取り及び/又は書き込み負荷などを含む場合があるが、それだけに限定されない。
一実施形態において、検索可能なデータサービスの各ノード上のストレス管理コンポーネントは、ノードマネージャーにより収集されたノードのリソースのヘルス評価指数がそのコンフォートゾーンの限界である、又は限界に近いかどうかを検出する場合があり、検出の応答として、適切なアクションを開始する場合がある。ストレスマネージャーは、リソースがそのコンフォートゾーンの限界である、又は近い場合に、実行すべきアクションを決定するために使用される、1つ以上のアルゴリズムを実装する場合がある。例えば、ストレージノード上のストレージ空き容量がそのコンフォートゾーンの境界に近づいている場合、ストレスマネージャーは、新しく作成されたパーティションは、別のストレージノードに移動されるようにノード上で再分割を開始する場合があり、従って、ストレージノードのディスク容量を開放する。再分割は、実際にはローカルパーティションマネージャーの管理化で実行されることに留意されたい。
ノードマネージャーコンポーネントは、ノードが検索可能なデータサービス実装の全体的なヘルスモニタリング及び維持に関与することを可能にする場合がある。ノードマネージャーコンポーネントは、特定のノード上のリソースヘルスを監視する。一実施形態において、別のコンポーネントは、ノードヘルスを、その他のノードと比較するために、ローカル周辺又はノードグループのその他のノードヘルスを監視する場合がある。
一実施形態において、検索可能なデータサービスの各ノードは、グループメンバーシップ及びヘルスコンポーネントのインスタンスを有する場合がある。一実施形態において、様々なノード上のグループメンバーシップ及びヘルスコンポーネントは、局所で収集されたノードのヘルス情報を、検索可能なデータサービスのローカル周辺又はノードグループ内のその他のノードに伝達することを可能にする。一実施形態において、グループメンバーシップ及びヘルスコンポーネントは、検索可能なデータサービスのその他のコンポーネントが、監視されるノードのセットを識別し、自動更新されるそれらのノードに関するヘルス情報に問い合わせることを可能にする。グループメンバーシップ及びヘルスコンポーネントは、例えば、障害検出機構としての役割を果たす場合がある。グループメンバーシップ及びヘルスコンポーネントは、ノードがそのローカルヘルスを、周辺又はグループ内のその他のノードと比較することを可能にする。
一実施形態において、検索可能なデータサービスの各ノードは、グループメンバーシップ及びヘルス機構により、その周辺又はノードグループ内のその他のノードから受け取る、そのローカルリソースのヘルス及びヘルスメッセージに基づき、局所決定を行う場合がある。これは、中央制御装置に頼らずに、ローカルノード及びノードグループに渡る検索可能なデータサービスのヘルスモニタリング並びにリソースの管理を供給する場合がある。従って、一実施形態において、検索可能なデータサービス実装全体のヘルスを監視し、リソースの最適化を試みる中央制御が存在せず、従って、単一障害点がない場合がある。ヘルスモニタリング及び維持は、中央制御装置による代わりに、ノード上で局所的に、及びノードグループ内で共同して実行されるため、ヘルス情報の全体リストを維持する必要がなく、より少ないヘルス情報を、検索可能なデータサービス実装に渡り、全体に伝達すればよい。
ローカルノードマネージャーにより、各ノードはそれ自身のリソース使用量及びヘルスを監視する。各ノードは、ローカル周辺又はグループ内のその他のノードも監視する場合がある。ローカルストレスマネージャーは、ノードマネージャーにより収集されるリソース使用量及びヘルス情報にアクセスする。ストレージノード上のストレスマネージャーが、ノードは、そのデータを再分割する必要があると判断する場合、ストレージノードは、別のストレージノード上に新しく作成されたパーティションを受け入れるように強制しない。代わりに、この情報は、例えばグループメンバーシップ及びヘルス機構により、その他のローカルストレージノードと共有される。ディスク空き容量を有するその他のローカルストレージノード(この場合もやはり、ノードマネージャーにより局所的に監視される)は、グループメンバーシップ及びヘルス機構を介して共有されるヘルス情報の再分割が必要なその他のストレージノードを捜す場合がある。空き容量を有するストレージノードが、パーティションの移動を必要とする別のストレージノードを検出する場合、進んでパーティションを受け入れるように決定する場合がある。
従って、特定のグループ内のストレージノードは、それら自身の間で、データの再分割に関して同意する場合がある。これは、すべてのノードが関連するグループの決定として実行する必要がない場合がある。代わりに、2つのストレージノードが共同してデータを再分割することに同意し、その1つのノードは進んで新しいパーティションを受け入れる。このグループ通信及び連携は、特定のデータセンタ内のノード間で生じる場合もあるが、データセンタを渡るノード間でも生じる場合があることに留意されたい。
最初、バケットが作成されたとき、バケットは1つのパーティションを含む。パーティションは、複製グループを形成する2つ以上のストレージノードに渡って複製される場合がある。2つ以上の新しいパーティションを形成するために、複製されたパーティションが再分割される際、それぞれの新しいパーティションは、複製グループになる。最初、新しく作成されたパーティションは、同一ストレージノード上に存在する。従って、各ストレージノードは、1つ以上の複製グループの構成員である場合がある。パーティションの再分割は、複製グループ内のすべてのストレージノード上で実行され、まだ1つのバケットが存在し、最初、すべてのデータは同位置に存在する。データの半分は、しかしながら、パーティションAに存在し、もう半分は、パーティションBに存在する。複製はまだ同一ストレージノード上に存在するため、いずれにせよ、いずれのストレージノードの潜在的ストレージ容量問題は再分割により解決されていない。各ストレージノードは、そのストレージ空き容量がコンフォートゾーンの限界に近づいている場合、可能であれば、パーティションを別のストレージノードに移動することを決定する場合がある。一実施形態において、別のストレージノードは、一実施形態において、ゴシッププロトコルを介して捜し出される場合、進んでパーティションを受け入れる決定をする場合がある。パーティションをその他のストレージノードにコピーすることは、いずれの更新をパーティションの複製に適用するために使用されるゴシッププロトコルとともに、パーティションの複製のためのアンチエントロピー機構を使用して実行される場合がある。このパーティションの移動は、危機状態の回避を助長するために、ストレージの空き容量がコンフォートゾーンである間に、進んで実行される場合がある。
上記に記載のように、ノードグループの1種類は、複製グループである。複製グループ内の各ストレージノードは、特定のパーティションの複製を保存する。パーティションが成長するにつれ、複製グループ内のストレージノードのいずれかは、ノード上のストレージ空き容量がそのコンフォートゾーンの限界に近づいていることを検出する場合があり、従ってローカル複製を分割する必要がある場合がある。一実施形態において、パーティションが複製グループ内のストレージノードのいずれかにとって大きすぎるようになりつつある場合、パーティションは、その他のストレージノードにはディスク空き容量があるとしても、すべてのストレージノード上で再分割される場合がある。新しく作成されたパーティションは、最初はすべてのパーティションが同一のストレージノードのセットに存在するとしても、それぞれ独立した複製グループを構成する場合がある。従って、複製されたパーティションの再分割は、以前は1つの複製グループしか存在していなかった所に、2つの複製グループも生成する。ストレージ空き容量がコンフォートゾーンの限界又は限界付近であるストレージノードの1つは、そしてその新しく作成されたパーティションの1つの複製を、進んでパーティションを受け入れる別のストレージノードに移動する場合がある。例えば、別のノードは、複製グループに結合又は追加される場合があり、進んでパーティションを受け入れる場合がある。複製グループ内のその他のストレージノードは、十分なディスク容量を有する場合があり、従って、パーティションを移動しない場合がある。
図4は、一実施形態に従い、検索可能なデータサービスの例示的なネットワークアーキテクチャを例示している。検索可能なデータサービス実装は、ウェブサービスプラットフォーム200、1つ以上のコーディネータノード350、クエリTSAR(Top Search AggregatoR)ノードと称される1つ以上のクエリノード360、及び1つ以上のストレージノード370を含む場合があるが、それだけに限定されない。各コーディネータノード350は、要求ルーター202の少なくとも1つのインスタンスを含む場合があるが、それだけに限定されない。
図3に記載の高位機能クエリサブシステム204及びストレージサブシステム206は、必ずではないが、クエリTSARノード360及びストレージノード370上のそれぞれに直接マップする場合があることに留意されたい。各サブシステムは、図6を参照してさらに下記に記載される、いくつかのコンポーネントを含む場合がある。一実施形態において、クエリサブシステム204のコンポーネントは、クエリTSARノード360上に存在し、ストレージサブシステム206のコンポーネントは、ストレージノード370上にマップする。又は、機能的にサブシステムの1つの部分と考えられる場合がある特定のコンポーネントは、物理的にコーディネータノード350、クエリTSARノード360、又はストレージノード370上に存在する場合がある。例えば、各ストレージノード370は、図6のローカルクエリプロセッサ228のインスタンスを含む場合があり、機能的にクエリサブシステム204の一部と考えられる場合があるが、必ずというわけではない。さらに、図6に描かれる検索可能なデータサービスのいくつかのコンポーネントは、ノードの異なるもの上にローカルインスタンスを有する場合がある。例えば、一実施形態において、各コーディネータノード350上及び各クエリTSARノード360上の、ストレージノードロケータ216のローカルインスタンスが存在する場合がある。
データストア332は、データ(エンティティ)のユニットが保存される場合がある、データストレージシステムを示す。データストア332は、エンティティを捜し、取り出すために、ロケータが使用される場合がある、いずれの種類のストレージシステムに従って実装される場合がある。クライアントシステム330上に、バックエンドデータストア332に対する検索フロントエンドとして検索可能なデータサービスを活用するアプリケーションが実装される場合がある。一実施形態において、アプリケーションは、バックエンドデータストア332のデータを検索、及び取り出すためのウェブサービスプラットフォーム200のウェブサービスインターフェースに従い、検索可能なデータサービスの機能性にアクセスするように設定されている場合がある。
検索可能なデータサービスを、バックエンドデータストア332に対する検索フロントエンドとして活用するアプリケーションは、検索可能なデータサービスの加入者と称される場合がある。検索可能なデータサービス実装は、2以上の加入者を有する場合があることに留意されたい。すなわち、検索可能なデータサービス実装は、検索可能なインデックスを2つ以上のバックエンドデータストアに提供する場合がある。またアプリケーションは、2つ以上のバックエンドデータストア332に対する検索フロントエンドとして、検索可能なデータサービス実装を活用する場合があることにも留意されたい。2つ以上のバックエンドデータストア332に対する検索フロントエンドとして、検索可能なデータサービス実装を活用し、そのため、従って検索可能なデータサービス実装に、2つ以上の検索可能なインデックスが実装されるアプリケーションは、各検索可能なインデックスの加入者として別々に、及び一意的に識別される場合がある。固有の加入者識別子は、検索可能なデータサービスへの各加入に割り当てられる場合があり、加入者識別子は、特定のデータストア332に対して、特定の検索可能なインデックスを一意的に識別するために使用される場合がある。2つ以上のクライアントシステム330は、関連固有加入者識別子を使用し、検索可能なデータサービス実装の特定の検索可能なインデックスにアクセスする場合があることに留意されたい。
一実施形態において、クライアントシステム330は、インターネット334を介して、ウェブサービスプラットフォームのウェブサービスインターフェースに従い、検索可能なデータサービスに、サービス要求(クエリノード要求及び/又はストレージノード要求)を提出する場合がある。ウェブサービスプラットフォーム200は、サービス要求をコーディネータノード350まで送る場合がある。コーディネータノード350は、サービス要求を適切なノードまで送り、結果を回収し、結果をウェブサービスプラットフォーム200に送り返す。コーディネータノード350上の要求ルーターは、ウェブサービスプラットフォーム200からサービス要求を受け取り、各サービス要求がストレージノード要求か、又はクエリノード要求かを判断する場合がある。サービス要求がストレージノード要求の場合、要求ルーターは、ストレージノードロケータに、要求に指定されるeID及びバケットから適切なストレージノード370までをマップするように問い合わせる。サービス要求がクエリノード要求の場合、要求ルーターはクエリノードロケータに、要求に指定されるバケット及びクエリ式から適切なクエリTSARノード360までをマップするように問い合わせる。一実施形態において、ストレージノードロケータ及びクエリノードロケータは、各コーディネータノード350上に位置するインスタンスを有する検索可能なデータサービスのコンポーネントである場合がある。
コーディネータノード350からのクエリノード要求を受信次第、クエリTSARノード360は、クエリを1つ以上のストレージノード370に転送する前に、クエリの処理を実行する場合がある。クエリTSARノード360は、クエリを実行するために、クエリを適切なストレージノード370に転送する場合がある。小さなドメインに対して、クエリは一般的に単一ストレージノード370上で実行される場合がある。より大きなドメインは、複数のストレージノード370を渡り分割され、クエリが1つのストレージノード370バケットは、複数のストレージノードに渡り分割され、各パーティションの1つのストレージノード上でクエリを実行することを要求する場合がある。分割は、本文献の後でさらに記載する。クエリTSARノード360は、クエリの適切なストレージノード370を捜すために、ストレージノードロケータのローカルインスタンスを使用する場合がある。クエリTSARノード360は、ストレージノード370から受け取ったクエリの結果を集約し、ソートする場合がある。クエリTSARノード360は、そしてクエリの結果をコーディネータノード350に返す場合がある。一実施形態において、クエリTSARノード360は、必要に応じて、又は所望により、ページ番号を付ける場合がある。
ストレージノード370上で、eIDストアは、eID及びそれらの属性に対する権限ストアとしての役割を果たす場合がある。ローカルストレージノード370上のeIDのすべての属性にインデックスをつける場合がある、eIDストアからインデックスが構築される場合がある。ローカルクエリプロセッサは、クエリTSARノード360から受信したクエリを、ストレージノード370上のインデックスに対して実行する場合がある。eID更新サービスは、コーディネータノード350からストレージノード要求を受け取り、それに応じてeIDストアを更新する場合がある。ローカルパーティションマネージャーは、ストレージノード370のローカルリソース(ディスクスペース、CPU負荷、ネットワークバンド幅など)の使用を監視する場合があり、必要に応じて、パーティションを再分散するために、その他のストレージノード370上のその他のパーティションマネージャーと通信し、それに応じてバケットのパーティションを管理する場合があり、パーティションを移動するために、共同してその他のストレージノードと通信を行う場合がある。
図5A及び5Bは、一実施形態に従い、検索可能なインデックスの検索可能なデータサービスオブジェクトを保存し、検索可能なインデックスのデータストアにあるエンティティの識別子(eIDs)を捜すサービス要求を処理する検索可能なデータサービスを実装する方法を例示している。各検索可能なデータサービスオブジェクトは、データストアの特定のエンティティの2つ以上の属性を指定する場合がある。各属性は、{名前、値}の1組で表示される場合があり、属性は、データストアの特定のエンティティを位置付けるための固有のエンティティ識別子(eID)を含む場合がある。
検索可能なデータサービスシステムは、複数のノード上に実装される場合がある。ノードは、1つのデータセンタ内に位置する場合、又は2つ以上のデータセンタに分散されている場合がある。データセンタは、地理的に分散している場合がある。一実施形態において、検索可能なデータサービスは、少なくとも調整サブシステム、クエリサブシステム、及びストレージサブシステムを含んでいる場合がある。一実施形態において、複数のノードは、調整サブシステムを実装する1つ以上のコーディネータノード、クエリサブシステムを実装する1つ以上のクエリノード(クエリTSARノードとも称される)、及びストレージサブシステムを実装するストレージノードを含んでいる場合がある。一実施形態において、ウェブサービスプラットフォームは、検索可能なデータサービスのクライアントアプリケーションに対して1つ以上のインターフェースコールを提供する、検索可能なデータサービスに対してウェブサービスインターフェースを提供する場合がある。
図5Aにおいて、ウェブサービスプラットフォームは、1000で示されるように、検索可能なデータサービスのウェブサービスインターフェースに従い、クライアントアプリケーションからサービス要求を受け取る場合がある。ウェブサービスプラットフォームは、1002で示されるように、そして検索可能なデータサービスのコーディネータノードにサービス要求を転送する場合がある。一実施形態において、ウェブサービスプラットフォームは、検索可能なデータサービスの計測、請求、認証、及び加入者のアクセス制御を実行する1つ以上のその他のサービスを提供する場合がある。
1004で示されるように、コーディネータノードは、サービス要求がクエリノード要求(検索可能なインデックスの読み取り作業)であるか、又はストレージノード要求(検索可能なインデックスへの書き込み作業、又はリスト属性要求)であるかを判断する場合がある。一実施形態において、検索可能なデータサービスの要求ルーターコンポーネントは、当該判断を実行する場合がある。1004において、サービス要求がストレージ要求である場合、1006に示されるように、コーディネータノードは、ストレージノード要求を受け取るストレージノードを捜す場合がある。一実施形態において、検索可能なデータサービスの要求ルーターコンポーネントは、ストレージノード要求を受信するストレージノードを位置付けるために、検索可能なデータサービスのローカルストレージノードロケータコンポーネントを調べる場合がある。1008に示されるように、コーディネータノードは、そしてストレージノード要求を決定されたストレージノードに転送する場合がある。
ストレージノード要求を受信次第、ストレージノードは、1010に示されるように、検索可能なインデックスのパーティションを、ストレージノード要求に従い修正する場合がある。一実施形態において、ストレージノードは、以下を実行する場合がある。
・ストレージ要求に指定の検索可能なデータサービスオブジェクトを検索可能なインデックスに追加する
・検索可能なインデックスに保存されている検索可能なデータサービスオブジェクトをストレージ要求に指定されるように修正する
・検索可能なインデックスから、検索可能なデータサービスオブジェクトを、ストレージ要求に指定されるように削除する、又は
・ストレージノード要求がリスト属性要求の場合、エンティティのすべての{名前、値}の1組のリストをコンパイルし、返す。リスト属性要求は、パーティションの修正を生じない場合があることに留意されたい
1012に示されるように、パーティションの変更は、修正されたパーティションの複製を保存する、その他のストレージノードの1つ以上に伝播される場合がある。一実施形態において、ゴシッププロトコルに従い、その他のストレージノードに伝播される場合がある。一実施形態において、アンチエントロピープロトコルも、パーティションのその他の複製に変更を伝播するために使用される場合がある。1014に示されるように、ウェブサービスインターフェースに従い、ストレージノード要求の成功又は失敗を示す応答が、クライアントアプリケーションに返される場合がある。
1004において、サービス要求がクエリノード要求である場合、コーディネータノードは、1016に示されるように、クエリノード要求を受信するクエリノードを位置付ける場合がある。一実施形態において、検索可能なデータサービスの要求ルーターコンポーネントは、クエリノード要求を受け取るクエリノードを捜すために、検索可能なデータサービスのローカルクエリノードロケータコンポーネントを調べる場合がある。1018に示されるように、コーディネータノードは、そしてクエリノード要求を決定されたストレージノードに転送する場合がある。アイテム1020は、フローチャートが図5Bに続いていることを示す。
図5Bにおいて、クエリノードは、コーディネータノードからクエリノード要求を受け取り、クエリノード要求を処理する。一実施形態において、クエリノードは、クエリノード要求のいくつかの処理、例えば、クエリノード要求に指定される非正規化クエリ式の正規化を実行する。1022に示されるように、クエリノードは、クエリノード要求に指定されるクエリ式が、以前のクエリノード要求の結果をキャッシュに保存するローカルクエリキャッシュにより満たされるかどうかを判断する場合がある。1024において、クエリノードがローカルクエリキャッシュから満たされる場合は、1026に示されるように、クエリノードは、ローカルクエリキャッシュから取り出したクエリ結果を、ウェブサービスインターフェースに従い、クライアントアプリケーションに返す場合がある。
1024において、クエリノード要求が、ローカルクエリキャッシュから満たされない場合は、1028に示されるように、クエリノードは、クエリノード要求を受け取り、処理するために適した1つ以上のストレージノードを捜す場合がある。一実施形態において、クエリノードは、検索可能なデータサービスのローカルストレージノードロケータコンポーネントを調べ、ストレージノード要求を受け取る1つ以上のストレージノードを捜す場合がある。1030に示されるように、クエリノードは、そしてクエリノード要求を決定されたストレージノードに転送する場合がある。
1032に示されるように、クエリノードからクエリノード要求を受け取る各ストレージノードは、検索可能なインデックスのローカルパーティションを検索し、クエリノード要求により指定されるクエリ式を満たす検索可能なデータサービスオブジェクトを捜す場合がある。1034に示されるように、それぞれのストレージノードは、そしてクエリ式を満たすクエリ結果を、クエリノードに返す場合がある。一実施形態において、クエリ結果は、1036に示されるように、ローカルクエリキャッシュに保存される場合がある。クエリノードは、1038に示されるように、必要に応じて、又は所望により、クエリ結果の結合、ソート、及び/又はページ番号付けを実行する場合がある。1つ以上のストレージノードからクエリ結果を受け取る場合、クエリ結果を結合する必要がある場合がある。クエリ結果がページ限度を超過する場合、クエリ結果はページ番号を付けられ、2つ以上の応答メッセージにてクライアントアプリケーションに返される場合がある。一実施形態において、クエリ結果は、クリエノード要求に指定されるソート条件に従って、ソートされる場合がある。一実施形態において、クエリ結果は、少なくとも、検索可能なインデックス中の、クエリノード要求に指定されるクエリ式を満たす各検索可能なデータサービスオブジェクトからのエンティティ識別子(eID)を含む場合がる。1040に示されるように、クエリノードは、ストレージノードから受け取ったクエリ結果を、ウェブサービスインターフェースに従い、クライアントアプリケーションに返す場合がある。
図6は、一実施形態に従い、検索可能なデータサービスの例示的な下位モジュラーアーキテクチャを例示している。この図は、検索可能なデータサービスの様々なモジュール、又はコンポーネントを通るデータフローを示す。本実施形態において、検索可能なデータサービスは、示されるコンポーネントの1つ以上を含む場合があるが、それだけに限定されない。検索可能なデータサービスの実装は、少なくとも、いくつかの記載のコンポーネントの2つ以上を含む場合があることに留意されたい。
以下に、ウェブサービスプラットフォーム200により提供されるウェブサービスAPIに対する追加要求(ストレージノード要求の一種)を使用して、検索可能なデータサービスに新しい情報が提出された場合の、検索可能なデータサービスの実施形態における、例示的なデータフローを記載する。REST又はSOAP要求がウェブサービスプラットフォーム200に届くと、認証され、タイムスタンプを押され、要求ルーター202に渡される。要求ルーター202は、ストレージノードロケータ216に、データを保存している場合がある1つ以上のストレージノード270のリストを要求し、データをリスト上の1つのノードに送る。ストレージノード270上のエンティティID更新マネージャー230は、データを受け取り、データを自身のローカルエンティティIDストア236に保存し、データを少なくとも別のローカルストレージノード270、及び別のデータセンタに存在する2つのストレージノード270に送る。すべてのこれらのストレージノードがデータを保存後、REST又はSOAPコールは、「成功」結果を返す。
以下に、クエリノード要求又はクエリを処理する際の、検索可能なデータサービスの実施形態における、例示的なデータフローを記載する。REST又はSOAP要求がウェブサービスプラットフォーム200に届き、認証され、要求ルーター202に渡される。要求ルーター202は、クエリノードロケータ220に、クエリを処理可能なクエリTSAR(Top Search AggregatoRs)212のリストを要求し、そのリスト上の1つのノード(クエリTSAR212)にクエリを送る。クエリTSAR212は、最初にクエリがクエリキャッシュ214により満たされるかどうかを判断する。満たされる場合、クエリ応答をウェブサービスプラットフォーム200に送り返す要求ルーター202に返し、そこからクエリ応答は、ウェブサービスインターフェースに従い、クエリを起動したクライアントアプリケーションに返される場合がある。
クエリが、クエリキャッシュ214から回答を得られない場合、クエリTSAR212は、ローカルストレージノードロケータ216に、バケットのパーティション、及びこれらのパーティションの複製を保存するストレージノードホストのセットを要求する。クエリTSAR212は、そして各パーティションから1つのストレージノードホストのローカルクエリプロセッサ228にクエリを送る場合がある。ローカルクエリプロセッサ228は、クエリを満たすすべてのeIDを捜す場合がある。これらのリストは、そしてクエリTSAR212に返され、リストは集約される。集約されたリストは、ソートされ、問い合わせているクライアントに返される場合がある。
検索可能なデータサービスの実施形態は、高可用性及び信頼性要件を有する大きな分散型システム上で実行される場合がある。これらの環境において、検索可能なデータサービスの実施形態は、高可用性及び信頼性要件を満たすために、システムリソースを監視及び管理する場合がある。一実施形態において、グループメンバーシップ及びヘルスコンポーネント226は、各ノード上で実行される場合があり、1つ以上のその他のノードのCPU、ディスク、メモリ、ネットワーク稼働率、及びその他のローカルシステム計測に関するローカルヘルス情報と情報をやり取りする場合がある。グループヘルス226コンポーネントは、複製グループのメンバーシップを追跡記録し、ノードが検索可能なデータサービスシステム環境に出入りする際にも追跡記録する場合がある。
パーティションマネージャー232は、複製グループへのストレージノードホストの割り当て、及びバケットの複数のパーティションへの分割を担当する。これは、ディスク容量が少ない中で実行されているノードが、データセットを分割することを可能にし、いくつかのデータは、別のノードに移動される場合がある。いつ、どのようにデータを分割し、移動するかを決定するための例示的なアルゴリズムを、以下の本文献に記載する。
一実施形態において、すべての検索可能なデータサービスノードは、その他の検索可能なデータサービスノードと情報をやり取りするために、グループ通信コンポーネント222を使用する場合がある。一実施形態において、グループ通信コンポーネント222は、エピデミック(ゴシップ)及びアンチエントロピー内部ノード通信を提供する場合がある。
検索可能なデータサービスの一実施形態において、データストアの更新を要求する場合、各更新要求に対して、要求ルーター202は、連続トークンを生成する場合がある。連続トークンは、順序ID及びおそらくその他のシステム情報を獲得する場合がある。クライアントは、所望により、順序IDを連続トークンから抽出する場合がある。一実施形態において、検索可能なデータサービスは、要求を、この順序IDにより与えられる順序に従い、適用する場合がある。その他の実施形態は、その他の方法を使用して更新に順番をつける場合があることに留意されたい。
一実施形態において、順序IDは、そのローカルNTP同期時間に基づき、要求ルーター202により生成される場合がある。その他の実施形態は、順序IDを生成するために、その他の基準を使用する場合がある。NTP同期時間は、不完全な同期システムであり、クロックスキューにより、更新の準が反転している場合があることに留意されたい。しかし、順序IDを生成するための基準としてNTP同期時間を使用する一実施形態において、クライアントは、この順序に同意しない場合、更新が適用される、及び更新を再提出する順序を決定する場合がある。
一実施形態において、クライアントは、次の検索可能なデータサービスの要求と一緒に、受け取った最後の連続トークンを送るように要求される場合がある。一実施形態において、検索可能なデータサービスは、受け取った最後の連続トークンを使用し、クロックスキュー及び順序に関するデータを収集する場合がある。一実施形態において、検索可能なデータサービスは、必要に応じて、収集されたデータにより決定されるように、更新の順序に影響を与えるために、クライアントにより供給される最後の連続トークンを使用する場合がある。
データ区分及び複製
検索可能なデータサービスの実施形態は、ストレージサブシステム206におけるインデキシングデータの、データ区分及び複製のための1つ以上の機構を提供することができる。データ区分は、検索可能なデータサービスのクライアントが、もしそうでなければ単一のストレージノード上に納まることができる以上に大きい検索可能なインデックスを保存、及び維持することを可能にすることができる。データ複製は、保存、及び検索可能なデータサービスを介してクライアントアプリケーションからのクエリにアクセス可能とされた加入者のデータストアに対して、検索可能なインデックスの持続性、信頼性、及び可用性のための検索可能なインデックスにおける冗長性を提供することができる。
検索可能なデータサービスの実施形態におけるデータ区分、及びデータ複製の一側面は、データ区分、及びデータ複製を制御するセントラルコントローラがないことである。その代わりに、データ区分、及びデータ複製のタスクを、検索可能なデータサービスシステムにおける様々なノード、及びコンポーネント間で分配することができる。
図7は、一実施形態に従い、検索可能なデータサービスシステムの検索可能なインデックスを区分する方法を例示している。検索可能なデータサービスシステムは、複数のノード上に実装することができる。ノードは1つのデータセンタに位置付けられてもよく、又は2つ以上のデータセンタに分散されてもよい。データセンタは、地理的に分散することができる。一実施形態では、検索可能なデータサービスは、少なくとも1つのコーディネーションサブシステム、クエリサブシステム、及びストレージサブシステムを含むことがある。一実施形態では、複数のノードは、コーディネーションサブシステムを実装する1つ以上のコーディネータノード、クエリサブシステムを実装する1つ以上のクエリノード(クエリTSARノードとも呼ばれる)、及びストレージサブシステムを実装する1つ以上のストレージノードを含むことがある。一実施形態では、ウェブサービスプラットフォームは、1つ以上のインタフェースコールを、検索可能なデータサービスのクライアントアプリケーションに提供する検索可能なデータサービスに、ウェブサービスインタフェースを提供することがある。
1050に示すように、検索可能なデータサービスは、単一のストレージノード上に保存される単一のパーティションとして、データストアに対する検索可能なインデックスを初期化することが可能である。1052に示すように、時間とともにパーティションは増大することが可能である。例えば、検索可能なデータサービスオブジェクトを検索可能なインデックスに追加するように、クライアントアプリケーションからストレージ要求が受信されると、パーティションは増大することが可能である。ある時点で、検索可能なデータサービスは、ストレージノード上の利用可能なディスクスペースが、ストレージノード上の利用可能なディスクスペースに対するコンフォートゾーンの限度にある、又は限度に近いことを検出することが可能である。
検索可能なインデックスが増大し続けることを可能にするために、1054に示すように、2つ以上の新しいパーティションを生成するよう、パーティションは再区分されることが可能である。新しいパーティションのそれぞれは、検索可能なインデックスにおいて、検索可能なデータサービスオブジェクトの異なるサブセットを含むことが可能である。次に、新しいパーティションの1つ以上は、1つ以上の他のストレージノードに移動され、したがって1056に示すように、ストレージノード上のストレージ空間を使用可能にすることができる。一実施形態では、別のノードが協力して、自ら新しいパーティションを取り出し保存することが可能である。一実地形態では、パーティションを移動する必要があるストレージノードは、ストレージノードがパーティションを移動する必要があることを示すストレージノードのグループ内で、メッセージを送信することが可能である。次に、メッセージを受信するストレージノードの1つ以上は、自らパーティションを保存することが可能である。次に、ストレージノードは、パーティションを保存するボランティアから、最適なストレージノードを選択するすることが可能であり、次に、選択されたストレージノードと協力して、パーティションを他のストレージノードへ移動することが可能である。ここで留意すべきは、2つのノード上で保存される異なるパーティションは増大し続けることが可能であり、したがって、必要に応じて次に他のストレージノードへ移動されることがある、新しいパーティションを生成するために、再区分されることが可能であるということである。したがって、他のストレージノードへのパーティションの再区分及び移動は、検索可能なインデックスのパーティションが、単一のストレージノードのストレージリミットを越えて増大することを可能にする。検索可能なデータサービスシステムの一実施形態において、ストレージノード上でディスク負荷を管理するためのストレス管理アルゴリズムを実装し、パーティションを受信する2つ以上のボランティアストレージノードのうちで、最適なストレージノードを選択するために使用されることが可能である、例示的ストレス管理機構は、本文書において、ストレス管理という題名の項において後述される。
ここで留意すべきは、2つ以上の新しいパーティションを作成するためのパーティションの再区分、及びストレージノードから1つ以上の他のストレージノードへの、1つ以上のパーティションの移動はまた、検索可能なインデックスへの書き込み負荷を負荷分散するために行われることが可能であるということである。ストレージノードが、パーティションへの書き込み負荷がストレージノードへの書き込みに対するコンフォートゾーンの限度にある、又は限度に近いことを検出する場合、ストレージノードはパーティションを再区分し、書き込み負荷の一部を他のストレージノードへ移動するために、上述のように、新しいパーティションの少なくとも1つを別のストレージノードへ、協力して移動することが可能である。
図8は、一実施形態に従い、検索可能なデータサービスシステムの検索可能なインデックスのパーティションを複製する方法を例示している。データ複製は、検索可能なインデックスの持続性、信頼性、及び可用性のための検索可能なインデックスにおける冗長性を提供することができる。パーティションの複製はまた、ストレージノードの供給源に対する1つ以上の使用評価指標を負荷分散するために行われることが可能である。一実施形態では、ストレージノードが、パーティションへの読み込み負荷がストレージノードへの読み込みに対するコンフォートゾーンの限度にある、又は限度に近いことを検出する場合、パーティションの複製は、パーティションへの読み込み負荷を負荷分散するために行われることが可能である。一実施形態では、ストレージノードが、ストレージノード上のCPU負荷がストレージノードへのCPU負荷に対するコンフォートゾーンの限度にある、又は限度に近いことを検出する場合、パーティションの複製は、ストレージノード上のCPU負荷を負荷分散するために行われることが可能である。
ストレージノードによって保存されるパーティションを複製するために、ストレージノードは、1100に示すように、パーティションの複製を受信するよう別のストレージノードを位置付けることができる。一実施形態では、他のノードは協力して、自ら複製を受信及び保存する。一実施形態では、パーティションを複製したいストレージノードは、ストレージノードが複製を受信するボランティアを探していることを示すストレージノードのグループ内で、メッセージを送信することが可能である。次に、メッセージを受信するストレージノードの1つ以上は、自ら複製を保存することが可能である。次に、ストレージノードは、複製を保存するボランティアから、最適なストレージノードを選択するすることが可能であり、選択されたストレージノードと協力して、パーティションを他のストレージノードへ複製することが可能である。
次に、1102に示すように、ストレージノードは協力して、アンチエントロピープロトコルを使用して、パーティションを他のストレージノードへ複製することが可能である。ここで留意すべきは、検索可能なインデックスに関するストレージノード要求が受信及び処理されると、パーティションは複製の間に潜在的に更新されることが可能であるということである。一実施形態では、パーティション及び複製間の一致性を得るために、1104に示すように、他のストレージノードへ更新を伝えるためのゴシッププロトコルを使用して、複製は、パーティションへ受信された更新と共に更新されることが可能である。ここで留意すべきは、ゴシッププロトコルは、パーティションの複製間の弱一致性をもたらす場合があることである。また、ここで留意すべきは、パーティションの複製の更新は、ゴシッププロトコルを使用して実行され続け、したがって複製間の弱一致性を維持する場合があることである。
パーティションが複製されるストレージノードは、パーティションを保存するストレージノードと同じデータセンタ内にあることが可能であるか、又は別のストレージセンタにあることが可能である。一実施形態では、検索可能なデータサービスは、データセンタ内でパーティションの少なくとも2つの複製、及び少なくとも1つの他のデータセンタ内でパーティションの少なくとも2つの複製を作成、及び維持することができる。
データ区分
図9A及び9Bは、検索可能なデータサービスの一実施形態に従い、加入者の検索可能なインデックス、各加入者250のデータのバケットへの分離、及びバケットの区分を例示している。各加入者250に対して、検索可能なデータサービスデータはバケットに分離され、それは単一のクエリにおいて考慮されることが可能であるデータの限度を定義する。図9Aでは、検索可能なデータサービスクライアント(又は加入者)が、加入者250Aによって識別される検索可能なインデックスにデータを追加するとき、クライアントは、属性を有するロケータ(eLD)をバケット252に提出する。各バケット252は、初めは単一のストレージノード上にある。データセットが無制限に増大することが可能であるため、パーティションは、ストレージノード上のディスクの物理的容量を超えることがある。一実施形態では、この可能性を考慮するために、図9Bに図解するように、バケット内のデータを2つ以上のパーティション254にわたって分割することができる。図9Bでは、パーティション254を形成するするために、図9Aのバケット252が分割されていることが示される。例えば、バケット252Aは、パーティション254A、254B、及び254Cに分割されている。ここで留意すべきは、一実施形態において、各パーティション254が、単一のストレージノード上にあることである。しかしながら、2つ以上のパーティション254が、単一のストレージノード上にあってもよい。
パーティション254が増大すると、ディスクはスペースがなくなり、1つ以上のパーティション254を、別のストレージノードに移動させる必要がある場合がある。一実施形態では、検索可能なデータサービスのストレスマネージャーコンポーネントは、ストレージノード間のパーティション254の移動を管理するタスクの、少なくとも一部を行うことができる。検索可能なデータサービスの実施形態におけるデータ区分は、パーティションマネージャー232のコンポーネント、及びストレスマネージャーコンポーネントに関連して、以下でさらに説明される。
データ複製
図9Cは、一実施形態に従い、パーティションの複製を介するデータ複製を例示している。一実施形態では、データ持続性及びフォルトトレランスに関して、データセット(バケットパーティション254)は、いくつかのストレージノードにわたって複製されてもよい。図9Cでは、複製グループ256を形成するために、図9Bのパーティション254は複製されている。例えば、図9Cでは、複製グループ256A、256B、及び256Cを形成するために、バケット252Aのパーティション254A、254B、及び254Cは複製されている。複製は、検索可能なデータサービスの実施形態が、複製グループ256にわたってクエリ負荷を分散することを可能することができ、したがって、検索可能なデータサービス上の持続的な「読み込みストレス」への対応として必要な、又は望ましい場合がある。さらに、1つ以上のストレージノードが機能しなくなると、検索可能なデータサービスの実施形態は、複製グループ256を密集の状態に保つために、新しいストレージノードを支給することができる。複製グループの形成の詳細は、グループメンバーシップ及びヘルスコンポーネントに関連して、以下でさらに説明される。
パーティションマネージャー
一実施形態では、検索可能なデータサービスのパーティションマネージャー232のコンポーネントは、ディスク(ストレージ)スペースの不足の結果として、及び/又は高いプロセス負荷から生じることがあるホットスポットを軽減するために、検索可能なデータサービスシステムを再構成するための決定を下し、アクションを実行する責任を有する。パーティションマネージャー232のコンポーネントは、検索可能なデータサービスシステムにおけるホスト、又はノード上のストレスの平衡を保つ傾向がある分散型演算処理(ホスト、又はノードにわたって分配される)として機能することができる。
一実施形態では、パーティションマネージャー232は、以下の行動の1つ以上を実行するがそれらに限定されない。
・ホスト(ストレージノード)は、複製グループ256に追加されてもよい。
・ホスト(ストレージノード)は、複製グループ256から取り除かれてもよい。
・パーティション254は、分割されてもよい。
・パーティション254は、別のパーティションとマージされてもよい。
一実施形態では、パーティションマネージャー232は、グループメンバーシップ及びヘルスコンポーネント226によって回収され、受信されたグループヘルス情報に従って、これらの行動を実行する。
パーティション
一実施形態では、パーティション254は、エンティティID(eID)のハッシュに基づいて形成することができる。以下は、プロバイドeIDが特定のパーティション内にあるかどうか示す、ブーリアン(真又は偽)を返信する例示的な関数である。
bool inPartition(String eID, int mask, int value)
{
int h = hash(eID);
return (h & mask) == value;
}
様々なハッシュ関数のいずれも、様々な実施形態において使用することができる。一実施形態では、ハッシュ関数は、検索可能なデータサービスのクロスプラットフォーム実装をサポートするために、明確に特定することができる。例示的な一実施形態では、ISO3309に定義されるように、CRC32は、パーティションを決定するためのハッシュ関数として使用することができる。CRC32は、意図的な悪意のある入力を除いて、ほとんど何に対しても円滑な分配を生成することができる。一実施形態では、より大きい演算処理の費用と交換に、暗号安全ハッシュを使用することによって、悪意のある入力の可能性を回避することが可能である。
パーティションの分割及びマージ
検索可能なデータサービスデータはバケット252に分離され、それは単一のクエリにおいて考慮されることが可能であるデータの限度を定義する。一実施形態では、任意量のクエリ処理能力をバケット252に追加することができるように、クエリされるバケット252は、フォルトトレランスに必要とされる最小数を超えて複製されることが可能である。しかしながら、バケット252は、検索可能なデータサービスシステム内のホスト上に保存されるには、あまりにも大きくなる場合があり、及び/又はクライアントシステムから過剰な数の更新を受信する場合がある。バケット252の複製は、これらの潜在的状況から生じる可能性がある問題に対応しない場合がある。一実施形態では、これらの潜在的状況に対応するために、バケット252は、データの分かれたパーティション254に分割することができる。
一実施形態では、データストアの更新は、更新されるエンティティを含むパーティション254のメンバにのみ送信される必要がある。しかしながら、クエリは、バケット252におけるすべてのパーティション254に対して行われ、次に、クエリの結果は、クエリサブシステム204において、クエリアグリゲータによってマージされる。したがって、パーティション254の数は、バケット252のストレージ要求によって決定されてもよく、一方で、各複製グループ256におけるホストの数は、バケット252に対するクエリの数によって決定することができる。
検索可能なデータサービスの実施形態は、単一で、潜在的に異種のホストを複製グループ256に追加することによって、バケット252の増分スケーリングを可能にする、拡張可能ハッシングと同様の機構を提供することができる。この機構は、検索可能なデータサービスシステムが、異種のマシンをうまく利用することを可能にすることができ、また他の利点もあるが、バケット252に対する区分が、動的に変化することを可能にすることができる。一実施形態では、検索可能なデータサービスエンティティを区分するためのアルゴリズムは、エンティティ識別子(eID)が整数にハッシュされる場合に用いられてもよく、その整数の最下位ビットは、パーティション254を決定するために調査される。一実施形態では、調査される上位ビットの数は、パーティション254間で異なることがある。
図10は、一実施形態に従い、複製グループのパーティションの分割を例示している。本実施形態では、バケット254におけるパーティション254の数は、複製グループ256におけるパーティション254の分割によって、増加することができる。所定のハッシュのサフィックスに対する複製グループ256は、もう1ビットをサフィックスに追加することによって形成されることが可能な2つのサフィックスに対応する、2つのパーティション(2つの複製グループ)になる。図10に図解される例では、ハッシュのサフィックス_10の複製グループ256Nは、サフィックス_010及び_110によって識別される、2つのパーティション(複製グループ256N_0、及び複製グループ256N_1)に分割されている。
この機構を使用して、2つの新しい複製グループ256N_0、及び256N_1の初期メンバーシップは、分割された複製グループ256Nのメンバーシップと全く同じであることが可能である。データの移動は最初は起こらず、クエリ及び更新は、分割前と同様に分配することができる。しかしながら、新しいストレージノードが、分割された複製グループ256(この例では、複製グループ256N_0)の1つに追加されるとき、複製グループは、必要とされる数以上のメンバを有する。次に、ストレスが加えられたホストは、(複製グループ256N_1にとどまっている一方で)この場合、そのデータの半分(複製グループ256N_0内の半分)を削除することによって、複製グループ256N_0から離れ、したがって、ホスト上のストレスを軽減することができる。したがって、単一ノードのバケット252への追加は、ストレージサブシステム上の少なくとも一部のストレスを軽減することができる。
ここで留意すべきは、すべてのホストが同量のディスクスペースを有する(すなわち、ディスクスペースに関して同種である)場合、また、データがパーティション254間でほぼ均等に分割されている場合、バケット252におけるすべてのホストは、ほぼ同時にスペースがなくなる傾向があることがあり、それはバケットが再区分する必要があるたびに、バケット252におけるホストの数を2倍にする必要があり得ることである。
同種ホストを使用するとき、バケットがパーティションを区分する必要があるたびに、バケット252におけるホストを2倍にする必要性を回避するために、検索可能なデータサービスの実施形態は、ストレスが加えられた複製グループ256に追加されるホストの確率は、その複製グループ256上の測定されたストレスに比例して増加するが、ほぼ無作為にホストを追加することが可能である1つ以上の機構を使用することができる。これらの機構を使用して、複製グループ256の分割は、複製グループ上のストレージストレスが危機的になる前に、実行されることが可能である。測定されたストレスレベルが増大すると、新しいホストはより頻繁に追加されるが、ストレスが低いとき、1つ以上の新しいホストは、分割された複製グループ256に早期に追加されることが可能である。
パーティションマネージャーインターフェース
一実施形態では、パーティションマネージャー232は、APIに従って、eID更新マネージャー230と相互作用することができる。以下は、パーティションマネージャー232によって使用することができ、また、記載された例示的なコール、及びコールバックの1つ以上を含むことができるがそれらに限定されない、例示的なAPIである。
setpartitions(Subscriber, Bucket, AcceptPartitionList, DropPartitionList)
AcceptPartitionList、及びDropPartitionListは、各文字列がパーティションマスクを示す、一連の文字列である。eID更新マネージャー230は、新しいパーティションリストを記憶し、受信操作をフィルターにかけるために、リストを使用する。次に、eID更新マネージャー230は、ハッシュされたeIDが、ドロップパーティションリストにおけるパターンと一致するアイテムを取り除くために、データストアを移動することができる。アクセプトパーティションリスト、又はドロップパーティションリストの一方は、空であってもよい。ストレージノードを起動するとき、そのアクセプトパーティションリストは空であってもよく、またパーティションマネージャー232からのこのコールを使用して、初期化されてもよい。
empty(subscriber identifier, bucket identifier)
このコールバックは、特定のバケットがローカルに空になったこと、また、したがって、パーティションマネージャー232がそれをマージ、又は削除することを考慮すべきであることを示す。
hint(subscriber identifier, bucket identifier, mask)
このピアツーピアのコールは、別のストレージノードが、指定されたパーティションに加わることを考慮すべきであることの暗示である。
一実施形態では、パーティションマネージャー232は、APIを介した、グループメンバーシップ及びヘルス226のコンポーネントへの、複製グループ内のノードの負荷を決定するための、グループヘルス226のコンポーネントのクライアントであることが可能である。一実施形態では、パーティションマネージャー232はまた、十分に活用されていないストレージノードを探すために、ストレージノードロケータ216をクエリすることができる。
一実施形態では、パーティションの分割及びマージは、ディスクストレージ上のストレスによってのみ、決定されることが可能である。特に、いったんローカルディスクの使用が特定の閾値を超えると、ローカルホストのパーティションは分割することができる。他の実施形態は、一連の利用可能なホスト間でエンティティを分割するための他のアーキテクチャ、及び機構を使用することができる。例えば、一実施形態では、コンシステントハッシュ法(又は分散ハッシュテーブル(DHT))は、エンティティ複製を半無作為に、利用可能なホスト間に広げるために、使用されることが可能である。本実施形態は、システムにおけるホストの追加、又は削除を比較的容易にすることができるが、クエリがバケットを供給するほとんどすべてのホストに送信される必要があると、クエリングを非効率的にする傾向がある場合がある。したがって、バケットに対するクエリ処理能力のスケーリングは、本実施形態では困難であろう。別の例示的な実施形態では、エンティティは、それらの属性に基づいて分配されることが可能であるが、ここで留意すべきは、本実施形態は、クエリの計画及び実行をより複雑にする場合があることである。本実施形態はまた、ホストの追加及び削除の複雑性を増大させ、変化するデータ分配への反応をより困難にすることがある。
ストレージノード
図11は、一実施形態に従い、例示的ストレージノード及びそのコンポーネントを例示している。ここで留意すべきは、パーティションマネージャー232、及び関連コンポーネントは、パーティションマネージャーという題名の項において上述され、ローカルクエリプロセッサ228は、クエリサービスという題名の項において、以下でさらに説明されることである。図11の次の説明は、eIDストア236、及びその関連コンポーネント:eIDストア236上にコンパイルされるeID更新マネージャー276、及びクエリインデックス234に重点を置く。また、ここで留意すべきは、一実施形態において、図解されるコンポーネントのインスタンスは、検索可能なデータサービス実装において、すべてのストレージノード270上にあることが可能であるということことである。
一実施形態では、ローカルeIDストア236、及びローカルeID更新マネージャー230は共に機能して、以下の機能性の1つ以上を提供することができるが、それらに限定されない。
・リスト属性APIをサポートする:クライアントが更新を提出した後、クライアントがeIDに関連する属性をリードバックすることができる
・クエリインデックス234の作成、及び再作成をサポートする:eIDストア236は、クエリインデックス274の作成のための、信頼すべきストアとして使用することができる。これらのインデックス234が損失した場合、それらはローカルeIDストア236を使用して、再生することができる
・チャンク要求に対するクエリサブシステム204の要求をサポートし、それによってeIDのリストが提出され、それに対して、それぞれに対する属性が返信することができる
一実施形態では、検索可能なデータサービス実装内における、様々なストレージノード270上のeIDストア236のインスタンスは、以下の機能性の1つ以上を集合的に提供することができるが、それらに限定されない。
・永続性:クライアントが、更新が受け入れられたことを伝えられるとき、クライアントは、複製されたeIDストア236がデータを損失しない、高水準の信頼を要求することができる
・一致性:複製は、顧客との特定のサービス内容合意書(SLA)内で、最終的な一致性を示す
・信頼性、可能性、拡張性:検索可能なデータサービス実装は、全体のシステムが特定のSLAに応じることを可能にするために、随時、これらをサポートするよう要求することができる
一実施形態では、永続性及び一致性の機能性を提供するために、eIDストア236のインスタンスは、本文書においてさらに後述されるように、ゴシップ機構を使用して通信することができる。グループヘルス226のコンポーネント、及びストレスマネージャーコンポーネントとの相互作用を介するパーティションマネージャー232は、動的区分を介して、eIDストア236のディスク使用を、またノードが機能しなくなったときの新しい複製の作成を介して、eIDストア236の永続性を管理することができる。
eID更新マネージャー
一実施形態では、eID更新マネージャー230は、特定のポート上で、例えばTCPを介して、更新及びリスト属性要求を受信することができる。また、eID更新マネージャー230は、問題や状態を報告するために、また、eID更新マネージャー230はどのバケットパーティション254を維持すべきか、また、もしあれば、どちらを削除すべきかについての指示を受信するために、そのローカルパーティションマネージャー232と通信することができる。
ここで留意すべきは、ストレージノード270は、1つ以上のバケットパーティション254を含んでもよいことである。一実施形態では、区分の決定は、eID更新マネージャー230の範囲外にある。しかしながら、eID更新マネージャー230は区分の決定を伝えられ、それらに従う。
eIDストア
一実施形態では、eIDストア236は、Berkeleyデータベース(BDB)として実装することができる。ここで留意すべきは、他の実施形態は、eIDストア236を実装するために、他の機構を使用することができることである。BDBは、その中の加入者識別子、バケット識別子、及びエンティティ識別子(eID)が与えられるすべての属性を見つけるための容量を提供する。BDBは、キー値の1組として情報を保存し、キーは、ここでBDBキーと呼ばれることがあり、値はBDB値と呼ばれることがある。一実施形態では、BDBキー、及びBDB値は以下のように形成することができる。
・BDB-key = Key( subscriber identifier, bucket identifier, eID )
・BDB-value = { updates-for-the-eID-above }
Key(subscriber identifier, bucket identifier, eID )は、特定の引数を使用して固有のキーを形成する関数である。例えば、一実施形態では、この関数は加入者識別子、バケット識別子、及びeID文字列を結合することによって、BDBキーを形成することができる。例を引き続き述べると、バケット識別子が与えられるすべてのeIDをリストアップするために、関数は、いくつかの範囲が定められた情報を有する、結合された加入者識別子、バケット識別子、及びeID文字列にプレフィックスを付けることができる。例えば、BDBキーは、「p12_client1bucket1/photos/xy.jpg」として形成されてもよく、それは加入者のバケットの1つ(「bucket1」)と結合される加入者識別子(「client1」)が、12文字の長さであり、12文字の後に続くものは何でも、eID文字列「/photos/xy.jpg」であることを示す。どのルックアップ関数(加入者識別子、バケット識別子、及びeIDの等価ルックアップ、値域を含まない加入者識別子及びバケットの等価ルックアップ、及びeIDに対する等価ルックアップなど)が望ましいかによって、Key(...)は、実施形態における様々な方法で実行することができる。
一実施形態では、BDB値は、更新操作(例えば、置換、追加、及び/又は削除)、及びBDBキーにおけるeIDの属性を作成するのに役立つ、更新操作に対応するシーケンスIDの集合体を含むことができる。一実施形態では、属性の新しい更新操作は、そのシーケンスIDのがより高い場合、eIDストアにおける既存の更新操作に優先する。例えば、eIDが与えられると、eIDストア236内のその属性の置換より、高いシーケンスIDを有する属性の置換操作は、eIDストア236から後者を取り除く。別の例として、特定のシーケンスIDを有する全削除操作は、無関係のより低いシーケンスIDを有するすべての更新操作を行う。
上記のことを説明するために、特定のeIDにおける、以下の例示的なBDB値を検討する。
{ (op=replace, name=n1, value=v1, ts=t1), (op=replace, name=n2, value=v2, ts=t2), (op=add,name=n2,value=v3,ts=t3) }
ここで、opは操作を示し、tsはシーケンスIDを示す。この例に関して、t4>t3>t2>t1と仮定する。例における「現時点」では、BDB値によって含意される属性は、
{(n1,v1),(n2,v2),(n2,v3)}
であり、ここでn2は多値である。ここで、同じeIDにおける、以下の例示的なシナリオの1つを介する更新を検討する。
第1シナリオ
(op=replace, name=n2, value=v4, ts=t4)
これは、BDB値に、
{ (op=replace, name=n1, value=v1, ts=t1), (op=replace, name=n2, value=v4, ts=t4) }
を含ませる。
したがって、
(op=replace, name=n2, value=v2, ts=t2), (op=add,name=n2,value=v3,ts=t3)
は、新しい更新に取って代わられるため、更新のリストから除外される。
第2シナリオ
(op=delete, ts=t4)
これは、BDB値に、
{(op=delete, ts=t4)}
のみを含ませる。
他の操作のすべては、この新しい操作にすべて取って代わられるため、取り除かれる。
第3シナリオ
(op=add, name=n1, value=v5, ts=t4)
これは、BDB値に、
{ (op=replace, name=n1, value=v1, ts=t1), (op=add, name=n1, value=v5, ts=t4), (op=replace, name=n2, value=v2, ts=t2), (op=add,name=n2,value=v3,ts=t3) }
を含ませる。
このシナリオでは、どの更新も外される2つの属性、n1及びn2は多値である。
クエリインデックス
一実施形態では、クエリインデックス234は、Berkeleyデータベース(BDB)として実装することができる。ここで留意すべきは、他の実施形態は、クエリインデックス234を実装するために、他の機構を使用することができることである。一実施形態では、バケット252が与えられると、クエリインデックス234は、{名前、値}の1組からeIDへのマッピングを可能にする。したがって、クエリインデックス234に対して、
BDB-key = Key( subscriber identifier, bucket identifier, name, value )
BDB-value = { all-eIDs-with-{name, value}-above }
一実施形態は、加入者識別子、バケット識別子及び名前による等価ルックアップ、並びに値による等価及び値域ルックアップを実行することができる。一実施形態では、クエリインデックス234に対するKey( subscriber identifier, bucket identifier, name, value )関数は、例示的なクエリ、
@name = "some-name", @value > "string1" AND @value < "string2"
を与えられると、以下の変換を可能にすることによって、クエリをサポートすることができる。
BDB-Key > Key ( subscriber identifier, bucket identifier, "some-name", "string1" ) AND BDB-Key < Key ( subscriber identifier, bucket identifier, "some-name", "string2" )
関数Key(...)を実行するための一部の例示的な方法は、上記のeIDストアという題名の項で論じられ、ここにおいても適用するよう意図されている。
一実施形態では、クエリインデックス234に対するBDB値は、BDBキーにおける{名前、値}の1組を有する、一連の1つ以上のeIDと結合するシーケンスIDに加えて、一連の更新操作(例えば、追加及び/又は置換)である。ここで留意すべきは、eIDストア236のすべての新しい更新は、1つ以上の以前の更新を無関係にする可能性があることである。クエリインデックス234は、それが取って代わるすべての更新に加えて、新しい更新を受信する必要がある。
ストレージノード使用事例
以下は、一実施形態に従って、一部の例示的な検索可能なデータサービス ストレージノードの使用事例を説明する。初めの2つの使用事例(更新要求の処理、及びリスト属性要求の処理)は、外部的事象の処理を説明する。残りは、内部的事象の処理を説明する。
以下は、一実施形態に従って、更新要求の処理を説明する。要求ルーター202からの更新要求を受信すると、eID更新マネージャー230が、更新が現在維持しているバケットに対するものではないと決定した場合、エラーが返される。eID更新マネージャー230が、今後、T(例えば、5〜10まで)秒を超えるシーケンスIDを有する要求ルーター202によって、更新がマークされると決定した場合、eID更新マネージャー230はエラーを返す。一実施形態では、eID更新マネージャー230はまた、そのNTP同期化の状態をチェックし、必要であれば警告を発することができる。
一実施形態では、eID更新マネージャー230は、グループ通信222のコンポーネントを使用して、更新を「gcast」することができる。ネットワークを通じて送信されるバイト数は、概算されることが可能であり(さらなる詳細に関しては、グループ通信の項を参照)、通常、バイト数は、Nが永続性に必要とされる複製の数である場合には、更新メッセージのバイトサイズのN倍であることが可能である。gcastは、更新が永続性に対して書き込まれるノードセットを返すことができるか、又はタイムアウトすることができる。
eID更新マネージャー230は、更新のあるeIDストア236のリードモディファイライトを実行する。これによって、いくつかの更新が取って代わられたり、新しい更新が入力されることがある。eID更新マネージャー230が、更新が取って代わられたため、適用できないことを検出すると、メッセージが遅いという表示が返される。eID更新マネージャー230は、永続的なログにおいて、新しい更新、及び取って代わられた更新をログする。eID更新マネージャー230がうまくgcastし、eIDストア236を更新し、そのログへ書き込みすると、それは、gcastから得られるノードセットを返す。そうでなければ、エラーが返される場合がある。
以下は、一実施形態に従って、リスト属性要求の処理を説明する。eID更新マネージャー230は、要求によって特定されるeIDを検出するために、そのローカルeIDストア236を読み込む。eIDが検出されると、その属性は読み込まれ、成功応答が返信される。eIDが検出されないと、エラーが返される場合がある。
内部的事象の処理
eIDストアログが変更する場合、クエリインデックスアップデータは、新しい追加を読み込むことができ、クエリインデックス234を更新する。アンチエントロピーデーモンは新しい追加を読み込み、アンチエントロピーに対するそのデータ構造(例えば、Merkleツリー)を更新する。
以下は、一実施形態に従って、グループ通信222のコンポーネントによって行われる、適用メッセージコールの処理を説明する。eID更新マネージャー230が、更新が現在維持しているバケットに対するものではないと決定した場合、エラーが返される。eID更新マネージャー230が、今後、T(例えば、5〜10まで)秒を超えるシーケンスIDを有する要求ルーター202によって、更新がマークされると決定した場合、更新は受け入れられ、eID更新マネージャー230は、そのNTP同期化の状態をチェックし、必要であれば警告を発する。
eID更新マネージャー230は、更新メッセージのあるeIDストア236のリードモディファイライトを実行する。これによって、いくつかの更新が取って代わられたり、新しい更新が入力されることがある。eID更新マネージャー230が、更新が取って代わられたため、適用できないことを検出すると、メッセージが遅いという表示が返される。eID更新マネージャー230が、更新がすでに適用されていることを検出した場合、メッセージが二重であるという表示が返される。eID更新マネージャー230は、永続的なログにおいて、新しい更新、及び取って代わられた更新をログする。eID更新マネージャー230が、うまくeIDストア236を更新し、そのログへ書き込みすると、それはOK(成功)を返す。そうでなければ、エラーが返される場合がある。
以下は、一実施形態に従って、グループ通信222のコンポーネントによって行われる、アンチエントロピーコールの処理を説明する。コールに応えて、アンチエントロピーデーモンは表示されたホストに接続し、ホストと共にアンチエントロピーセッションを実行する。アンチエントロピーは、本文書の他でさらに論じられる。
以下は、一実施形態に従って、パーティションマネージャー232によって行われる、セットパーティションコールの処理を説明する。eID更新マネージャー230は、新しいアクセプトリスト、及びドロップリストによってそのログを書き込む。eID更新マネージャー230は、もはや責任を持たないeIDのそれ自体を取り除くために、ドロップリストによってクリーナースレッドを開始する。クエリインデックス234は、ログされた事象を読み込むとき、それ自体のクリーナースレッドを開始する。アンチエントロピーデーモンもまた、ログされた事象を読み込むとき、それ自体のクリーナースレッドを開始する。
eID更新マネージャーインターフェース
以下は、一実施形態に応じて、eID更新マネージャー230によって公開される、又は要求することができる、例示的なインターフェースを説明する。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図していないことである。
eID更新マネージャー230は、以下のインターフェースの1つ以上を、要求ルーター202に公開することができるが、それらに限定されない。
replace ( bucket identifier, eID, name, value, prev-seq-ID) OR
add ( bucket identifier, eID, name, value, prev-seq-ID) OR
delete ( bucket identifier, eID, name, value, prev-seq-ID)
eID更新マネージャー230は、以下のインターフェースの1つ以上を、ローカルグループ通信222のコンポーネントに公開することができるが、それらに限定されない。
apply(Group, Msg) --> ok|dup|late|error
antientropy(Group, Host, Cookie) --> Status
eID更新マネージャー230は、以下のインターフェースをローカルパーティションマネージャー232に公開することができるが、それに限定されない。
setpartitions(Subscriber, Bucket, AcceptPartitionList, DropPartitionList)
ここで留意すべきは、アクセプトパーティションリスト、及びドロップパーティションリストは、{マスク、値}の1組のリストであることである。
eID更新マネージャー230は、以下のインターフェースの1つ以上を、ローカルグループ通信222のコンポーネントから要求することができるが、それらに限定されない。
gcast(Group, Msg) --> {ok, Hosts, Cookie} | error
gsync(Cookie, Timeout)--> true|false
eID更新マネージャー230は、以下のインターフェースを、ローカルパーティションマネージャー232から公開することができるが、それに限定されない。
empty(Subscriber, Bucket)
クエリサービス
一実施形態では、検索可能なデータサービスシステムのクエリサブシステム204、又はクエリサービスは、クライアントクエリを解析し、データを取り出し、クエリ結果のセットを相互に関連付けるための、1つ以上のインターフェースを提供することができる。一実施形態では、クエリサービスは、図6に図解するように、1つ以上のクエリTSAR212、クエリキャッシュ214、クエリノードロケータ220、及び各ストレージノード270上に、ローカルクエリプロセッサ228、ローカルクエリインデックスストア234、及びエンティティID(eID)ストア236を含むがそれらに限定されない、検索可能なデータサービスのいくつかのコンポーネントを関係させる、又は含むことができる。ここで留意すべきは、これらのコンポーネントは、以下の図において、異なる番号を使用して言及される場合があることである。
図12は、検索可能なデータサービスのクライアントからのクエリサービスを実施するクエリサブシステムを構成又は相互作用する検索可能なデータサービスの種々のコンポーネントを例示し、さらに、一実施形態に従い、コンポーネント間のデータフローをさらに例示している。クエリサブシステムは、関連エンティティID(eID)(特定のバケットに属する)を含み、それぞれのストレージノード370からの結果を収集し、各所定のクエリを満たすeIDセットをキャッシュする検索可能なデータサービスにおいて、すべてのストレージノード370に対して、クライアント提出のクエリの効率的な実行を提供することができる。一実施形態では、クエリの処理を実行するために、クエリサブシステムは、以下のコンポーネントを含むことができるが、それらに限定されない。
・クエリノードロケータ354は、各特定のクエリに対して、ルーティング決定を行うことができる。一実施形態では、クエリキャッシュ364の利点を最大限にするために、繰り返されるクライアントクエリは、クエリシステムを介して同じパスを送ることを推奨されてもよい。
・クエリTSAR(Top Search AggregatoR)360は、所定のバケットに対する適切な一連のストレージノード370にクエリを分配し、また結果及びクエリキャッシングを収集する
・各ストレージノード370上のローカルクエリ実行エンジン376は、ストレージノード370のそれぞれでローカルにクエリを実行する責任を有する
一実施形態では、クエリTSAR360は、本質的に対等に扱われる。各クエリTSAR360は、いかなるクライアントクエリにも応答することができる。これは、個々のノードの追加、及び削除を単純化するのに役立つことが可能である。しかしながら、クエリ結果は、個々のノード上のクエリキャッシュ364においてキャッシュされることがあるため、一実施形態では、できる限り頻繁に、同じクエリTSAR360を介して、同じストレージドメインに対する同一クエリを送るよう試みる場合がある。クエリTSAR360を介してクエリを送るのに役立つために、要求ルーター352は、特定のバケットに対するクエリノードのリストを得るために、クエリノードロケータ354にアクセスすることができる。
上述のサービス及びコンポーネントに加えて、1つ以上の他のコンポーネント、又はサービスが、クエリサービスによってアクセス可能である。例えば、ストレージノードロケータサービス369は、所定のバケットに対する適切なストレージノード370の1組、又はリストを位置付けるために、アクセス可能である。別の例として、クエリサービスは、全体のシステムノードヘルスサービス(図6における、グループメンバーシップ及びヘルス226)を活用、又はそれに参加することができ、それは、システムへ参加、及びシステムを終了する様々なノードを監視することができ、システムにおける他のノードへ、そのヘルス情報を伝えることができる。
クエリノードロケータ
クエリキャッシングが有益なヒット率を提供するために、一実施形態は、可能であれば、同じクライアントクエリが、コーディネーションサービス(要求ルーター352)によって、同じクエリTSAR360のノードに送られることを確実にするよう、試みることが可能である。一実施形態では、クエリノードロケータ354は、その1つが、各コーディネータノード350においてインスタンス化されることが可能であるが、そのルーティングを提供するためのロジックをカプセル化することができる。一実施形態では、クエリノードロケータ354は、参加ノードの1組上の受信クエリの無作為分配を可能にする、一貫したハッシングスキームを実装することができる。他の実施形態は、クエリを分配するための他の無作為、又は非無作為機構を実装することができる。
一実施形態では、クエリノードロケータ354は、SHA−1のようなベースハッシュ関数を使用して、各ノード及びキーにm−bitの識別子を指定するための、一貫したハッシュ関数を実行する。一実施形態では、ノードの識別子は、ノードのIPアドレスをハッシュすることによって選択されてもよく、一方で、キーの識別子は、ドメイン及び正規化クエリ文字列の組み合わせをハッシュすることによって、生成することができる。用語「キー」は、用語が使用される文脈から意味が明らかであるため、オリジナルキー、及びハッシュ関数下でのその形の両方を意味するために、使用することができる。同様に、用語「ノード」は、ノード、及びハッシュ関数下でのその識別子の両方を意味するために、使用することができる。一実施形態では、識別子の長さは、2つのノード又はキーが、同じ識別子に対してハッシュする可能性をごくわずかにするに十分、大きいことが可能である。
一実施形態では、クエリノードロケータ354によって使用されるハッシュマップ構造は、以下のフィールドの1つ以上を含むことができるが、それらに限定されない。
・キー−組み合わされたドメイン(バケット)名、及びクエリ文字列式のハッシュ
・値−所定のバケットに対するクエリ式を満たす一連のeID
・コスト−最初にクエリ式を実行するためにかかった時間。例えば、ガーベジコレクション、及び置換アルゴリズムに使用することができる
・タイムスタンプ−入力がキャッシュに入れられたときのローカル時間。例えば、ガーベジコレクション、及び検証アルゴリズムに使用することができる
一貫したハッシングは、次のように、ノードにキーを指定することができる。識別子は、2mを法とした識別子サークルで順序付けられる。キーkは、識別子空間において、識別子が(識別子の)kに同等な、又は続く最初のノードに指定される。このノードは、キーkの後続ノードと呼ばれ、successor(k)で示される。識別子が、0から2m‐1の数のサークルとして表される場合、successor(k)は、kから時計回り方向の最初のノードである。
図13は、m=3の識別子サークルを図解する。サークルは、3つのノード:0、1、及び3を有する。識別子1の後続はノード1であり、したがって、キー1は、ノード1に位置付けられることになる。同様に、キー2はノード3に、キー6はノード0に位置付けられることになる。
一貫したハッシングは、最小限の中断で、ノードが検索可能なデータサービスを開始、及び終了することを可能にすることができる。ノードnがネットワークに参加するとき、一貫したハッシングマッピングを維持するために、ノードnの後続にすでに指定された特定のキーは、ここでノードnに指定されるようになる。ノードnがネットワークを終了するとき、その指定されたキーのすべては、ノードnの後続に指定される。ノードに対するキーの指定における他の変更が、発生する必要はない。図13において示される例では、ノードが識別子7で参加するとすれば、それは、識別子0を有するノードから、識別子6を有するキーをとらえる。
クエリTSAR(Top Search AggregatoR)
一実施形態では、クエリプロセッサ362は、クエリメッセージにおいて、クライアント330によって提供されるクエリ式を取り扱う、検索可能なデータサービスシステムの第1のコンポーネントである。クエリプロセッサ362は、クエリ式を前処理することができる。クエリ言語における、非正規化構文を可能にする実施形態では、クエリプロセッサ362が行う最初のステップは、クエリをその標準的な、正規化形に変換することである。一実施形態では、クエリプロセッサ362はまた、意味的に同一のクエリが同じに見えるように、クエリ式における述語を並べ替え、それらを正規化することができる。例えば、クエリ式:
[predicate1] AND [predicate2] AND [predicate3]
は、クエリ式と同じ正規化クエリ式によって表されるべきである。:
[predicate3] AND [predicate1] AND [predicate2]
例えば、クエリ式における述語の正規化は、システムが、より高いクエリキャッシュ364のヒット率を実現するのに役立つことが可能である。
クエリ式の処理に続いて、クエリプロセッサ362は、クエリキャッシュ364が、所定の(場合によって正規化された)クエリ式を満たすための、必要な結果セットを含んでいるか決定するために、そのローカルクエリキャッシュ364を調査することができる。クエリキャッシュ364が結果セットを含む場合、結果セットはクエリキャッシュ364から取り出され、コーディネータノード350を介してクライアント330に返される。そうでなければ、クエリ式はクエリアグリゲータ366に送られ、それは、対応するストレージノード370からの結果セットを取り出す責任を有する。結果セットがストレージノード370から取り出された後、それはローカルクエリキャッシュ364においてキャッシュされ、コーディネータノード350を介してクライアント330に返される。
クエリキャッシュ364におけるクエリキャッシングの効率性は、検索可能なデータサービスシステムの全体的性能に影響を与える、性能パラメータである。システムの全体的性能は、結果セットを取り出すために個々のストレージノード370に行く必要なく、クエリキャッシュ364に対してホットクエリを解決することによって、改善することができる。
クエリアグリゲータ
一実施形態では、現在のクエリが実行されているバケットに対するeIDを含む、一連のストレージノード370を位置付けるために、クエリアグリゲータ366は、ストレージノードロケータ368のサービスを使用することができる。一連のストレージノード370が決定された後、クエリアグリゲータ366は、クエリ要求を、ストレージノード370上のそれぞれにある、ローカルクエリ実行エンジン376に送信することができ、必要であれば再試行する。クエリに参加しているすべてのストレージノード370から、結果セットが受信されると、結果セットは、必要であればソート属性に基づいて、単一のセットにマージすることができる。
ローカルクエリ実行エンジン
図14は、一実施形態に従い、単一ストレージノード370の例示的アーキテクチャを例示している。ローカルクエリ実行エンジン376は、ストレージノード370のeIDストア380、及びローカルクエリインデックスストア378と、密接に関連することができる。ローカルクエリ実行エンジン376は、この特定のストレージノード370上に保存される、eIDのセットに対して、ローカルにクエリを実行する。eIDに関するすべての情報がローカルに存在するため、ローカルクエリ実行エンジン376は、ローカルに(すなわち、このストレージノード370内で)、提供されたクエリ390を実行し、結果をソートし、クエリ結果セット390を(ソート属性と共に)、クエリTSAR360に返すことができる。一実施形態では、受信クエリ390は、ローカルクエリ実行エンジン376によって、eIDストア380に対して実行される前に、パーサ372によってローカルに解析され、クエリオプティマイザ374によって最適化することができる。一実施形態では、パーサ372、クエリオプティマイザ374、及びローカルクエリ実行エンジン376は、図6に図解するように、ローカルクエリプロセッサ228のコンポーネントであってもよい。
クエリ構文及び検索式
実施形態では、例示的なクエリメッセージは、以下のフィールドの1つ以上を含むことができるが、それらに限定されない。
・加入者識別子−特定のクライアント、又は検索可能なデータサービスのクライアントに対する識別子
・バケット識別子−クエリにおいて考慮され得る、データの限度を定義するバケットを識別する
・ノードID−ノード識別子
・クエリ式−このクエリに対して適用される検索式
・「More Tokens」−クエリ式を満たすeIDの数が、ページ付けの限度を超えるとき、不透明なmoreTokenオブジェクトは、クライアントに返すことができる。このトークンは、結果の次のセット(eID)を取り出すために、同じクエリで再実行することができる
・シーケンストークン
実施形態では、クエリサービスは、サービスのクライアントによる検索可能なデータサービスへのクエリに対する、以下の種類の演算の1つ以上をサポートすることができるが、それらに限定されない。
・ブーリアン演算(例えば、AND、OR、NOTなど)
・算術演算(例えば、<、>、<=、>=、<>、=、!=)
・文字列比較演算(例えば、プレフィックス「contains」など)
・クライアント指定の属性に基づく、エンティティの結果セットのソート。一実施形態では、ソートを、単一の属性上のみで許可することができる。他の実施形態は、2つ以上の属性上でのソートを許可することができる
・結果セットのページ付け
一実施形態では、検索可能なデータサービスにおける検索式は、Xpathのサブセット、W3C推奨を表すことができる。ここで留意すべきは、他の実施形態が、検索式に対する他のプロトコルを使用することが可能であるということである。一実施形態では、属性が(名前、値)の1組のリストであり、マークアップ言語(例えば、XML)文書における、複数のレベルが許可されなければ、Xpath構文の比較的小さいサブセットは、使用されることが可能である。ここで留意すべきは、他の実施形態は、マークアップ言語文書において、複数のレベルを許可することができることである。また、ここで留意すべきは、他の実施形態は、Xpath構文の比較的大きいサブセットを使用することができることである。したがって、検索可能なデータサービスの少なくとも一部の実施形態で使用されるクエリ構文は、Xpat定義のプレディケートテスト式に関連する。
一部の実施形態では、Xpathクエリ構文に加えて、検索式に対する1つ以上の非正規化形―1つ以上の正規化ルールに従って、標準形に変換され得る、暗黙的構文を有する式―が、許可されてもよい。検索式に対する非正規化形の許可は、検索可能なデータサービスを活用する開発者に対して、テスト及び実行における柔軟性を提供するのに役立つことができる。
実施形態では、検索式は、オブジェクトの属性リストに影響を与える。つまり、真理値は、オブジェクトの属性の1つ以上、又はすべてを使用して計算されてもよく、真である場合は、オブジェクトを選択することができる。
以下は、一実施形態に従った、検索式の一部の例であり、限定することは意図しない。
[@name = "xxxxxx" starts-with (@value = "yyyyyy")]
この式は、属性リストのすべての{名前、値}の1組に適用される、テストを意味する。角括弧「[]」は、個々の要素テストを指定する。このテストの適用後、式と一致する{名前、値}の1組の小さなセットは、残される。このセットは、XPathによって、「ノードセット」と呼ばれる。オブジェクトに対する非ヌルのノードセットが得られた場合、そのキーは選択される。
[ @name = "prefix" @value = "keyword"] AND [@name = "glassy" starts-with (@value = "tasty") ]
この例では、2つのノードが組み合わせられている。XPathで示されるように、ノードセットは、それがヌル集合ではないとき、かつそのときに限り、真と評価する。上記の例では、2つのノードセットは、オブジェクトの属性リストによって別々に計算され、それらの真理値は、ANDを使用して組み合わせられる。
ここで留意すべきは、[@value=”foo”]は、NOT[@value!=”foo”]と同じことを意味しないことである。前者は、ある属性が、文字列値「foo」のある値を有するとき、かつそのときに限り真であり、後者は、すべての属性が、文字列値「foo」のある値を有するとき、かつそのときに限り真である。
以下は、一実施形態における、検索式で許可される例示的なクエリ構文の要約である。ここで留意すべきは、他の実施形態は、この構文の少なくとも一部を含まないことが可能である、及び/又は他の構文を含むことが可能であることである。
query expression <- (predicate expression)?
predicate expression <- predicate | NOT predicate expression | predicate expression AND predicate expression | predicate expression OR predicate expression | predicate expression sort expression
sort expression <- 'SORTBY[' attribute name ']' | 'SORTBY[' attribute name ' ASC]' | 'SORTBY[' attribute name ' DESC]'
predicate <- '[' attribute name ']' | '[' attribute name _value test expression_ ']'
attribute name <- '@name =' attribute
上記において、attributeは、システムにおける所定の属性の文字列名である。
value test expression <- value test | NOT value test expression | value test expression AND value test expression | value test expression OR value test expression
value test <- '@value =' test value
上記において、値は、test valueと等しくなければならない。
value test <- '@value !=' test value
上記において、値は、test valueと等しくあってはならない。
value test <- '@value >' test value
上記において、値は、test valueより大きくなければならない。
value test <- '@value >=' test value
上記において、値は、test valueより大きいか、等しくなくてはならない。
value test <- '@value <' test value
上記において、値は、test valueより小さくなくてはならない。
value test <- '@value <=' test value
上記において、値は、test valueより小さいか、等しくなくてはならない。
value test <- 'startsWith(@value =' test value ')'
上記において、値は、test valueから始まらなくてはならない。
value test <- 'contains(@value =' test value ')'
上記において、値は、従属文字列として、test valueを含まなければならない。
以下は、一実施形態における、検索式に対する例示的なクエリ構文ルールの要約である。ここで留意すべきは、他の実施形態は、これらの構文ルールの少なくとも一部を含まないことが可能である、及び/又は他の構文ルール、又はこれらのルールの修正を含むことが可能であることである。
・オブジェクトの属性リストの、すべての{名前、値}の1組上で実行されるブーリアンテストは、角括弧[…]内に入る
・角括弧内では、{名前、値}の1組の名前、及び値の部分は、左側の「@name」及び「@value」使用して、言及される
・式の最初の部分は、「@name=」の形をとった属性の名前でなければならず、後にゼロ、又は属性値のより多くのブーリアンテストが続くことができる。
・演算子「>>=<<==!=」は、右側の文字列との、比較演算子として使用することができる
・Xpathからの文字列関数「starts−with」及び「contains」は、文字列値の属性に対して使用することができる
・属性のすべての@name部分は、文字列と見なされ、@value部分も文字列と見なされる
・ブーリアン演算子は、AND、OR、及びNOTである。これらは、{名前、値}の1組上で、テストを組み合わせるために使用することができる
・[..]内のテストを使用して得られた属性セットは、XPathによって与えられるような真理値を有し(ノードセットのブーリアン関数)、したがって、ブーリアン演算子を使用して組み合わせられることができる
・任意のSORTBY式は、結果セットがソートされるべき属性を指定することができる。SORTBY式は、ソート順序を示すために、ASC(昇順)及びDESC(降順)指定子を含むことができる。ASC(昇順)は、デフォルトのソート順序である
以下は、上記のように、例示的な標準的検索式の構文に従った、例示的な検索式である。
[@name = "lastName" starts-with (@value = “Adams”)] AND [@name = "firstName" @value = "John"] AND [@name = "age" @value > "25" AND @value < "60"] SORTBY[@name = "year" DESC]
非正規化検索式
上記は、検索可能なデータサービスの実施形態において使用することができるXpath構文を使用した、例示的な標準的検索式の構文を説明する。しかしながら、検索可能なデータサービスの一部の実施形態は、暗黙的構文を有する非正規化検索式を受け入れ、1つ以上の正規化ルールを使用して、ステートメントを標準形に変換することができる。以下は、非正規化検索式、及び暗黙的構文を標準形に変換するための、対応する例示的な関連正規化ルールの例を示す。ここで留意すべきは、
“unnormalized expression” => [normalized expression]
にあるように、非正規化式は左側に、正規化式は右側に示されることである。
後に比較演算子「>>=<<=:!=」が続く文字列は、後に文字列、又は数が続かなければならない。式は、比較テストを形成する。
“index > 5” => [@name = "index" @value > "5" ]
“title:‘foo’” => [@name = "title" @value = "foo"]
否定テストは、その前に「NOT」を有するテストである。
"NOT keyword:'xxxxxx'" => [ @name = "keyword" NOT(@value = "xxxxxx")]
要素テストは、上記で定義されるようなテスト、又は否定テストのいずれかである。要素テストは、ブーリアン演算子AND又はORによって接続される級数として、リストアップすることができる。ブーリアン演算子が欠けている場合、それはANDと仮定される。括弧は、ブーリアン演算子が適用することができる順序を示すために、使用することができる。
"title:‘foo’ NOT prefix:‘keyword’" => [ @name = "title" @value = "foo"] AND [ @name = "prefix" NOT (@value = "keyword") ]
同じ属性上のテストのシーケンスは、同じ述語に属するとして扱われることができる。
"price > 5 AND price < 20 AND available:'yes'" => [ @name = "price" @value > "5" AND @value < "20" ] AND [ @name = "available" @value = "yes" ]
ソート順序は、クエリ文字列の終わりに「sortby」式を含むことによって、指定されてもよく、後に、結果セットがソートされるべき属性名が続く。追加の修飾子(「asc」又は「desc」)は、ソート順序を指定するために、後に続くことができる。
"year < 2010 AND author:'John Doe' sortby price desc" => [@name = "year" @value < "2010"] AND [@name = "author" @value = "John Doe"] SORTBY[@name = "price" DESC]
クエリ結果セット
一実施形態では、検索可能なデータサービスに提出されるクエリは、ここに記載されるように、検索可能なデータサービスのクエリサービスによって処理され、以下の1つ以上を、返された検索結果データの一部として生成することができるが、それらに限定されない。
・クエリ式を満たす1つ以上のエンティティID(eID)のセット。一実施形態では、返されるeIDの数は、所定のページ付けの限度を超えることはできない。
・moreToken:クエリ式を満たすeIDの数が、ページ付けの限度を超えるとき、クライアントに返される不透明なオブジェクト。このトークンは、結果の次のセット(eID)を取り出すために、同じクエリで再実行することができる。
クエリサービス使用事例
以下は、一実施形態に応じて、一部の例示的な検索可能なデータサービスのクエリサービス使用事例を説明する。ここで留意すべきは、これらの使用事例は、図12に図解するように、例示的なクエリサブシステムのアーキテクチャを意味することができることである。
以下は、一実施形態に応じて、すべてのノードが利用可能であり、クエリがキャッシュされておらず、どのシーケンストークンも提供されていない場合の、クエリサービスによる例示的なクエリ要求の処理を説明する。クライアント330からクエリを受信した後、コーディネータノード350上の要求ルーター352は、クエリ要求、又はクエリ要求からのクエリ情報を、ローカルクエリノードロケータ354に提出する。クエリノードロケータ354は、1つ以上のクエリTSARノード360のリストを返すことによって、応答することができる。一実施形態では、リスト内で返され得るクエリTSARノード360の数には、所定の限度があってもよい(例えば、限度は3つであってもよい)。一実施形態では、クエリTSARノード360のリストは、1つ以上の基準に従って、ランク付け、又はソートされてもよい。
次に、要求ルーター352は、クエリ要求を、クエリノードロケータ354から受信するリスト上の、少なくとも1つのクエリTSARノード360に提出する。要求ルーター352からクエリ要求を受信するクエリTSARノード360では、ローカルクエリプロセッサ362は、ローカルクエリキャッシュ364へ、クエリ要求を提出することができる。クエリキャッシュ364が、ネガティブキャッシュのヒット結果を返す場合、クエリTSARノード360は、ローカルストレージノードロケータ368に、クエリ要求を提出する。ストレージノードロケータ368は、クエリ要求において指定されるバケットを含む、ストレージノード370のセット、又はリストを返す。
次に、クエリTSAR360は、ストレージノードロケータ368によって返されるリストからの、ストレージノード370の1つ以上に、クエリ要求を提出することができる。一実施形態では、クエリ要求は、必要とされるストレージノード370の最小限のセットに提出することができる。クエリ要求を受信する各ストレージノード370上のローカルクエリプロセッサは、ローカルeIDストアに対してクエリ要求を処理し、エンティティID(eID)のセットを返すことができる。一実施形態では、eIDのセットは、ページサイズ(例えば、100エンティティ)によって制限されてもよい。「more token」インジケータは、クエリ要求を満たすために利用可能な、より多くのeIDがあることを示すために、必要であれば返されてもよい。
クエリTSAR360は、必要であれば、1つ以上のストレージノードから受信するeIDのセットをマージし、結果を保存するために、クエリ要求を、ローカルクエリキャッシュ364に提出する。次に、クエリTSAR360は、クエリ結果を要求ルーター352に返す。次に、要求ルーター352は、クエリ結果を、要求しているクライアント330に返す。
以下は、一実施形態に応じて、すべてのノードが利用可能であり、クエリがキャッシュされ、どのシーケンストークンも提供されていない場合の、クエリサービスによる例示的なクエリ要求の処理を説明する。クライアント330からクエリを受信した後、コーディネータノード350上の要求ルーター352は、クエリ要求、又はクエリ要求からのクエリ情報を、ローカルクエリノードロケータ354に提出する。クエリノードロケータ354は、1つ以上のクエリTSARノード360のリストを返すことによって、応答する。一実施形態では、リスト内で返されてもよいクエリTSARノード360の数には、所定の限度があってもよい(例えば、3)。一実施形態では、クエリTSARノード360のリストは、1つ以上の基準に従って、ランク付け、又はソートされてもよい。
次に、要求ルーター352は、クエリ要求を、クエリノードロケータ354から受信するリスト上の、少なくとも1つのクエリTSARノード360に提出する。要求ルーター352からクエリ要求を受信するクエリTSARノード360では、ローカルクエリプロセッサ362は、ローカルクエリキャッシュ364へ、クエリ要求を提出する。クエリキャッシュ364が、ポジティブキャッシュのヒット結果を返す場合、クエリTSAR360は、クエリキャッシュ364から回復されるeIDのページを、要求ルーター352に返す。次に、要求ルーター352は、クエリ結果を、要求しているクライアント330に返す。
以下は、一実施形態に応じて、すべてのノードが利用可能であり、シーケンストークンがクライアントによって提供されている場合の、クエリサービスによる例示的なクエリ要求の処理を説明する。シーケンストークンは、検索可能なデータサービスが、シーケンストークンのノードセットにおいて指定される、それらのストレージノード370を支持することを確実にするのに役立つために、クエリ要求が与えられる。更新の直後に、クエリ要求においてシーケンストークンを提供することによって、クライアント330は、クエリ結果セットに反映される更新を見る機会を、著しく増加することができる。上述の例示的な使用事例からの2つの大きな違いは、クエリキャッシュ364がバイパスされること、また、クエリ要求を実行するために、ストレージノード370を選択するプロセスは、シーケンストークンによって示される、それらのストレージノード370を支持することである。
クライアント330からクエリを受信した後、コーディネータノード350上の要求ルーター352は、クエリ要求、又はクエリ要求からのクエリ情報を、ローカルクエリノードロケータ354に提出する。クエリノードロケータ354は、1つ以上のクエリTSARノード360のリストを返すことによって、応答する。一実施形態では、リスト内で返することができるクエリTSARノード360の数には、所定の限度があってもよい(例えば、3)。一実施形態では、クエリTSARノード360のリストは、1つ以上の基準に従って、ランク付け、又はソートされてもよい。
次に、要求ルーター352は、クエリ要求を、クエリノードロケータ354から受信するリスト上の、少なくとも1つのクエリTSARノード360に提出する。クエリTSAR360は、要求を、ローカルストレージノードロケータ368に提出する。ストレージノードロケータ368は、クエリ要求において指定されるバケットを含む、ストレージノード370のセット、又はリストを返す。クエリTSAR360は、クエリ要求が提出されてもよい、1つ以上のストレージノード370のセットを決定するために、シーケンストークンにおいて指定される、ストレージノード370のセット、及びストレージノードロケータ368によって返される、ストレージノード370のリストを使用し、次に、決定されたストレージノード370に、クエリ要求を提出する。クエリ要求を受信する各ストレージノード370上のローカルクエリプロセッサは、ローカルeIDストアに対してクエリ要求を処理し、エンティティID(eID)のセットを返す。クエリTSAR360は、必要であれば、ストレージノード370から受信するeIDのセットをマージし、結果を保存するために、クエリ要求を、ローカルクエリキャッシュ364に提出する。次に、クエリTSAR360は、クエリ結果を要求ルーター352に返す。次に、要求ルーター352は、クエリ結果を、要求しているクライアント330に返す。
クエリサービスインターフェース
以下は、一実施形態に応じて、クエリサービスのコンポーネントによって、公開又は要求されてもよい、例示的なインターフェースを説明する。ここで留意すべきは、これらのインターフェースは例示的なものであり、制限することを意図しないことである。
以下は、クエリサービスのコンポーネントの、例示的な公開されるインターフェースである。
クエリノードロケータ354は、クエリTSAR360のホストの、ランク付けされたリストを見つけるために、使用することができる。クエリノードロケータ354は、少なくとも以下の例示的なインターフェースで公開してもよい。
GetQueryNodes ( subscriber identifier, bucket identifier, query-expression )
GetQueryNodesは、加入者識別子、バケット識別子、及びクエリ式を受け入れ、提供された情報に対応するホストのリストを返す。
クエリTSAR360は、少なくとも以下の、例示的なクエリインターフェースを公開してもよい。
Query ( queryID, subscriber identifier, bucket identifier, query-expression, more-token, update-cookie)
Queryは、クエリID、加入者識別子、バケット識別子、クエリ式、more−tokenオブジェクト、及び更新クッキを受け入れる。Queryは、クエリID、eIDリスト、more−tokenオブジェクト、及び/又は適切な場合、エラーメッセージを返す。
各ストレージノード370上のローカルクエリプロセッサは、少なくとも以下の、例示的なクエリインターフェースを公開してもよい。
Query ( queryID, subscriber identifier, bucket identifier, query-expression, more-token, update-cookie)
Queryは、クエリID、加入者識別子、バケット識別子、クエリ式、more−tokenオブジェクト、及び更新クッキを受け入れる。Queryは、クエリID、eIDリスト、more−tokenオブジェクト、及び/又は適切な場合、エラーメッセージを返す。
以下は、クエリサービスのコンポーネントの、例示的な要求されるインターフェースである。
ストレージノードロケータ368は、書き込み、及びリスト属性操作に対する、ストレージホストのランク付けされたリストを見つけるために使用することができる、インターフェースを公開してもよい。
GetStorageNodes ( subscriber identifier, bucket identifier)
GetStorageNodesは、加入者識別子及びバケット識別子を受け入れ、1つ以上のストレージノード370のリストを返す。
グループヘルス226のコンポーネントは、利用可能なクエリTSARノード360を位置付けるために、クエリノードロケータ354によって使用することができる、1つ以上のインターフェースを公開してもよい。
Status (group)
Statusは、特定のグループ内のノードに関する状態情報を返す。グループ内のノードに関する状態が、1つも既知ではない場合、ゼロの状態(又は、「status unknown」)が返される。一実施形態では、状態は、各ノードに対する質のベクトル:{status, [{Quality, Level}, {}...]として、返すことができる。状態情報は、ディスクスペース、「温度」の読み込み、活性などの1つ以上を含むことができるが、それらに限定されない。
Monitor (group, callback)
Monitorは、非同期コールバックを介して、グループ状態の変更を返す。
ストレス管理
検索可能なデータサービスの実施形態は、分散型、非集中的、自動化ストレス管理機構を実装することができる。実施形態では、検索可能なデータサービスにおける各ノードは、できる限りそれ自体のリソースを管理することができる。ノードは、それらのリソース使用を監視することができ、それらのリソース使用について、他のノードの限定されたセットと通信することができる。リソース使用がノード上であまりに高く、コンフォートゾーンから外れる場合、リソースは、ホット状態と見なされ得る。十分に使用されていないリソースは、コールド状態と見なされ得る。各ノードは、そのリソース使用をコンフォートゾーン内にとどめるために実行することができる、アクションを有することができる。
一実施形態では、ストレス管理は、実行されるモニタリング、分析/決定、及び行動を制御する別のプロセスを有し、モジュール式であることが可能である。一実施形態では、ディスクスペースは、自動化ストレス管理機構によって、アクティブに管理することができる。他の実施形態は、通信帯域、読み込み負荷、書き込み負荷、及び/又はCPU使用又は負荷、又はそれらの組み合わせの1つ以上を含むが、それらに限定されない、他のシステムリソースをアクティブに管理することができる。
ストレス管理機構の実施形態は、重要なリソースの自動化モニタリング、リソース使用の分析、及びリソース使用をコンフォートゾーンにとどめるためのアクションの決定、及び実行を含むがそれらに限定されない、機能性を提供することができる。ストレス管理機構によって実行されるアクションは、全体のシステムの性能、可用性、及び/又は信頼性に影響を与える可能性のある、システム負荷を生成しないように、実行することができる。
実施形態では、検索可能なデータサービスノードによって監視することができる、リソースに対する使用評価指標は、以下の1つ以上を含むことができるが、それらに限定されない。
・ストレージ(例えば、ディスク)空間:一部の実施形態は、利用可能なストレージ空間が、コンフォートゾーン内にあるか決定するため目的で、ストレージノード上の利用可能な、及び/又は使用されているストレージ空間の割合を監視することができる
・CPU(プロセッサ)負荷:一部の実施形態は、CPU(プロセッサ)使用を監視することができる。一実施形態は、キューの深さ、及び/又は1つ以上の他のCPU使用評価指標を監視することができる。使用されているノードの潜在的スループットの割合は、CPU使用がコンフォートゾーン内にあるか決定する目的で、監視することができる
・読み込み負荷:一部の実施形態は、ディスク読み込みの数を監視することができる。読み込みは、主としてクエリによって、副次的に「リスト属性」コールによって、決定することができる。実施形態は、これらのコールが静かに損失していないこと、またコールが実行不可能な場合、コールがエラーを返すことを確実にすることができる
・書き込み負荷:一部の実施形態は、ディスク書き込みの数を監視することができる。ホスト/ディスクがあまりに多くの書き込み負荷を有するとき、eID属性の更新は、速度を落とすことができる。実施形態は、書き込みが静かに損失していないこと、またコールが実行不可能な場合、更新がエラーを返すことを確実にすることができる
一実施形態では、リソース負荷ログは、最近のアクティビティを示す移動ウィンドウ平均を有する、各ノード上に維持することができる。例えば、ディスクスペースが、ストレージノードのコンフォートゾーンに対してあまりにホットであるとき、データはストレージノードから、1つ以上の他のストレージノードへ移動することができる。一実施形態では、ストレス管理機構は、リソースが極めて低い状態に達する前に、ノード上のディスクスペース(又は別のリソース)を増大することができる。
一実施形態では、ディスクがストレージノード上で、あまりにいっぱいになるとき(すなわち、ストレージノード上のディスクスペースのリソース使用が、あまりにホットであり、したがって、ストレージノードに対するコンフォートゾーンから外れる、又は外れようとしているとき)、データは、ディスクから移動されてもよい。一実施形態では、これは、データ移動を最小限に抑えて実行されてもよい。
図15は、一実施形態に従い、検索可能なデータサービスシステムのためのストレス管理方法のフローチャートである。検索可能なデータサービスシステムは、複数のノード上で実装することができる。ノードは、1つのデータセンタに位置付けられることができるか、又は、2つ以上のデータセンタにわたって分散することができる。データセンタは、地理的に分散されてもよい。一実施形態では、検索可能なデータサービスは、少なくとも1つのコーディネーションサブシステム、クエリサブシステム、及びストレージサブシステムを含むことができる。一実施形態では、複数のノードは、コーディネーションサブシステムを実装する1つ以上のコーディネータノード、クエリサブシステムを実装する1つ以上のクエリノード(クエリTSARノードとも呼ばれる)、及びストレージサブシステムを実装する1つ以上のストレージノードを含むことができる。一実施形態では、ウェブサービスプラットフォームは、1つ以上のインタフェースコールを、検索可能なデータサービスのクライアントアプリケーションに提供する検索可能なデータサービスに、Webサービスインターフェースを提供することができる。
一実施形態では、複数のノードは、それぞれ複数のノードのサブセットを含む、2つ以上のノードグループへ自己組織化することができる。一実施形態では、ノードグループは、それぞれストレージノードのサブセットを含む、1つ以上のストレージノードグループ、それぞれクエリノードのサブセットを含む、1つ以上のクエリノードグループ、及び、それぞれコーディネータノードのサブセットを含む、1つ以上のコーディネータノードグループを含むことができる。一実施形態では、各クエリノード、及び各コーディネータノードは、サービス要求を受信するために、適切なストレージノードを位置付けるよう構成される検索可能なデータサービスの、ストレージノードロケータのコンポーネントのインスタンスを含むことができ、ノードグループは、それぞれクエリノード、及びコーディネータノードのサブセットを含む、1つ以上のストレージノードロケータグループを含むことができる。他の実施形態は、他の種類のノードグループを含むことができる。
1200に示すように、ノードグループ内の各ノードは、ノード上の検索可能なデータサービスの性能をサポートするのに使用される、ノードの1つ以上のローカルリソースのそれぞれに対する、1つ以上の使用評価指標を監視することができる。一実施形態では、ノードグループ内のノードは、ゴシッププロトコルに従って、ローカルリソースに対する使用評価指標を、ノードグループ内の他のノードに伝えることができる。1202に示すように、ノードグループ内のノードの1つは、ノードのローカルリソースの1つに対する、監視された使用評価指標が、使用評価指標に対する、特定のコンフォートゾーンの限界を超えていることを検出することができる。1204に示すように、ノードは、ノード上のローカルリソースに対するリソース使用の少なくとも一部を、同様のリソースを含むノードグループ内の別のノードに移動するために、ノードグループ内の少なくとも1つの他のノードと通信することができる。一実施形態では、ゴシッププロトコル、及び/又はアンチエントロピープロトコルは、少なくとも1つの他のノードと通信するために、使用することができる。ここで留意すべきは、ローカルリソースに対するリソース使用の少なくとも一部を、ノードグループ内の別のノードに移動するによって、ノード上のローカルリソースに対する監視された使用評価指標を、ノード上の使用評価指標に対する特定のコンフォートゾーン内に、移動することが可能であるということである。
以下は、一実施形態に応じて、検索可能なデータサービスシステム内のストレス管理機構によって実行可能なディスク負荷を管理するための、例示的なストレス管理アルゴリズムである。ここで留意すべきは、アルゴリズムは、必要な場合に、新しいホストを検索可能なデータサービスシステムに追加すること、及び必要な場合に、個々のホスト(ストレージノード)上のディスクスペースを増大することの、両方を行うことである。個々のホストは、ディスクスペース使用をローカルに管理するために、このアルゴリズムの関連部分の実装を使用することができる。ここで留意すべきは、他の実施形態は、他のアルゴリズム、又はこのアルゴリズムの修正を使用することができることである。
定義:
a=すべてのストレージノードにわたる、ディスク使用の平均割合
th=ディスク使用閾値。コンフォートゾーンの上限
c=コンフォートゾーンの下限
i=ホストHi上のディスク使用の割合
i=Hi上のパーティション
例示的なアルゴリズム:
a>Dthである場合、ホストを追加する。
i>Dthである場合、Hiが移動しようと提示するパーティションのリストを公開する。リストは、Hiのパーティションの1つ以上、又はすべてをも含むことができる。
a<Dcであるときのホストは、それらがDthを超えることなく、受け入れることができるリストからのパーティションをビッドすることができる。
iは、
c<Di(新)<Dth
移動コストは低い
パーティションは、ほとんどが空き容量のディスクに行くのような1つ以上のビッドを受け入れることができる。
その後、Hiが、Dth未満にさせるビッドを受信しない場合、Hi上のパーティション(一実施形態では、最小のパーティション)を分割し、パーティションの更新されたリストを再提示する。
一実施形態では、新しいパーティションは、同一、又は同様の機構を使用して、提示することができる。デフォルトサイズは、新しいパーティションに対して、実数(ゼロに近い)の初期サイズの代わりに、使用することができる。
一実施形態では、より大きなパーティションに対するディスク上の大きな空き容量を確保するために、上記のアルゴリズムは、その移動がディスクをコンフォートゾーンに入れることができる場合、パーティションがディスクへ移動される可能性が高くなるように、修正してもよい。本実施形態では、コンフォートゾーン内のホストは、パーティション上でビットすることができない。この修正は、大量の空き容量を有するディスクへ、より小さいパーティションを移動させることを防ぐのに役立つことができ、したがって、より大きいパーティションに対する空き容量を確保することができる。
他の実施形態は、ディスクスペースのストレス管理アルゴリズムの実行に適用されてもよい、パーティションの移動に関する1つ以上の他のルールを実行することができる。例えば、一実施形態は、最近ほとんど増大していないパーティションによる、ディスクの充填(Dth、及び/又はコンフォートゾーンの幅の増大)を可能にするルールを実行することができる。別の例として、一実施形態は、最近大幅に増大し、低活動期にDthに近づいているディスクからの、パーティションを移動を可能にするルールを実行することができる。
グループ通信
グループ通信222のコンポーネントは、例えば、検索可能なデータサービスの他のコンポーネントが、インデックス情報の弱一致性の複製データベースを維持することを可能にするために、使用することができる。グループ通信222は、更新を、以下の種類の複製データセットの1つ以上に「運ぶ」ことができるが、それらに限定されない。
・独立したストレージ/インデックス/クエリサブシステムにおける、検索可能なデータサービスのエンティティ
・バケットの区分情報、及び独立したストレージホストの複製グループディレクトリ
・クエリサブシステムのホスト、及び要求ルーター202のホストに関する、グループメンバーシップ情報
弱一致性は、複製データの読み込みが、複製グループのほかの場所で適用された、最も最近の書き込みによって行われた変更を反映できないことを意味する。さらなる変更がない場合、例えば、ネットワークパーティション、及び/又はノード再起動によって、収束が遅延しても、すべての複製は、同一値に収束するべきである。
一実施形態では、グループ通信は、2つの方法:ゴシップ及びアンチエントロピーに依存することができる。ゴシップ(又は「rumor mongering」は、確率的なフラッディングの間は、信頼できないマルチキャストである。アンチエントロピーは、無作為ピアホストを選択し、選択されたホスト上のピアデータベース、及び他のホスト上のピアデータベース間のいかなる違いも検索し、解決するプロセスである。一実施形態では、高レベル、及び低レベルのアンチエントロピーが実行されてもよい。
高レベルのアンチエントロピーは、メッセージの確率的なフラッディングが、ホストを失った可能性のある場合を処理するために、ゴシップされた更新のピアのログを比較することができる。高レベルのアンチエントロピーは、基礎データベースに関係なく、実行されてもよい。低レベルのアンチエントロピーは、データベースを比較し(又は、一実施形態では、チェックサムのような、データベースの統計値を合計し)、ノードが再起動した、そうでなければ、そのメッセージログを失った場合、又はノードが複製グループに加わり、データベースのコピーを冪等的に得るために、低レベルのアンチエントロピーを使用する場合を、処理することができる。
一実施形態では、グループ通信222のコンポーネントは、基礎データベースの実行の知識をまったく有していなくてもよい。グループ通信222のコンポーネントは、データベースに、更新を広めるというコールを提供し、受信された更新を処理、及び低レベルのアンチエントロピーを実行するためのコールバックを提供するために、データベースに依存する。
グループ通信222のコンポーネントは、グループヘルス226のコンポーネントと、頻繁な相互作用を有することができる。一実施形態では、2つのコンポーネントは、別々のプロセスにおいて実装されてもよい。別の実施形態では、これらのコンポーネントの両方は、2つのコンポーネントがデータ構造を共有することができるように、同一のプロセス内で実装されてもよい。
複製グループのライフサイクル
図16は、一実施形態に従い、検索可能なデータサービスにある複製グループ300のライフサイクルを例示している。新しいホスト310は、複製グループ300に追加されてもよく、既存ホスト310は、複製グループ300から取り除かれるか、それを中止することができる。新しいホスト310(例えば、ホスト310J)は、320それら自体をプレッジ304として宣言、又は誓約することによって、複製グループ300に追加することができる。誓約されたホスト310(例えば、ホスト310G、及び310H)は、複製されたデータセットへのゴシップされた更新を受信することができる。次に、誓約されたホスト310は、既存複製グループ300のメンバ(例えば、ホスト310F)を選択し、低レベルのアンチエントロピーを実行することができる。誓約されたホスト310はまた、すべての更新を受信することができるため、アンチエントロピーが終了するとき、誓約されたホスト310は、いかなる他の複製グループ300のメンバと同じくらい最新であることが可能であり、したがって、322それら自体を、複製グループ300へと先導することができる。
ホスト310(例えば、ホスト310K)は、例えば、失敗又は放棄によって、複製グループ300を脱退することがある。脱退は、あまりに多くの同時の脱退が、複製グループ300に、その最小限のメンバーシップ要求を下回らせる可能性があるため、同期化を要求することができる。
一実施形態では、グループメンバーシップの変更は、近親グループ302として知られる、ホストの1つ以上の他のグループに、送信されてもよい。複製グループに対しては、近親グループは、ストレージノードロケータグループである。ストレージノードロケータグループに対しては、近親グループは、すべての複製グループである。複製グループは、特定のパーティションの複製を保存する、ストレージノードのグループである。ここで留意すべきは、複製グループは、図9C、及び図10において、複製グループ256として図解されることである。ストレージノードロケータグループは、それぞれがストレージノードロケータ216のインスタンスを含む、検索可能なデータサービスにおけるノード(ホスト)のグループである。
検索可能なデータサービスの実施形態は、ホスト、又はノードの以下のタイプのグループの1つ以上を含むことができるが、それらに限定されない。ここで留意すべきは、名前が、各タイプのグループに対して提供されることである。これらの名前は例示的なものであり、限定することを意図しないことである。
・snl_hosts:ストレージノードロケータ(snl)を実装するいくつかの、又はすべてのノードを含む。一実施形態では、すべてのコーディネーション、及びクエリ集約サブシステムのノード
・qtsar_hosts:クエリサブシステム内のいくつかの、又はすべてのノードを含む。これは、クエリノードグループとも呼ばれることができる
・coord_datacenter_hosts:所定のデータセンタ内のすべてのコーディネータノード。これは、コーディネータノードグループとも呼ばれることができる
・sn_subscriber_bucket_mask_value_hosts:名前付けされたパーティションに対する、複製グループ。「sn」は、「ストレージノード」を表す。これは、他でパーティショングループと呼ばれるものであるが、ストレージノードグループとも呼ばれることができる
グループ通信インターフェース
以下は、一実施形態に応じて、検索可能なデータサービスのグループ通信222のコンポーネントによって公開、又は要求することができる、例示的なインターフェース(例えば、コール及びコールバック、内部的及び外部的の両方(ピアツーピア))を説明する。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図しないということである。他の実施形態は、他のインターフェースを含むことができるか、又はこれらのインターフェースの1つ以上を含まなくてもよい。
コール
constructor(argument(s))
一実施形態は、新しい複製グループ300を構築するために、コンストラクタコールを提供することができる。このコンストラクタは、gcastコールを介して受信される初期更新をうまく認識し、提供するために必要とされる最小数のグループメンバを含むが、それに限定されない引数として、1つ以上のパラメータを受け入れることができる(以下参照)。
gcast(Group, Msg)
gcastは、ゴシップされたメッセージを、グループ内へ先導する。Groupは、グループを名前付ける文字列である。Msgは、グループへ送信されるメッセージを特定する値である。これは、msg引数として、他のグループメンバに対するapplyコールバックに与えられる。
一実施形態では、gcastコールの結果は、以下の要素の1つ以上を含むが、それらに限定されないオブジェクトである。
・ホスト:今までのところ更新を認識してきたストレージノードをリストアップする、文字列の配列
・耐久性:メッセージが、最小数のグループメンバに初期に伝えられたかどうか示すブーリアン。システムは、偽が返されても、メッセージを伝達するよう試み続ける
・クッキー:メッセージが、すべてのグループメンバによって認識されたか見るために、後にgsyncに与えられる値
一実施形態では、gcastコールは、以下のエラーの1つ以上を生成することがあるが、それらに限定されない。
・無効のグループタイプ
・無効のグループ名
gsync(Cookie)
gsyncは、ゴシップされたメッセージがすべての非失敗グループメンバに届いたかどうか示す、ブーリアンを返す。Cookieは、成功したgcastコールによって返された値である。gsyncコールの結果は、すべてのグループメンバがメッセージを認識したかどうか示すブーリアンである。一実施形態では、gsyncコールは、無効のクッキーエラーを生成することがあるが、それに限定されない。
コールバック
apply(Group, Msg)
applyコールバックは、所定のメッセージによって説明される変更を、複製データセットに適用する。Groupは、グループ名を示す文字列である。Msgは、適用されるメッセージを示す値である。
一実施形態では、gcastコールの結果は、以下のうちの1つ以上を含むことができるが、それらに限定されない。
・OK:より最近指示された変更によって、おそらくは全部ではないが、変更がうまく適用された
・DUP:又は「duplicate」。特定の変更が、すでに受信されている
・LATE:特定の変更が、より最近指示された変更によって、廃棄されている
・Error:エラー理由を与える文字列。Errorによって特定される理由により、変更は適用されることができない。結果として、一実施形態では、低レベルのアンチエントロピーセッションは、自己修復を実行するために、ピアと共に要求することができる
antientropy(Group, Host)
antientropyコールバックは、名前付けされたグループに関連するデータに対する、特定のピアホストを有する、アンチエントロピーセッションを開始する。Groupは、グループの名前を示す文字列である。Hostは、アンチエントロピーを実行するための、ピアホストの名前を示す文字列である。antientropyは、全体のデータセットがトラバースされたかどうか示す、ブーリアンを示すことができる。偽である場合、同一グループに対する別のアンチエントロピーセッションが、好ましくは異なるピアホストで、開始することができる。一実施形態では、antientropyコールバックは、グループ無効、又はホスト無効エラーを生成することがあるが、それに限定されない。
ピアツーピアコール
ピアツーピアコールは、検索可能なデータサービスの実装に内部的である。これらのコールは、特定のグループのメンバ間で、又はメンバに行われる。
rumor(Group, Originator, Seqno, OrigVtime, Msg)
rumorピアツーピアコールは、rumor−mongeringによって、グループ内に更新を広める。Groupは、更新が広められるグループの名前を示す文字列である。Originatorは、送信元ホストの名前を示す文字列である。Seqnoは、更新に対する送信元のシーケンス番号を示す。OrigVtimeは、更新に対する送信元の仮想時間を示す。Msgは、applyコールバックを介して、離れたデータベースに適用される、広められている更新を示す。rumorコールの結果は、rumorがうまく受信されているかどうか示す、ブーリアンであることが可能である。一実施形態では、rumorコールは、グループ無効エラーを生成することがあるが、それに限定されない。
request_membership(Group, Mode, Generation, Seqno)
request_membershipピアツーピアコールは、自発的なメンバーシップ変更が、受信側のグループメンバーシップビューにおいて、送信側に対して行われることを要求する。Groupは、グループの名前を示す文字列である。Modeは、メンバーシップ変更の種類を示す。一実施形態では、これは、「誓約」、「開始」、及び「脱退」の1つであってもよい。Generationは送信側の世代番号を示し、それは、再起動後増分すると保証され得る。Seqnoは、認識ベクトル(以下参照)が、すべてのグループメンバが操作を確かめたときを示すために、使用することができるように、操作に対する送信元のシーケンス番号を示す。request_membershipコールの結果は、受信者が、要求されたグループメンバーシップの変更を行ったかどうか示す、ブーリアンである。一実施形態では、request_membershipコールは、グループ無効エラーを生成することがあるが、それに限定されない。
一実施形態では、受信されたrequest_membershipコールは、受信側によって、1人以上の他のグループメンバに転送されてもよい。一実施形態では、受信側は、request_membershipコールが転送されている他のグループメンバのリストを、送信側に返すことができる。
failure(Group, Host, Generation)
failureピアツーピアコールは、グループメンバが、失敗したと確認されたことを発表する。Groupは、グループの名前を示す文字列である。Hostは、失敗したホストを識別する。Generationは、失敗時の、失敗したホストの世代を示す。
fast_anti_entropy(Group, View, SummaryVec, AcknowledgementVec)
fast_anti_entropyピアツーピアコールは、rumor−mongeringによって見逃されたおそれのある更新を交換するために、アンチエントロピーの速い、又は高レベルのフェーズを開始する。これらの操作の交換は、syncに2つのホストを運ぶために、いかなる必要なルーモア機能も後に続くことができる。Groupは、グループの名前を示す文字列である。Viewは、グループメンバーシップビューを表すオブジェクトである。SummaryVecは、要約ベクトルを表すオブジェクトである。AcknowledgementVecは、認識ベクトルを表すオブジェクトである。fast_anti_entropyコールの結果は、2つのホストがすべての利用可能なメッセージを交換するまで、相互コール、及びルーモア操作の交換が後に続くように、情報の成功した処理を示すブーリアンであることが可能である。一実施形態では、fast_anti_entropyコールは、グループ無効エラーを生成することがあるが、それに限定されない。
一実施形態では、受信されたfast_anti_entropyコールは、受信側によって、1人以上の他のグループメンバに転送されてもよい。一実施形態では、受信側は、fast_anti_entropyコールが転送された他のグループメンバのリストを、送信側に返すことができる。
グループメンバーシップ及びヘルス
一実施形態では、グループヘルス226のコンポーネントは、検索可能なデータサービスの1つ以上の他のコンポーネントが、コンポーネントが監視可能なノードのセットを識別することを可能にすることができる。次に、グループヘルス226のコンポーネントは、それらのノードに関する自動的にリフレッシュされたヘルス情報に対して、他のコンポーネントによってクエリされてもよい。一実施形態では、グループヘルス226のコンポーネントはまた、失敗検出機構として機能することができる。
検索可能なデータサービスの実施形態では、ホスト(ノード)は、グループヘルス226のコンポーネント、及びグループ通信222のコンポーネントを介して、それら自体、及び他のノードに関するヘルス情報を交換することができる。一実施形態では、検索可能なデータサービスのノードが、他のノードと通信していない場合、ノード失敗、ネットワーク失敗、又は何らかの他の理由によるものであっても、ノードの情報の停滞は、他のノードによって通知されてもよく、タイマーは、サイレントノードが失敗したと最終的に宣言するために、使用することができる。この時間のカプセル化は、コンポーネントが非同期的に機能することを可能にすることによって、他のコンポーネントを単純化するのに役立つことができ、ノードAが、ノードBからの応答を待っている場合、ノードAは、最終的にノードBからの応答受信するか、ノードBの失敗を通知することができる。一実施形態では、別のノードは、グループヘルスメッセージが、最後に受信されたグループヘルスメッセージの後の事前指定されたタイムアウト期間と等しい、又はより大きい期間に、(直接、又はゴシップを介して)そのノードから受信されない場合、失敗した、又はオフラインになったと決定することができる。
一実施形態では、分散型負荷平均化は、グループメンバーシップ、及びヘルス226のコンポーネントを介して、少なくとも部分的に、制御されてもよい。例えば、一実施形態では、グループヘルス226のコンポーネントは、現在の負荷平均及び距離を考慮に入れて、複製グループから最適なメンバノードを選択するための機構を提供することができる。
一実施形態では、検索可能なデータサービス内の各ノード上に、グループヘルス226のコンポーネントのインスタンスがあってもよい。一実施形態では、他のノードがノードの失敗を検出することを可能にするために、各ノード上のグループヘルス226のコンポーネントは、ハートビートメッセージとも呼ばれるグループヘルスメッセージを、1つ以上の隣接ノードに定期的に送信することができる。ハートビートメッセージは、ノードに対する現在のローカルヘルス統計値を含むことができる。これらの統計値は、以下のノードヘルス情報の評価指標の1つ以上を含むことができるが、それらに限定されない。
・プロセッサの使用評価指標−例えば、CPU(プロセッサ)負荷平均/実行キューの深さなど
・ストレージ、及び/又はメモリリソースの使用評価指標−例えば、ディスクI/O、ディスク空き容量、ページング/スワッピング評価指標など
・ネットワーク/帯域リソースの使用評価指標−例えば、ネットワーク通信リソースに対する、ネットワークトラフィック評価指標
統計値は、例えば、1分にわたる、又は5分にわたるなどの期間にわたる(又は、評価指標の異なるものに対して異なる期間にわたる)、平均であってもよい。一実施形態では、ノードのヘルス情報の評価指標に対する平均は、操作における増加又は減少を伴う負荷におけるわずかな変化の推定値を確立するために、操作カウントに対して相関性があってもよい。一実施形態では、グループヘルス226のコンポーネントは、平均化に対する最後の期間において、操作のバケットごとの内訳を得るために、必要に応じて、1つ以上の他のローカルコンポーネントをクエリすることができる。統計値は、例えば、「1秒ごとに追加の150クエリが受け入れられる場合、ディスクI/Oのストレスはどのようなものになるのか」、などの操作の数における変化に応えて実現することができる、CPU負荷(又は帯域、又はストレージなど)における変化の予測により、増大することができる。例えば、これは、ストレージノード上のパーティションマネージャー232のコンポーネントが、構成に対して1つ以上の提案された変更が行われる場合、負荷がどのようなものになり得るか予測することを、可能にすることができる。
一実施形態では、ハートビートメッセージは、エピデミック、又はゴシックプロトコルを介して、検索可能なデータサービスシステム全体の、又は、検索可能なデータサービスシステム内のノードのグループ内のノード上のコンポーネントに、伝えられることができる。一実施形態では、通信は、上述のように、検索可能なデータサービスのグループ通信222のコンポーネントを介して、実行することができる。一実施形態では、グループヘルス情報は、他の検索可能なデータサービスのノード間、又はコンポーネント間メッセージ上で、ピギーバックすることができる。
ノードが、特定の閾値、又は期間(例えば、5分)を超える期間、別のノードに対するハートビートメッセージを受信していない場合、ノードは、他のノードが失敗したと予測することができる。ノードが、期間中、いかなる他のノードからもいかなるハートビートを受信しない場合、ノードは、そのネットワーク接続が失敗したと予測することができる。
一実施形態では、ノードがハートビートメッセージを受信するとき、ノードは、これが、ノードが見る、送信元ノードからの最も最近のハートビートメッセージであるかどうか調べるために、内部テーブルをチェックすることができる。そうではない場合、ハートビートメッセージは廃棄される。それが、送信元ノードからの最も最近のハートビートメッセージである場合、内部テーブルは更新され、次に、ハートビートメッセージは、1つ以上の他の隣接ノードに送信されてもよい。一実施形態では、隣接ノードは、無作為に選択されてもよい。一実施形態では、隣接ノードは、ハートビートがWANリンク上で送信される回数を減らすために、より近い隣接ノードに重点を置いて、選択されてもよい。しかしながら、ネットワーク上で遠隔ノードにハートビートメッセージをうまく送信する(また、ハートビートメッセージを受信する遠隔ノードの)確率は、ハートビートが、検索可能なデータサービスシステム内のすべての他のデータセンタに、最終的に達するという望ましいレベルの確実さを実現するために、十分高くあるべきである。
一実施形態では、ハートビートメッセージが転送される隣接ノードは、監視されるグループごとに選択されてもよい。例えば、ノードAのグループヘルス226のコンポーネントが、ノードAがそれぞれメンバであるグループG1、G2、及びG3を監視しており、また、ノードAがメンバーではないグループG4、G5、及びG6も監視している場合、ノードAのハートビートメッセージは、6つのグループのそれぞれにおけるNホストに送信されてもよい。一実施形態は、重複メンバーシップを有するグループに対するハートビートメッセージが転送される、ノードの選択を最適化することができる。例えば、グループG2におけるノードBが、ノードAからのハートビートメッセージを受信するために選択され、また、ノードBがグループG4及びG6のメンバでもある場合、ノードBは、それらの他のグループに対するハートビートメッセージを受信するためにも、選択されてもよい。
ノードが、例えば5分の期間、監視されるノードからのヘルス更新を見ていない場合、ノードは、異なるノードでヘルスアンチエントロピーを実行することができ、それは、一実施形態では、ノードからの距離を減少させる確率に応じて、選択されてもよい。他の実施形態は、ヘルスアンチエントロピーが実行可能な異なるノードを選択するために、他の方法、若しくは評価指標、又はそれらの組み合わせを使用することができる。例えば、一実施形態では、異なるノードは、効果的なネットワーク、及びノード利用コストを減少する確率に応じて、選択されてもよい。アンチエントロピーが監視されるノードに対する更新をもたらさない場合、監視されるノードは、監視しているノード上のローカルコンポーネントに対して、故障、又は使用不可と識別されてもよい。
一実施形態では、1つ以上の、ゴシップ、又はエピデミックプロトコルは、ヘルス情報の更新の弱一致性のマルチキャスティングに対して、使用されてもよい。一実施形態では、グループ通信222のコンポーネントが、グループメンバーシップ、及びヘルス226のコンポーネントに依存しているため、グループヘルス226のコンポーネントは、グループ通信222のコンポーネントの常連のクライアントとして、見なされることができない。
グループヘルス226のコンポーネントは、グループ通信222のコンポーネントと頻繁な相互作用を有することができる。一実施形態では、2つのコンポーネントは、別々のプロセスで実装されてもよい。別の実施形態では、これらのコンポーネントの両方は、2つのコンポーネントがデータ構造を共有することができるように、同一のプロセス内で実装されてもよい。
ヘルス更新を実行するために必要とされるネットワークトラフィックの量は、ノードの潜在的に大きいグループにより、検索可能なデータサービスをスケーリングするための制限因子であってもよい。したがって、一実施形態では、検索可能なデータサービス内のノードのグループは、グループの階層として組織化されてもよく、したがって、ノードのいかなる単一のグループのサイズを制限する一方で、大きいデータセットが対処されることを可能にする。
図17は、一実施形態に応じて、検索可能なデータサービスシステムにおいて、グループヘルスを監視するための方法を図解する。検索可能なデータサービスシステムは、複数のノード上で実装されてもよい。ノードは1つのデータセンタに位置付けられてもよく、又は2つ以上のデータセンタに分散されてもよい。データセンタは、地理的に分散することができる。一実施形態では、検索可能なデータサービスは、少なくとも1つのコーディネーションサブシステム、クエリサブシステム、及びストレージサブシステムを含むことができる。一実施形態では、複数のノードは、コーディネーションサブシステムを実装する1つ以上のコーディネータノード、クエリサブシステムを実装する1つ以上のクエリノード(クエリTSARノードとも呼ばれる)、及びストレージサブシステムを実装する1つ以上のストレージノードを含むことができる。一実施形態では、ウェブサービスプラットフォームは、1つ以上のインタフェースコールを、検索可能なデータサービスのクライアントアプリケーションに提供する検索可能なデータサービスに、ウェブサービスインタフェースを提供することができる。
一実施形態では、複数のノードは、それぞれ複数のノードのサブセットを含む、2つ以上のノードグループへ自己組織化することができる。一実施形態では、ノードグループは、それぞれストレージノードのサブセットを含む、1つ以上のストレージノードグループ、それぞれクエリノードのサブセットを含む、1つ以上のクエリノードグループ、及び、それぞれコーディネータノードのサブセットを含む、1つ以上のコーディネータノードグループを含むことができる。一実施形態では、各クエリノード、及び各コーディネータノードは、サービス要求を受信するために、適切なストレージノードを位置付けるよう構成される検索可能なデータサービスの、ストレージノードロケータのコンポーネントのインスタンスを含むことができ、ノードグループは、それぞれクエリノード、及びコーディネータノードのサブセットを含む、1つ以上のストレージノードロケータグループを含むことができる。他の実施形態は、他の種類のノードグループを含むことができる。
1300に示すように、ノードグループ内の各ノードは、ノードに対するローカルヘルス情報を収集することができる。1302に示すように、ノードグループ内の各ノードは、ノードに対する収集されたローカルヘルス情報を含むメッセージを、ノードグループ内の少なくとも1つの他のノードに、周期的に、又は非周期的に送信することができる。1304に示すように、ノードグループ内の各ノードは、ノードグループ内の1つの他のノードから送信され、他のノードに対する収集されたローカルヘルス情報を含むメッセージを、周期的に、又は非周期的に受信することができる。一実施形態では、ノードに対するローカルヘルス情報は、ローカルストレージリソースに対する、1つ以上のストレージリソース使用評価指標、ローカルプロセッサリソースに対する、1つ以上のプロセッサ使用評価指標 、及びネットワーク通信リソースに対する、1つ以上のネットワーク使用評価指標の1つ以上を含むことができるが、それらに限定されない。
一実施形態では、ノードグループ内のノードは、ゴシッププロトコルに従って、ノードグループ内にメッセージを伝えるように構成されてもよい。一実施形態では、ノードグループ内のノードは、他の検索可能なデータサービスのメッセージに関するヘルス情報を、ノードグループ内の他のノードへ、ピギーバックすることができる。
一実施形態では、ヘルスメッセージは、ノードグループ内の別のノードがオフラインになったか検出するために、ハートビートメッセージとして使用されてもよい。本実施形態では、1306に示すように、ノードグループ内のノードの1つは、他のノードに対する収集されたローカルヘルス情報を含む新しいメッセージが、特定の期間内に受信されないと、ノードグループ内の別のノードがオフラインになったことを決定することができる。
一実施形態では、別の他のノードに対する収集されたローカルヘルス情報を含む新しいメッセージが、特定の期間内に、ノードグループ内の特定のノードから受信されなかったことを検出すると、ノードは、ノードグループ内のノードに対する更新されたヘルス情報を得るために、ノードグループ内の1つ以上の他のノードによって、アンチエントロピー操作を実行することができる。アンチエントロピー操作が、特定のノードに対する更新されたヘルス情報をもたらさない場合、ノードは、特定のノードがオフラインになったことを決定することができる。
一実施形態では、ノードグループ内のノードは、ノードに対する収集されたローカルヘルス情報を、他のノードからのメッセージ内で受信される、ノードグループ内の他のノードの少なくとも1つに対する、ローカルヘルス情報と比較することができる。ノードは、ノードに対するローカルノードヘルスの決定に、比較を使用することができる。
グループメンバーシップ、及びヘルスインターフェース
以下は、一実施形態に応じて、検索可能なデータサービスのグループヘルス226のコンポーネントによって公開、又は要求されてもよい、例示的なインターフェース(例えば、コール及びコールバック、内部的及び外部的の両方(ピアツーピア))を説明する。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図しないということである。他の実施形態は、他のインターフェースを含むことができるか、又はこれらのインターフェースの1つ以上を含まなくてもよい。
コール
add(Group, Host)
addコールは、特定のホスト(ノード)を特定のグループに追加する。このコールは、まだ存在していない場合、グループの作成をもたらすことができる。
del(Group, Host)
delコールは、特定のホスト(ノード)を特定のグループから削除する。このコールは、削除されたホストが、グループ内の唯一のホストであった場合、特定のグループそれ自体の削除をもたらすことができる。
gdel(Group)
gdelコールは、特定のグループを削除する。
status(Group)
statusコールは、特定のグループ内のすべてのノードに対する状態情報を返す。statusは、グループ内のノード名、及び名前付けされたノードのそれぞれに関する状態情報を含む、オブジェクト内で返される。状態情報は、各ノードに対して、ノードが知られているかどうか、すなわち、ノードが、名前付けされたノードに関して受信される以前の情報を介して、要求側に知られているかどうかについての表示を含むことができる。ノードが知られていない場合、その特定のノードに関する他の状態情報は、有効でないことがある。ノードが知られている場合、ノードに対する状態情報は、ノードが現在使用可能であるかの表示を含むことができ、また、ノードに関する他の情報も含むことができる。
monitor(Group)
monitorコールは、1つ以上の非同期コールバックを介して、特定のグループに対するグループ状態変更を返す。
unmonitor(Group)
unmonitorコールは、特定のグループに対する非同期コールバックをオフにする。このコールは、特定のグループに対するmonitorコールを取り消すことができる。
コールバック
update(Group, Host, Status)
updateコールバックは、特定の監視されるグループ内の特定のホスト(ノード)に対する、状態変更の即時通知を提供する。
ピアツーピアコール
heartbeat(Originator, OrigVtime, StatVec)
heartbeatピアツーピアコールは、ハートビートのルーモアを伝える。Originatorは、ハートビートを送信するホストを示す。OrigVtimeは、ハートビートの仮想時間を示す。StatVecは、1つ以上の評価指標上の統計値、及び統計値に対する値の配列を含む、オブジェクトであり、ここで、第1の要素は、正規化ストレスであり、第2の要素は、ストレスにおける予測される操作ごとの変化である。統計値が含まれることができる、例示的な評価指標は、以下の1つ以上を含むことができるが、それらに限定されない。
・cpu:期間(例えば、1分間)のCPU負荷平均、又は実行キューの深さ
・diskspace:ディスクスペース利用率及び使用法(例えば、ギガバイトで)
・diskio:ディスクI/O操作
・net:ネットワークI/O操作
・mempage:メモリページング
管理コンソール
検索可能なデータサービスの一実施形態は、アドミニストレータが、検索可能なデータサービスシステムの動作を監視することを可能にすることができる、管理コンソールを提供することができる。図18は、一実施形態に従い、検索可能なデータサービスシステムの管理コンソールの高レベルアーキテクチャを例示している。管理コンソール400は、検索可能なデータサービスシステム内のホスト410から、情報を収集することができる。検索可能なデータサービスシステムの実装において、単一の事象(例えば、クエリ、又は追加)は、互いに通信するシステム内の多くのホストをもたらすことがある。事象に関する情報、及び事象に続くことができるシステム内の活動(例えば、メッセージ)の結果のカスケードを監視、記録、分析、要約、及び表示することができる管理コンソール400を提供することは、検索可能なデータサービスシステムの様々なフェーズの間、システムモニタリング、最適化、及びトラブルシューティングに有用であることが可能である。
管理コンソール400は、例えば、システム動作を理解し、デバッグし、最適化を必要とし得る領域を検出するために、検索可能なデータサービスシステムの開発フェーズの間、使用されてもよい。生産フェーズの間、管理コンソール400は、例えば、システムのヘルスを監視し、問題を識別するため、また、課題が危機的になる前に、予測及び対処するために、使用されてもよい。
図18に図解される実施形態では、検索可能なデータサービスの管理は、2つ以上のホスト上にある分散型管理システムのコンポーネントで、分散型アーキテクチャにおいて実行されてもよい。遠隔管理402のアプリケーションは、ホストシステム(管理コンソール400)上にあることが可能である。検索可能なデータサービスシステム内のホスト410の1つ以上は、それぞれ、検索可能なデータサービスの活動に関する情報、ヘルス情報、並びに、そのホスト上のコンポーネント414間の、及び異なるホスト410上のコンポーネント414間のコンポーネント間通信を含む、そのホスト410内の検索可能なデータサービスコンポーネント414の通信を監視、及び収集するローカル管理412のモジュールを含むことができる。
一実施形態では、遠隔管理402のアプリケーションは、特定の検索可能なデータサービスノード(ホスト410)におけるローカル管理412のモジュールで、通信チャネル(例えば、RPC(遠隔手続呼び出し)、又はHTTP通信チャネル)を確立することができ、1つ以上の検索可能なデータサービスコンポーネント414を監視するよう要求する。次に、各ローカル管理412のモジュールは、要求された検索可能なデータサービスコンポーネント414との接続を確立することができ、それらの検索可能なデータサービスコンポーネント414が、モニタリングのためのメッセージを、ローカル管理412のモジュールに送信し始めるよう要求する。ローカル管理412のモジュールは、これらのメッセージを、遠隔管理402のアプリケーションに転送する。
一実施形態では、遠隔管理402のアプリケーションは、例えばアドミニストレータである人間のクライアントに、対話型クライアントインターフェースを提供することができる。クライアントは、クライアントインターフェースを介して、遠隔管理402のアプリケーションに、特定(又はすべて)のローカル管理412のモジュールに接続するよう命令することができ、ローカル管理412のモジュールに、遠隔管理402のアプリケーションを介して、特定の検索可能なデータサービスコンポーネント414のモニタリングを、可能/不可能にするよう命令することができる。
管理コンソール400は、クライアント(例えば、システムアドミニストレータ)に対する収集された情報、及び/又は収集された情報の要約を記録、ログ/保存、分析実行、並びにグラフィック/テキストで表示することができる。一実施形態では、管理コンソール400は、以下の活動の1つ以上を可能に、又は実行することができるが、それらに限定されない(図6に図解されるコンポーネントを参照する)。
・検索可能なデータサービスホスト間のメッセージを記録、ログ、及び表示する。これらのメッセージは、要求ルーター202間のメッセージ、ストレージノードロケータ216間のメッセージ、クエリノードロケータ220間のメッセージ、eID更新マネージャー230間のメッセージ、要求ルーター202、及びクエリTSAR212間のメッセージ、要求ルーター202、及びeID更新マネージャー230間のメッセージ、クエリTSAR212、及びクエリプロセッサ228間のメッセージ、パーティションマネージャー232、及びストレージノードロケータ216間のメッセージ、パーティションマネージャー232間のメッセージを含むことができるが、それらに限定されない
・検索可能なデータサービスホスト内のモジュール、又はコンポーネント間のメッセージ(例えば、RPCメッセージ)を記録、ログ、及び表示する。これらのメッセージは、要求ルーター202−クエリノードロケータ220のメッセージ、要求ルーター202−ストレージノードロケータ216のメッセージ、パーティションマネージャー232−eID更新マネージャー230のメッセージ、クエリTSAR212−ストレージノードロケータ216のメッセージ、ストレージノードロケータ216−グループメンバーシップ及びヘルス226のメッセージ、クエリノードロケータ220−グループメンバーシップ及びヘルス226のメッセージ、パーティションマネージャー232−グループメンバーシップ及びヘルス226のメッセージ、ストレージノードロケータ216−グループ通信222のメッセージ、及びクエリノードロケータ220−グループ通信222のメッセージを含むことができるが、それらに限定されない
・eIDストア236、及びクエリインデックスストア234の内容を記録、及び表示する
・グループメンバーシップ情報(例えば、snl_hosts、qtsar_hostsなど)を監視、及び表示する
・ストレージノードロケータ216の状況を見る:ホスト、及びパーティション複製間のマッピング
・クエリノードロケータ220の状況を見る:クエリTSARの一貫したハッシングリング
・クエリTSARのクエリキャッシュ214の内容を表示する
・要求ルーター202の状況を見る
・パーティションマネージャー232の状況を見る
・グループメンバーシップのリストを変更する
・2つのノード間のアンチエントロピーを開始する
・システムからのリソースを追加、又は除外する
・1つ以上のノードを、一時的に、又は永久的に停止する
図18をもう一度参照すると、一実施形態では、遠隔管理402のアプリケーションは、以下のインターフェースの1つ以上を提供することができるが、それらに限定されない。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図しないということである。
readMsg(String msg)
readMsgは、ローカル管理412のモジュールからメッセージを受信する。
startMon(String host, int port)
startMonは、特定のホスト:ポートにおいて、ローカル管理412のモジュールに接続し、このローカル管理412のモジュールに対して監視される、すべてのコンポーネント414を有効にする。
stopMon(String host, int port)
stopMonは、すべてのコンポーネント414のモニタリングを停止し、特定のホスト:ポートにおいて、ローカル管理412のモジュールから切断する。
stopAllMon()
stopAllMonは、べてのコンポーネント414のモニタリングを停止し、すべての現在接続されている、ローカル管理412のモジュールから切断する。
enableComp(String componentName)
enableCompは、componentNameによって識別される、すべての接続されたホストのコンポーネント414のモニタリングを開始する。
enableAllComp()
enableAllCompは、静的入力ファイル内で見られる、すべてのコンポーネント414上のモニタリングを有効にする。
disableComp(String componentName)
disableCompは、componentNameによって識別される、すべての接続されたホストのコンポーネント414のモニタリングを停止する。
disableAllComp()
disableAllCompは、すべてのコンポーネント414のモニタリングを停止するが、現在接続されているローカル管理412のモジュールから切断しない。
ローカル管理モジュール
検索可能なデータサービスのホスト410上のローカル管理412のモジュールは、遠隔管理402のアプリケーション、及びローカルコンポーネント414間の仲介としての機能を果たす。ローカル管理412のモジュールは、遠隔管理402の接続を待ち、一度遠隔管理402のアプリケーションに接続されると、その遠隔管理402のアプリケーションからの有効/無効コンポーネント414の要求を処理する。また、ローカル管理412のモジュールは、ローカルコンポーネント414の間の検索可能なデータサービスメッセージ上の情報を、遠隔管理402のアプリケーションに転送することができる。
以下は、ローカル管理412のモジュールからの、遠隔管理402のアプリケーションへのメッセージを監視する、検索可能なデータサービスの例示的なメッセージのフォーマットであり、限定することを意図しない。
<host/hostname/nodeID>: <Component> <sent/received> on <to/from who> <timestamp>: <msg>
一実施形態では、ローカル管理412のモジュールは、以下のインターフェースの1つ以上を提供することができるが、それらに限定されない。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図しないということである。
monMsg(String msg)
monMsgは、コンポーネント414がメッセージを送信/受信するとき、コンポーネント414によってコールされる。
monBegin(String componentName)
monBeginは、静的ファイル中の名前付けされたコンポーネント414のポートを調べ、ローカルホスト:ポートに接続し、コンポーネント414に対するmonEnable()をコールする。
monBeginAll()
monBeginAllは、コンポーネント414、及びコンポーネントのポートのリストを含む、静的入力ファイルを読み込み、ファイル内にリストアップされるコンポーネント414に接続し、コンポーネント414のそれぞれに対する、monEnable()をコールする。
monStop(String componentName)
monStopは、名前付けされたコンポーネント414のモニタリングを停止する。
monStopAll()
monStopAllは、すべての現在のコンポーネント414のモニタリング活動を停止する。
ローカルコンポーネント
ローカルコンポーネント414は、ローカル管理412の接続を待つ。一度、ローカル管理412のモジュールに接続されると、ローカルコンポーネント414は、ローカル管理412のモジュールからの有効要求を受信するとき、モニタリングに対するメッセージを、ローカル管理412のモジュールに送信し始めることができる(それは、ローカル管理412のモジュールが、遠隔管理402のアプリケーションからの有効要求を受信するときも、同様に生じる)。ローカルコンポーネント414は、ローカル管理412のモジュールからの無効要求を受信するとき、モニタリングに対するメッセージの送信を停止することができる。
以下は、ローカルコンポーネント414からの、ローカル管理412のモジュールへのメッセージを監視する、検索可能なデータサービスの例示的なメッセージのフォーマットであり、限定することを意図しない。
<Component> <sent/received> on <to/from who> <timestamp>: <msg>
一実施形態では、ローカルコンポーネント414は、以下のインターフェースの1つ以上を提供することができるが、それらに限定されない。ここで留意すべきは、これらのインターフェースは例示的なものであり、限定することを意図しないということである。
monEnable()
monEnableは、sendMsgToMonを呼び出すことによって、いかなる送信/受信されたメッセージを、ローカル管理412のモジュールに送信し始める。
monDisable()
monDisableは、ローカル管理412のモジュールへのメッセージの送信を停止する。
sendMsgToMon(String msg)
モニタリングが有効であるとき、sendMsgToMonは、monMsg(String msg)を呼び出すことによって、いかなる送信/受信されたメッセージを、ローカル管理412のモジュールに送信する。
検索可能なデータサービスシステム−物理的実装
図19は、一実施形態に従い、ネットワーク環境にある検索可能なデータサービスの実装を例示している。ネットワーク700は、例えば、ワールドワイドウェブ、又はインターネットを表すことができる。又は、ネットワーク700は、ローカルエリアネットワーク(LAN)、又はワイドエリアネットワーク(WAN)を表すことができる。検索可能なデータサービス720は、1つ以上のデータセンタ710(例えば、データセンタ710A、及び710B)にわたって実装されてもよい。データセンタ710は、コンピュータデバイスのローカルコレクションを表し、それは、サーバシステム、及びストレージデバイスを含むことができるが、それらに限定されない。データセンタ710は、地理的に分散されてもよい。ここで留意すべきは、データセンタ710内のすべてのコンピュータデバイスが、検索可能なデータサービス720に参加可能とは限らないことである。
データセンタ710A、及び710Bそれぞれにおける、検索可能なデータサービスホスト722A、及び722Bは、図4に図解するように、コーディネータノード340、クエリTSARノード350、及びストレージノード360などの、検索可能なデータサービスノードのインスタンスをホストする、個々のコンピュータシステム(例えば、サーバシステム)を示す。一実施形態では、各検索可能なデータサービスホスト722は、唯一の検索可能なデータサービスノードをホストすることができる。本実施形態では、各検索可能なデータサービスホスト722は、明確な検索可能なデータサービスノードを示す。各コーディネータノード340、クエリTSARノード350、及びストレージノード360は、別々のコンピュータシステム上でインスタンス化される。
別の実施形態では、検索可能なデータサービスホスト722は、1つ以上の検索可能なデータサービスノードをホストすることができる。例えば、データセンタ内の1つの検索可能なデータサービスホスト722は、コーディネータノード340のインスタンスをホストすることができ、別のホスト722は、クエリTSARノード350、及びストレージノード360のインスタンスをホストすることができる。
一実施形態では、検索可能なデータサービスノードのコンポーネントは、2つ以上の検索可能なデータサービスホスト722にわたって、インスタンス化されてもよい。本実施形態では、2つ以上のコンピュータシステムが、1つの検索可能なデータサービスノードを構成することができる。
検索可能なデータサービスストア724は、図6に図解するように、eIDストア236、クエリインデックスストア234、要求ログ210、メンバーシップマップ218、及びメッセージログ224などの検索可能なデータサービスによって、持続的に保存され得る様々なデータを表す。ここで留意すべきは、図12が、ホスト722の外部としてストア724を示す一方で、一実施形態では、検索可能なデータサービスストア724の少なくとも一部は、ホスト722内のストレージ上に位置付けられることが可能であるということである。様々な実施形態では、検索可能なデータサービスストア724は、ホスト722内、データセンタ710内、ネットワーク700上の他の離れたところに位置付けられた、又は上記のある組み合わせの、いかなるタイプの永続的なストレージデバイス、又はストレージシステム上に保存されてもよい。ここで留意すべきは、ストレージノード360は、論理的に、検索可能なデータサービスホスト722上でインスタンス化されるコンポーネントに加えて、少なくとも、ローカルeIDストア236、及びクエリインデックスストア234を含む。同様に、コーディネータノード340、及びクエリTSARノード350は、論理的に、検索可能なデータサービスストア724内に保存される、少なくとも一部のデータを含むことができる。
クライアントシステム730は、いかなる有線、又は無線ネットワーク接続機構を介して、ネットワーク700に結合されてもよい。クライアントシステム730は、データストア740内で保存されるデータに対する、検索可能なインデックスを作成及び更新するために、及び/又は、データストア740に保存されるエンティティに対するロケータを得るための、検索可能なインデックスをクエリするために、上述のように、ウェブサービスインターフェースを介して、検索可能なデータサービス720にアクセスすることができる。クライアントシステム730、及びデータストア740を保存するストレージデバイスは、ネットワーク700上のどこにでも位置付けられることができる。ウェブサービスインターフェースは、ネットワーク700に結合される1つ以上のサーバシステム上でインスタンス化される、ウェブサービスプラットフォーム(例えば、図6のウェブサービスプラットフォーム200を参照)によって、提供されてもよく、それは、他の検索可能なデータサービス720のハードウェアコンポーネントを含むデータセンタ710に存在することが可能、又は不可能である。ここで留意すべきは、ウェブサービスプラットフォームは、ウェブサービスプラットフォームが、検索可能なデータサービス720に対する故障の単一点ではないように、ハードウェア、及びソフトウェアにおいて冗長性を提供することが可能であるということである。
ここで留意すべきは、クライアントシステム730、及びデータストア740に対するサーチフロントエンドとして、検索可能なデータサービス720を活用するために、クライアントシステム730上でインスタンス化されるクライアントアプリケーションの開発者にとって、基礎的なアーキテクチュア、実装、及び検索可能なデータサービス720の操作は、不透明であることである。開発者は、検索可能なデータサービスに対して公開されるウェブサービスインターフェースに従って、クライアントアプリケーションに対するサーチフロントエンドをプログラミングすることができる。
検索可能なデータサービス720は、大量のデータを保存するためにスケーリングすることができる。特別な構成は、検索可能なデータサービス720をスケーリングするために必要とされない。異種のマシンがシステムに追加されてもよく、また、マシンは自動的に検出され、検索可能なデータサービス720に追加されてもよい。スケーリングは、単により大きなサーバを追加することによってではなく、追加のホスト722、及びストレージデバイスを、データセンタ710に追加することによって、及び/又は新しいデータセンタ710を、検索可能なデータサービス720に追加することによって、実現されてもよい。
検索可能なデータサービス720は、以下の1つ以上を扱うために、追加のハードウェアを追加することによって、スケーリングされてもよいが、それらに限定されない。
・検索可能なデータサービスクライアントの数
・検索可能なデータサービス加入者に対する、特定の検索可能なインデックスドメインのサイズ、及び/又は、すべての加入者に対するすべてのドメインの全体のサイズ
・各検索可能なデータサービスオブジェクト内の、属性のサイズ及び数
・処理される要求の数(読み込み/書き込みスループット)
・ノードの数(追加のコーディネータノード340は、例えば、負荷バランシングに対して追加されてもよい)
・冗長性要件(いくつのパーティションの複製が必要とされるか)
・可用性、一致性、及び性能全般。全体のシステムの可用性、一致性、及び性能を改善するために、追加のノードは、データセンタ710に追加されてもよく、及び/又は、追加のデータセンタ710は、検索可能なデータサービス720に追加されてもよい。より具体的な例として、データセンタ内の追加のストレージノード360に、又は別の新しく追加されたデータセンタ内のストレージノード360に対して、パーティションを複製することは、さらなる冗長性を提供し、可用性を増大し、負荷バランシングを改善することができる。
潜在的に高価なハードウェア(例えば、サーバシステム)の特定のモデル、又は、特定のベンダからのハードウェア/ソフトウェアのサーバソリューションを必要とせずに、検索可能なデータサービス720は、データセンタ710内の1人以上のベンダからの、比較的安価な、異種のコモディティハードウェア上で実装されてもよい。異なるベンダからの異なるタイプのシステムは、システムが概して、データセンタ710内の他のシステムと互換性がある限り、異なるディスクサイズ、及びパフォーマンス機能、異なるCPU機能、RAM機能などで、検索可能なデータサービスのインフラストラクチャにおいて、ホスト722として使用されてもよい。一実施形態では、ホスト722に対する1つ以上の最低要件が確立されてもよいが、最低要件を満たすいかなる互換性のあるシステムも、ホスト722としての機能を果たすことができる。
実施形態は、ツータッチのデータセンタメンテナンスモデルをサポートすることができ、それによって、ホスト722は一度故障すると、修理されなくてもよいが、代わりに置換されてもよい。比較的安価な、異種のハードウェアを使用することによって、検索可能なデータサービス720は、安価に、また迅速にスケーリングされてもよい。
クライアントの視点から見ると、検索可能なデータサービス720の機能性、及び性能は、ホスト722、ネットワーク、又はデータセンタ710までもの故障など、システム故障によって影響されるべきではない。ここに記載されるように、検索可能なデータサービス720の論理的、及び物理的アーキテクチュアは、故障の単一点を有していない。検索可能なデータサービス720は、クライアントの機能性に影響を与えることなく、データセンタ710、若しくは全体のデータセンタ710においてさえ、マシンの一時的、又は永久的損失に耐えることができる。検索可能なデータサービス720は、クライアント730への重大な影響なしで、ホスト722、ネットワークハードウェア、又は全体のデータセンタ710さえの偶発故障にも、耐えることができる。検索可能なデータサービス720は、検索可能なデータサービス720の全体の操作に重大な影響を及ぼすことなく、単一のデータセンタ710内の1つ以上のホスト722の、意図的シャットダウンに耐えることができ、それは、例えば、データセンタ710内のホスト722のフリートが、必要とされる、又は希望される場合、アップグレードされることを可能にする。
一実施形態では、検索可能なデータサービス720は、ネットワーク700上で、グローバルなアクセス可能性を提供することができる。グローバルなアクセス可能性を提供することによって、検索可能なデータサービス720は、クライアントシステム730の地理的位置にかかわらず、同様の待ち時間、及びスループット性能を、クライアントシステム730に提供することができる。ここで留意すべきは、クライアントシステム730は、いかなる有線、又は無線ネットワーク接続機構を介して、ネットワーク700に結合されることが可能であるということである。クライアントシステム730の位置にかかわらず、クライアントシステム730に対して、同様の性能経験によって、グローバルなアクセス可能性を提供することを支援をするために、検索可能なデータサービス720は、地理的に広く分散されているデータセンタ710にわたって、実装されてもよい。次に、グローバルなアクセス可能性を必要とし得る加入者の検索可能なインデックス(ドメイン)は、地理的に分散され、離れたデータセンタ710にわたって、複製されてもよい。ここで留意すべきは、地理的に分散されたドメインは、データセンタ730にわたるデータの同期化のとき、待ち時間の微増をもたらす場合があることである。
例示的なシステム
一実施形態では、ここに記載されるように、検索可能なデータサービスの1つ以上のコンポーネントを実装するホストシステムは、図20に図解されるホストシステム900などの、1つ以上のコンピュータアクセス可能な媒体を含む、又はそれにアクセスするよう構成される、汎用コンピュータシステムを含むことができる。図解される実施形態では、ホストシステム900は、入力/出力(I/O)インターフェース930を介して、システムメモリ920に結合される、1つ以上のプロセッサ910を含む。コンピュータシステム900は、I/Oインターフェース930に結合される、ネットワークインターフェース940をさらに含む。
様々な実施形態では、コンピュータシステム900は、1つのプロセッサ910を含む、ユニプロセッサシステム、又はいくつかのプロセッサ910(例えば、2つ、4つ、8つ、又は別の適切な数)を含むマルチプロセッサシステムであってもよい。プロセッサ910は、インストラクションを実行する能力があるいかなる適切なプロセッサであってもよい。例えば、様々な実施形態では、プロセッサ910は、x86、PowerPC、SPARC、又はMIPS ISAなどの様々なインストラクションセットアーキテクチュア(ISA)、又はいかなる他の適切なISAを実装する、汎用、又は組み込みプロセッサであってもよい。マルチプロセッサシステムにおいて、プロセッサ910のそれぞれは、必ずしもというわけではないが、一般に、同一のISAを実装することができる。
システムメモリ920は、プロセッサ910によってアクセス可能なインストラクション、及びデータを保存するよう構成されてもよい。様々な実施形態では、システムメモリ920は、スタティックランダムアクセスメモリ(SRAM)、同期ダイナミックRAM(SDRAM)、不揮発性/フラッシュ型メモリ、又はいかなる他のタイプのメモリなどの、いかなる適切なメモリ技術を使用して、実装されてもよい。図解される実施形態では、検索可能なデータサービスの様々なノードに対する、上述のそれらの方法及び技術などの望ましい機能を実装する、プログラムインストラクション、及びデータは、コード925として、システムメモリ920内に保存されることが示される。さらに、検索可能なデータサービスストア724Cは、図6に図解される、eIDストア236、クエリインデックスストア234、要求ログ210、メンバーシップマップ218、及びメッセージログ224などの、検索可能なデータサービスによって持続的に保存されてもよい、様々なデータを表し、それは、一実施形態では、ホスト900のシステムメモリ920の少なくとも一部に、保存されてもよい。
一実施形態では、I/Oインターフェース930は、プロセッサ910、システムメモリ920、及びネットワークインターフェース940、又は他の周辺装置インターフェースを含む、デバイス内のいかなる周辺装置デバイス間の、I/Oトラフィックをコーディネートするよう構成されてもよい。一部の実施形態では、I/Oインターフェース930は、1つのコンポーネント(例えば、システムメモリ920)からのデータ信号を、別のコンポーネント(例えば、プロセッサ910)による使用に適したフォーマットへと変換するために、いかなる必要なプロトコル、タイミング、又は他のデータの変換を実行することができる。一部の実施形態では、I/Oインターフェース930は、例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス標準、又はユニバーサルシリアルバス(USB)標準の改良型など、様々な種類の周辺装置バスを介して付属されるデバイスのための、サポートを含むことができる。一部の実施形態では、I/Oインターフェース930の機能は、例えば、ノースブリッジ、及びサウスブリッジなどの、2つ以上の別々のコンポーネントに分割されてもよい。また、一部の実施形態では、システムメモリ920に対するインターフェースなどの、I/Oインターフェース930の機能性の一部、又はすべては、プロセッサ910に直接組み込まれることができる。
ネットワークインターフェース940は、検索可能なデータサービスストア724Dの少なくとも一部を保存するために使用可能な、他の検索可能なデータサービスノード、及びストレージデバイス又はシステムをホストする、他のホストシステム900などの、ネットワークに付属される検索可能なデータサービスノード、及び他のデバイスをホストするホストシステム900間で、データが交換されることを可能にするよう構成されてもよい。特に、ネットワークインターフェース940は、ネットワーク700を介して、検索可能なデータサービスに対するウェブサービスインターフェースを、クライアントシステム730に提供するウェブサービスプラットフォーム840をホストする、ネットワーク700上のホストシステム900、及び他のコンピュータシステム間の通信を可能にするよう構成されてもよい。ネットワークインターフェース940は、一般に、1つ以上の有線、又は無線ネットワークプロトコル(例えば、Wi−Fi/IEEE 802.11、又は別の無線ネットワーク標準)をサポートすることができる。様々な実施形態では、ネットワークインターフェース940は、例えば、他のタイプのイーサネット(登録商標)ネットワークなどの、いかなる適切な有線、又は無線の一般データネットワークを介して、通信をサポートすることができる。さらに、ネットワークインターフェース940は、アナログ音声ネットワーク、又はデジタルファイバ通信ネットワークなどの、電気通信/電話ネットワークを介して、ファイバーチャネルSANなどの、ストレージエリアネットワークを介して、又は、いかなる他の適切なタイプのネットワーク、及び/又はプロトコルを介して、通信をサポートすることができる。
一部の実施形態では、システムメモリ920は、上述のような、検索可能なデータサービスの1つ以上のコンポーネントを実装するための、上述のようなプログラムインストラクション、及びデータを保存するよう構成される、コンピュータアクセス可能ストレージ媒体の一実施形態であってもよい。しかしながら、他の実施形態では、プログラムインストラクション、及び/又はデータは、異なるタイプのコンピュータアクセス可能媒体上で、受信、送信、又は保存されてもよい。一般的に言えば、コンピュータアクセス可能ストレージ媒体は、I/Oインターフェース930を介してコンピュータシステム900に結合されるディスク、又はDVD/CDなどの、磁気又は光媒体などのストレージ媒体、又はメモリ媒体を含むことができる。また、コンピュータアクセス可能ストレージ媒体は、RAM(例えば、SDRAM、DDR SDRAM、RDRAM、SRAMなど)、ROMなどのいかなる揮発性、又は不揮発性媒体を含むことができ、それらは、システムメモリ920、又は別のタイプのメモリとして、コンピュータシステム900の一部の実施形態に含まれることができる。さらに、コンピュータアクセス可能ストレージ媒体は、ネットワークインターフェース940を介して実装されてもよいような、ネットワーク、及び/又は無線リンクなどの通信媒体を介して送られる、電気、電磁、又はデジタル信号などの、伝送媒体又は信号を含むことができる。
結論
様々な実施形態は、コンピュータアクセス可能ストレージ媒体に関する前述の説明に従って実装される、インストラクション、及び/又はデータを受信、送信、又は保存するステップを、さらに含むことができる。一般的に言えば、コンピュータアクセス可能ストレージ媒体は、例えば、ディスク、又はDVD/CD−ROMなどの磁気、又は光媒体、RAM(例えば、SDRAM、DDR、RDRAM、SRAMなど)、ROMなどの揮発性、又は不揮発性媒体などの、ストレージ媒体、又はメモリ媒体を含むことができる。ネットワーク、及び/又は無線リンクなどの通信媒体を介して送られる、電気、電磁、又はデジタル信号などの、伝送媒体又は信号も同様である。
図において図解され、本書に記載されるような様々な方法は、方法の例示的な実施形態を示す。方法は、ソフトウェア、ハードウェア、又はそれらの組み合わせにおいて実行されてもよい。方法の順序は変更されてもよく、様々な要素が、追加、並べ替え、組み合わせ、省略、修正などされてもよい。
本開示の利益を得る当業者には明らかであるように、様々な修正及び変更がなされてもよい。本発明が、すべてのかかる修正及び変更を包含し、したがって、上記の説明は例示目的であり、制限を目的とするのもではない。
ウェブサービスインターフェースを提供する例示的システム構造を例示するブロック図であり、ウェブサービスクライアント及びウェブサービスプロバイダー間の情報のやり取りを示している。 一実施形態に従い、クライアント及び検索可能なデータサービス間の関係及びデータフローを例示している。 一実施形態に従い、検索可能なデータサービスの例示的な高水準機能構造を例示している。 一実施形態に従い、検索可能なデータサービスの例示的なネットワークアーキテクチャを例示している。 一実施形態に従い、検索可能なインデックスの検索可能なデータサービスオブジェクトを保存し、検索可能なインデックスのデータストアにあるエンティティの識別子(eIDs)を捜すサービス要求を処理する検索可能なデータサービスを実装する方法を例示している。 一実施形態に従い、検索可能なインデックスの検索可能なデータサービスオブジェクトを保存し、検索可能なインデックスのデータストアにあるエンティティの識別子(eIDs)を捜すサービス要求を処理する検索可能なデータサービスを実装する方法を例示している。 一実施形態に従い、検索可能なデータサービスの例示的な低レベルモジュラーアーキテクチャを例示している。 一実施形態に従い、検索可能なデータサービスシステムの検索可能なインデックスを区分する方法を例示している。 一実施形態に従い、検索可能なデータサービスシステムの検索可能なインデックスのパーティションを複製する方法を例示している。 検索可能なデータサービスの一実施形態に従い、加入者の検索可能なインデックス、各加入者データのバケットへの保管、及びバケットの区分を例示している。 検索可能なデータサービスの一実施形態に従い、加入者の検索可能なインデックス、各加入者データのバケットへの保管、及びバケットの区分を例示している。 一実施形態に従い、パーティションの複製を介するデータ複製を例示している。 一実施形態に従い、複製グループのパーティションの分割を例示している。 一実施形態に従い、例示的ストレージノード及びそのコンポーネントを例示している。 検索可能なデータサービスのクライアントからのクエリサービスを実施するクエリサブシステムを構成又は相互作用する検索可能なデータサービスの様々なコンポーネントを例示し、さらに、一実施形態に従い、コンポーネント間のデータフローをさらに例示している。 一実施形態に従い、識別子サークルを例示している。 一実施形態に従い、単一ストレージノードの例示的アーキテクチャを例示している。 一実施形態に従い、検索可能なデータサービスシステムのためのストレス管理方法のフローチャートである。 一実施形態に従い、検索可能なデータサービスにある複製グループのライフサイクルを例示している。 一実施形態に従い、検索可能なデータサービスシステムのグループメンバーシップ及びヘルスをモニタリングする方法を例示している。 一実施形態に従い、検索可能なデータサービスシステムの管理コンソールの高水準アーキテクチャを例示している。 一実施形態に従い、ネットワーク環境にある検索可能なデータサービスの実装を例示している。 実施形態を実装することができる、コンピュータシステム上の例示的実施形態を例示するブロック図である。

Claims (20)

  1. 検索可能なデータサービスにウェブサービスインターフェースを提供するウェブサービスプラットフォームを実装する1つまたは複数のコンピュータデバイスであって、前記ウェブサービスプラットフォームは、前記ウェブサービスインターフェ−スに従って、クライアントアプリケーションからサービス要求を受信するように構成され、前記サービス要求はクエリ要求とストレージ要求を備え、前記ウェブサービスインターフェースは前記クエリ要求及び前記ストレージ要求を送信するために複数のクライアントアプリケーションに対し共通のメッセージのエンドポイントを提供する、1つまたは複数のコンピュータデバイスと、
    前記検索可能なデータサービスに関与するように構成された複数のノードを実装するような複数のコンピュータデバイスと、
    を具備し、前記複数のノードを実装することによって、
    前記クライアントアプリケーションで使用される複数の独立した複数のデータストアに関する検索可能な各インデックスにおける要求を格納し、前記検索可能なインデックスは前記複数のノード上にあり、前記データストアはネットワーク上にある1つまたは複数のそれぞれのストレージデバイス上に存在し、かつ前記検索可能なデータサービスに関与するように構成された前記複数のノードを実装する前記1つまたは複数のコンピュータデバイスから離れており、それぞれの検索可能なインデックスは、各検索可能なインデックスが前記複数の独立したデータストアのうちのたった1つの完全なインデックスを提供できるように、前記複数の独立したデータストアのうち特定の1つに関する検索可能なデータサービスオブジェクトを格納し、それぞれの検索可能なデータサービスオブジェクトは特定のデータストアにおける特定のエンティティの2つ以上の属性を指定し、前記属性は前記特定のデータストアにおける前記特定のエンティティを配置する固有のエンティティ識別子を有し、
    前記検索可能なインデックスのうちの1つを特定する受信したクエリ要求を満たす前記検索可能なインデックスから、1つまたは複数の検索可能なデータサービスオブジェクトのセットを配置し、
    前記ウェブサービスインターフェースに従って、前記クエリ要求を満たす前記1つまたは複数の検索可能なデータサービスオブジェクトのセットから、前記クライアントアプリケーションに対して少なくとも1つの前記エンティティ識別子を返す、
    ことを特徴とするシステム。
  2. 前記複数のノードは、
    前記検索可能なインデックスを持続的に保存するように構成される1つまたは複数のストレージノードと、
    前回のクエリ要求への応答のローカルクエリキャッシュを維持するようにそれぞれ構成された1つまたは複数のクエリノードと、
    1つまたは複数のコーディネータノードと、
    から構成され、それぞれのコーディネータノードは、
    前記ウェブサービスプラットフォームからのサービス要求を受信し、
    各ストレージ要求を1つまたは複数の前記ストレージノードに転送し、
    各クエリ要求を1つまたは複数の前記クエリノード転送する、
    ように構成されることを特徴とする請求項1に記載のシステム。
  3. 前記1つまたは複数のストレージノードのそれぞれは、
    コーディネータノードからストレージ要求を受信し、
    前記ストレージ要求に指定された検索可能なデータサービスオブジェクトを前記検索可能なインデックスに加える
    ように構成されることを特徴とする請求項2に記載のシステム。
  4. 前記1つまたは複数のストレージノードのそれぞれは、
    コーディネータノードからストレージ要求を受信し、
    前記ストレージ要求に指定されるような特定の前記検索可能なインデックスに保存される検索可能なデータサービスオブジェクトを修正する
    ように構成されることを特徴とする請求項2に記載のシステム。
  5. 前記1つまたは複数のストレージノードのそれぞれは、
    コーディネータノードからストレージ要求を受信し、
    前記ストレージ要求に指定されるような前記検索可能なインデックスから検索可能なデータサービスオブジェクトの少なくとも一部を削除する
    ように構成されることを特徴とする請求項2に記載のシステム。
  6. 前記クエリノードのそれぞれは、
    コーディネータノードからクエリ要求を受信し、
    前記ローカルクエリキャッシュから前記クエリ要求を満たすことが出来るかどうかを判断するために、前記クエリノード上の前記ローカルクエリキャッシュにアクセスし、
    前記ローカルクエリキャッシュから前記クエリ要求を満たすことができる場合、前記ウェブサービスインターフェースに従い、前記クライアントアプリケーションに、前記クエリ要求を満たす前記ローカルクエリキャッシュからの1つまたは複数の検索可能なデータサービスオブジェクトのセットから少なくとも識別子を返し、
    前記ローカルクエリキャッシュから前記クエリ要求が満たされない場合には、前記クエリ要求を1つまたは複数の前記ストレージノードに転送する
    ように構成されることを特徴とする請求項2に記載のシステム。
  7. 前記1つまたは複数のストレージノードのそれぞれは、
    クエリノードからクエリ要求を受信し、
    前記クエリ要求を満たす特定の検索可能なインデックスに、1つまたは複数の検索可能なデータサービスオブジェクトのセットを配置するために、前記ストレージノードによって持続的に保存される前記検索可能なインデックスのパーティションを検索し、
    前記ウェブサービスインターフェースに従い、前記クライアントアプリケーションに前記クエリ要求を満たす1つまたは複数の検索可能なデータサービスオブジェクトの前記セットから少なくとも前記エンティティ識別子を返す
    ように構成されることを特徴とする請求項6に記載のシステム。
  8. 前記クエリノードのそれぞれは、
    コーディネータノードからクエリ要求を受信し、
    前記検索可能なインデックスの異なるパーティションであって、前記クエリ要求の範囲内にある、特定の検索可能なインデックスの異なるパーティションを、それぞれ持続的に保存する、2つ以上の前記ストレージノードに前記クエリ要求を転送し、
    前記クエリ要求が転送された前記2つ以上のストレージノードのそれぞれからの前記クエリ要求を満たす前記特定の検索可能なインデックスから、検索可能なデータサービスオブジェクトの異なるセットを受信し、
    検索可能なデータサービスオブジェクトの前記異なる複数のセットをマージし、
    前記ウェブサービスインターフェースに従い、前記クライアントアプリケーションに検索可能なデータサービスオブジェクトの前記マージされたセットから少なくとも前記エンティティ識別子を返す
    ように構成されることを特徴とする請求項2に記載のシステム。
  9. 前記クエリノードのそれぞれは、
    コーディネータノードからクエリ要求を受信し、
    1つまたは複数の前記ストレージノードに前記クエリ要求を転送し、
    前記クエリ要求が転送された1つまたは複数のストレージノードのうちの少なくとも1つからの前記クエリ要求を満たす特定の検索可能なインデックスから検索可能なデータサービスオブジェクトを受信し、
    前記クエリ要求におけるソート仕様に従い、前記受信した検索可能なデータサービスオブジェクトをソートし、
    前記ウェブサービスインターフェースとソートされた順序に従い、前記ソートされた検索可能なデータサービスオブジェクトから前記クライアントアプリケーションに少なくとも前記エンティティ識別子を返す
    ように構成されることを特徴とする請求項2に記載のシステム。
  10. 前記複数のノードは2つ以上のストレージノードを備え、それぞれが
    特定の検索可能なインデックスのパーティションを持続的に保存し、
    2つ以上の新しいパーティションであって、それぞれが、前記検索可能なインデックスに保存された前記検索可能なデータサービスオブジェクトの異なるサブセットを含む、2つ以上の新しいパーティションを前記ストレージノード上に生成するために前記パーティションを再区分し、
    前記2つ以上の新しいパーティションのうちの1つを自ら受信する別のストレージノードを配置するため、前記ストレージノードのその他と通信し、
    前記2つ以上の新しいパーティションのうちの1つを、前記他のストレージノードに移動するために、前記他のストレージノードと協力する
    ように構成されることを特徴とする請求項1に記載のシステム。
  11. 前記複数のノードは、2つ以上のストレージノードを備え、それぞれが、
    特定の検索可能なインデックスのパーティションを持続的に保存し、
    前記パーティションの複製を自ら受信するもう1つのストレージノードを配置するため、1つまたは複数の他の前記ストレージノードと通信し、
    前記他のストレージノードに前記パーティションを複製するために、前記他のストレージノードと協力する
    ように構成されることを特徴とする請求項1に記載のシステム。
  12. 前記複数のノードが2つ以上のストレージノードを備え、それぞれが
    特定の検索可能なインデックスのパーティションを持続的に保存し、
    アンチエントロピープロトコルに従い、前記パーティションを別のストレージノードに複製し、
    前記他のストレージノードに前記パーティションの前記複製を更新するための、ゴシッププロトコルに従い、前記他のストレージノードに前記複製されたアプリケーションに対する次のストレージ要求を通信する
    ように構成されることを特徴とする請求項1に記載のシステム。
  13. 各クエリ要求は、
    前記検索可能なデータサービスにおける特定の検索可能なインデックスを識別するバケット識別子であって、バケットが前記検索可能なデータサービスにするクエリ要求の範囲を確定する、バケット識別子と、
    前記クエリ式を満たす検索可能なデータサービスオブジェクトを位置付けるため、前記バケット識別子によって識別される前記検索可能なインデックスの特定された属性に適応される1つまたは複数の検索基準を特定する、クエリ式と
    を含むことを特徴とする請求項1に記載のシステム。
  14. 各クエリ要求は、前記検索可能なデータサービスに対し、特定の加入者を個別に識別する加入者識別子をさらに含み、各加入者識別子が前記検索可能なデータサービスの1つまたは複数のバケット識別子と関連し、各バケット識別子が正確に1人の加入者と関連することを特徴とする請求項13に記載のシステム。
  15. クエリ式は、
    前記特定の検索可能なインデックスの検索可能なデータサービスオブジェクトの1つまたは複数の以上の属性と、
    前記特定の検索可能なインデックスの前記クエリ式を満たす検索可能なデータサービスオブジェクトのセットを位置付けるため、前記クエリ式の前記1つ以上の属性に適応される1つまたは複数の演算子と、
    を含むことを特徴とする請求項13に記載のシステム。
  16. 前記複数のノードは、2つ以上のデータセンタの間で分散されることを特徴とする請求項1に記載のシステム。
  17. 前記複数のノードは複数のストレージを備え、前記複数のストレージノードは2つ以上のデータセンタ間で分散され、各データセンタは2つ以上の前記複数のストレージノードを備え、
    前記データセンタにおいて前記ストレージノードの少なくとも2つが特定の検索可能なインデックスのパーティションの複製を持続的に保存し、
    少なくとも1つの他のデータセンタにおいて少なくとも2つの他のストレージノードが前記特定の検索可能なインデックスの前記パーティションの複製を持続的に保存することを特徴とする請求項1に記載のシステム。
  18. 前記複数のノードのそれぞれは、ゴシッププロトコルに従い前記複数のノードのその他に検索可能なデータサービス情報を伝播するように構成されることを特徴とする請求項1に記載のシステム。
  19. 検索可能なデータサービスへのウェブサービスプラットフォームを実装する1つまたは複数のコンピュータデバイスにより、
    ウェブサービスインターフェースに従い、複数のクライアントアプリケーションからサービス要求を受信するステップであって、前記サービス要求はクエリ要求及びストレージ要求を備え、当該ステップは前記クエリ要求及び前記ストレージ要求を送信するために前記ウェブサービスインターフェースによって提供される共通のメッセージのエンドポイントで前記クエリ要求及び前記ストレージ要求を受信するステップをさらに含む、サービス要求を受信するステップと、
    前記検索可能なデータサービスに関与するように構成される複数のノードを実装する複数のコンピュータデバイスのうちの1つに、各サービス要求を転送するステップと、
    前記複数のノードを実装する複数のコンピュータデバイスにより、
    前記クライアントアプリケーションによって使用される複数の独立したデータストアに関する、検索可能なインデックスにある前記ストレージ要求で指定された検索可能なデータサービスオブジェクトを保存するために、信したストレージ要求を処理するステップと、
    前記クエリ要求を満たす前記検索可能なインデックスのうち1つから、1つまたは複数の検索可能なサービスオブェクトのセットを配置するため、受信した前記クエリ要求を処理するステップであって、前記受信したクエリ要求のそれぞれ、対応する前記検索可能なインデックスのうち1つ指定する、ステップと、
    前記ウェブサービスインターフェースに従って、前記クエリ要求を満たす1つまたは複数の検索可能なデータサービスオブジェクトのセットから、少なくとも前記エンティティ識別子を対応する前記クライアントアプリケーションへ返すステップと、
    から成り、
    前記検索可能なインデックスは前記複数のノードを実装する複数のコンピュータデバイス上にあり、前記データストアはネットワーク上の1つまたは複数のストレージデバイスのそれぞれに存在し、且つ前記検索可能なデータサービスに関与するように構成された前記複数のノードを実装する前記複数のコンピュータデバイスからは離れており、各々の検索可能なインデックスが前記独立したデータストアのうちの1つのみに関する完全なインデックスを提供できるように、各検索可能なインデックスは前記複数の独立したデータストアのうち特定の1つに関する検索可能なデータサービスオブジェクトを格納し、各々の検索可能なデータサービスオブジェクトは、特定のデータストアにおける特定のエンティティの2つ以上の属性を特定し、前記属性は前記データストアにおける前記特定のエンティティを配置するための固有のエンティティ識別子を含むことを特徴とする方法。
  20. 複数のクライアントアプリケーションからサービス要求を受信するよう構成された、ウェブサービスプラットフォームを実装する1つまたは複数のコンピュータデバイスであって、前記ウェブサービスプラットフォームは、検索可能なデータサービスへウェブサービスインターフェースを提供するように構成され、前記サービス要求はクエリ要求及びストレージ要求を備え、前記ウェブサービスインターフェースは、前記クエリ要求及び前記ストレージ要求を送信するために、前記複数のクライアントアプリケーションに対して共通のメッセージのエンドポイントを提供するものである、前記1つまたは複数のコンピュータデバイスと、
    前記検索可能なデータサービスに関与するように構成される複数のノードを実装する複数のコンピュータデバイスであって、
    −前記クライアントアプリケーションによって使用される複数の独立したデータストアに関する、検索可能なインデックスにある前記ストレージ要求で指定された検索可能なデータサービスオブジェクトを保存するために、受信したストレージ要求を処理するステップと、
    −前記クエリ要求を満たす前記検索可能なインデックスのうち1つから、1つまたは複数の検索可能なサービスオブェクトのセットを配置するため、受信した前記クエリ要求を処理するステップであって、前記受信したクエリ要求は、対応する前記検索可能なインデックスのうち1つを指定する、ステップと、
    −前記ウェブサービスプラットフォームにより提供される前記ウェブサービスインターフェースに従って、前記クエリ要求を満たす1つまたは複数の検索可能なデータサービスオブジェクトのセットから、少なくとも前記エンティティ識別子を前記クライアントアプリケーションのそれぞれへ返すステップと、
    を実行する、前記複数のコンピュータデバイスと、
    を備え、
    前記検索可能なインデックスは前記複数のノードを実装する複数のコンピュータデバイス上にあり、前記データストアはネットワーク上の1つまたは複数のストレージデバイスのそれぞれに存在し、且つ前記検索可能なデータサービスに関与するように構成された前記複数のノードを実装する複数のコンピュータデバイスからは離れており、各々の検索可能なインデックスが前記独立したデータストアのうちの1つのみに関する完全なインデックスを提供できるように、各検索可能なインデックスは前記複数の独立したデータストアのうち特定の1つに関する検索可能なデータサービスオブジェクトを格納し、各々の検索可能なデータサービスオブジェクトは、特定のデータストアにおける特定のエンティティの2つ以上の属性を特定し、前記属性は前記データストアにおける前記特定のエンティティを配置するための固有のエンティティ識別子を含む、
    ことを特徴とするシステム。
JP2008548794A 2005-12-29 2006-11-30 検索可能なデータサービスのための方法及び装置 Active JP5118059B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US75477705P 2005-12-29 2005-12-29
US60/754,777 2005-12-29
US11/392,482 2006-03-29
US11/392,482 US7801912B2 (en) 2005-12-29 2006-03-29 Method and apparatus for a searchable data service
PCT/US2006/061435 WO2007079303A2 (en) 2005-12-29 2006-11-30 Method and apparatus for a distributed file storage and indexing service

Publications (3)

Publication Number Publication Date
JP2009522660A JP2009522660A (ja) 2009-06-11
JP2009522660A5 JP2009522660A5 (ja) 2010-01-21
JP5118059B2 true JP5118059B2 (ja) 2013-01-16

Family

ID=38007272

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008548794A Active JP5118059B2 (ja) 2005-12-29 2006-11-30 検索可能なデータサービスのための方法及び装置

Country Status (7)

Country Link
US (1) US7801912B2 (ja)
EP (2) EP1974295B1 (ja)
JP (1) JP5118059B2 (ja)
KR (4) KR101543308B1 (ja)
CA (1) CA2635400C (ja)
MX (1) MX2008008509A (ja)
WO (1) WO2007079303A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9936011B2 (en) 2014-04-24 2018-04-03 Casio Computer Co., Ltd Distributed database, method of sharing data, program storing medium, and apparatus for a distributed database

Families Citing this family (448)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6973654B1 (en) * 2003-05-27 2005-12-06 Microsoft Corporation Systems and methods for the repartitioning of data
US8638779B2 (en) * 2004-02-24 2014-01-28 Itxc Ip Holdings Sarl Methods and apparatus for managing voice over IP telephony
US7496500B2 (en) * 2004-03-01 2009-02-24 Microsoft Corporation Systems and methods that determine intent of data and respond to the data based on the intent
US7539661B2 (en) * 2005-06-02 2009-05-26 Delphi Technologies, Inc. Table look-up method with adaptive hashing
US7921165B2 (en) * 2005-11-30 2011-04-05 Microsoft Corporation Retaining mail for availability after relay
US7716180B2 (en) * 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface
US20070192706A1 (en) * 2006-02-14 2007-08-16 International Business Machines Corporation Service gateway for providing a scalable and loosely coupled service oriented architecture
US7285791B2 (en) * 2006-03-24 2007-10-23 Goldeneye, Inc. Wavelength conversion chip for use in solid-state lighting and method for making same
US7689580B2 (en) * 2006-03-27 2010-03-30 Oracle International Corporation Search based application development framework
US7899780B1 (en) * 2006-03-30 2011-03-01 Emc Corporation Methods and apparatus for structured partitioning of management information
US7681011B1 (en) * 2006-03-30 2010-03-16 Emc Corporation Methods and apparatus for partitioning management information
US7480817B2 (en) * 2006-03-31 2009-01-20 International Business Machines Corporation Method for replicating data based on probability of concurrent failure
JP2007279838A (ja) * 2006-04-03 2007-10-25 Ibm Japan Ltd 情報処理装置、方法およびプログラム
US8384700B2 (en) 2007-01-26 2013-02-26 Microsoft Corporation Linked shell
US7805425B2 (en) 2006-04-28 2010-09-28 Microsoft Corporation Efficient database lookup operations
US7698258B2 (en) * 2006-06-02 2010-04-13 Microsoft Corporation Searchable storage system
US20080010238A1 (en) * 2006-07-07 2008-01-10 Microsoft Corporation Index having short-term portion and long-term portion
US8423569B2 (en) 2006-08-09 2013-04-16 International Business Machines Corporation Decomposed query conditions
US8849961B2 (en) * 2006-09-06 2014-09-30 Nokia Corporation Mobile network optimized method for keeping an application IP connection always on
US7680782B2 (en) * 2006-10-18 2010-03-16 International Business Machines Corporation Method to generate semantically valid queries in the XQuery language
US20080140826A1 (en) * 2006-12-08 2008-06-12 Microsoft Corporation Monitoring and controlling electronic message distribution
CN101005606B (zh) * 2006-12-31 2012-07-04 华为技术有限公司 一种减少媒体播放延时的方法和装置
US7925900B2 (en) 2007-01-26 2011-04-12 Microsoft Corporation I/O co-processor coupled hybrid computing device
US20080228828A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Management of collections within a data storage system
JP4702314B2 (ja) * 2007-03-23 2011-06-15 ブラザー工業株式会社 コンテンツ分散保存システム、ノード装置、ノード処理プログラム、及びコンテンツデータ取得方法
GB2443580B (en) * 2007-05-18 2008-07-30 Cvon Innovations Ltd Access system and method
US7991910B2 (en) 2008-11-17 2011-08-02 Amazon Technologies, Inc. Updating routing information based on client location
US8028090B2 (en) 2008-11-17 2011-09-27 Amazon Technologies, Inc. Request routing utilizing client location information
US20090094268A1 (en) * 2007-10-04 2009-04-09 Yahoo! Inc. Animated data feeds
US9147213B2 (en) 2007-10-26 2015-09-29 Zazzle Inc. Visualizing a custom product in situ
CN101159533A (zh) * 2007-11-06 2008-04-09 中兴通讯股份有限公司 一种分组传送网中时钟链路自动保护的方法
US7849067B2 (en) * 2008-01-31 2010-12-07 Microsoft Corporation Extensible data provider querying and scheduling system
JP2011511366A (ja) * 2008-02-01 2011-04-07 ジ・オリバー・グループ・リミテッド・ライアビリティ・カンパニー データの検索および索引付けの方法およびそれを実施するシステム
CN101516131B (zh) * 2008-02-18 2012-04-04 华为技术有限公司 一种数据同步的方法、系统和装置
US8380662B2 (en) * 2008-02-26 2013-02-19 Red Hat, Inc. Setting time from a NFS server
US8825792B1 (en) * 2008-03-11 2014-09-02 United Services Automobile Association (Usaa) Systems and methods for online brand continuity
US8621598B2 (en) * 2008-03-12 2013-12-31 Intuit Inc. Method and apparatus for securely invoking a rest API
CN101247370B (zh) * 2008-03-14 2010-09-29 中国网通集团宽带业务应用国家工程实验室有限公司 消息呈现业务的实现方法和系统
US8065327B2 (en) 2008-03-15 2011-11-22 Microsoft Corporation Management of collections of websites
US20090234858A1 (en) * 2008-03-15 2009-09-17 Microsoft Corporation Use Of A Single Service Application Instance For Multiple Data Center Subscribers
US8601090B1 (en) 2008-03-31 2013-12-03 Amazon Technologies, Inc. Network resource identification
US7962597B2 (en) 2008-03-31 2011-06-14 Amazon Technologies, Inc. Request routing based on class
US7970820B1 (en) 2008-03-31 2011-06-28 Amazon Technologies, Inc. Locality based content distribution
US8321568B2 (en) 2008-03-31 2012-11-27 Amazon Technologies, Inc. Content management
US8606996B2 (en) 2008-03-31 2013-12-10 Amazon Technologies, Inc. Cache optimization
US8447831B1 (en) 2008-03-31 2013-05-21 Amazon Technologies, Inc. Incentive driven content delivery
US9304785B2 (en) * 2008-06-02 2016-04-05 International Business Machines Corporation Localizing a software product
US8370417B2 (en) * 2008-06-30 2013-02-05 Motorola Solutions, Inc. Method for peer to peer subscriber registration and affiliation
US9407681B1 (en) 2010-09-28 2016-08-02 Amazon Technologies, Inc. Latency measurement in resource requests
US20100076952A1 (en) * 2008-09-05 2010-03-25 Xuejun Wang Self contained multi-dimensional traffic data reporting and analysis in a large scale search hosting system
US8290923B2 (en) * 2008-09-05 2012-10-16 Yahoo! Inc. Performing large scale structured search allowing partial schema changes without system downtime
US8429194B2 (en) 2008-09-15 2013-04-23 Palantir Technologies, Inc. Document-based workflows
US9996572B2 (en) * 2008-10-24 2018-06-12 Microsoft Technology Licensing, Llc Partition management in a partitioned, scalable, and available structured storage
US8073940B1 (en) 2008-11-17 2011-12-06 Amazon Technologies, Inc. Managing content delivery network service providers
US8122098B1 (en) 2008-11-17 2012-02-21 Amazon Technologies, Inc. Managing content delivery network service providers by a content broker
US8572110B2 (en) 2008-12-04 2013-10-29 Microsoft Corporation Textual search for numerical properties
US8489721B1 (en) * 2008-12-30 2013-07-16 Symantec Corporation Method and apparatus for providing high availabilty to service groups within a datacenter
US9239994B2 (en) * 2009-02-25 2016-01-19 Empire Technology Development Llc Data centers task mapping
US20100251227A1 (en) * 2009-03-25 2010-09-30 Microsoft Corporation Binary resource format and compiler
US8412823B1 (en) 2009-03-27 2013-04-02 Amazon Technologies, Inc. Managing tracking information entries in resource cache components
US8688837B1 (en) 2009-03-27 2014-04-01 Amazon Technologies, Inc. Dynamically translating resource identifiers for request routing using popularity information
US8756341B1 (en) 2009-03-27 2014-06-17 Amazon Technologies, Inc. Request routing utilizing popularity information
US9207984B2 (en) 2009-03-31 2015-12-08 Amazon Technologies, Inc. Monitoring and automatic scaling of data volumes
US20100269111A1 (en) * 2009-04-21 2010-10-21 Thomas Martin Conte Task management
US8095561B2 (en) * 2009-04-23 2012-01-10 Microsoft Corporation Extensible framework for data import and export
US8782236B1 (en) 2009-06-16 2014-07-15 Amazon Technologies, Inc. Managing resources using resource expiration data
CN103488680B (zh) * 2009-06-19 2017-09-29 国际商业机器公司 在数据库系统中计数项目的方法
US8259588B2 (en) * 2009-06-24 2012-09-04 Oracle International Corporation System and method for processing communications using service interceptors
US8521771B1 (en) * 2009-07-31 2013-08-27 Amazon Technologies, Inc. Management of class-associated object mapping information corresponding to a distributed storage system
US8621182B1 (en) 2009-07-31 2013-12-31 Amazon Technologies, Inc. Management of object mapping information corresponding to a distributed storage system
US8285925B1 (en) 2009-07-31 2012-10-09 Amazon Technologies, Inc. Management of object mapping information corresponding to a distributed storage system
US8639724B1 (en) 2009-07-31 2014-01-28 Amazon Technologies, Inc. Management of cached object mapping information corresponding to a distributed storage system
US8316213B1 (en) 2009-07-31 2012-11-20 Amazon Technologies, Inc. Management of object mapping information corresponding to a distributed storage system
US8321435B2 (en) * 2009-08-12 2012-11-27 Apple Inc. Quick find for data fields
US8397073B1 (en) 2009-09-04 2013-03-12 Amazon Technologies, Inc. Managing secure content in a content delivery network
US8433771B1 (en) * 2009-10-02 2013-04-30 Amazon Technologies, Inc. Distribution network with forward resource propagation
US9135283B2 (en) * 2009-10-07 2015-09-15 Amazon Technologies, Inc. Self-service configuration for data environment
US8335765B2 (en) 2009-10-26 2012-12-18 Amazon Technologies, Inc. Provisioning and managing replicated data instances
US8346722B2 (en) * 2009-11-23 2013-01-01 Sap Ag Replica placement strategy for distributed data persistence
US8645660B2 (en) * 2009-12-10 2014-02-04 Microsoft Corporation Automatic allocation of data replicas
US9021046B2 (en) * 2010-01-15 2015-04-28 Joyent, Inc Provisioning server resources in a cloud resource
US9495338B1 (en) 2010-01-28 2016-11-15 Amazon Technologies, Inc. Content distribution network
US8561021B2 (en) * 2010-02-08 2013-10-15 Microsoft Corporation Test code qualitative evaluation
US8370316B2 (en) * 2010-07-12 2013-02-05 Sap Ag Hash-join in parallel computation environments
US8775425B2 (en) * 2010-08-24 2014-07-08 International Business Machines Corporation Systems and methods for massive structured data management over cloud aware distributed file system
US8768981B1 (en) * 2010-08-27 2014-07-01 Disney Enterprises, Inc. System and method for distributing and accessing files in a distributed storage system
US8751513B2 (en) 2010-08-31 2014-06-10 Apple Inc. Indexing and tag generation of content for optimal delivery of invitational content
US9003035B1 (en) 2010-09-28 2015-04-07 Amazon Technologies, Inc. Point of presence management in request routing
US8379525B2 (en) * 2010-09-28 2013-02-19 Microsoft Corporation Techniques to support large numbers of subscribers to a real-time event
US10958501B1 (en) 2010-09-28 2021-03-23 Amazon Technologies, Inc. Request routing information based on client IP groupings
US10097398B1 (en) 2010-09-28 2018-10-09 Amazon Technologies, Inc. Point of presence management in request routing
US9712484B1 (en) 2010-09-28 2017-07-18 Amazon Technologies, Inc. Managing request routing information utilizing client identifiers
US8468247B1 (en) 2010-09-28 2013-06-18 Amazon Technologies, Inc. Point of presence management in request routing
US9152683B2 (en) * 2010-10-05 2015-10-06 International Business Machines Corporation Database-transparent near online archiving and retrieval of data
US8452874B2 (en) 2010-11-22 2013-05-28 Amazon Technologies, Inc. Request routing processing
US8606771B2 (en) 2010-12-21 2013-12-10 Microsoft Corporation Efficient indexing of error tolerant set containment
US8874505B2 (en) * 2011-01-11 2014-10-28 Hitachi, Ltd. Data replication and failure recovery method for distributed key-value store
US8538926B2 (en) * 2011-03-08 2013-09-17 Rackspace Us, Inc. Massively scalable object storage system for storing object replicas
US8555276B2 (en) 2011-03-11 2013-10-08 Joyent, Inc. Systems and methods for transparently optimizing workloads
US10467042B1 (en) 2011-04-27 2019-11-05 Amazon Technologies, Inc. Optimized deployment based upon customer locality
US8719316B2 (en) 2011-05-13 2014-05-06 Microsoft Corporation Write agent delayed write to data stores
US9092482B2 (en) 2013-03-14 2015-07-28 Palantir Technologies, Inc. Fair scheduling for mixed-query loads
US8601000B1 (en) 2011-06-27 2013-12-03 Amazon Technologies, Inc. System and method for conditionally updating an item with attribute granularity
US8572091B1 (en) 2011-06-27 2013-10-29 Amazon Technologies, Inc. System and method for partitioning and indexing table data using a composite primary key
US8595267B2 (en) 2011-06-27 2013-11-26 Amazon Technologies, Inc. System and method for implementing a scalable data storage service
US10754813B1 (en) 2011-06-30 2020-08-25 Amazon Technologies, Inc. Methods and apparatus for block storage I/O operations in a storage gateway
US9294564B2 (en) 2011-06-30 2016-03-22 Amazon Technologies, Inc. Shadowing storage gateway
US8832039B1 (en) 2011-06-30 2014-09-09 Amazon Technologies, Inc. Methods and apparatus for data restore and recovery from a remote data store
US9052831B1 (en) 2011-06-30 2015-06-09 Amazon Technologies, Inc. System and method for performing live partitioning in a data store
US10877669B1 (en) 2011-06-30 2020-12-29 Amazon Technologies, Inc. System and method for providing a committed throughput level in a data store
US8706834B2 (en) 2011-06-30 2014-04-22 Amazon Technologies, Inc. Methods and apparatus for remotely updating executing processes
US8732517B1 (en) 2011-06-30 2014-05-20 Amazon Technologies, Inc. System and method for performing replica copying using a physical copy mechanism
US8806588B2 (en) 2011-06-30 2014-08-12 Amazon Technologies, Inc. Storage gateway activation process
US8601134B1 (en) 2011-06-30 2013-12-03 Amazon Technologies, Inc. Remote storage gateway management using gateway-initiated connections
US8639921B1 (en) 2011-06-30 2014-01-28 Amazon Technologies, Inc. Storage gateway security model
US8639989B1 (en) 2011-06-30 2014-01-28 Amazon Technologies, Inc. Methods and apparatus for remote gateway monitoring and diagnostics
US8538929B2 (en) * 2011-07-07 2013-09-17 International Business Machines Corporation Archiving de-duplicated data on tape storage media using graph partitions
US8793343B1 (en) 2011-08-18 2014-07-29 Amazon Technologies, Inc. Redundant storage gateways
US8732574B2 (en) 2011-08-25 2014-05-20 Palantir Technologies, Inc. System and method for parameterizing documents for automatic workflow generation
WO2013033644A1 (en) 2011-08-31 2013-03-07 Zazzle.Com, Inc. Tiling process for digital image retrieval
US8504542B2 (en) 2011-09-02 2013-08-06 Palantir Technologies, Inc. Multi-row transactions
US8868546B2 (en) * 2011-09-15 2014-10-21 Oracle International Corporation Query explain plan in a distributed data management system
JP6135509B2 (ja) * 2011-09-27 2017-05-31 日本電気株式会社 情報システム、その管理方法およびプログラム、データ処理方法およびプログラム、ならびに、データ構造
US8429162B1 (en) 2011-09-27 2013-04-23 Amazon Technologies, Inc. Facilitating data redistribution in database sharding
JP6094487B2 (ja) * 2011-09-27 2017-03-15 日本電気株式会社 情報システム、管理装置、データ処理方法、データ構造、プログラム、および記録媒体
US8433702B1 (en) * 2011-09-28 2013-04-30 Palantir Technologies, Inc. Horizon histogram optimizations
US8560494B1 (en) 2011-09-30 2013-10-15 Palantir Technologies, Inc. Visual data importer
US8789208B1 (en) 2011-10-04 2014-07-22 Amazon Technologies, Inc. Methods and apparatus for controlling snapshot exports
US8849776B2 (en) * 2011-10-17 2014-09-30 Yahoo! Inc. Method and system for resolving data inconsistency
US9148381B2 (en) 2011-10-21 2015-09-29 Qualcomm Incorporated Cloud computing enhanced gateway for communication networks
US9116893B2 (en) * 2011-10-21 2015-08-25 Qualcomm Incorporated Network connected media gateway for communication networks
US9183407B2 (en) * 2011-10-28 2015-11-10 Microsoft Technology Licensing Llc Permission based query processing
US9635132B1 (en) 2011-12-15 2017-04-25 Amazon Technologies, Inc. Service and APIs for remote volume-based block storage
US8782224B2 (en) 2011-12-29 2014-07-15 Joyent, Inc. Systems and methods for time-based dynamic allocation of resource management
US9069827B1 (en) 2012-01-17 2015-06-30 Amazon Technologies, Inc. System and method for adjusting membership of a data replication group
US9116862B1 (en) 2012-01-17 2015-08-25 Amazon Technologies, Inc. System and method for data replication using a single master failover protocol
US8843441B1 (en) 2012-01-17 2014-09-23 Amazon Technologies, Inc. System and method for maintaining a master replica for reads and writes in a data store
US8930312B1 (en) 2012-01-17 2015-01-06 Amazon Technologies, Inc. System and method for splitting a replicated data partition
EP2711841A4 (en) * 2012-01-19 2014-07-30 Huawei Tech Co Ltd METHOD, DEVICE AND SYSTEM FOR PROCESSING DATA BASED ON BLOCK MEMORY
US9378526B2 (en) 2012-03-02 2016-06-28 Palantir Technologies, Inc. System and method for accessing data objects via remote references
US10623408B1 (en) 2012-04-02 2020-04-14 Amazon Technologies, Inc. Context sensitive object management
JP5844895B2 (ja) * 2012-05-24 2016-01-20 株式会社日立製作所 データの分散検索システム、データの分散検索方法及び管理計算機
US9154551B1 (en) 2012-06-11 2015-10-06 Amazon Technologies, Inc. Processing DNS queries to identify pre-processing information
US9270793B2 (en) 2012-06-19 2016-02-23 Microsoft Technology Licensing, Llc Enhanced data protection for message volumes
US10031978B1 (en) * 2012-06-29 2018-07-24 Open Text Corporation Methods and systems for providing a search service application
US10157229B1 (en) 2012-06-29 2018-12-18 Open Text Corporation Methods and systems for building a search service application
US8949653B1 (en) * 2012-08-03 2015-02-03 Symantec Corporation Evaluating high-availability configuration
US10325324B2 (en) * 2012-08-28 2019-06-18 Facebook, Inc. Social context for offsite advertisements
US8990176B2 (en) * 2012-09-10 2015-03-24 Microsoft Technology Licensing, Llc Managing a search index
US9798768B2 (en) 2012-09-10 2017-10-24 Palantir Technologies, Inc. Search around visual queries
US9323577B2 (en) 2012-09-20 2016-04-26 Amazon Technologies, Inc. Automated profiling of resource usage
CN102831253B (zh) * 2012-09-25 2015-01-21 北京科东电力控制系统有限责任公司 一种分布式全文检索系统
US8954391B2 (en) 2012-10-15 2015-02-10 Oracle International Corporation System and method for supporting transient partition consistency in a distributed data grid
US9471370B2 (en) 2012-10-22 2016-10-18 Palantir Technologies, Inc. System and method for stack-based batch evaluation of program instructions
US9348677B2 (en) 2012-10-22 2016-05-24 Palantir Technologies Inc. System and method for batch evaluation programs
US9047328B2 (en) * 2012-11-19 2015-06-02 Facebook, Inc. Searching entity-key associations using in-memory objects
US10205698B1 (en) 2012-12-19 2019-02-12 Amazon Technologies, Inc. Source-dependent address resolution
CN103906032B (zh) * 2012-12-31 2018-05-11 华为技术有限公司 设备到设备通信方法、模块及终端设备
US9197700B2 (en) * 2013-01-18 2015-11-24 Apple Inc. Keychain syncing
US9087055B2 (en) * 2013-01-28 2015-07-21 International Business Machines Corporation Segmenting documents within a full text index
US9146771B2 (en) * 2013-03-12 2015-09-29 International Business Machines Corporation Responding to a timeout of a message in a parallel computer
US11086898B2 (en) * 2013-03-13 2021-08-10 Amazon Technologies, Inc. Token-based admission control for replicated writes
US9367463B2 (en) 2013-03-14 2016-06-14 Palantir Technologies, Inc. System and method utilizing a shared cache to provide zero copy memory mapped database
US8826279B1 (en) * 2013-03-14 2014-09-02 Joyent, Inc. Instruction set architecture for compute-based object stores
US8943284B2 (en) 2013-03-14 2015-01-27 Joyent, Inc. Systems and methods for integrating compute resources in a storage area network
US8677359B1 (en) 2013-03-14 2014-03-18 Joyent, Inc. Compute-centric object stores and methods of use
US8881279B2 (en) 2013-03-14 2014-11-04 Joyent, Inc. Systems and methods for zone-based intrusion detection
US9104456B2 (en) 2013-03-14 2015-08-11 Joyent, Inc. Zone management of compute-centric object stores
US8909656B2 (en) 2013-03-15 2014-12-09 Palantir Technologies Inc. Filter chains with associated multipath views for exploring large data sets
US9665957B1 (en) * 2013-03-15 2017-05-30 Ca, Inc. System and method for rapidly assessing system components with trend charts
US10244080B2 (en) * 2013-03-15 2019-03-26 VCE IP Holding Company LLC Accessing multiple converged IT infrastructures
US9092238B2 (en) 2013-03-15 2015-07-28 Joyent, Inc. Versioning schemes for compute-centric object stores
US8930897B2 (en) 2013-03-15 2015-01-06 Palantir Technologies Inc. Data integration tool
US8793688B1 (en) 2013-03-15 2014-07-29 Joyent, Inc. Systems and methods for double hulled virtualization operations
US8855999B1 (en) 2013-03-15 2014-10-07 Palantir Technologies Inc. Method and system for generating a parser and parsing complex data
US9679402B1 (en) * 2013-03-15 2017-06-13 Ca, Inc. System and method for rapidly assessing system components with gauges
US8903717B2 (en) 2013-03-15 2014-12-02 Palantir Technologies Inc. Method and system for generating a parser and parsing complex data
US8868486B2 (en) 2013-03-15 2014-10-21 Palantir Technologies Inc. Time-sensitive cube
US9898167B2 (en) 2013-03-15 2018-02-20 Palantir Technologies Inc. Systems and methods for providing a tagging interface for external content
US8775485B1 (en) 2013-03-15 2014-07-08 Joyent, Inc. Object store management operations within compute-centric object stores
US9740369B2 (en) 2013-03-15 2017-08-22 Palantir Technologies Inc. Systems and methods for providing a tagging interface for external content
MX2013005303A (es) * 2013-05-10 2013-08-07 Fondo De Informacion Y Documentacion Para La Ind Infotec Un sistema y un proceso de alto desempeño para el tratamiento y almacenamiento de datos, basado en componentes de bajo costo, que garantiza la integridad y disponibilidad de los datos para su propia administracion.
US9489443B1 (en) 2013-05-24 2016-11-08 Amazon Technologies, Inc. Scheduling of splits and moves of database partitions
US9294391B1 (en) 2013-06-04 2016-03-22 Amazon Technologies, Inc. Managing network computing components utilizing request routing
US9559900B1 (en) 2013-06-13 2017-01-31 Amazon Technologies, Inc. Dedicated endpoints for network-accessible services
US10158579B2 (en) 2013-06-21 2018-12-18 Amazon Technologies, Inc. Resource silos at network-accessible services
US9613082B2 (en) 2013-09-30 2017-04-04 International Business Machines Corporation Database auditing for bulk operations
US10503732B2 (en) 2013-10-31 2019-12-10 Micro Focus Llc Storing time series data for a search query
US10331695B1 (en) * 2013-11-25 2019-06-25 Amazon Technologies, Inc. Replication coordination service for data transfers between distributed databases
US9529848B2 (en) * 2013-12-06 2016-12-27 Vmware, Inc. Predictive query result computation
US9105000B1 (en) 2013-12-10 2015-08-11 Palantir Technologies Inc. Aggregating data from a plurality of data sources
US9436739B2 (en) 2013-12-13 2016-09-06 Vmware, Inc. Dynamic priority-based query scheduling
US9430573B2 (en) * 2014-01-14 2016-08-30 Microsoft Technology Licensing, Llc Coherent question answering in search results
US8924429B1 (en) 2014-03-18 2014-12-30 Palantir Technologies Inc. Determining and extracting changed data from a data source
WO2015167562A1 (en) * 2014-04-30 2015-11-05 Hewlett-Packard Development Company, L.P. Using local memory nodes of a multicore machine to process a search query
US20160026923A1 (en) 2014-07-22 2016-01-28 Palantir Technologies Inc. System and method for determining a propensity of entity to take a specified action
US11095715B2 (en) * 2014-09-24 2021-08-17 Ebay Inc. Assigning storage responsibility in a distributed data storage system with replication
CN104333512B (zh) * 2014-10-30 2017-07-28 北京思特奇信息技术股份有限公司 一种分布式内存数据库访问系统及方法
US10097448B1 (en) 2014-12-18 2018-10-09 Amazon Technologies, Inc. Routing mode and point-of-presence selection service
US10091096B1 (en) 2014-12-18 2018-10-02 Amazon Technologies, Inc. Routing mode and point-of-presence selection service
US10033627B1 (en) 2014-12-18 2018-07-24 Amazon Technologies, Inc. Routing mode and point-of-presence selection service
WO2016146166A1 (en) * 2015-03-17 2016-09-22 Huawei Technologies Co., Ltd. Multi-multidimensional computer architecture for big data applications
US20160275085A1 (en) * 2015-03-17 2016-09-22 Netapp, Inc. Methods for facilitating a nosql database with integrated management and devices thereof
US10225326B1 (en) 2015-03-23 2019-03-05 Amazon Technologies, Inc. Point of presence based data uploading
US9819567B1 (en) 2015-03-30 2017-11-14 Amazon Technologies, Inc. Traffic surge management for points of presence
US9665299B2 (en) 2015-03-31 2017-05-30 International Business Machines Corporation Implicit coordination for deployment of computing systems using a data sharing service
US9348880B1 (en) 2015-04-01 2016-05-24 Palantir Technologies, Inc. Federated search of multiple sources with conflict resolution
US9832141B1 (en) 2015-05-13 2017-11-28 Amazon Technologies, Inc. Routing based request correlation
US10097566B1 (en) 2015-07-31 2018-10-09 Amazon Technologies, Inc. Identifying targets of network attacks
US10977276B2 (en) * 2015-07-31 2021-04-13 International Business Machines Corporation Balanced partition placement in distributed databases
US10120938B2 (en) * 2015-08-01 2018-11-06 MapScallion LLC Systems and methods for automating the transmission of partitionable search results from a search engine
US10235417B1 (en) * 2015-09-02 2019-03-19 Amazon Technologies, Inc. Partitioned search of log events
US9514205B1 (en) 2015-09-04 2016-12-06 Palantir Technologies Inc. Systems and methods for importing data from electronic data files
US10528627B1 (en) * 2015-09-11 2020-01-07 Amazon Technologies, Inc. Universal search service for multi-region and multi-service cloud computing resources
US10558339B1 (en) 2015-09-11 2020-02-11 Palantir Technologies Inc. System and method for analyzing electronic communications and a collaborative electronic communications user interface
US9772934B2 (en) 2015-09-14 2017-09-26 Palantir Technologies Inc. Pluggable fault detection tests for data pipelines
US9774619B1 (en) 2015-09-24 2017-09-26 Amazon Technologies, Inc. Mitigating network attacks
US11082515B2 (en) * 2015-09-26 2021-08-03 Intel Corporation Technologies for offloading data object replication and service function chain management
US9910697B2 (en) 2015-10-13 2018-03-06 Palantir Technologies Inc. Fault-tolerant and highly-available configuration of distributed services
US12468467B2 (en) * 2015-10-31 2025-11-11 Netapp, Inc. Sequential write based durable file system
US10270878B1 (en) 2015-11-10 2019-04-23 Amazon Technologies, Inc. Routing for origin-facing points of presence
US10049051B1 (en) 2015-12-11 2018-08-14 Amazon Technologies, Inc. Reserved cache space in content delivery networks
US10257307B1 (en) 2015-12-11 2019-04-09 Amazon Technologies, Inc. Reserved cache space in content delivery networks
US10348639B2 (en) 2015-12-18 2019-07-09 Amazon Technologies, Inc. Use of virtual endpoints to improve data transmission rates
US10853359B1 (en) 2015-12-21 2020-12-01 Amazon Technologies, Inc. Data log stream processing using probabilistic data structures
US9652510B1 (en) 2015-12-29 2017-05-16 Palantir Technologies Inc. Systems and user interfaces for data analysis including artificial intelligence algorithms for generating optimized packages of data items
US12288233B2 (en) 2016-04-01 2025-04-29 OneTrust, LLC Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design
US10320906B2 (en) * 2016-04-29 2019-06-11 Netapp, Inc. Self-organizing storage system for asynchronous storage service
US10075551B1 (en) 2016-06-06 2018-09-11 Amazon Technologies, Inc. Request management for hierarchical cache
US10554516B1 (en) 2016-06-09 2020-02-04 Palantir Technologies Inc. System to collect and visualize software usage metrics
US12591828B2 (en) 2016-06-10 2026-03-31 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US11392720B2 (en) 2016-06-10 2022-07-19 OneTrust, LLC Data processing systems for verification of consent and notice processing and related methods
US12381915B2 (en) 2016-06-10 2025-08-05 OneTrust, LLC Data processing systems and methods for performing assessments and monitoring of new versions of computer code for compliance
US11475136B2 (en) 2016-06-10 2022-10-18 OneTrust, LLC Data processing systems for data transfer risk identification and related methods
US11354434B2 (en) 2016-06-10 2022-06-07 OneTrust, LLC Data processing systems for verification of consent and notice processing and related methods
US10685140B2 (en) 2016-06-10 2020-06-16 OneTrust, LLC Consent receipt management systems and related methods
US11354435B2 (en) 2016-06-10 2022-06-07 OneTrust, LLC Data processing systems for data testing to confirm data deletion and related methods
US11227247B2 (en) 2016-06-10 2022-01-18 OneTrust, LLC Data processing systems and methods for bundled privacy policies
US11403377B2 (en) 2016-06-10 2022-08-02 OneTrust, LLC Privacy management systems and methods
US11416109B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Automated data processing systems and methods for automatically processing data subject access requests using a chatbot
US10284604B2 (en) 2016-06-10 2019-05-07 OneTrust, LLC Data processing and scanning systems for generating and populating a data inventory
US10909488B2 (en) 2016-06-10 2021-02-02 OneTrust, LLC Data processing systems for assessing readiness for responding to privacy-related incidents
US10909265B2 (en) 2016-06-10 2021-02-02 OneTrust, LLC Application privacy scanning systems and related methods
US12045266B2 (en) 2016-06-10 2024-07-23 OneTrust, LLC Data processing systems for generating and populating a data inventory
US12299065B2 (en) 2016-06-10 2025-05-13 OneTrust, LLC Data processing systems and methods for dynamically determining data processing consent configurations
US11188862B2 (en) 2016-06-10 2021-11-30 OneTrust, LLC Privacy management systems and methods
US11438386B2 (en) 2016-06-10 2022-09-06 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US11625502B2 (en) 2016-06-10 2023-04-11 OneTrust, LLC Data processing systems for identifying and modifying processes that are subject to data subject access requests
US11586700B2 (en) 2016-06-10 2023-02-21 OneTrust, LLC Data processing systems and methods for automatically blocking the use of tracking tools
US11134086B2 (en) 2016-06-10 2021-09-28 OneTrust, LLC Consent conversion optimization systems and related methods
US10997318B2 (en) 2016-06-10 2021-05-04 OneTrust, LLC Data processing systems for generating and populating a data inventory for processing data access requests
US11294939B2 (en) 2016-06-10 2022-04-05 OneTrust, LLC Data processing systems and methods for automatically detecting and documenting privacy-related aspects of computer software
US10846433B2 (en) 2016-06-10 2020-11-24 OneTrust, LLC Data processing consent management systems and related methods
US10678945B2 (en) 2016-06-10 2020-06-09 OneTrust, LLC Consent receipt management systems and related methods
US11544667B2 (en) 2016-06-10 2023-01-03 OneTrust, LLC Data processing systems for generating and populating a data inventory
US11651104B2 (en) 2016-06-10 2023-05-16 OneTrust, LLC Consent receipt management systems and related methods
US11418492B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing systems and methods for using a data model to select a target data asset in a data migration
US12136055B2 (en) 2016-06-10 2024-11-05 OneTrust, LLC Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques
US11651106B2 (en) 2016-06-10 2023-05-16 OneTrust, LLC Data processing systems for fulfilling data subject access requests and related methods
US11562097B2 (en) 2016-06-10 2023-01-24 OneTrust, LLC Data processing systems for central consent repository and related methods
US11222139B2 (en) 2016-06-10 2022-01-11 OneTrust, LLC Data processing systems and methods for automatic discovery and assessment of mobile software development kits
US11410106B2 (en) 2016-06-10 2022-08-09 OneTrust, LLC Privacy management systems and methods
US9678850B1 (en) 2016-06-10 2017-06-13 Palantir Technologies Inc. Data pipeline monitoring
US11481710B2 (en) 2016-06-10 2022-10-25 OneTrust, LLC Privacy management systems and methods
US11675929B2 (en) 2016-06-10 2023-06-13 OneTrust, LLC Data processing consent sharing systems and related methods
US11222142B2 (en) 2016-06-10 2022-01-11 OneTrust, LLC Data processing systems for validating authorization for personal data collection, storage, and processing
US11295316B2 (en) 2016-06-10 2022-04-05 OneTrust, LLC Data processing systems for identity validation for consumer rights requests and related methods
US11416798B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing systems and methods for providing training in a vendor procurement process
US11366909B2 (en) 2016-06-10 2022-06-21 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11636171B2 (en) 2016-06-10 2023-04-25 OneTrust, LLC Data processing user interface monitoring systems and related methods
US11520928B2 (en) 2016-06-10 2022-12-06 OneTrust, LLC Data processing systems for generating personal data receipts and related methods
US12052289B2 (en) 2016-06-10 2024-07-30 OneTrust, LLC Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods
US10318761B2 (en) 2016-06-10 2019-06-11 OneTrust, LLC Data processing systems and methods for auditing data request compliance
US11188615B2 (en) 2016-06-10 2021-11-30 OneTrust, LLC Data processing consent capture systems and related methods
US10740487B2 (en) 2016-06-10 2020-08-11 OneTrust, LLC Data processing systems and methods for populating and maintaining a centralized database of personal data
US11416590B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US11416589B2 (en) 2016-06-10 2022-08-16 OneTrust, LLC Data processing and scanning systems for assessing vendor risk
US12118121B2 (en) 2016-06-10 2024-10-15 OneTrust, LLC Data subject access request processing systems and related methods
US11366786B2 (en) 2016-06-10 2022-06-21 OneTrust, LLC Data processing systems for processing data subject access requests
US11727141B2 (en) 2016-06-10 2023-08-15 OneTrust, LLC Data processing systems and methods for synching privacy-related user consent across multiple computing devices
US11461500B2 (en) 2016-06-10 2022-10-04 OneTrust, LLC Data processing systems for cookie compliance testing with website scanning and related methods
US10063666B2 (en) 2016-06-14 2018-08-28 Futurewei Technologies, Inc. Modular telecommunication edge cloud system
US11496588B2 (en) * 2016-06-21 2022-11-08 Micro Focus Llc Clustering layers in multi-node clusters
US10110694B1 (en) 2016-06-29 2018-10-23 Amazon Technologies, Inc. Adaptive transfer rate for retrieving content from a server
US10621314B2 (en) 2016-08-01 2020-04-14 Palantir Technologies Inc. Secure deployment of a software package
US10133782B2 (en) 2016-08-01 2018-11-20 Palantir Technologies Inc. Techniques for data extraction
US11256762B1 (en) 2016-08-04 2022-02-22 Palantir Technologies Inc. System and method for efficiently determining and displaying optimal packages of data items
US20180041578A1 (en) * 2016-08-08 2018-02-08 Futurewei Technologies, Inc. Inter-Telecommunications Edge Cloud Protocols
US10552531B2 (en) 2016-08-11 2020-02-04 Palantir Technologies Inc. Collaborative spreadsheet data validation and integration
US10373078B1 (en) 2016-08-15 2019-08-06 Palantir Technologies Inc. Vector generation for distributed data sets
EP3282374A1 (en) 2016-08-17 2018-02-14 Palantir Technologies Inc. User interface data sample transformer
US9992086B1 (en) 2016-08-23 2018-06-05 Amazon Technologies, Inc. External health checking of virtual private cloud network environments
US10033691B1 (en) 2016-08-24 2018-07-24 Amazon Technologies, Inc. Adaptive resolution of domain name requests in virtual private cloud network environments
CN106445645B (zh) * 2016-09-06 2019-11-26 北京百度网讯科技有限公司 用于执行分布式计算任务的方法和装置
US11442935B2 (en) 2016-09-26 2022-09-13 Splunk Inc. Determining a record generation estimate of a processing task
US11222066B1 (en) 2016-09-26 2022-01-11 Splunk Inc. Processing data using containerized state-free indexing nodes in a containerized scalable environment
US11550847B1 (en) * 2016-09-26 2023-01-10 Splunk Inc. Hashing bucket identifiers to identify search nodes for efficient query execution
US11294941B1 (en) * 2016-09-26 2022-04-05 Splunk Inc. Message-based data ingestion to a data intake and query system
US12013895B2 (en) 2016-09-26 2024-06-18 Splunk Inc. Processing data using containerized nodes in a containerized scalable environment
US11620336B1 (en) 2016-09-26 2023-04-04 Splunk Inc. Managing and storing buckets to a remote shared storage system based on a collective bucket size
US10956415B2 (en) 2016-09-26 2021-03-23 Splunk Inc. Generating a subquery for an external data system using a configuration file
US11281706B2 (en) 2016-09-26 2022-03-22 Splunk Inc. Multi-layer partition allocation for query execution
US11580107B2 (en) 2016-09-26 2023-02-14 Splunk Inc. Bucket data distribution for exporting data to worker nodes
US11562023B1 (en) 2016-09-26 2023-01-24 Splunk Inc. Merging buckets in a data intake and query system
US11586627B2 (en) 2016-09-26 2023-02-21 Splunk Inc. Partitioning and reducing records at ingest of a worker node
US11567993B1 (en) * 2016-09-26 2023-01-31 Splunk Inc. Copying buckets from a remote shared storage system to memory associated with a search node for query execution
US11874691B1 (en) * 2016-09-26 2024-01-16 Splunk Inc. Managing efficient query execution including mapping of buckets to search nodes
US11250056B1 (en) 2016-09-26 2022-02-15 Splunk Inc. Updating a location marker of an ingestion buffer based on storing buckets in a shared storage system
US11163758B2 (en) 2016-09-26 2021-11-02 Splunk Inc. External dataset capability compensation
US11232100B2 (en) 2016-09-26 2022-01-25 Splunk Inc. Resource allocation for multiple datasets
US11003714B1 (en) * 2016-09-26 2021-05-11 Splunk Inc. Search node and bucket identification using a search node catalog and a data store catalog
US11106734B1 (en) 2016-09-26 2021-08-31 Splunk Inc. Query execution using containerized state-free search nodes in a containerized scalable environment
US10353965B2 (en) 2016-09-26 2019-07-16 Splunk Inc. Data fabric service system architecture
US11416528B2 (en) 2016-09-26 2022-08-16 Splunk Inc. Query acceleration data store
US11243963B2 (en) 2016-09-26 2022-02-08 Splunk Inc. Distributing partial results to worker nodes from an external data system
US11023463B2 (en) 2016-09-26 2021-06-01 Splunk Inc. Converting and modifying a subquery for an external data system
US11860940B1 (en) 2016-09-26 2024-01-02 Splunk Inc. Identifying buckets for query execution using a catalog of buckets
US11593377B2 (en) 2016-09-26 2023-02-28 Splunk Inc. Assigning processing tasks in a data intake and query system
US10977260B2 (en) 2016-09-26 2021-04-13 Splunk Inc. Task distribution in an execution node of a distributed execution environment
US11269939B1 (en) 2016-09-26 2022-03-08 Splunk Inc. Iterative message-based data processing including streaming analytics
US20180089324A1 (en) 2016-09-26 2018-03-29 Splunk Inc. Dynamic resource allocation for real-time search
US11461334B2 (en) 2016-09-26 2022-10-04 Splunk Inc. Data conditioning for dataset destination
US11126632B2 (en) 2016-09-26 2021-09-21 Splunk Inc. Subquery generation based on search configuration data from an external data system
US10984044B1 (en) 2016-09-26 2021-04-20 Splunk Inc. Identifying buckets for query execution using a catalog of buckets stored in a remote shared storage system
US11314753B2 (en) 2016-09-26 2022-04-26 Splunk Inc. Execution of a query received from a data intake and query system
US11321321B2 (en) 2016-09-26 2022-05-03 Splunk Inc. Record expansion and reduction based on a processing task in a data intake and query system
US11599541B2 (en) 2016-09-26 2023-03-07 Splunk Inc. Determining records generated by a processing task of a query
US11604795B2 (en) 2016-09-26 2023-03-14 Splunk Inc. Distributing partial results from an external data system between worker nodes
US11663227B2 (en) 2016-09-26 2023-05-30 Splunk Inc. Generating a subquery for a distinct data intake and query system
US11615104B2 (en) 2016-09-26 2023-03-28 Splunk Inc. Subquery generation based on a data ingest estimate of an external data system
US10650086B1 (en) 2016-09-27 2020-05-12 Palantir Technologies Inc. Systems, methods, and framework for associating supporting data in word processing
US10469513B2 (en) 2016-10-05 2019-11-05 Amazon Technologies, Inc. Encrypted network addresses
US9998551B1 (en) 2016-10-24 2018-06-12 Palantir Technologies Inc. Automatic discovery and registration of service application for files introduced to a user interface
US10042620B1 (en) 2016-11-03 2018-08-07 Palantir Technologies Inc. Approaches for amalgamating disparate software tools
US10152306B2 (en) 2016-11-07 2018-12-11 Palantir Technologies Inc. Framework for developing and deploying applications
US10366082B2 (en) * 2016-12-09 2019-07-30 Oracle International Corporation Parallel processing of queries with inverse distribution function
US10261763B2 (en) 2016-12-13 2019-04-16 Palantir Technologies Inc. Extensible data transformation authoring and validation system
US10001982B1 (en) 2016-12-16 2018-06-19 Palantir Technologies, Inc. Imposing a common build system for services from disparate sources
US11157951B1 (en) 2016-12-16 2021-10-26 Palantir Technologies Inc. System and method for determining and displaying an optimal assignment of data items
US10831549B1 (en) 2016-12-27 2020-11-10 Amazon Technologies, Inc. Multi-region request-driven code execution system
US10372499B1 (en) 2016-12-27 2019-08-06 Amazon Technologies, Inc. Efficient region selection system for executing request-driven code
US10509844B1 (en) 2017-01-19 2019-12-17 Palantir Technologies Inc. Network graph parser
US10938884B1 (en) 2017-01-30 2021-03-02 Amazon Technologies, Inc. Origin server cloaking using virtual private cloud network environments
US9787671B1 (en) * 2017-01-30 2017-10-10 Xactly Corporation Highly available web-based database interface system
US10180934B2 (en) 2017-03-02 2019-01-15 Palantir Technologies Inc. Automatic translation of spreadsheets into scripts
US10572576B1 (en) 2017-04-06 2020-02-25 Palantir Technologies Inc. Systems and methods for facilitating data object extraction from unstructured documents
US10503613B1 (en) 2017-04-21 2019-12-10 Amazon Technologies, Inc. Efficient serving of resources during server unavailability
US11573947B2 (en) * 2017-05-08 2023-02-07 Sap Se Adaptive query routing in a replicated database environment
US10359966B2 (en) * 2017-05-11 2019-07-23 Vmware, Inc. Capacity based load balancing in distributed storage systems with deduplication and compression functionalities
US10263845B2 (en) 2017-05-16 2019-04-16 Palantir Technologies Inc. Systems and methods for continuous configuration deployment
US10824604B1 (en) 2017-05-17 2020-11-03 Palantir Technologies Inc. Systems and methods for data entry
US11075987B1 (en) 2017-06-12 2021-07-27 Amazon Technologies, Inc. Load estimating content delivery network
US10013577B1 (en) 2017-06-16 2018-07-03 OneTrust, LLC Data processing systems for identifying whether cookies contain personally identifying information
US10447648B2 (en) 2017-06-19 2019-10-15 Amazon Technologies, Inc. Assignment of a POP to a DNS resolver based on volume of communications over a link between client devices and the POP
US10353699B1 (en) 2017-06-26 2019-07-16 Palantir Technologies Inc. Systems and methods for managing states of deployment
US10534595B1 (en) 2017-06-30 2020-01-14 Palantir Technologies Inc. Techniques for configuring and validating a data pipeline deployment
US10204119B1 (en) 2017-07-20 2019-02-12 Palantir Technologies, Inc. Inferring a dataset schema from input files
US11989194B2 (en) 2017-07-31 2024-05-21 Splunk Inc. Addressing memory limits for partition tracking among worker nodes
US11921672B2 (en) 2017-07-31 2024-03-05 Splunk Inc. Query execution at a remote heterogeneous data store of a data fabric service
US12118009B2 (en) 2017-07-31 2024-10-15 Splunk Inc. Supporting query languages through distributed execution of query engines
US12248484B2 (en) 2017-07-31 2025-03-11 Splunk Inc. Reassigning processing tasks to an external storage system
US10754820B2 (en) 2017-08-14 2020-08-25 Palantir Technologies Inc. Customizable pipeline for integrating data
US11016936B1 (en) 2017-09-05 2021-05-25 Palantir Technologies Inc. Validating data for integration
US11151137B2 (en) 2017-09-25 2021-10-19 Splunk Inc. Multi-partition operation in combination operations
US10860618B2 (en) 2017-09-25 2020-12-08 Splunk Inc. Low-latency streaming analytics
US10896182B2 (en) 2017-09-25 2021-01-19 Splunk Inc. Multi-partitioning determination for combination operations
US10742593B1 (en) 2017-09-25 2020-08-11 Amazon Technologies, Inc. Hybrid content request routing system
CN107748766B (zh) * 2017-09-28 2021-08-24 南威软件股份有限公司 一种基于Presto和Elasticsearch的大数据快速查询方法
US10579265B2 (en) * 2017-10-18 2020-03-03 Adobe Inc. Cloud-synchronized local storage management
US11379525B1 (en) 2017-11-22 2022-07-05 Palantir Technologies Inc. Continuous builds of derived datasets in response to other dataset updates
US10552524B1 (en) 2017-12-07 2020-02-04 Palantir Technolgies Inc. Systems and methods for in-line document tagging and object based data synchronization
US10783162B1 (en) 2017-12-07 2020-09-22 Palantir Technologies Inc. Workflow assistant
US10360252B1 (en) 2017-12-08 2019-07-23 Palantir Technologies Inc. Detection and enrichment of missing data or metadata for large data sets
CN107733939A (zh) * 2017-12-12 2018-02-23 柳州市北龟农业科技孵化器有限公司 一种网络咨询服务平台
US11176116B2 (en) 2017-12-13 2021-11-16 Palantir Technologies Inc. Systems and methods for annotating datasets
US10853352B1 (en) 2017-12-21 2020-12-01 Palantir Technologies Inc. Structured data collection, presentation, validation and workflow management
GB201800595D0 (en) 2018-01-15 2018-02-28 Palantir Technologies Inc Management of software bugs in a data processing system
US10599762B1 (en) 2018-01-16 2020-03-24 Palantir Technologies Inc. Systems and methods for creating a dynamic electronic form
US10997180B2 (en) 2018-01-31 2021-05-04 Splunk Inc. Dynamic query processor for streaming and batch queries
US10592578B1 (en) 2018-03-07 2020-03-17 Amazon Technologies, Inc. Predictive content push-enabled content delivery network
CN110198269B (zh) * 2018-04-03 2021-10-08 腾讯科技(深圳)有限公司 分布式机群的路由同步系统、方法及相关装置
US11334543B1 (en) 2018-04-30 2022-05-17 Splunk Inc. Scalable bucket merging for a data intake and query system
US10885021B1 (en) 2018-05-02 2021-01-05 Palantir Technologies Inc. Interactive interpreter and graphical user interface
US11171846B1 (en) 2018-05-14 2021-11-09 Vmware, Inc. Log throttling
US11263263B2 (en) 2018-05-30 2022-03-01 Palantir Technologies Inc. Data propagation and mapping system
US11061542B1 (en) 2018-06-01 2021-07-13 Palantir Technologies Inc. Systems and methods for determining and displaying optimal associations of data items
US10795909B1 (en) 2018-06-14 2020-10-06 Palantir Technologies Inc. Minimized and collapsed resource dependency path
TWI821373B (zh) * 2018-08-23 2023-11-11 美商阿爾克斯股份有限公司 網路運算環境中的第一跳轉閘道的冗餘機制系統
US11544409B2 (en) 2018-09-07 2023-01-03 OneTrust, LLC Data processing systems and methods for automatically protecting sensitive data within privacy management systems
US10803202B2 (en) 2018-09-07 2020-10-13 OneTrust, LLC Data processing systems for orphaned data identification and deletion and related methods
US10775976B1 (en) 2018-10-01 2020-09-15 Splunk Inc. Visual previews for programming an iterative publish-subscribe message processing system
US10761813B1 (en) 2018-10-01 2020-09-01 Splunk Inc. Assisted visual programming for iterative publish-subscribe message processing system
US10846155B2 (en) * 2018-10-16 2020-11-24 Samsung Electronics Co., Ltd. Method for NVMe SSD based storage service using RPC and gRPC tunneling over PCIe +
US10936585B1 (en) 2018-10-31 2021-03-02 Splunk Inc. Unified data processing across streaming and indexed data sets
US10862852B1 (en) 2018-11-16 2020-12-08 Amazon Technologies, Inc. Resolution of domain name requests in heterogeneous network environments
US11625273B1 (en) 2018-11-23 2023-04-11 Amazon Technologies, Inc. Changing throughput capacity to sustain throughput for accessing individual items in a database
US11025747B1 (en) 2018-12-12 2021-06-01 Amazon Technologies, Inc. Content request pattern-based routing system
WO2020220216A1 (en) 2019-04-29 2020-11-05 Splunk Inc. Search time estimate in data intake and query system
US11715051B1 (en) 2019-04-30 2023-08-01 Splunk Inc. Service provider instance recommendations using machine-learned classifications and reconciliation
US12412155B2 (en) 2019-05-07 2025-09-09 Zazzle Inc. System and method for role-based collaborative design of custom products based on manufacturing constraints
US11238048B1 (en) 2019-07-16 2022-02-01 Splunk Inc. Guided creation interface for streaming data processing pipelines
KR102421397B1 (ko) * 2019-07-25 2022-07-18 주식회사 디에스랩글로벌 프로그래밍 코드 자동생성을 통한 백엔드 구축 방법
US11231876B2 (en) * 2019-09-24 2022-01-25 Western Digital Technologies, Inc. Initial data placement in hybrid object storage system
US11474977B2 (en) 2019-09-30 2022-10-18 Dropbox, Inc. Snapshot isolation in a distributed storage system
US11494380B2 (en) 2019-10-18 2022-11-08 Splunk Inc. Management of distributed computing framework components in a data fabric service system
CN110995803B (zh) * 2019-11-22 2022-04-19 用友网络科技股份有限公司 上、下游业务处理方法及系统、计算机可读存储介质
US11922222B1 (en) 2020-01-30 2024-03-05 Splunk Inc. Generating a modified component for a data intake and query system using an isolated execution environment image
US11604928B2 (en) * 2020-04-30 2023-03-14 International Business Machines Corporation Efficiently managing predictive changes for a conversational agent
US11614923B2 (en) 2020-04-30 2023-03-28 Splunk Inc. Dual textual/graphical programming interfaces for streaming data processing pipelines
CN111966877B (zh) * 2020-06-29 2024-05-07 北京百度网讯科技有限公司 前端服务方法、装置、设备及存储介质
WO2022011142A1 (en) 2020-07-08 2022-01-13 OneTrust, LLC Systems and methods for targeted data discovery
WO2022026564A1 (en) 2020-07-28 2022-02-03 OneTrust, LLC Systems and methods for automatically blocking the use of tracking tools
US11475165B2 (en) 2020-08-06 2022-10-18 OneTrust, LLC Data processing systems and methods for automatically redacting unstructured data from a data subject access request
WO2022060860A1 (en) 2020-09-15 2022-03-24 OneTrust, LLC Data processing systems and methods for detecting tools for the automatic blocking of consent requests
US12566885B2 (en) 2020-09-21 2026-03-03 OneTrust, LLC Data processing systems and methods for automatically detecting target data transfers and target data processing
CN112052247B (zh) * 2020-09-29 2024-05-07 微医云(杭州)控股有限公司 搜索引擎的索引更新系统、方法、装置、电子设备、存储介质
US12265896B2 (en) 2020-10-05 2025-04-01 OneTrust, LLC Systems and methods for detecting prejudice bias in machine-learning models
US11704313B1 (en) 2020-10-19 2023-07-18 Splunk Inc. Parallel branch operation using intermediary nodes
WO2022099023A1 (en) 2020-11-06 2022-05-12 OneTrust, LLC Systems and methods for identifying data processing activities based on data discovery results
US11687528B2 (en) 2021-01-25 2023-06-27 OneTrust, LLC Systems and methods for discovery, classification, and indexing of data in a native computing system
US12164524B2 (en) 2021-01-29 2024-12-10 Splunk Inc. User interface for customizing data streams and processing pipelines
US11650995B2 (en) 2021-01-29 2023-05-16 Splunk Inc. User defined data stream for routing data to a data destination based on a data route
WO2022170047A1 (en) * 2021-02-04 2022-08-11 OneTrust, LLC Managing custom attributes for domain objects defined within microservices
US11494515B2 (en) 2021-02-08 2022-11-08 OneTrust, LLC Data processing systems and methods for anonymizing data samples in classification analysis
US11601464B2 (en) 2021-02-10 2023-03-07 OneTrust, LLC Systems and methods for mitigating risks of third-party computing system functionality integration into a first-party computing system
WO2022178089A1 (en) 2021-02-17 2022-08-25 OneTrust, LLC Managing custom workflows for domain objects defined within microservices
WO2022178219A1 (en) 2021-02-18 2022-08-25 OneTrust, LLC Selective redaction of media content
EP4305539A1 (en) 2021-03-08 2024-01-17 OneTrust, LLC Data transfer discovery and analysis systems and related methods
US11687487B1 (en) 2021-03-11 2023-06-27 Splunk Inc. Text files updates to an active processing pipeline
US12118598B2 (en) 2021-03-30 2024-10-15 Zazzle Inc. Generating and using tokens to request services and access to a product collaboration platform
US11562078B2 (en) 2021-04-16 2023-01-24 OneTrust, LLC Assessing and managing computational risk involved with integrating third party computing functionality within a computing system
US11663219B1 (en) 2021-04-23 2023-05-30 Splunk Inc. Determining a set of parameter values for a processing pipeline
US11604789B1 (en) 2021-04-30 2023-03-14 Splunk Inc. Bi-directional query updates in a user interface
US12242892B1 (en) 2021-04-30 2025-03-04 Splunk Inc. Implementation of a data processing pipeline using assignable resources and pre-configured resources
US12072939B1 (en) 2021-07-30 2024-08-27 Splunk Inc. Federated data enrichment objects
US11989592B1 (en) 2021-07-30 2024-05-21 Splunk Inc. Workload coordinator for providing state credentials to processing tasks of a data processing pipeline
US12153704B2 (en) 2021-08-05 2024-11-26 OneTrust, LLC Computing platform for facilitating data exchange among computing environments
US12164522B1 (en) 2021-09-15 2024-12-10 Splunk Inc. Metric processing for streaming machine learning applications
US12314992B2 (en) 2021-10-21 2025-05-27 Zazzle Inc. Method and computer readable storage media for interfacing with third party platforms via collaboration sessions to customize products
CN114138561B (zh) * 2021-12-02 2025-08-22 上海沄熹科技有限公司 分布式数据库加速副本平衡的系统及方法
US12093272B1 (en) 2022-04-29 2024-09-17 Splunk Inc. Retrieving data identifiers from queue for search of external data system
US11743363B1 (en) * 2022-05-23 2023-08-29 Oracle International Corporation Methods, systems, and computer readable media for utilizing network function (NF) service attributes associated with registered NF service producers in a hierarchical network
US11620142B1 (en) 2022-06-03 2023-04-04 OneTrust, LLC Generating and customizing user interfaces for demonstrating functions of interactive user environments
US12141137B1 (en) 2022-06-10 2024-11-12 Cisco Technology, Inc. Query translation for an external data system
US12019642B2 (en) * 2022-11-11 2024-06-25 Microsoft Technology Licensing, Llc Distributed query technique to efficiently retrieve and merge data from multiple shards
KR102628460B1 (ko) * 2022-11-14 2024-01-23 세종대학교산학협력단 메타버스를 위한 가상 공간 검색 방법 및 시스템
US12287790B2 (en) 2023-01-31 2025-04-29 Splunk Inc. Runtime systems query coordinator
US12585638B2 (en) 2023-07-17 2026-03-24 Cisco Technology, Inc. Query execution using a data processing scheme of a separate data processing system

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6304874B1 (en) * 1996-07-09 2001-10-16 British Telecommunications Public Limited Company Access system for distributed storage
US5963944A (en) 1996-12-30 1999-10-05 Intel Corporation System and method for distributing and indexing computerized documents using independent agents
US6167438A (en) 1997-05-22 2000-12-26 Trustees Of Boston University Method and system for distributed caching, prefetching and replication
US6081840A (en) * 1997-10-14 2000-06-27 Zhao; Yan Two-level content distribution system
US6192165B1 (en) 1997-12-30 2001-02-20 Imagetag, Inc. Apparatus and method for digital filing
US6108703A (en) 1998-07-14 2000-08-22 Massachusetts Institute Of Technology Global hosting system
EP0993163A1 (en) 1998-10-05 2000-04-12 Backweb Technologies Ltd. Distributed client-based data caching system and method
US6351776B1 (en) 1999-11-04 2002-02-26 Xdrive, Inc. Shared internet storage resource, user interface system, and method
US6557111B1 (en) 1999-11-29 2003-04-29 Xerox Corporation Multicast-enhanced update propagation in a weakly-consistant, replicated data storage system
US6651242B1 (en) 1999-12-14 2003-11-18 Novell, Inc. High performance computing system for distributed applications over a computer
US20020007350A1 (en) 2000-07-11 2002-01-17 Brian Yen System and method for on-demand data distribution in a P2P system
US7734715B2 (en) 2001-03-01 2010-06-08 Ricoh Company, Ltd. System, computer program product and method for managing documents
WO2002084528A1 (en) 2001-04-12 2002-10-24 Fifth Web Limited System and method for searching in a distributed computing environment
US20020188735A1 (en) 2001-06-06 2002-12-12 Needham Bradford H. Partially replicated, locally searched peer to peer file sharing system
CA2377649C (en) * 2002-03-20 2009-02-03 Ibm Canada Limited-Ibm Canada Limitee Dynamic cluster database architecture
US20040044776A1 (en) 2002-03-22 2004-03-04 International Business Machines Corporation Peer to peer file sharing system using common protocols
US20040006601A1 (en) 2002-07-01 2004-01-08 Bernstein David B. Method and system for optimized persistent messaging
US20040010716A1 (en) 2002-07-11 2004-01-15 International Business Machines Corporation Apparatus and method for monitoring the health of systems management software components in an enterprise
US7263560B2 (en) * 2002-08-30 2007-08-28 Sun Microsystems, Inc. Decentralized peer-to-peer advertisement
US7206934B2 (en) * 2002-09-26 2007-04-17 Sun Microsystems, Inc. Distributed indexing of identity information in a peer-to-peer network
KR20020096027A (ko) * 2002-10-22 2002-12-28 (주)컴파인 세계 곳곳에 분포된 개인용 컴퓨터의 스토리지와 네트워크자원을 이용하여 파일을 저장하고 서비스하는 그리드 파일 시스템
US7287068B1 (en) 2002-12-13 2007-10-23 Bmc Software, Inc. System and method for updating devices that execute an operating system or application program directly from nonvolatile storage
EP1573600A4 (en) * 2003-08-21 2006-04-19 Microsoft Corp SYSTEMS AND METHOD FOR SYNCHRONIZING COMPUTER SYSTEMS BY A INTERMEDIATE SYSTEM OR DEVICE
US20050108203A1 (en) 2003-11-13 2005-05-19 Chunqiang Tang Sample-directed searching in a peer-to-peer system
WO2005048565A1 (en) * 2003-11-14 2005-05-26 Canon Kabushiki Kaisha System, method and devices for accessing or sharing a digital document in a peer-to-peer communication network
US7778984B2 (en) 2004-11-19 2010-08-17 Microsoft Corporation System and method for a distributed object store
US7991767B2 (en) * 2005-04-29 2011-08-02 International Business Machines Corporation Method for providing a shared search index in a peer to peer network
US7783698B2 (en) * 2005-12-16 2010-08-24 Microsoft Corporation Generalized web-service
US7716180B2 (en) 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9936011B2 (en) 2014-04-24 2018-04-03 Casio Computer Co., Ltd Distributed database, method of sharing data, program storing medium, and apparatus for a distributed database

Also Published As

Publication number Publication date
KR101595202B1 (ko) 2016-02-18
KR20080086918A (ko) 2008-09-26
CA2635400A1 (en) 2007-07-12
KR20130130867A (ko) 2013-12-02
WO2007079303A3 (en) 2007-08-23
KR20150065910A (ko) 2015-06-15
US7801912B2 (en) 2010-09-21
US20070168336A1 (en) 2007-07-19
MX2008008509A (es) 2008-12-16
JP2009522660A (ja) 2009-06-11
EP3361399A1 (en) 2018-08-15
KR101543308B1 (ko) 2015-08-11
KR20150004917A (ko) 2015-01-13
EP1974295B1 (en) 2018-04-11
CA2635400C (en) 2014-10-28
WO2007079303A2 (en) 2007-07-12
KR101719936B1 (ko) 2017-03-24
EP1974295A2 (en) 2008-10-01

Similar Documents

Publication Publication Date Title
JP5118059B2 (ja) 検索可能なデータサービスのための方法及び装置
US11354315B2 (en) Method and apparatus for stress management in a searchable data service
US11860874B2 (en) Multi-partitioning data for combination operations
US20200183932A1 (en) Optimizing write operations in object schema-based application programming interfaces (apis)
EP3465435B1 (en) Optimizing read and write operations in object schema-based application programming interfaces (apis)
JP5090450B2 (ja) 階層に編成され、ネットワークを介してリンクされた複数のノードに保管された複製データを更新するための方法、プログラム、およびコンピュータ可読媒体
US20190095493A1 (en) Multi-partition operation in combination operations
Chervenak et al. The globus replica location service: design and experience
d'Orazio et al. Adaptable cache service and application to grid caching
Ryeng Improving Query Processing Performance in Large Distributed Database Management Systems.

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091130

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120529

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120822

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120918

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121018

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5118059

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151026

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250