(57)【要約】      （修正有）【課題】データアクセス要求を処理する方法、ソフトウェア、及びシステムを提供する。【解決手段】ユーザが出した、プライマリデータサーバ１０８に格納されたデータエントリにアクセスする要求を受信するステップと、受信した要求がプライマリデータサーバ１０８とは異なる高速クエリサービスエンジン１０４によりサポートされているか否かを判定するステップと、サポートされていると判定したことに応えて、受信した要求を高速クエリサービスエンジン１０４へ向けるステップと、プライマリデータサーバ１０８と同期している高速クエリサービスエンジン１０４のインメモリデータストレージ１０６内で維持管理されている２以上の回答セットから構築されるクエリ結果を高速クエリサービスエンジン１０４から受信するステップと、要求を出したユーザに対してクエリ結果を提供するステップと、を含む。【選択図】図１
2015072681.tif 000002
【特許請求の範囲】
【請求項１】
データアクセス要求を処理する方法であって、
ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、
前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、
前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、
前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、
前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、
を備えることを特徴とする方法。
【請求項２】
前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、
前記受信した要求を論理クエリセグメントに分解するステップと、
前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理積(conjunctive)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項２に記載の方法。
【請求項４】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理和(disjunctive)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項２に記載の方法。
【請求項５】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理否定(negation)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項２に記載の方法。
【請求項６】
前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップを更に備える
ことを特徴とする請求項１に記載の方法。
【請求項７】
前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップを更に備える
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを更に備える
ことを特徴とする請求項７に記載の方法。
【請求項９】
少なくとも１つのプロセッサを有するコンピュータシステムであって、前記少なくとも１つのプロセッサは、
ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、
前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、
前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、
前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、
前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、
を含む動作を実行するように構成されることを特徴とするコンピュータシステム。
【請求項１０】
前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、
前記受信した要求を論理クエリセグメントに分解するステップと、
前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、
を含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理積(conjunctive)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１２】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理和(disjunctive)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１３】
前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理否定(negation)によりネストされた論理クエリセグメントに分解するステップを含む
ことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１４】
前記動作は、前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップを更に含む
ことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１５】
前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップを更に含む
ことを特徴とする請求項１４に記載のコンピュータシステム。
【請求項１６】
前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを更に含む
ことを特徴とする請求項１５に記載のコンピュータシステム。
【請求項１７】
ソフトウェア命令を含むコンピュータ可読媒体であって、前記ソフトウェア命令は、コンピュータにより実行されると、前記コンピュータに、
ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、
前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、
前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、
前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、
前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、
を含む動作を実行させることを特徴とするコンピュータ可読媒体。
【請求項１８】
前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、
前記受信した要求を、論理積(conjunctive)、論理和(disjunctive)、及び論理否定(negation)のうちの少なくとも１つによりネストされた論理クエリセグメントに分解するステップと、
前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、
を含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記動作は、
前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップと、
前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップと、
を更に含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを更に含む
ことを特徴とする請求項１９に記載のコンピュータシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
ユーザは、データベースに対してデータアクセス要求を出し、クエリ結果を取得することができる。
【発明の概要】
【０００２】
一態様では、幾つかの実装は、データアクセス要求を処理するコンピュータ実装の方法であって、ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、を備えることを特徴とする方法を提供する。
【０００３】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。一構成では、前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、前記受信した要求を論理クエリセグメントに分解するステップと、前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、を含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理積(conjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理和(disjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理否定(negation)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。
【０００４】
一構成では、前記方法は、前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップを追加的に備えてもよい。前記方法は、前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップを更に備えてもよい。更に、前記方法は、前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを備えてもよい。
【０００５】
別の態様では、幾つかの実装は、少なくとも１つのプロセッサを有するコンピュータシステムであって、前記少なくとも１つのプロセッサは、ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、を含む動作を実行するように構成されることを特徴とするコンピュータシステムを提供してもよい。
【０００６】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。一構成では、前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、前記受信した要求を論理クエリセグメントに分解するステップと、前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、を含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理積(conjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理和(disjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理否定(negation)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。
【０００７】
一構成では、前記動作は、前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップを追加的に含んでもよい。動作は、前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップを更に含んでもよい。更に、前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを含んでもよい。
【０００８】
更に別の態様では、幾つかの実装は、ソフトウェア命令を含むコンピュータ可読媒体であって、前記ソフトウェア命令は、コンピュータにより実行されると、前記コンピュータに、ユーザが出した、プライマリデータサーバに格納されたデータエントリにアクセスする要求を受信するステップと、前記受信した要求が高速クエリサービスエンジンによりサポートされているか否かを判定するステップであって、前記高速クエリサービスエンジンは前記プライマリデータサーバとは異なる、ステップと、前記受信した要求が前記高速クエリサービスエンジンによりサポートされていると判定したことに応えて、前記要求を前記高速クエリサービスエンジンへ向けるステップと、前記高速クエリサービスエンジンからクエリ結果を受信するステップであって、前記クエリ結果は前記高速クエリサービスエンジンのインメモリデータストア内で維持管理されている２以上の回答セットから構築され、前記インメモリデータストア内の前記回答セットは前記プライマリデータサーバと同期している、ステップと、前記要求を出した前記ユーザに対して前記クエリ結果を提供するステップと、を含む動作を実行させることを特徴とするコンピュータ可読媒体を提供してもよい。
【０００９】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。一構成では、前記受信した要求が前記高速クエリサービスエンジンによりサポートされているか否かを判定する前記ステップは、前記受信した要求を論理クエリセグメントに分解するステップと、前記分解された論理クエリセグメントに関する対応する回答セットが前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されているか否かを判定するステップと、を含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理積(conjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理和(disjunctive)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。前記受信した要求を分解する前記ステップは、前記受信した要求を、少なくとも１つの論理否定(negation)によりネストされた論理クエリセグメントに分解するステップを含んでもよい。
【００１０】
一構成では、前記動作は、前記要求が前記高速クエリサービスエンジンによりサポートされていないと判定したことに応えて、前記要求を前記プライマリデータサーバへ向けるステップを追加的に含んでもよい。前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正するか否かを判定するステップを更に含んでもよい。更に、前記動作は、前記要求が前記プライマリデータサーバにおけるデータを修正すると判定したことに応えて、前記高速クエリサービスエンジンの前記インメモリデータストア内で維持管理されている、前記修正されるデータを参照する回答セットの内容が無効になったことを、前記高速クエリサービスエンジンに対して通知するステップを含んでもよい。
【００１１】
更に別の態様では、幾つかの実装は、クエリ処理のための方法であって、転送されたクエリを受信するステップであって、前記クエリはプライマリデータサーバにおけるデータにアクセスするためにユーザにより出されたものである、ステップと、前記転送されたクエリのコンポーネントに対する対応する回答セットがインメモリデータストアにおいて利用可能であるか否かを判定するステップと、前記対応する回答セットが利用可能であると判定したことに応えて、前記対応する回答セットが有効であるか否かを更に判定するステップと、前記対応する回答セットが利用可能であり有効であると判定したことに応えて、前記クエリのコンポーネントに対する前記対応する回答セットに基づいてクエリ結果を構築するステップと、前記ユーザにより出された前記クエリに応答するために前記クエリ結果を提供するステップと、を備えることを特徴とする方法を提供してもよい。
【００１２】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。前記方法は、ユーザが出したクエリにより修正されるデータに関する無効通知を受信するステップであって、前記データは前記インメモリデータストレージ内で維持管理されている少なくとも１つの回答セットにより参照されている、ステップを更に含んでもよい。前記方法は、前記修正されるデータを参照する前記少なくとも１つの回答セットを無効と登録するステップを追加的に含んでもよい。前記方法はまた、前記少なくとも１つの回答セットを前記インメモリデータストアから削除するステップを含んでもよい。前記方法は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新するステップを更に含んでもよい。
【００１３】
前記方法は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容が前記プライマリデータサーバにおける対応するデータに同期されるまで、前記クエリ結果を構築することを差し控えるステップを更に含んでもよい。前記方法は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新する前記ステップを促進するステップを更に含んでもよい。前記方法は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの前記内容を更新する更新要求を発送するステップを追加的に含んでもよい。前記更新要求を発送する前記ステップは、前記プライマリデータサーバから前記更新された内容をフェッチする更新要求を発送するステップを含んでもよい。前記方法は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記転送されたクエリに関する前記クエリ結果がブロックされていることを示すフィードバックを提供するステップを更に含んでもよい。
【００１４】
更に別の態様では、幾つかの実装は、クエリ処理のためのコンピュータシステムを提供してもよい。前記コンピュータシステムは、転送されたクエリを受信するステップであって、前記クエリはプライマリデータサーバにおけるデータにアクセスするためにユーザにより出されたものである、ステップと、前記転送されたクエリのコンポーネントに対する対応する回答セットがインメモリデータストアにおいて利用可能であるか否かを判定するステップと、前記対応する回答セットが利用可能であると判定したことに応えて、前記対応する回答セットが有効であるか否かを更に判定するステップと、前記対応する回答セットが利用可能であり有効であると判定したことに応えて、前記クエリのコンポーネントに対する前記対応する回答セットに基づいてクエリ結果を構築するステップと、前記ユーザにより出された前記クエリに応答するために前記クエリ結果を提供するステップと、を含む動作を実行するように構成された１つのプロセッサを含んでもよい。
【００１５】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。前記動作は、ユーザが出したクエリにより修正されるデータに関する無効通知を受信するステップであって、前記データは前記インメモリデータストレージ内で維持管理されている少なくとも１つの回答セットにより参照されている、ステップを更に含んでもよい。前記動作は、前記修正されるデータを参照する前記少なくとも１つの回答セットを無効と登録するステップを追加的に含んでもよい。前記動作はまた、前記少なくとも１つの回答セットを前記インメモリデータストアから削除するステップを含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新するステップを更に含んでもよい。
【００１６】
前記動作は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容が前記プライマリデータサーバにおける対応するデータに同期されるまで、前記クエリ結果を構築することを差し控えるステップを更に含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新する前記ステップを促進するステップを更に含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの前記内容を更新する更新要求を発送するステップを追加的に含んでもよい。前記更新要求を発送する前記ステップは、前記プライマリデータサーバから前記更新された内容をフェッチする更新要求を発送するステップを含んでもよい。前記動作は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記転送されたクエリに関する前記クエリ結果がブロックされていることを示すフィードバックを提供するステップを更に含んでもよい。
【００１７】
更に別の態様では、幾つかの実装は、ソフトウェア命令を含むコンピュータ可読媒体であって、前記ソフトウェア命令は、コンピュータプロセッサにより実行されると、前記コンピュータプロセッサに、転送されたクエリを受信するステップであって、前記クエリはプライマリデータサーバにおけるデータにアクセスするためにユーザにより出されたものである、ステップと、前記転送されたクエリのコンポーネントに対する対応する回答セットがインメモリデータストアにおいて利用可能であるか否かを判定するステップと、前記対応する回答セットが利用可能であると判定したことに応えて、前記対応する回答セットが有効であるか否かを更に判定するステップと、前記対応する回答セットが利用可能であり有効であると判定したことに応えて、前記クエリのコンポーネントに対する前記対応する回答セットに基づいてクエリ結果を構築するステップと、前記ユーザにより出された前記クエリに応答するために前記クエリ結果を提供するステップと、を含む動作を実行させることを特徴とするコンピュータ可読媒体を提供してもよい。
【００１８】
幾つかの実装は、以下の特徴のうちの１以上を含んでもよい。前記動作は、ユーザが出したクエリにより修正されるデータに関する無効通知を受信するステップであって、前記データは前記インメモリデータストレージ内で維持管理されている少なくとも１つの回答セットにより参照されている、ステップを更に含んでもよい。前記動作は、前記修正されるデータを参照する前記少なくとも１つの回答セットを無効と登録するステップを追加的に含んでもよい。前記動作はまた、前記少なくとも１つの回答セットを前記インメモリデータストアから削除するステップを含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新するステップを更に含んでもよい。
【００１９】
前記動作は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容が前記プライマリデータサーバにおける対応するデータに同期されるまで、前記クエリ結果を構築することを差し控えるステップを更に含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの内容を更新する前記ステップを促進するステップを更に含んでもよい。前記動作は、前記インメモリデータストレージに格納されている前記少なくとも１つの回答セットの前記内容を更新する更新要求を発送するステップを追加的に含んでもよい。前記更新要求を発送する前記ステップは、前記プライマリデータサーバから前記更新された内容をフェッチする更新要求を発送するステップを含んでもよい。前記動作は、前記対応する回答セットが利用可能だが少なくとも１つの回答セットが無効であると判定したことに応えて、前記転送されたクエリに関する前記クエリ結果がブロックされていることを示すフィードバックを提供するステップを更に含んでもよい。
【００２０】
上の技術の幾つかの実装は、方法、コンピュータプログラム製品、及びシステムを含む。コンピュータプログラム製品は、非一時的機械可読媒体に適切に収録され、１以上のプロセッサにより実行可能な命令を含む。命令は、前記１以上のプロセッサに上述の動作を実行させるように構成される。
【００２１】
システムは、１以上のプロセッサと、前記１以上のプロセッサにより実行可能な、非一時的機械可読媒体に組み込まれた命令と、を含む。命令は、実行されると、前記１以上のプロセッサに上述の動作を実行させるように構成される。デフォルトの姿勢は何らの外部データベースも使用しないことであるが、前記システムは、必要であれば、データベースチェックを実行するように構成されてもよい。
【００２２】
本明細書において説明される主題の１以上の態様の詳細は、添付の図面と以下の説明とにおいて説明される。主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００２３】
【図１】図１は、ユーザ生成質問に対する高速クエリ応答を提供する諸実装に係るシステムを示す図である。
【００２４】
【図２】図２は、諸実装に係るユーザ生成質問を処理するワークフロー例を示す。
【００２５】
【図３Ａ】図３Ａは、諸実装に係る、データセットに同期した回答セットに基づいてクエリ結果を生成するワークフロー例を示す。
【００２６】
【図３Ｂ】図３Ｂは、諸実装に係る、無効通知を処理するワークフロー例を示す。
【００２７】
【図４Ａ】図４Ａは、諸実装に係る、ユーザ生成質問を受信してクエリ結果を提供するためのユーザインタフェース例を示す。
【００２８】
【図４Ｂ】図４Ｂは、諸実装に係る、インメモリデータストア１０６において維持管理される回答セットのステータスを示すユーザインタフェース例を示す。
【００２９】
【図４Ｃ】図４Ｃは、諸実装に係る、システムアドミニストレータがバックエンドの高速クエリサービスエンジンを高速クエリラッパを実行中のフロントエンドアプリケーションに統合するためのユーザインタフェース例を示す。
【発明を実施するための形態】
【００３０】
この開示は、概して、ユーザ生成質問に対して高速クエリ結果を提供するシステム及び方法を説明する。クエリ結果は、リレーショナルデータベースによる直接処理よりも高速に生成可能である。リレーショナルデータベースは、プライマリデータサーバに結合され得る。ユーザ生成質問は、幾つかの論理セグメントを含み得る。幾つかの実装では、特定のユーザ生成質問の論理セグメントに対する回答セットが、キャッシングの形態で、高性能インメモリデータストレージにおいて維持管理され得る。クエリ結果は、インメモリデータストレージに「キャッシュ」された回答セットから構築され得る。この構築により、例えば伝統的なリレーショナルデータベースによるクエリ処理を通じてプライマリデータサーバから回答セットをフェッチする必要がある場合に比べて、高速にクエリ結果を提供することができる。回答セットの内容は、プライマリデータサーバ内の対応するデータと整合するように維持管理され得る。例えば、対応するデータが修正される場合、影響を受ける回答セットの内容が無効化されたり更新されたりし得る。更新は、インメモリデータストレージとプライマリデータサーバとの間の同期の形態を取り得る。
【００３１】
図１は、ユーザ生成質問に対する高速クエリ応答を提供する諸実装に係るシステムを示す図である。このシステムは、高速クエリラッパ１０２、高速クエリサービスエンジン１０４、及び無効通知ループを含み得る。高速クエリラッパ（ＦＱＷ）１０２は、フロントエンドエンジンとしての役割を果たすことができる。フロントエンドエンジンは、リード／クエリ要求及びライト／ノンクエリ要求を含むユーザ生成データアクセス要求１１０を受信することができる。ＦＱＷ１０２は、データアクセス要求１１０を出したユーザに対して、結果１１２を提供することができる。データアクセス要求１１０は、人間ユーザによって生成されたビジネスレベルの質問を含むことができる。データアクセス要求１１０は、機械を使用した自然言語処理（例えば、音声認識サブシステムによって駆動されるサーチエンジンサービス、同じユーザによって生成された以前の質問によって部分的に駆動されるサーチエンジンサービス、など）によってパース（構文解析）されたハイレベルの質問を含むこともできる。一般的に、フロントエンドエンジンは、ビジネスレベルにおけるユーザ生成質問に対するインタフェースを提供することができる。ユーザ生成質問は、特定のクエリ言語（例えば、ＳＱＬ(Structured Query Language)）で作成されるクエリに固有であったり限定されたりしなくてよい。実際、ユーザ生成質問は、特定のＳＱＬデータベースに対するインタフェース言語（例えば、ＰＨＰやＰｙｔｈｏｎ）による限定すらされなくてもよい。
【００３２】
高速クエリラッパ（ＦＱＷ）１０２は、ユーザ生成データアクセス要求１１０（例えば、クエリ）を、論理クエリセグメントに分解することができる。幾つかの実装では、ユーザ生成クエリは、集合代数演算(set algebra calculations)の性質を持つ演算によって論理クエリセグメントに分割されてもよい。集合の代数(algebra of set)は、一般的に、ジョイン演算(join operations)（例えば、ユニオン(union)）、ミート演算(meet operations)（例えば、インターセクション(intersection)）、補数演算(complement operations)（例えば、補数(complement)又は論理否定(negation)）、などを含んだブール代数演算を含む。幾つかの実装では、ユーザ生成クエリは、論理和(disjunctives)、論理積(conjunctives)、論理否定(negations)、又は、論理和(disjunctives)、論理積(conjunctives)、若しくは論理否定(negations)の組み合わせによって結合されるクエリセグメントへと分解され得る。例えば、論理否定(negation)は、所与のクエリエンティティに関する全てのユニーク識別子の全体集合Ｕを維持管理することにより、可能とされ得る。そして、クエリが制約条件〜Ａを伴って出された場合、クエリは、Ｕ−Ａを演算することにより、格納された結果Ａに基づいて処理され得る。アクセス要求を単純化してアクセス要求をより効率的に処理できるようにするために、他の集合代数演算を同様のやり方で実行することができる。分解又は最適化により、高速クエリラッパ（ＦＱＷ）１０２がユーザ生成データアクセス要求１１０（例えば、クエリ）を処理するためにプライマリデータサーバ１０８に関与（エンゲージ）する時間量を削減することができる。上述の通り、ユーザ生成クエリは、ハイレベルの又はビジネスレベルの質問を含むことができ、構造化クエリ（例えば、ＳＱＬで作成されたクエリ）に限定される訳ではない。ユーザによって出されたクエリに応えて、幾つかの実装は、高速クエリサービス（ＦＱＳ）エンジン１０４を通じて高速クエリサービスを提供することができる。
【００３３】
高速クエリサービス（ＦＱＳ）エンジン１０４は、バックエンドエンジンとしての役割を果たすことができ、他方、高速クエリラッパ（ＦＱＷ）１０２は、フロントエンドエンジンとして機能することができる。高速クエリサービス（ＦＱＳ）エンジン１０４は、インメモリデータストレージ１０６を含むことができる。インメモリデータストレージ１０６は、高速データアクセス時間のメモリデバイス（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、不揮発性メモリのランダムアクセスメモリ（ＮＶＲＡＭ）、など）を含むことができる。インメモリデータストレージ１０６は、機械的に回転するパーツ（例えば、ハードディスクドライブのスキャニングアーム、光学記録デバイスのスキャニングヘッド、などを含む）を持つ記録媒体を含まなくてもよい。そのような記録媒体は、機械的に回転するパーツを持たない記録媒体に比べて、データアクセスのレイテンシが長くなるという結果をもたらす可能性がある。様々なクエリ又はクエリセグメントに対する回答セットの内容は、インメモリデータストアの中に格納可能である。幾つかの実装では、高速クエリサービスエンジン１０４は、高速クエリラッパ（ＦＱＷ）１０２に対して回答セットの内容を提供することにより、高速クエリラッパ（ＦＱＷ）１０２が提供された回答セットからクエリ結果を構築できるようにすることができる。本明細書で論じるように、インメモリデータストアに関連するメモリアクセス時間は、プライマリデータサーバ１０８に関連するメモリアクセス時間よりも高速な傾向にある。それゆえ、インメモリデータストアに既に格納された回答セットの内容に基づいてクエリ結果を構築することにより、ユーザ生成クエリに対して高速な応答時間という結果をもたらすことができる。幾つかのシナリオでは、一部の回答セットがインメモリデータストア１０６から引き出される一方で、他の回答セットがプライマリデータサーバ１０８からフェッチされてもよい。回答セット全体がプライマリデータサーバ１０８から引き出され得るシナリオと比べて、クエリ結果を生成するに際して期待されるレイテンシは、依然として削減され得る。高速クエリサービスは、本明細書で論じるように、クエリ結果を提供するに際してレイテンシが削減されるという利点を含み得る。
【００３４】
同時に、高速クエリサービス（ＦＱＳ）エンジン１０４は、プライマリデータサーバ１０８と通信することができる。プライマリデータサーバ１０８は、例えば、リレーショナルデータベース管理システム（ＤＢＭＳ）をホストすることができる。ＤＢＭＳの例には、ＭｙＳＱＬデータベース、ＰｏｓｔｇｒｅＳＱＬデータベース、Ｏｒａｃｌｅデータベース、などが含まれ得る。インメモリデータストレージ１０６とは対照的に、プライマリデータサーバ１０８は、回転する機械的パーツを持つ記録デバイス（例えば、ハードディスクドライブ、磁気テープ、光学ディスクストレージ（例えば、コンパクトディスク、デジタルビデオディスク、ブルーレイ、など））を含んでもよい。プライマリデータサーバ１０８における記録媒体は、記録単位あたりの価格が安いかもしれない。プライマリデータサーバ１０８は、ＦＱＳ１０４におけるインメモリデータストレージよりも大きな記録容量を持っていてもよい。しかしながら、プライマリデータサーバ１０８は、インメモリデータストア１０６に比べてメモリアクセス時間が遅いかもしれない。上述の通り、幾つかの実装は、インメモリデータストア１０６に既に格納された回答セットに基づいてクエリ結果を構築することにより、ユーザ生成データアクセス要求１１０に対してより高速な応答時間を提供することができる。加えて、本明細書において論じるように、インメモリデータストア１０６において維持管理される回答セットの内容は、プライマリデータサーバ１０８における対応するデータとの整合が維持され得る。それゆえ、幾つかの実装は、整合性について妥協することなく、結果（例えば、高速クエリ結果）を提供することができる。
【００３５】
具体的には、無効ループは、インメモリデータストア１０６に格納された回答セットの内容とプライマリデータサーバ１０８に格納された回答セットの内容との間の整合性を実現することができる。図１に示すように、ユーザ生成データアクセス要求１１０を受信すると、高速クエリラッパ１０２は、プライマリデータサーバ１０８に対してアクセス要求を出すことができる。時々、アクセス要求は、ライト操作（１１６）の性質を持つ操作を含んでいることがある。時々、アクセス要求は、リード操作（１１８）の性質を持つ操作を含んでいることがある。出された要求がライト操作の性質を持つ操作を含んでいる場合、プライマリデータサーバ１０８における対応するデータが修正され得る。そのような要求は、データエントリを修正／更新する要求、データエントリを生成する要求、などを含み得る。他方、要求がリード操作の性質を持つものである場合、プライマリデータサーバ１０８における要求されたデータ自体は変更されないであろう。しかしながら、関連データ（例えば、要求されたデータがアクセスされた回数を示すカウンタなど）は、依然として更新される可能性がある。修正状態が、無効通知１１４を高速クエリサービス（ＦＱＳ）エンジン１０４へ送信するようにプライマリデータサーバ１０８をトリガすることができる。無効通知１１４は、プライマリデータサーバ１０８において修正された又は修正されようとしている特定のデータ部分を参照することができる。無効通知１１４は、高速クエリサービスエンジン１０４によって受信され得る。無効通知１１４を受信したことに応えて、高速クエリサービス（ＦＱＳ）エンジン１０４は、インメモリデータストア１０６において格納されている回答セットの内容とプライマリデータサーバ１０８における対応するデータとの間の整合性を維持するための行動を取ることができる。一構成では、ＦＱＳエンジン１０４は、無効通知によって参照される修正データを参照する回答セットの状態（ステータス）を無効と記録するようにコンテンツレジストリテーブルをマークしてもよい。別の構成では、ＦＱＳエンジン１０４は、修正データを参照する回答セットをインメモリデータストア１０６から消去してもよい。更に別の構成では、ＦＱＳエンジン１０４は、修正データを参照する回答セットを置換するために、更新された回答セットをプライマリデータサーバ１０８から率先してフェッチしてもよい。ＦＱＳエンジン１０４がインメモリデータストア１０６に格納された回答セットの内容とプライマリデータサーバ１０８に格納された対応するデータとの間のデータ整合性を維持する行動を取っている間、ＦＱＳエンジン１０４は、高速クエリラッパ（ＦＱＷ）１０２から転送された、無効通知１１４によって影響される回答セットにアクセスするアクセス要求をブロックしてもよい。例えば、無効通知１１４によって影響される回答セットにアクセスしようとするユーザ生成クエリは、サービスが「一時的に利用不可能である」というブロックメッセージを受信してもよい。ブロックが効果を持ち得るのは、ＦＱＳエンジン１０４が影響を受ける回答セットを無効とマークしている間、回答セットを削除している間、又は回答セットを更新している間である。ＦＱＳエンジン１０４がマーキング、削除、又は更新を完了すると、ＦＱＳエンジン１０４は、それに従い、転送されたアクセス要求に対して応答してもよい。例えば、ＦＱＳエンジン１０４は、ＦＱＷ１０２に対して、影響を受ける回答セットが無効であること、又は影響を受ける回答セットの内容が利用不可能になったことを警告してもよい。影響を受ける回答セットの内容が更新された場合、ＦＱＳエンジン１０４は、ＦＱＷ１０２に対して、プライマリデータサーバ１０８において修正され格納された対応するデータと整合する更新された回答セットを提供してもよい。
【００３６】
まとめると、無効通知１１４を使用することで、データ整合性を実現しつつ、プライマリデータサーバ１０８及びインメモリデータストア１０６に亘る分散トランザクションを実施することができる。幾つかの実装では、バックエンドＦＱＳエンジン１０４は、プライマリデータサーバ１０８（例えば、ＭｙＳＱＬ又はＯｒａｃｌｅ  ＤＢＭＳを実行するコアデータサーバ）と一緒に構成されてもよい。フロントエンド高速クエリラッパ（ＦＱＳ）は、オンラインで又はモバイルアプリケーションからデータアクセス要求１１０を出すユーザとやり取りするアプリケーションに組み込まれたシンクライアントレイヤとして実装されてもよい。
【００３７】
図２は、諸実装に係るユーザ生成アクセス要求を処理するワークフロー例を示す。幾つかの実装では、図２は、フロントエンド高速クエリラッパ（ＦＱＷ）１０２にマッピングされ得る。最初に、ユーザ生成アクセス要求１１０が受信され得る（２０２）。ユーザ生成アクセス要求は、モバイルコンピューティングデバイス（例えば、スマートフォン、タブレット、ラップトップなどを含む）においてユーザにより出され得る。ユーザは、アップストアからダウンロードされたモバイルアプリを使用してアクセス要求を出すことができる。上述の通り、ユーザ生成アクセス要求は、ユーザによって出されたハイレベルの質問を含んでもよい。ユーザ生成アクセス要求は、必ずしも特定の言語（例えば、ＳＱＬ）により作成された訳ではないクエリを含んでいてもよい。
【００３８】
ユーザ生成アクセス要求は、ウェブサーバ（例えば、Ａｐａｃｈｅウェブサーバ）によって提供されるウェブポータルを通じて、ユーザによって出されてもよい。ウェブポータルは、例えばＰＨＰやＰｙｔｈｏｎなどのスクリプト言語で記述されたサーバサイドアプリケーションプログラムを含んでもよい。サーバサイドアプリケーションプログラムは、フロントエンド高速クエリラッパ（ＦＱＷ）１０２を実装することができる。上述の通り、フロントエンドＦＱＷ１０２は、（バックエンドとしての）高速クエリサービスエンジン１０４及び（コアデータサーバとしての）プライマリデータサーバ１０８とやり取りするためのクライアントラッパとして機能することができる。幾つかの実装では、フロントエンド高速クエリラッパ（ＦＱＷ）１０２は、クライアント／サーバアーキテクチャに従って、バックエンド高速クエリエンジン（ＦＱＳ）１０４とやり取りすることができる。一構成では、ＦＱＷ１０２及びＦＱＳエンジン１０４は、分散クライアント／サーバパラダイムに従ってもよい。ＦＱＷ１０２及びＦＱＳエンジン１０４は、同じ物理機械上に一緒にされていなくてもよい。ＦＱＷ１０２及びＦＱＳエンジン１０４は、改善された応答レイテンシと実現されたデータ整合性とを伴ってクエリ結果に対するシームレスなアクセスをユーザに提供するような、クラウドコンピューティング環境に含まれていてもよい。
【００３９】
ユーザ生成アクセス要求がクエリを含む場合、ＦＱＷ１０２は、ユーザ生成データアクセス要求がリード／クエリ要求であるかライト／ノンクエリ要求であるかを判定する（２０４）。データアクセス要求がリード／クエリの性質を持つ場合、要求は高速クエリサービスによって処理可能である。本明細書において論じたように、高速クエリサービスは、データ整合性を維持しつつ、削減されたレイテンシでクエリ結果をもたらすことができる。高速クエリ処理に適するようにするために、ユーザ生成クエリは、論理セグメントに分解されてもよく、幾つかの論理セグメントに対する回答セットは、インメモリデータストアに格納されていてもよい。幾つかの実装では、ＦＱＷは、特定の論理セグメントがインメモリデータストア１０６に事前格納された回答セットを持つか否かを示すステータスマップを保持してもよい。一構成では、ステータスマップは、例えば別の専用のサービススレッドに帰属して(be populated)もよい。この別のスレッドは、インメモリデータストレージを調べて(traverse)、既に「キャッシュされた」利用可能な回答セットを識別してもよい。一構成では、この別のスレッドは、ＦＱＷ１０２及びＦＱＳエンジン１０４の負荷が比較的低い時に起動されてもよい。また、このスレッドは、利用可能な回答セットを求めてインメモリデータストア１０６をインクリメンタルベースでスキャンしてもよい（即ち、最後のスキャン以降に変更された部分だけをスキャンしてもよい）。一構成では、このスレッドは、インメモリデータストレージ１０６の回答セットが更新された時に、それに反応して起動されてもよい。
【００４０】
ユーザ生成クエリがリード／クエリ要求であるとＦＱＷ１０２が判断すると、ＦＱＷ１０２は、ユーザ生成クエリを高速クエリサービス（ＦＱＳ）１０４へリダイレクトすることができる（２０６）。一構成では、リダイレクトされるクエリは、分解された論理セグメント（特に、インメモリデータストア１０６に既に格納されている回答セットを伴う論理セグメント）の形態でＦＱＳエンジン１０４へ送信されてもよい。別の構成では、リダイレクトされるクエリは、ＦＱＳエンジン１０４が論理セグメントへと分解するように、ＦＱＳエンジン１０４へ送信されてもよい。
【００４１】
リダイレクトされたクエリに応えて、ＦＱＷ１０２は、ＦＱＳエンジン１０４からクエリ結果を受信し得る（２０８）。幾つかのシナリオでは、受信されるクエリ結果は、インメモリデータストア１０６に既に格納されている回答セットに基づいてＦＱＳエンジン１０４により構築されてもよい。上述の通り、インメモリデータストア１０６において維持管理される回答セットは、プライマリデータサーバ１０８における対応するデータとの整合性が維持され得る。他のシナリオでは、クエリ結果を構築することは、少なくとも部分的には、ＦＱＷ１０２によって実行されてもよい。そのようなシナリオでは、ユーザ生成クエリの幾つかの論理セグメントに対する回答セットは、インメモリデータストレージ１０６において利用不可能であってもよい。回答セットは、様々な理由により、インメモリデータストア１０６において利用不可能であってもよい。例えば、上述の通り、回答セットがプライマリデータサーバ１０８からまだフェッチされていない可能性もあるし、無効通知１１４に応えて回答セットがインメモリデータストア１０６から消去される可能性もあるし、無効通知１１４に応えて回答セットが無効化される可能性もある。そのようなシナリオでは、インメモリデータストレージ１０６において利用不可能な回答セットは、プライマリデータサーバ１０８から取得される必要があり得る。利用不可能な回答セットに対応するデータがプライマリデータサーバ１０８から返されると、クエリ結果は、それに従って構築され得る。幾つかの実装では、ＦＱＷ１０２は、利用不可能な回答セットをプライマリデータサーバ１０８から取得されるように構成され得る。しかしながら、他の実装では、ＦＱＳエンジン１０４が、利用不可能な回答セットをプライマリデータサーバ１０８から取得することで、高速応答のために回答セットの「キャッシュされた」コピーを必要とする以降のユーザ生成クエリのためにそのような回答セットの内容が利用可能になり得るように構成されてもよい。インメモリデータストレージ１０６に既に格納されている回答セットとプライマリデータサーバ１０８から新たに取得された回答セットとに基づいてクエリ結果を構築することは、ＦＱＳエンジン１０４又はＦＱＷ１０２により実行され得る。
【００４２】
しかしながら、ユーザ生成アクセス要求がライト／ノンクエリ要求の性質を持つとＦＱＷ１０２が判断した場合、ＦＱＷ１０２は、プライマリデータサーバ１０８におけるデータがユーザ生成アクセス要求によって修正されるであろうか否かを判定するように処理を進めることができる（２１０）。
【００４３】
プライマリデータサーバ１０８におけるデータがユーザ生成アクセス要求によって修正されるであろう場合（２１０）、無効通知１１４が生成され、高速クエリサービス（ＦＱＳ）エンジン１０４に対して通知するために送信され得る（２１２）。本明細書において論じたように、また、分散トランザクションの実装に応じて、無効通知１１４は、修正されるデータを参照する回答セットを無効とマークしたり、そのような回答セットをインメモリデータストアから消去したり、更新された回答セットを取得したりするように、ＦＱＳエンジン１０４をトリガすることができる。その後、要求は、プライマリデータサーバ１０８へ送信され得る（２１４）。
【００４４】
プライマリデータサーバ１０８におけるデータがユーザ生成アクセス要求によって修正されないであろう場合（２１０）、処理は、要求をプライマリデータサーバ１０８へ送信するように進み得る（２１４）。
【００４５】
プライマリデータサーバ１０８から結果が受信されると（２１６）、ＦＱＷ１０２は、追加のユーザ生成アクセス要求を受信するように処理を進め得る（２０２）。換言すると、ユーザ生成アクセス要求に対してサービス提供するに際して、ＦＱＷ１０２は、インメモリデータストア１０６において維持管理されているデータとプライマリデータサーバ１０８に格納されているデータとの整合性を確保するために、ブロッキングアプローチ（同期アプローチとして知られている場合もある）を採用することができる。ブロッキングアプローチは、本明細書において論じるように、分散トランザクション特徴の一部を実装することができる。
【００４６】
幾つかのシナリオでは、アクセス要求の特定の論理セグメントに対する回答セットは、インメモリデータストアに「キャッシュ」されていない可能性がある（例えば、特定の論理セグメントに対する回答セットが利用不可能になったり、無効化されたり、インメモリデータストア１０６から消去されたりした場合）。そのようなシナリオでは、対応する回答セットの内容が、プライマリデータサーバ１０８から取得されてもよい。この目的のために、特定の論理セグメントがプライマリデータサーバ１０８へとルート変更されてもよい。幾つかの実装では、ルート変更される論理セグメントは、プライマリデータサーバ１０８におけるクエリ処理を促進するために、例えばＳＱＬ(structured query language)で再作成されてもよい。ルート変更された論理セグメントに応えて、対応する回答セットが受信され得る。（インメモリデータストア１０６及びプライマリデータサーバ１０８から）受信された回答セットに基づき、本明細書における説明に従ってクエリ結果が構築され得る。構築されたクエリ結果は、ユーザ生成クエリを出したユーザへとリレーされ得る。
【００４７】
図３Ａは、諸実装に係る、データセットに同期した応答セットに基づいてクエリ結果を生成するワークフロー例を示す。幾つかの実装では、図３Ａは、バックエンド高速クエリサービス（ＦＱＳ）エンジン１０４へとマッピングされ得る。最初に、転送されるクエリがＦＱＷ１０２から受信され得る。本明細書において論じたように、転送されるクエリは、分解された論理セグメントの形態であってもよい。転送されたクエリが分解された論理セグメントの形態でない場合、ＦＱＳエンジン１０４は、受信したクエリを論理セグメントに分解してもよい。
【００４８】
ＦＱＳエンジン１０４は、論理セグメントに対する回答セットがインメモリデータストア１０６において利用可能であるか否かを判定することができる（３０４）。回答セットがインメモリデータストア１０６に「キャッシュ」されていない場合、ＦＱＳエンジン１０４は、プライマリデータサーバ１０８に問い合わせてそのような利用不可能な回答セットをフェッチすることができる。そのような回答セットがプライマリデータサーバ１０８から取得されている間、例えば回答セットに関するステータス情報を示すためにフィードバック情報がＦＱＷ１０２へ提供されてもよい（３１６）。
【００４９】
全ての回答セットがインメモリデータストア１０６において「キャッシュ」されている場合、ＦＱＳエンジン１０４は、回答セットの内容が有効であるか否かを判定することができる。本明細書において論じたように、回答セットの内容は、例えばプライマリデータサーバ１０８における対応するデータが修正されたという理由により、無効化され得る。幾つかの実装では、ＦＱＳエンジン１０４は、プライマリデータサーバ１０８の対応するデータの有効性ステータスを追跡するコンテンツレジストリを含んでもよい。例えば、特定の回答セットの有効性ステータスが、コンテンツレジストリの中で調査され得る。本明細書において論じたように、コンテンツレジストリは、各無効通知１１４により最新の状態に維持され得る。
【００５０】
例えばプライマリデータサーバ１０８の対応するデータが修正されてインメモリデータストアで「キャッシュ」されたコピーが古くなったという理由により特定の回答セットの内容が無効化されたとＦＱＳエンジン１０４が判断した場合、ＦＱＳエンジン１０４は、プライマリデータサーバ１０８のデータのコピーとインメモリデータストア１０６とを同期させることにより、影響を受ける回答セットの内容を更新することができる（３１４）。幾つかの実装では、ＦＱＳエンジン１０４は、プライマリデータサーバ１０８から更新されたデータを取得する更新サービススレッドを起動するように構成された更新スケジューラを含んでもよい。一構成では、更新スケジューラは、ＦＱＳエンジン１０４の負荷が比較的低い（例えば、８０％未満）時に、更新サービススレッドを起動するように構成されてもよい。幾つかの構成では、更新スケジューラは、例えば予測的なフェッチにより、率先して更新サービススレッドを起動するように構成されてもよい。例えば、更新サービススレッドは、以前のユーザ生成クエリによって示されるデータアクセスパターンに従い、以降のユーザ生成クエリによって必要とされるかもしれないデータセグメントを「投機的に」予測するように構成されてもよい。予測は、例えば、アクセスされるデータの論理アドレスに基づく線形外挿アルゴリズムに従ってもよい。影響を受けるデータセットの内容が更新されている間、更新状態を示すためにフィードバック情報がＦＱＷ１０２に提供されてもよい（３１６）。同期後、ＦＱＳエンジン１０４のコンテンツレジストリは、更新された回答セットの有効性ステータスを反映するように更新され得る。
【００５１】
幾つかの実装では、ＦＱＳエンジン１０４は、回答セットに基づいてクエリ結果を構築することができる（３０８）。その後、構築されたクエリ結果は、ＦＱＷ１０２を通じてユーザに提供され得る。それゆえ、回答セットを「キャッシュ」するインメモリデータストア１０６に結合された分割統治戦略(divide-and-conquer strategy)が、プライマリデータサーバ１０８と整合するデータに基づいて高速クエリ結果をもたらすことができる。
【００５２】
図３Ｂは、諸実装に係る、無効通知を処理するワークフロー例を示す。無効通知１１４は、ＦＱＳエンジン１０４において受信され得る（３２０）。これに応えて、ＦＱＳエンジン１０４は、修正されたデータが、インメモリデータストア１０６において維持管理されているコピーを持つか否かを判定し得る（３２２）。修正されたデータがまだインメモリデータストア１０６において維持管理されていない場合、ＦＱＳエンジン１０４は、無効通知を無視することを選択し得る（３２４）。
【００５３】
しかしながら、修正されたデータがインメモリデータストア１０６において維持管理されている場合、ＦＱＳエンジン１０４は、修正されたデータを参照する回答セットを無効と登録することを選択し得るし（３２６）、影響を受ける回答セットの内容をインメモリデータストア１０６から削除することを選択し得るし（３２８）、或いは、インメモリデータストア１０６に格納されている影響を受ける回答セットの内容を更新することを選択し得る（３３０）。
【００５４】
幾つかの実装では、ＦＱＳエンジン１０４は、インメモリデータストア１０６に格納されている回答セットの有効性ステータスをプライマリデータサーバ１０８の対応するデータに基づいて追跡するように構成されたコンテンツレジストリを含み得る。修正されたデータを参照する回答セットを無効化する無効通知に応えて、コンテンツレジストリは、影響を受ける回答セットを無効とマークするように更新され得る。
【００５５】
他の実装では、ＦＱＳエンジン１０４は、インメモリデータストア１０６に格納されている回答セットを維持管理するように構成されたメモリマネージャを含んでもよい。修正されたデータを参照する回答セットを無効化する無効通知に応えて、メモリマネージャは、影響を受ける回答セットの内容をインメモリデータストア１０６から削除するようにしてもよい。
【００５６】
更に他の実装では、ＦＱＳエンジン１０４は、無効化されたデータをより念入りに処理するように構成されてもよい。例えば、修正されたデータに基づいてプライマリデータサーバ１０８から更新された回答セットを取得するために、更新スケジューラが起動されてもよい。
【００５７】
文脈として、クラウドコンピューティング及びビッグデータが電子的な形態でヘルスケアデータを生み出しており、より大きく、より普遍的に成長している。ある程度は、データサイズの増大及びデータアクセスの改善は、マスストレージデバイスのスピード及び容量に関するハードウェア的改善により、また、プロセッサ及びネットワークスピードに関する同様の進化により、促進され得る。ヘルスケアデータベースは、ダイバースストレージテクノロジー(diverse storage technologies)による別々のデータサーバのクラスタに亘って大きなテーブルの中に分配され得るものである。例えば、高速なローカルエリアネットワークに結合されたネットワークアタッチトストレージ（ＮＡＳ）及びストレージエリアネットワーク（ＳＡＮ）とファイバーチャネル技術とは、更に大きく、よりルーズに結合された、データベース及び分散コンピューティング能力の構成を可能とする。分散データベースストレージの実装例には、Ｘ／Ｏｐｅｎ  ＸＡ標準及びＯｒａｃｌｅ  ＲＡＣｒｅｌｉｅｓが含まれ、これらはいずれも、データストレージサーバ間に高速ネットワーク接続を採用している。データストレージ技術を説明する文脈において、サーバ、システム、及びデバイスは、入れ替えて使用することができる。
【００５８】
クラウドコンピューティングの時代におけるヘルスケアデータについて、ヘルスケアは、異なる又は異質のデータベース管理システムのホストによって管理される可能性が高いかもしれない。これらのデータベース管理システムは、広域に亘るサーバ上でホストされ得る。それゆえ、「キャッシュ」されたデータを後続のクエリに提供する従来のデータベース管理システムに依拠したモノリシックソリューション(monolithic solution)は、現実的ではないかもしれない。更に、特定のアプリケーションの文脈についてはモノリシックソリューションが実装可能であったとしても、このソリューションは、ユーザにおいて特定のデータベースエンジンへのロックを提供することができず、ソリューションのポータビリティを妨げる可能性がある。対照的に、モジュール化ソリューションは、モノリシックソリューションのポータビリティに関する支出及び損失を生じさせることなしに、前述の性能改善を提供することができる。それにもかかわらず、本明細書に開示されるレイヤ化又はモジュール化ソリューションの顕著な特徴は、明白というところからは遠い。実際、モジュール化システムを伴う分散トランザクションを実装することの厳しい複雑さは、誰もそのような実装に取り組まなかったほど、気力をくじくものである。
【００５９】
図４Ａは、諸実装に係る、ユーザ生成質問を受信してクエリ結果を提供するためのユーザインタフェース例を示す。図示されているように、３つの分解可能なクエリコンポーネント（又は論理セグメント）、即ち、コンタクト州(contact state)、ターゲットのＥメール(email being targeted)、及び有効なコンタクトＥメール(contact email being valid)が、暗黙の論理積(conjunctive)の文を形成する。３つの論理セグメントは、結合して検索のための基準を形成する。３つの論理セグメントのうちの１つ、即ち、有効なターゲットＥメールに関する論理セグメントは、除外基準(exclusion criterion)を含み得る。除外基準(exclusion criterion)は、否定基準(negated criterion)（即ち、〜Ａ）の代わりに、含まれる基準を全体集合から直接引く（即ち、Ｕ−Ａ）という解釈に服し得る。幾つかの実装では、ユーザ生成クエリは、論理和(disjunctives)により結合可能な論理セグメントへと分解され得る。
【００６０】
図４Ｂは、諸実装に係る、インメモリデータストア１０６において維持管理される回答セットのステータスを示すユーザインタフェース例を示す。高速クエリサービス（ＦＱＳ）エンジン１０４において、システムアドミニストレータは、ステータスビューを利用可能である。本明細書において論じるように、ＦＱＳエンジン１０４は、高速クエリサービスのバックエンドを形成することができ、インメモリデータストア１０６を含むことができる。図４Ｂに示すように、データストア１０６において維持管理される利用可能な回答セットを参照するキー値の各々について、テーブルは、カウント回数（キーエントリがアクセスされた回数を示す）と、キーエントリが利用可能であるか否かと、キーエントリがプライマリデータサーバ１０８の対応するデータと整合しているか否かと、キーエントリがゲット操作において最後に読み出された時のタイムスタンプと、キーエントリがセット操作において最後に修正された時のタイムスタンプと、キーエントリが最後に無効化された時のタイムスタンプと、更新ポリシーと、特定のキーエントリに関してシステムアドミニストレータが利用可能なアクションと、を示す。更新ポリシーは、怠惰(lazy)（例えば、内容を無効とマークするだけ）、中間(neutral)（例えば、インメモリデータストアからコンテンツを削除する）、又は勤勉(diligent)（例えば、無効化された回答セットの内容を率先してリフレッシュする）を含み得る。図示されているように、システムアドミニストレータが利用可能なアクションは、キーエントリの内容を見ること、キーエントリの内容を無効とマークすること、及び、キーエントリの内容をインメモリデータベースから削除することを含み得る。
【００６１】
図４Ｃは、諸実装に係る、システムアドミニストレータがバックエンドの高速クエリサービスエンジンを高速クエリラッパを実行中のフロントエンドアプリケーションに統合するためのユーザインタフェース例を示す。図示されているように、ユーザインタフェースにより、マシングループが、特定のインターネットプロトコル（ＩＰ）アドレスから高速クエリサービス要求を受け付けることが可能である。高速クエリサービスは、リードアクセス及びライトアクセスの両方を含み得る。また、高速クエリラッパは、アプリケーションのシンレイヤとして、高速検索サーバ(fast find server)としての高速クエリサービスに関わるクライアントとして機能することができる。
【００６２】
本明細書で説明される主題及び機能的動作の実装は、デジタル電子回路、有形に実装されたコンピュータソフトウェア若しくはファームウェア、コンピュータハードウェア（本明細書において開示される構造、及びその構造的均等物を含む）、又はこれらのうちの１以上の組み合わせにおいて実装可能である。本明細書で説明される主題の実装は、１以上のコンピュータプログラム（即ち、データ処理装置による実行のための、又はデータ処理装置の動作を制御するための、有形非一時的プログラムキャリアにエンコードされたコンピュータプログラム命令の１以上のモジュール）として実装可能である。コンピュータ記録媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダムアクセス又はシリアルアクセスのメモリデバイス、又はこれらのうちの１以上の組み合わせであってもよい。
【００６３】
「データ処理装置」という用語は、データ処理ハードウェアを示し、あらゆる種類の装置、デバイス、データを処理するための機械（例として、プログラム可能プロセッサ、コンピュータ、又は複数のプロセッサ若しくはコンピュータを含む）を包含する。装置はまた、専用論理回路(special purpose logic circuitry)（例えば、中央処理ユニット（ＣＰＵ）、ＦＰＧＡ(field programmable gate array)、又はＡＳＩＣ(application specific integrated circuit)）であってもよいし、これを更に含んでもよい。幾つかの実装では、データ処理装置及び／又は専用論理回路は、ハードウェアベース及び／又はソフトウェアベースであってもよい。装置は、オプションとして、コンピュータプログラムの実行環境を作成するコード（例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はこれらのうちの１以上の組み合わせを構成するコード）を含むことができる。本開示は、従来のオペレーティングシステム（例えば、Ｌｉｎｕｘ（登録商標）、Ｕｎｉｘ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ、Ａｎｄｒｏｉｄ、ｉＯＳ、又は他のあらゆる適切な従来のオペレーティングシステム）を伴う又は伴わないデータ処理装置の使用を考慮している。
【００６４】
コンピュータプログラムは、本明細書においてはプログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、又はコードとも呼ばれたり記載されたりする場合もあるが、これは任意の形式のプログラミング言語（コンパイル又は解釈される言語、若しくは、宣言型又は手続型の言語を含む）で記述可能であり、これは任意の形式（スタンドアロンプログラムとして、又は、モジュール、コンポーネント、サブルーチン、若しくはコンピューティング環境での使用に適した他のユニットを含む）で配置可能である。コンピュータプログラムは、ファイルシステム中のファイルに対応するが、対応する必要があるという訳ではない。プログラムは、他のプログラム又はデータ（例えば、マークアップ言語文書に格納された１以上のスクリプト）を保持するファイルの一部に格納されてもよいし、そのプログラム専用の単一のファイル中に格納されてもよいし、複数のコーディネートされたファイル（例えば、１以上のモジュール、サブプログラム、又はコード部分を格納するファイル）の中に格納されてもよい。コンピュータプログラムは、１つのコンピュータ上で、又は複数のコンピュータ上で実行されるように配置可能であり、複数のコンピュータは、１箇所に配置されてもよいし、複数の場所に跨って分散され通信ネットワークにより相互接続されてもよい。様々な図に示したプログラム部分は、様々なオブジェクト、方法、又は他のプロセスを通じて様々な特徴及び機能を実装する個々のモジュールとして示されているが、プログラムは代わりに、多数のサブモジュール、サードパーティーサービス、コンポーネント、ライブラリ、などを必要に応じて含んでもよい。反対に、様々なコンポーネントの特徴及び機能は、必要に応じて単一のコンポーネントに組み合わされてもよい。
【００６５】
本明細書に記載された処理及び論理フローは、入力データに作用して出力を生成することによって機能を実行するための１以上のコンピュータプログラムを１以上のプログラマブルコンピュータが実行することによって実行可能である。処理及び論理フローはまた、例えば中央処理ユニット（ＣＰＵ）、ＦＰＧＡ(field programmable gate array)、又はＡＳＩＣ(application specific integrated circuit)のような専用論理回路(special purpose logic circuitry)によって実行されてもよいし、装置もまた、このような専用論理回路(special purpose logic circuitry)として実装されてもよい。
【００６６】
コンピュータプログラムの実行に適したコンピュータは、例として、汎用マイクロプロセッサ若しくは専用マイクロプロセッサ若しくはこの両方、又は他の任意の種類の中央処理ユニットを含む。一般に、中央処理ユニットは、リードオンリメモリ若しくはランダムアクセスメモリ又はこの両方から命令及びデータを受信する。コンピュータに必須の要素は、命令を実行するための中央処理ユニットと、命令及びデータを記憶するための１以上のメモリデバイスである。一般に、コンピュータはまた、データを記憶するための１以上のマスストレージデバイス（例えば、磁気ディスク、光磁気ディスク、又は光ディスク）を含むか、マスストレージデバイスからデータを受信し若しくはこれへデータを送信し又はこの両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを持つ必要はない。更に、コンピュータは、別のデバイス（例えば、モバイル電話、携帯情報端末（ＰＤＡ）、モバイルオーディオ／ビデオプレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）受信機、又はポータブルストレージデバイス（例えば、少しだけ名前を挙げると、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ））に組み込まれうる。
【００６７】
コンピュータプログラム命令及びデータを記憶するのに適した（必要に応じて一時的な又は非一時的な）コンピュータ可読媒体は、全ての形式の不揮発性メモリ、媒体デバイス、及びメモリデバイス（例として、半導体メモリデバイス（例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイス）、磁気ディスク（例えば、内蔵ハードディスク又は取り外し可能ディスク）、光磁気ディスク、並びに、ＣＤ−ＲＯＭディスク及びＤＶＤ−ＲＯＭディスクを含む）を含む。メモリは、様々なオブジェクト又はデータ（キャッシュ、クラス、フレームワーク、アプリケーション、バックアップデータ、ジョブ、ウェブページ、ウェブページテンプレート、データベーステーブル、ビジネス及び／又は動的情報を記憶するレポジトリ、及び他の任意の適切な情報（任意のパラメータ、変数、アルゴリズム、命令、規則、制約、又はこれらへの参照を含む）を含む）を記憶してもよい。更に、メモリは、例えばログ、ポリシー、セキュリティ又はアクセスデータ、報告ファイルだけでなく他のもののような、他の任意の適切なデータを含んでもよい。プロセッサ及びメモリは、特定用途論理回路によって補完されてもよいし、これに組み込まれてもよい。
【００６８】
ユーザとのやり取りを提供するために、本明細書に記載される主題の実装は、ユーザに向けて情報を表示するための表示デバイス（例えば、ＣＲＴ（ブラウン管）、ＬＣＤ（液晶ディスプレイ）、又はプラズマモニタ）と、ユーザがコンピュータへ入力を与えるためのキーボード及びポインティングデバイス（例えば、マウス又はトラックボール）と、を有するコンピュータに実装可能である。ユーザとのやり取りを与えるために他の種類のデバイスが用いられ得る。例えば、ユーザへ与えられるフィードバックは、任意の形式の知覚フィードバック（例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバック）であってもよく、ユーザからの入力は、任意の形式（音響、音声、又は触覚入力を含む）で受信されてもよい。加えて、コンピュータは、ユーザによって使用されるデバイスへ文書を送信し、このデバイスから文書を受信することによって（例えば、ユーザのクライアントデバイスのウェブブラウザから受信した要求に応答してウェブブラウザへウェブページを送信することによって）、ユーザとやり取りできる。
【００６９】
「グラフィカルユーザインタフェース」（ＧＵＩ）という用語は、１以上のグラフィカルユーザインタフェースと、特定のグラフィカルユーザインタフェースの表示のそれぞれとを記載するために単数形又は複数形で用いられ得る。従って、ＧＵＩは、任意のグラフィカルユーザインタフェース（ウェブブラウザ、タッチスクリーン、又は、情報を処理して情報結果をユーザに効率的に提示するコマンドラインインタフェース（ＣＬＩ）を含むが、これらに限定されない）を表し得る。一般に、ＧＵＩは、一部又は全部がウェブブラウザに関連する複数のユーザインタフェース（ＵＩ）要素（例えば、ビジネススイートユーザによって操作可能な、インタラクティブフィールド、プルダウンリスト、及びボタンなど）を含んでもよい。これらの及びその他のＵＩ要素は、ウェブブラウザの機能に関連してもよく、この機能を表してもよい。
【００７０】
本明細書に記載される主題の実装は、例えばデータサーバとしてバックエンドコンポーネントを含むコンピューティングシステムで実装されてもよいし、例えばアプリケーションサーバとしてミドルウェアコンポーネントを含むコンピューティングシステムで実装されてもよいし、フロントエンドコンポーネント（例えば、ユーザが本明細書に記載された主題の実装とやり取りできるグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ）を含むコンピューティングシステムで実装されてもよいし、このようなバックエンドコンポーネント、ミドルウェアコンポーネント、又はフロントエンドコンポーネントの１以上の任意の組合せで実装されてもよい。システムのコンポーネントは、デジタルデータ通信の任意の形式又は媒体（例えば、通信ネットワーク）によって相互接続可能である。通信ネットワークの例は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）（例えばインターネット）、及び無線ローカルエリアネットワーク（ＷＬＡＮ）を含む。
【００７１】
コンピューティングシステムは、クライアント及びサーバを含み得る。クライアント及びサーバは一般に、互いに離れており、典型的には、通信ネットワークを通じてやり取りする。クライアントとサーバとの関係は、個々のコンピュータで動作し、互いにクライアント・サーバ関係を有するコンピュータプログラムのおかげで生じる。
【００７２】
本明細書は多くの特定の実装の詳細を含むが、これらはいかなる発明の範囲又は特許請求の範囲に係る発明の範囲の限定として解釈されるべきではなく、特定の発明の特定の実装に固有であり得る特徴の説明として解釈されるべきである。個別の実装の文脈で本明細書に記載された所定の特徴はまた、単一の実施形態において組み合わせて実装され得る。反対に、単一の実装の文脈で記載された様々な特徴はまた、複数の実装で別々に実装されてもよいし、任意の適切な部分的な組合せで実装されてもよい。更に、特徴は所定の組合せで動作するものとして上述され、そのように最初の請求項に記載されるかもしれないが、請求された組合せからの１以上の特徴は、一部の場合に組合せから削除されてもよく、請求された組合せはサブコンビネーション又はサブコンビネーションの変形を対象としてもよい。
【００７３】
同様に、動作は図面において特定の順序で記載されたが、このような動作が示された特定の順序で又は連続した順序で実行されたり、所望の結果を実現するために説明された全ての動作が実行されたりすることが必要であると理解されるべきではない。所定の環境では、マルチタスク及び並列処理が有用であり得る。更に、上述の実装における様々なシステムモジュール及びコンポーネントの分離は、このような分離が全ての実装において必要であると解釈されるべきではなく、記載されたプログラムコンポーネント及びシステムは、一般に単一のソフトウェア製品に統合されてもよいし、複数のソフトウェア製品にパッケージされてもよいことが理解されるべきである。
【００７４】
主題の特定の実装が説明されてきた。当業者に明らかなように、他の実装、変形、及び記載された実装の置換が以下の特許請求の範囲に含まれる。例えば、請求項に記載された動作は、異なる順序で実行されてもよく、なおも所望の結果を実現することができる。
【００７５】
従って、実装例の上記の説明は、本開示を定義又は制限しない。他の変更、代替、又は変形も、本開示の精神及び範囲から逸脱せずに可能である。
【図１】
2015072681.tif 000003
【図２】
2015072681.tif 000004
【図３Ａ】
2015072681.tif 000005
【図３Ｂ】
2015072681.tif 000006
【図４Ａ】
2015072681.tif 000007
【図４Ｂ】
2015072681.tif 000008
【図４Ｃ】
2015072681.tif 000009
【外国語明細書】
2015072681000001.pdf