本発明は、そのいくつかの実施形態で、関係データベースへのクエリの処理を強化することに関し、より詳細には、関係データベースの少なくとも一部を記憶している記憶媒体から取得されたタプルを処理するように構成された調整済みメモリ管理モジュールにクエリ演算子及び条件を伝播することによって関係データベースへのクエリの処理を強化することに関するが、これに限定されない。
コンピューティングノード、例えば、サーバ、ノード、ノードのクラスタなどの記憶媒体に記憶された関係データベースを管理するために適用されるRDBMSのアーキテクチャは、通常、モジュールプログラミングの一般的な最良かつ実証済みのプログラミング習慣に従って設計及び構築される。それは、複数の記憶媒体に記憶された関係データベースにも適用可能である(すなわち、関係データベースは、分散型の方法で複数の記憶媒体に記憶される)。複数の記憶媒体は、ある1つのコンピューティングノード又は複数のコンピューティングノードに配備され得る。
モジュラプログラミングは、全体的なプログラムの機能性を、全体的な機能性のサブセットを行うようにそれぞれ特殊化された、独立した交換可能なソフトウェアモジュールに分離することに基づいており、例えば、数ある中でもコード再使用可能性、ソフトウェア設計の容易さ、及びコード保守の単純化などの多くの利益を提供し得る。これらのソフトウェアモジュールは、独立したソフトウェアモジュール間で通信しデータを転送するために使用され得る抽象的なアプリケーション・プログラミング・インタフェース(Application Programming Interface、API)を通してそれらの機能性を公開する。
モジュラ・プログラミング・パラダイムに続いて、著しく複雑な場合があるRDBMSは、通常、4つの十分に区別されかつ独立したモジュール、すなわち、リクエストマネージャ、パーサ、クエリエンジン、及び記憶エンジンからなる。リクエストマネージャは、クエリリクエスト、例えば、SQLクエリを受け取り、クエリを実行するためのリソースを割り当ててスケジューリングすることができる。それから、パーサは、正規表現を使用して、SQLクエリを解析及び分析する。クエリエンジンは、関係演算子及びテーブルの抽象構文木(Abstract Syntax Tree、AST)から構成されるクエリプランを生成する。記憶エンジンは、テーブル及びタプルを管理する。
RDBMSソフトウェアモジュールの中で、クエリエンジン及び記憶エンジンは、これらの2つのモジュールでRDBMSの実行時間の大部分が費やされるので、最も重要なモジュールである。
クエリエンジンは、データ(すなわち、記憶媒体に記憶されたデータベースから取得されたタプル)を処理することに特化しており、一方記憶エンジンは、データアクセスの役割(すなわち、記憶媒体にアクセスして、データベース内のタプルを取得及び/又はコミットすること)に特化している。旧来のクエリと記憶エンジンとの間のAPI(すなわち、open、next、close)は、通常、クエリから記憶エンジンに公開されるか又は引き渡される(転送される)処理セマンティクスなしで、完全に抽象的である。したがって、各関係演算子は、同じ厳格なインタフェースを使用して処理される。
RDBMSは、通常、ハードウェア・コンピューティング・プラットフォームのRDBMSに対するさらなる抽象化を提供するためにPortable Operating System Interface(POSIX)又は類似のAPIを典型的にサポートする、1つのオペレーティングシステム(Operating System、OS)、例えば、Linux(登録商標)、Windows(登録商標)、macOSなどを備えた環境で実行する。データベースそれ自体、すなわちデータ及びテーブルに関連する情報は、一般に、記憶媒体にマウントされた1つ又は複数のファイルシステム上のファイルの形態で記憶されるので、記憶媒体に記憶されたデータは、OS又はOSに追加された補足サービス、例えば、記憶マネージャ、特に、例えば、ファイルシステム、仮想ファイルシステム(Virtual file System、VFS)などの記憶マネージャによって提供される、サービス、関数及び/又は機構を使用して、アクセスされる。
記憶媒体の従来遅いアクセスに起因して、旧来のソフトウェアシステムは、従来、前述の記憶媒体のデータチャンク、例えば、ページ、セグメントなどを記憶するためのソフトウェアキャッシュを、データのより速い処理のための高速メモリ、例えば、揮発性メモリ(例えばランダム・アクセス・メモリ)、プロセッサ統合キャッシュなどに統合する。RDBMSは、当技術分野で知られているように、独自のソフトウェアキャッシュ、例えば、バッファプールなどを実装することによって、記憶エンジン内のそのような機能性を統合することができる。加えて、及び/又は代わりに、RDBMSは、当技術分野で知られているように、OSに統合された(固有の)ソフトウェア・キャッシュ・メカニズム、例えば、ページキャッシュなどを利用することができる。ページキャッシュ及びバッファプールは、それぞれのメモリ管理ソフトウェアモジュール、具体的にはそれぞれページキャッシュ管理モジュール及びバッファプール管理モジュールを使用して実装される。
それゆえ、記憶媒体に記憶されたデータベースからタプルを取得するために、記憶エンジンは、メモリ管理モジュール、具体的にはバッファプール管理モジュールとやりとりするための関数呼出し、又は、記憶媒体にアクセスするために次にページキャッシュ管理モジュールを使うことができる記憶マネージャ(VFSなど)とやりとりするためのOSのシステムコールのいずれかを利用する。
クエリエンジンと記憶エンジンとの間のAPIと同様に、記憶エンジンとOSとの間のAPI(すなわち、open、read/write、及びclose)もまた、抽象的であり、したがって、ソフトウェアスタックの上位層の情報又はセマンティクス、具体的にはクエリセマンティクスを伝えるのではなく、むしろ記憶媒体に記憶されたデータベースへのデータアクセスに関連する情報のみを伝える。同じように、記憶エンジンとそのバッファプール管理モジュールとの間のAPIは、抽象的であり、データにアクセスすることに関連した情報のみを同様に伝える。
RDBMSモジュールが、抽象的APIと結合されたそれらの指定された機能性に特殊化されるモジュール式実装の暗示は、データベースのすべてのタプルが、そのタプルが最終的な計算に有用であるかどうか、すなわちクエリによって規定された演算子及び任意選択の条件に適合するかどうかにかかわらず、データが存在するところ(すなわち、ページキャッシュ又はバッファプール)から記憶エンジン全体を経てクエリエンジンまで上る間ずっとトラバースしなければならないということである。このデータフローは、旧来のRDBMSで、クエリエンジンがタプルを処理する機能モジュールであるのに対して、他のすべてのモジュールがデータベースからデータを単に取得しそれをクエリエンジンに転送するために適用され、したがってクエリセマンティクス、すなわち演算子及びそれらの任意選択の条件について不可知であるという事実の結果として生じる。
本発明のいくつかの実施形態によれば、クエリセマンティクス、すなわち、演算子及び任意選択で条件(存在している場合)を調整済みソフトウェアモジュール、具体的には記憶媒体から取得されたデータベースのタプルを処理するように構成された調整済みメモリ管理モジュールに伝播することによって関係データベースへのクエリの処理を強化するための方法、システム及びコンピュータプログラム製品が提供される。この実装は、ニアデータ処理(Near Data Processing、NDP)という用語、現在のRDBMSアーキテクチャでなされるようにデータがクエリエンジンまですべての機能モジュールをトラバースするよりむしろ、データが記憶媒体からのデータ取得のポイントでメモリ管理モジュールによって処理されるという事実を反映する用語によって指定され得る。
この目標に向かって、クエリエンジン及び記憶エンジンは、クエリセマンティクスを記憶エンジンに伝播するためにクエリエンジンをサポートするように定義されている拡張クエリセマンティクスAPIをサポートするように調整され得る。
その上、記憶マネージャ(例えば、VFSなど)の機能性を公開するOS APIもまた、記憶エンジンからメモリ管理モジュール、例えば、ページキャッシュ管理モジュールへと、クエリセマンティクスを下方に伝播することをサポートするように拡張され得る。ページキャッシュ管理モジュールは、受け取った(伝播された)クエリセマンティクスに従ってデータベースから取得されたタプルを処理するようにさらに調整される。記憶エンジンによって利用されるバッファプールの場合、バッファプール管理モジュールは、受け取った(伝播された)クエリセマンティクスに従ってデータベースから取得されたタプルを処理するように調整され得る。前述の場合の両方で、ページキャッシュ管理モジュール及び/又はバッファプール管理モジュールは、記憶媒体に記憶されたデータベースから取得され、ソフトウェアキャッシュとして機能する高速メモリにロードされた直後にタプルの処理をサポートするように調整及び/又は交換され得る。
旧来のAPIは、下位レベルのソフトウェアモジュール、例えば、記憶エンジン、記憶マネージャ、ページキャッシュ管理モジュール及びバッファプール管理モジュールがクエリエンジンに向かって上にデータを動かすことができるようにする。この趣旨で、これらのAPIの1つ又は複数が、すべてのタプルを転送するよりむしろ、下方に伝播されたクエリセマンティクスに適合した適合タプルのみの転送をサポートするように拡張及び/又は調整され得る。
ページキャッシュ及び/又はバッファプールは、実行時より前に予め静的に調整及び/又は交換されてもよく、及び/又は、例えば、OSによって及び/又はRDBMSによってサポートされ得るモジュールの動的ローディング、eBPFなどの仮想マシン手法などの、任意の利用可能な技法、機構及び/又はサービスを使用して実行時に調整及び/又は交換されてもよい。
RDBMS用のニアデータ処理(NDP)実装は、既存のRDBMSアーキテクチャと比較して主要な利点及び利益を提示し得る。
第1に、メモリ管理モジュールにおいてタプルを処理して適合タプルのみをクエリエンジンに返すように調整されたメモリ管理モジュールにクエリ処理の少なくとも一部を移管することによって、すべてのデータベースタプルをクエリエンジンに転送する必要性が回避され得る。すべてのデータベースタプルをクエリエンジンに転送すると、現在既存のRDBMSによってなされ得るように、タプルに記憶エンジン及びクエリエンジンの大きく複雑なソフトウェアスタックをトラバースさせることによって達成されるプロセスが、主要なボトルネックを呈するおそれがあり、したがって著しいクエリ応答待ち時間及び/又は処理時間ペナルティを与えるおそれがある。対照的に、NDP可能なRDBMSでは、それぞれの条件を任意選択で伴うプッシュダウンされた(下方に伝播された)演算子に適合し、したがって通常は量が非常に限定されている、適合タプルのみがクエリエンジンまで戻ってトラバースし、したがってクエリ待ち時間及び/又は処理時間を著しく低減させる。
例えば、RDBMSに提出されるSQLクエリが中国からの人々のファーストネーム及び姓の情報を照会すると仮定する。旧来のRDBMSでは、データベース内の「tablePeople」テーブルからのすべてのタプルが、そのタプルが「中国」という条件を満たす(条件に適合する)かどうかにかかわらず、クエリエンジンに転送され、クエリエンジンは、「中国」条件に適合するタプルを識別して「中国」条件に適合するタプルでクエリに応答するために、タプルを処理することができる。他方のNDP可能なRDBMSでは、データが存在するモジュールは、伝播されたクエリセマンティクス、具体的には演算子選択及び条件「中国」を受け取り、「中国」条件に適合するタプルを識別することができ、それゆえ、適合タプルのみをクエリエンジンに戻すことができる。同じことが他の演算子、例えば、射影、集約、結合などに適用され得る。
その上、既存のRDBMSのいくつかは、RDBMS及びOSのソフトウェアモジュール層を通してトラバースされるデータの量を低減させようとする試みにおいて、クエリセマンティクスをプッシュダウンする(伝播する)ことをサポートするために、特殊化された追加ハードウェアを適用し得る。例えば、Oracle Exadata Database Machineは、Exadata Databaseサーバとして知られる、データベース・コンピューティング・ノード(サーバ)に加えて、Exadata Storageサーバとして知られる、別個の記憶層を配備するための1つ又は複数の追加のコンピューティングノード(サーバ)を使用することができる。追加記憶サーバはデータベースを記憶する。記憶サーバは、クエリセマンティクスの限定されたセット、具体的には選択演算子セマンティクスのみを別個の記憶層(すなわち、Exadata Storageサーバ)にプッシュダウンするように構成され得る。別の実施例で、Ibex及びIBM PureData RDBMSは、記憶媒体から取得されたタプルをローカルに処理し得るFPGAにクエリセマンティクスをプッシュダウンするために、記憶媒体とRDBMSを実行しているコンピューティングノードとの間に専用の特殊化されたフィールド・プログラマブル・ゲート・アレイ(Field Programmable Gate Array、FPGA)を使用することができる。別の実施例で、YourSQLは、プッシュダウンされたクエリセマンティクスに従ってSSDから取得されたタプルを処理するために、プログラム可能なハードウェアアクセラレータとともに処理可能なソリッド・ステート・ディスク(Solid State Disk、SSD)を使う。
本明細書に説明されたようなハードウェア手法は、いくつかの不利益を呈する場合がある。第1に、追加の通常高価なハードウェアが必要とされ、したがってRDBMSのコストを著しく増加させる。第2に、追加のハードウェアの設計及び配備は、著しく複雑な場合があり、異なるRDBMS及び/又は異なるアプリケーション用に配備されるために著しいカスタマイズを必要とする場合がある。第3に、処理プラットフォームの性能が継続的に著しく高まるにつれて、専用の特殊化されたハードウェアは、技術スケーリングに起因して比較的短期間内に、旧式となり、及び/又は汎用プラットフォームに対して性能が著しく低くなる場合がある。加えて、ハードウェア手法が、記憶媒体に存在しているデータに対するクエリ応答待ち時間に関して性能を改善し得るとしても、関係演算子はRDBMSサーバの一時的メモリ(例えば、揮発性メモリ、一時バッファなど)に存在しているデータにプッシュされないので、これらのハードウェアソリューションは、大量のデータがさまざまなソフトウェアモジュール間をトラバースすることを依然として必要とし、したがって著しい処理オーバヘッドを負う。局所性の原理に起因して、よくある例でRDBMS又はOSのソフトウェアキャッシュにデータを見いだすことが一般に予想されることは、留意されるべきである。
対照的に、NDP可能なRDBMSは、追加のハードウェアリソース及び/又は処理ノードを必要としないソフトウェアのみのソリューションであり、それゆえ配備するのに著しくより安価である。その上、NDP可能なRDBMSは、そのサイズにかかわらずデータベースに固有のソフトウェアソリューションとして配備され得るので、高度にスケーラブルであり得る。さらにまた、NDP可能なRDBMSは、記憶媒体に存在しているデータにも一時的メモリに存在しているデータにも適用可能であり、したがって、データ現在位置にかかわらずすべてのデータアクセスに適用可能である。
加えて、NDP可能なRDBMSは、ソフトウェアのみのソリューションなので、NDP可能なRDBMSは、高い柔軟性を提供し、かつ著しく控えめな労力を必要とすると同時に、広範囲の既存のRDBMSプラットフォーム及びシステムに容易に統合及び採用され得る。
クエリセマンティクスをプッシュダウンし、適合タプルのみをソフトウェアモデル層を通して動かすことによって性能を最適化するためのソフトウェアのみのソリューションである、いくつかの既存のRDBMS実装、例えば、MySQLがあるものの、これらのソリューションは、クエリ処理性能をいくぶん改善するとしても非常に限定されている。第1に、そのような実装は、「選択」演算子のみをプッシュダウンすることに限定され、一方他の演算子をプッシュダウンすることができない。その上、これらの実装は、プッシュダウンされたセマンティクスをマッピングするために補助索引データ構造を使用する。索引付けメカニズムは、主要な制限を提示する場合がある。第1に、索引は、プッシュダウンのために常に利用可能とは限らない場合があり、利用可能なとき、それらのデータセットサイズはデータベースでアクセスされるテーブルのサイズに対応するので、索引は、非常に非効率的である。最悪のシナリオでは、索引のサイズは、データベースのサイズの2倍になる場合がある。加えて、索引は、最新の中央処理装置(Central Processing Unit、CPU)アーキテクチャにおいてそれらのアクセスを極端に非効率的にする、ポインタベースの動的データ構造(例えば、ハッシュテーブル、スキップリストなど)である。また、これらの技法は、バッファプール又はページキャッシュのメモリ管理モジュールで直接動作しないので、無用のタプルが、記憶エンジンのソフトウェアスタックの大部分を依然としてトラバースする場合がある。したがってこれらのRDBMS実装は、無用のタプルについてデータ移動及びその関連処理オーバヘッドを低減させることができない。
他方、NDP可能なRDBMSは、そのような索引付けメカニズム及び構造を使うことを必要とせず、むしろ、メモリ管理モジュールに転送されるデータの些細で通常無視できる追加のみを与え得る効率的な方式でメモリ管理モジュールにクエリセマンティクスを直接伝播するようにAPIを拡張する。他方、メモリ管理モジュールからクエリエンジンに返されるデータの量は、劇的に低減され、したがってRDBMSソフトウェア層間のデータ移動を著しく低減させ、処理及び/又はクエリ応答時間の性能を著しく改善する。
本発明の少なくとも1つの実施形態を詳細に説明する前に、本発明がその適用において、以下の説明で明らかにされ、かつ/又は図面及び/又は実施例に例示されている構成要素及び/又は方法の構築及び配置の詳細に必ずしも限定されないことは、理解されるべきである。本発明は、他の実施形態が可能であり、又はさまざまな手法で実施若しくは実行されることが可能である。
本発明は、システム、方法、及び/又はコンピュータプログラム製品であり得る。コンピュータプログラム製品は、本発明の実施態様をプロセッサに実行させるためにコンピュータ可読プログラム命令をその媒体上に有するコンピュータ可読記憶媒体(又は複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し記憶することができる有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、又は前述のものの任意の適切な組合せであってもよいが、これに限定されない。コンピュータ可読記憶媒体のより具体的な実施例の非網羅的なリストは、以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラム可能読取り専用メモリ(EPROM若しくはフラッシュメモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピー(登録商標)ディスク、命令がその上に記録されたパンチカード又は溝内の隆起構造などの機械的にコード化されたデバイス、及び前述のものの任意の適切な組合せを含む。本明細書で使用される、コンピュータ可読記憶媒体は、電波若しくは他の自由に伝播する電磁波、導波管若しくは他の伝送媒体を通って伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又はワイヤを通って伝送される電気信号などの一時的信号自体であると解釈されるべきではない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読媒体からそれぞれのコンピューティング/処理デバイスに、又はネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク及び/又はワイヤレスネットワークを介して外部コンピュータ又は外部記憶デバイスにダウンロードされ得る。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び/又はエッジサーバを備え得る。各コンピューティング/処理デバイスのネットワーク・アダプタ・カード又はネットワークインタフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それぞれのコンピューティング/処理デバイス内でコンピュータ可読記憶媒体での記憶のためにコンピュータ可読プログラム命令を転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械語命令、機械依存の命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び「C」プログラミング言語若しくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つ若しくは複数のプログラミング言語の任意の組合せで書かれたソースコード若しくはオブジェクトコードのいずれかであり得る。
コンピュータ可読プログラム命令は、全面的にユーザのコンピュータ上で実行してもよく、部分的にユーザのコンピュータ上で実行してもよく、スタンドアロン・ソフトウェア・パッケージとして実行してもよく、部分的にユーザのコンピュータ上と部分的にリモートコンピュータ上で実行してもよく、又は全面的にリモートコンピュータ若しくはサーバ上で実行してもよい。後者のシナリオでは、リモートコンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含む任意のタイプのネットワークを通してユーザのコンピュータに接続されてもよく、又は接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通して)外部コンピュータに対してなされてもよい。いくつかの実施形態で、本発明の実施態様を行うために、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラマブル論理アレイ(PLA)を含む電子回路が、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路をパーソナライズしてもよい。
本発明の実施態様が、本発明の実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して本明細書に説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図中のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることは、理解されよう。
図中のフローチャート及びブロック図は、本発明のさまざまな実施形態によるシステム、方法、及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能性、及び動作を例示する。この点に関して、フローチャート又はブロック図の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能な命令を含む、モジュール、セグメント、又は命令の部分を表し得る。いくつかの代替の実装では、ブロックに記された機能は、図に記された順序から外れて生じる場合がある。例えば、連続して示された2つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、関係している機能性に応じて、場合によっては逆の順序で実行されてもよい。ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図中のブロックの組合せが、指定された機能若しくは作用を行う専用ハードウェアベースのシステムによって実装されてもよく、又は専用ハードウェアとコンピュータ命令との組合せを実行してもよいことにも、留意されたい。
ここで図面を参照すると、図1は、本発明のいくつかの実施形態による、記憶媒体から取得されたデータベースのタプルを処理するように構成された調整済みメモリ管理モジュールにクエリ演算子及び任意選択の条件を伝播することによって関係データベースへのクエリを処理する例示的なプロセスのフローチャートである。
例示的なプロセス100が、関係データベースに関連付けられた1つ又は複数のコンピューティングノードによって実行され得る。具体的には、コンピューティングノードは、入力クエリを受け取って、入力クエリによって規定され及び/又は表された1つ又は複数の関係演算子及び任意選択で1つ又は複数の条件に適合する関係データベースから取得されたタプルで応答するように適合される。プロセス100は、データベースを記憶している記憶媒体からデータを取得するように通常構成される、調整された旧来の下位レベルのソフトウェアモジュールを使用することによって関係データベースに提出されたクエリの処理を強化するために適用され得る。下位レベルのソフトウェアモジュールは、データベースから取得されたタプルをさらに処理し、演算子に適合しかつクエリによって規定された条件に任意選択で適合するタプルを識別し、適合タプルを返すように調整され得る。
これは、上位レベルのソフトウェアモジュールから下位レベルのソフトウェアモジュール、通常、コンピューティングノードによって実行される(ホストされる)OS及び/又はデータベースを管理するためにコンピューティングノードによって実行されるRDBMSの一部であり得るメモリ管理モジュールへと、クエリセマンティクス、すなわち、クエリによって規定された演算子及び任意選択で条件の1つ又は複数を下方に伝播(プッシュ)することによってなされる。
この目的に向けて、強化されたソフトウェア基盤、具体的には拡張APIが、記憶媒体から取得されたタプルを処理するように調整された下位レベルのソフトウェアモジュールへのクエリセマンティクスの下方伝播を可能にし、サポートするために配備され得る。補足的に、拡張APIは、クエリに応答して適合タプルを戻して(上に)伝播することにおいて下位レベルのソフトウェアモジュールをサポートし得る。
図2に対しても参照が行われ、図2は、本発明のいくつかの実施形態による、記憶媒体から取得されたデータベースのタプルを処理するように構成された調整済みメモリ管理モジュールにクエリ演算子及び任意選択の条件を伝播することによって関係データベースへのクエリを処理するための例示的なシステムの略図である。
関係データベース208に関連付けられた例示的なデータベースシステム200、例えば、コンピュータ、サーバ、コンピューティングノード、コンピューティングノードのクラスタなどは、データベース208のために提出されたクエリの処理を強化するためのプロセス100などのプロセスを実行し得る。データベースシステム200は、ネットワークインタフェース202と、プロセス100を実行するためのプロセッサ204と、コード及び/又はデータを記憶するため、並びに通常、データベース208を記憶するための記憶装置206とを含み得る。特に、データベース208は、SQLデータベース、例えば、Oracle、MySQL、Microsoft SQL Server、PostgreSQLなどであり得る。
ネットワークインタフェース202は、データベース208にアクセスする1つ又は複数のネットワークノードとの通信を容易にするために、1つ又は複数の有線及び/又は無線ネットワーク、例えば、ローカル・エリア・ネットワーク(Local Area Network、LAN)、広域ネットワーク(Wide Area Network、WAN)、市域ネットワーク(Municipal Area Network、MAN)、セルラネットワーク、インターネットなどに接続するための1つ又は複数のネットワークインタフェースを含み得る。ネットワークインタフェース202を通して、データベースシステム200は、データベース208にネットワーク内の他のノードによって提出された1つ又は複数のクエリ250を受け取って、演算子に適合しかつそれぞれのクエリによって規定された条件に任意選択で適合すると識別された後、データベース208から取得された適合タプル252で応答することができる。
同種又は異種のプロセッサ204は、クラスタとして及び/又は1つ又は複数のマルチコアプロセッサとして、並列処理のために配置された1つ又は複数の処理ノードを含み得る。
データ及び/又はプログラムコードを記憶するために使用される記憶装置206は、1つ又は複数の非一時的メモリデバイス、持続型不揮発性デバイス、例えば、ハードドライブ、ソリッド・ステート・ドライブ(SSD)、磁気ディスク、フラッシュアレイなど及び/又は揮発性デバイス、例えば、ランダム・アクセス・メモリ(Random Access Memory、RAM)デバイス、キャッシュメモリなどのいずれかを含み得る。記憶装置206は、ネットワークインタフェース202を通して1つ又は複数のネットワークを介してアクセス可能な1つ又は複数のネットワーク記憶リソース、例えば、記憶サーバ、ネットワーク接続型記憶装置(Network Attached Storage、NAS)、ネットワークドライブなどをさらに含み得る。
プロセッサ204は、記憶装置206などの非一時的媒体に記憶され、プロセッサ204などの1つ又は複数のプロセッサによって実行される複数のプログラム命令をそれぞれ含む、1つ又は複数のソフトウェアモジュール、例えば、プロセス、スクリプト、アプリケーション、エージェント、ユーティリティ、ツール、OSなどを実行し得る。例えば、プロセッサ204は、データベース208を管理するための関係データベース管理システム(Relational Database Management System、RDBMS)210を実行し得る。RDBMS210は、通常、記憶媒体、具体的にはデータベース208を記憶している記憶装置206へのRDBMS210のためのアクセスサービスを容易にして提供する、OS220、例えば、Linux、Windowsなどと連携して実行される。
いくつかの配備でデータベースシステム200は、RDBMS210とデータベース208の両方をホストする単一コンピューティングノードによって利用される。そのような場合、データベースシステム200は、RDBMS210とデータベース208へのアクセスを提供するOS220の両方を実行し得る。しかしながら、いくつかの配備で、データベースシステム200は、RDBMS210が第1のコンピューティングノードによって実行され得、データベース208が第2のコンピューティングノードによってホストされ得るように、複数のコンピューティングノード間で分散され得る。そのような配備で、第1のコンピューティングノードは、(通常、OS環境で)RDBMS210を実行することができ、一方第2のコンピューティングノードは、データベース208へのアクセスサービスを提供するOS220を実行する。第1及び第2のコンピューティングノードは、RDBMS210とOS220との間の通信を容易にするために互いに通信することができる。
任意選択で、データベースシステム200及び/又はRDBMS210は、例えば、Amazon Web Service(AWS)、Google Cloud、Microsoft Azure、Alibaba Cloud、Huawei Cloudなどの、1つ又は複数のクラウドインフラストラクチャ及び/又はサービスによって提供される、1つ又は複数のクラウド・コンピューティング・サービス、例えば、インフラストラクチャ・アズ・ア・サービス(Infrastructure as a Service、IaaS)、プラットフォーム・アズ・ア・サービス(Platform as a Service、PaaS)、ソフトウェア・アズ・ア・サービス(Software as a Service、SaaS)などによって提供される。
図3A及び図3Bに対してここで参照が行われ、図3A及び図3Bは、本発明のいくつかの実施形態による、記憶媒体から取得されたデータベースのタプルを処理するように構成された調整済みメモリ管理モジュールにクエリ演算子及び任意選択で条件を伝播することによって関係データベースへのクエリを処理するための例示的なソフトウェアモデルの略図である。
例示的なソフトウェアモデル300A及び300Bは、データベース208などのデータベースを管理するために配備されたRDBMS210などのRDBMSが1つ又は複数のソフトウェアモジュール、例えば、リクエストマネージャ310、パーサ312、クエリエンジン314及び記憶エンジン316で構築される階層化モデルである。リクエストマネージャ310は、データベース208に向けられたクエリ250などのクエリを受け取るように構成され得る。クエリ250は、当技術分野で知られているように、問合せ言語、例えば、SQLなどを使用して構築され得る。パーサ312は、当技術分野で知られているように、正規表現を使用してクエリ250を解析(分析)し、クエリの要素を識別するように構成され得る。クエリエンジン314は、クエリ要素によって表現された1つ又は複数の演算子及び1つ又は複数の条件(存在している場合)を抽出するように構成され得る。クエリエンジン314は、当技術分野で知られているように、抽出された関係演算子及びテーブルのASTから構成されるクエリプランをさらに生成し得る。記憶エンジン316は、当技術分野で知られているように、データベース208からタプルを取得するように構成され得る。
モデル300A及び300Bに見られるように、クエリエンジン314は、クエリセマンティクス、具体的には演算子及び任意選択で条件を記憶エンジン316に転送(下方に伝播)し、それぞれの演算子及び任意選択の条件に適合するタプルをそれに応じて受け取るようにさらに構成及び/又は調整され得る。
RDBMS210は、通常、OS220などのOSの環境で実行され得る。RDBMS210、特に記憶エンジン316は、それゆえ、モデル300A及び300Bに見られるように記憶媒体206に記憶されたデータベース208にアクセスするためにOS220によって提供される記憶及び/又はメモリアクセス管理モジュール及び/又はサービスを利用し得る。
特に、OS220は、数あるソフトウェアモジュールの中でも、記憶装置206からの読出し動作及び/又は記憶装置206への書込み動作のために記憶装置206にアクセスするために使用され得る記憶マネージャ320、例えば、記憶装置206にマウントされたファイルシステム、1つ又は複数のファイルシステムなどの上に抽象化層を提供する仮想ファイルシステム(virtual File System、VFS)などを含み得る。
モデル300Aに見られるように、記憶エンジン316は、調整済みメモリ管理モジュール322、具体的には、データ、具体的にはデータベース208のタプルを記憶装置206からタプルが処理され得る高速メモリ、例えば、RAM、キャッシュなどにロードするように構成されたページキャッシュ管理モジュール322Aを利用する。
モデル300Aに提示されるような実装で、記憶エンジン316は、クエリセマンティクス、具体的には演算子及び任意選択で条件を記憶マネージャ320に転送(伝播)し、それぞれの演算子及び任意選択の条件に適合するタプルをそれに応じて受け取るようにさらに構成及び/又は調整され得る。その上、記憶マネージャ320は、クエリセマンティクスをOS220の調整済みメモリ管理モジュール322、例えば、データベース208から取得されたタプルを処理して記憶マネージャ320Aから受け取った演算子及び任意選択の条件に適合するタプルを識別するように適合されたページキャッシュ管理モジュール322Aに、さらに伝播するように調整され得る。
取得されたタプルを処理した後、ページキャッシュ管理モジュール322Aは、適合タプルを記憶マネージャ320に転送することができ、記憶マネージャ320は次に、適合タプルで記憶エンジン316に応答することができる。記憶エンジン316は、適合タプルをクエリエンジン314へと上方にさらに伝播することができ、クエリエンジン314は、適合タプルをリクエストマネージャ310にさらに転送し、リクエストマネージャ310は、適合タプル252を出力することができる。
記憶装置206から取得されたデータを高速メモリにロードするためのOS220のモジュール及びサービスの少なくともいくつかを記憶エンジン316がバイパスする、モデル300Bに見られるように、記憶エンジン316は、データベース208から取得されたタプルを処理してクエリエンジン314から受け取った演算子及び任意選択の条件に適合するタプルを識別するように適合された、調整済み直接アクセスメモリ管理モジュール322、例えば、バッファプール管理モジュール322Bなどを統合することができる。バッファプール管理モジュール322Bは、通常、記憶エンジン316に統合され得るので、クエリエンジン314から受け取ったクエリセマンティクスは、バッファプール管理モジュール322Bに(記憶エンジン316内で)内部で転送される。バッファプール管理モジュール322Bは、データ、具体的にはデータベース208のタプルを記憶装置206から取得するために記憶マネージャ320を使用し得る。
取得されたタプルを処理した後、バッファプール管理モジュール322Bは、適合タプルを記憶エンジン316に転送することができ、記憶エンジン316は次に、適合タプルをクエリエンジン314へと上方に伝播することができる。クエリエンジン314は、適合タプルをリクエストマネージャ310にさらに転送することができ、リクエストマネージャ310は、適合タプル252を出力することができる。
任意選択で、モデル300Aと300Bの両方に見られるように、タプル処理は、クエリエンジン314とメモリ管理モジュール322、具体的にはページキャッシュ管理モジュール322A及び/又はバッファプール管理モジュール322Bとの間で分割される。
そのような場合、クエリエンジン314は、記憶エンジン316へと下方に伝播されない入力クエリ250によって規定された1つ又は複数の他の演算子及び/又は条件を適用すると同時に、入力クエリ250によって規定された演算子及び/又は条件の一部のみを記憶エンジンへと下方に伝播することができる。そのような場合、伝播された演算子に適合しかつ任意選択で条件に適合するとメモリ管理モジュール322(例えば、ページキャッシュ管理モジュール322A及び/又はバッファプール管理モジュール322B)によって識別されたタプルは、部分適合タプルであり、部分適合タプルは、クエリエンジン314によってさらに処理され、クエリエンジン314は、最終的な適合タプル252を識別して、それらを出力するように適合されたリクエストマネージャ310にそれらを提供する。
どの演算子及び条件がメモリ管理モジュール322へと下方に伝播されるか、及びどの演算子/条件がクエリエンジン314によって適用される(処理される)かの決定は、RDBMS210の1つ又は複数のモジュール、例えば、クエリエンジン314、記憶エンジン316又はRDBMS210に統合された専用ソフトウェアモジュールによってなされ得る。
記憶エンジン316から適合タプルを受け取り、下方に伝播されなかった1つ又は複数の演算子及び/又は条件に従って、受け取ったタプルを任意選択で処理した後、クエリエンジン314は、適合タプル252をリクエストマネージャ310に引き渡すことができ、リクエストマネージャ310は、クエリ250に応答して適合タプル252を出力することができる。
図1に対してもう一度参照が行われる。
102に示されるように、プロセス100は、リクエストマネージャ310がデータベース208に向けられたクエリ250を受け取ることから始まる。クエリ250は、通常、高レベルの宣言型問合せ言語、SQLなどを使用して構築され得る。クエリ250は、当然ながら、RDBMS210のタイプに従って構築される。
リクエストマネージャ310は、当技術分野で知られているように、クエリ250を実行するためのリソースをさらに割り当ててスケジューリングすることができる。リクエストマネージャ310は、それから、クエリ250をパーサ312に転送することができ、パーサ312は、当技術分野で知られているように、正規表現を使用して、クエリ250、例えば、SQLクエリを解析及び分析することができる。
パーサ312によって解析された後、クエリエンジン314は、1つ又は複数の関係演算子、及び任意選択で、演算子のそれぞれの1つにそれぞれ関連付けられた1つ又は複数の条件を、クエリ250から抽出することができる。これらの関係演算子は、例えば、1つ又は複数の条件にそれぞれ関連付けられ得る、選択、射影、集約、結合などを含み得る。クエリエンジン314は、当技術分野で知られているように、抽出された関係演算子及びテーブルのASTから構成されるクエリプランをさらに生成し得る。
104に示されるように、クエリエンジン314は、演算子の1つ又は複数及びそれらのそれぞれの条件(そのようなものが存在している場合)を記憶エンジン316へと下方に伝播(転送)することができる。任意選択で、クエリエンジン314は、複数の演算子及びそれらのそれぞれの条件(そのようなものが存在している場合)を記憶エンジン316へと同時に転送する。
通常、旧来のRDBMS実装で、クエリエンジン314は、記憶エンジン316にデータベース208からタプルを取得するよう要求し、クエリエンジン314は、演算子に適合しかつ任意選択で条件に適合する適合タプル352を識別するために、取得されたタプルを処理する。
しかしながら、クエリエンジン314と記憶エンジン316との間のAPIは、クエリエンジン314から記憶エンジン316へのクエリセマンティクス、すなわち演算子及び任意選択で条件の伝播(転送)をサポートするクエリセマンティクスAPIを含むように拡張され得る。その上、クエリセマンティクスAPIは、記憶エンジン316からクエリエンジン314への伝播された演算子に適合しかつ任意選択で条件に適合するタプルの転送をサポートするために適用される。クエリエンジン314と記憶エンジン316の両方が、それゆえ、クエリセマンティクスAPIをサポートするように調整され得る。
図4に対してここで参照が行われ、図4は、本発明のいくつかの実施形態による、クエリエンジン314などのクエリエンジンから記憶エンジン316などの記憶エンジンに例示的なクエリ演算子及び条件を伝播するために適用される例示的なクエリセマンティクスAPIの略図を提示する。
402に示されるように、クエリセマンティクスAPIを使用して、クエリエンジン314は、通常はopen()、next()及びclose()関数を含む旧来のRDBMSのアプリケーション・プログラミング・インタフェース(API)に追加されたcond()関数を使用して記憶エンジン316に選択演算子の条件を転送(伝播)することができる。それゆえ旧来のRDBMSで、クエリエンジンは、記憶エンジンにタプルのテーブルを提供するよう要求することができ、それから、選択演算子の条件に適合する適合タプル252を識別するために、受け取ったタプルを処理することができる。対照的に、調整済み記憶エンジン316は、選択演算子に関連付けられた条件に適合するタプルのみをクエリエンジン314に提供することができる。
404に示されるように、クエリセマンティクスAPIを使用して、クエリエンジン314は、通常はopen()、next()及びclose()関数を含む旧来のRDBMSのAPIに追加されたproj()関数を使用して記憶エンジン316に射影演算子の条件を転送(伝播)することができる。それゆえ、旧来のRDBMSで、クエリエンジンは、記憶エンジンにタプルのテーブルを提供するよう要求することができ、それから、射影演算子の条件に適合する適合タプル252を識別するために、受け取ったタプルを処理することができる。対照的に、調整済み記憶エンジン316は、射影演算子に関連付けられた条件に適合するタプルのみをクエリエンジン314に提供することができる。
406に示されるように、クエリセマンティクスAPIを使用して、クエリエンジン314は、通常はopen()、next()及びclose()関数を含む旧来のRDBMSのAPIに追加されたaggr()関数を使用して記憶エンジン316に集約演算子の条件(例えば、最大、最小、平均など)を転送(伝播)することができる。それゆえ旧来のRDBMSで、クエリエンジンは、記憶エンジンにタプルのテーブルを提供するよう要求することができ、それから、集約演算子の条件に適合する適合タプル252を識別するために、受け取ったタプルを処理することができる。対照的に、調整済み記憶エンジン316は、集約演算子に関連付けられた条件に適合するタプルのみをクエリエンジン314に提供することができる。
408に示されるように、クエリセマンティクスAPIを使用して、クエリエンジン314は、通常はopen()、next()及びclose()関数を含む旧来のRDBMSのアプリケーション・プログラミング・インタフェース(API)に追加されたjoin_cond()関数を使用して記憶エンジン316に結合演算子の条件を転送(伝播)することができる。それゆえ旧来のRDBMSで、クエリエンジンは、使用してタプルのテーブルを提供するよう記憶エンジンに要求することができ、それから、結合演算子の条件に適合する適合タプル252を識別するために、受け取ったタプルを処理することができる。対照的に、調整済み記憶エンジン316は、結合演算子に関連付けられた条件に適合するタプルのみをクエリエンジン314に提供することができる。
任意選択で、クエリエンジン314は、記憶エンジン316へと下方に伝播された1つ又は複数の他の演算子に応答して記憶エンジン316から受け取った1つ又は複数のタプルに、クエリに含まれる1つ又は複数の演算子を適用するように構成される。これは、クエリの演算子及び条件によるデータベース208内のタプルの処理が、クエリエンジン314と下位レベルのソフトウェアモジュール、例えばメモリ管理モジュール322A及び/又は322Bなどのメモリ管理モジュール322との間で分割され得ることを意味する。例えば、ある特定のクエリ250のために構築されたSQLクエリが2つの演算子、例えば、選択演算子(1つ又は複数の条件を伴う)及び集約演算子を含むと仮定する。そのような場合、クエリエンジン314は、その条件と任意選択で結合された選択演算子を記憶エンジンに316に転送し、選択演算子に適合する1つ又は複数のタプルを見返りに受け取ることができる。クエリエンジン314は、それから、応答、すなわち適合タプル252を作り出すために記憶エンジン316から受け取ったタプルに集約演算子を適用することができる。
図1に対してもう一度参照が行われる。
106に示されるように、記憶エンジン316は、クエリセマンティクス、すなわち、演算子の1つ又は複数及びそれらのそれぞれの条件(そのようなものが存在している場合)をメモリ管理モジュール322、例えば、ページキャッシュ管理モジュール322A又はバッファプール管理モジュール322Bに伝播することができる。
メモリ管理モジュール322がOS220に固有である、例えば、ページキャッシュ管理モジュール322Aである場合、記憶エンジン316は、クエリセマンティクスを記憶マネージャ320に転送するように構成され得、記憶マネージャ320は次に、クエリセマンティクスをページキャッシュ管理モジュール322Aに伝播することができる。
通常、旧来のRDBMS実装で、記憶エンジン316は、OS記憶マネージャ320に記憶装置206、例えば、ページ、バッファなどからデータ、具体的には1つ又は複数のデータセグメントを取得するように要求する。記憶エンジン316は、それから、取得されたデータからデータベース208のタプルを抽出することができる。記憶エンジン316は、タプルをクエリエンジン314に転送し、クエリエンジン314は、適合タプル252を識別するためにタプルを処理することができる。
しかしながら、記憶エンジン316と記憶マネージャ320との間のOS APIは、記憶エンジン316から記憶マネージャ320へのクエリセマンティクス、すなわち演算子及び任意選択で条件の伝播(転送)をサポートするように拡張され得る。その上、拡張OS APIは、記憶マネージャ320から記憶エンジン316への伝播された演算子に適合するタプルの転送をサポートするために適用される。記憶エンジン316と記憶マネージャ320の両方が、拡張OS APIをサポートするように調整され得る。
例えば、記憶マネージャ320がVFSであると仮定して、拡張OS APIは、クエリセマンティクス、すなわち演算子及び存在している場合任意選択でその条件の伝播(転送)をサポートするために1つ又は複数の調整された及び/又は拡張されたシステムコールを含み得る。
図5に対してここで参照が行われ、図5は、本発明のいくつかの実施形態による、記憶エンジンから調整済み記憶マネージャへのクエリ演算子及び条件の伝播をサポートするように拡張された例示的なOS APIの略図である。
通常、記憶マネージャ320などの旧来の記憶マネージャ、例えば、VFSなどが、記憶装置206などの記憶媒体へのアクセスを管理するために配備され、具体的には、記憶装置206に記憶されたデータベース208などのデータベースにアクセスするために配備される。そのような旧来の記憶マネージャ320は、高レベルのソフトウェアモジュール、例えば、記憶エンジン316が記憶装置206にアクセスしてデータベース208に記憶されたタプルを取得することを可能にする1つ又は複数のシステムコールを含むOS APIをサポートし得る。
しかしながら、調整済み記憶マネージャ320は、記憶エンジン316から記憶マネージャ320へとクエリセマンティクス、すなわち演算子及び任意選択で条件を下方に伝播すること(転送すること)をサポートする拡張OS APIをサポートするように調整され得る。例えば、データベース208からデータを読み出すために旧来の記憶マネージャ320、例えば、VFSにアクセスするように指示された、OS220の旧来のsys_read()システムコールは、通常、記憶装置206から取得されたデータを記憶エンジン316などの上位レベルのソフトウェアモジュールに割り当てられたuser_buff(ユーザバッファ)に返すことができる。旧来のsys_read()システムコールは、1つ又は複数のパラメータ、例えば、ndp_argc、ndp_argvなどをさらに含むために、それぞれのsys_read_ndp()システムコールに拡張され得る。パラメータは、1つ又は複数の引数、具体的にはクエリ250によって規定された、及び/又はクエリ250から抽出された演算子及び任意選択で条件をマッピングするために使用され得る。そのようなものとして、拡張OS API、具体的には、sys_read_ndp()システムコールを使用して、記憶エンジン316は、パラメータ、すなわちクエリ演算子及び条件の1つ又は複数を記憶マネージャ320に転送することができる。その上、適合タプルは、記憶エンジン316に割り当てられたユーザバッファで記憶エンジン316に返され得る。
sys_read_ndp()システムコールは、1つ又は複数の実装を使用して拡張OS APIで調整、構築及び/又は規定され得る。例えば、Cプログラミング言語でなされるのと同様に、パラメータndp_argcは、引数の数、引数カウントなどを指定することができる。同様に、パラメータndp_argvは、引数へのポインタのアレイ、引数ベクトルなどを指定することができる。sys_read_ndp()システムコールのそのような実装は、下に例示的なコードの抜粋1で提示される。当然ながら、システムコールを調整するための他の実装が当業者に明らかであり得る。
コードの抜粋1
ssize_t sys_read_ndp (int fd,
void * buf,
size_t count,
char ** ndp_argv,
ssize_t ndp_argc
);
同様に、sys_write_ndp()システムコールが、拡張OS APIで調整、構築及び/又は規定され得る。
本明細書に上述されたように、記憶マネージャ320は次に、クエリセマンティクスをページキャッシュ管理モジュール322Aに伝播することができる。
図6に対してここで参照が行われ、図6は、本発明のいくつかの実施形態による、記憶媒体から取得されたデータベースのタプルを処理するために調整済み記憶マネージャ(VFSなど)によって利用される例示的なページキャッシュ管理モジュールの略図である。ページキャッシュ管理モジュール322Aなどの例示的なページキャッシュ管理モジュールは、VFS記憶マネージャ320Aなどの記憶マネージャ、例えば、VFSなどから下方に伝播された演算子及び条件に適合するタプルを識別するために、ロードされたページのタプルを処理するように調整され得る。記憶マネージャ320は、クエリセマンティクス、具体的には演算子及び任意選択で条件をページキャッシュ管理モジュール322Aに伝播するために拡張ページキャッシュAPIを使うことができる。
旧来のページキャッシュ管理モジュールは、通常、データチャンク、具体的にはページを記憶装置206などの記憶媒体から高速メモリにロードするように構成される。調整済みページキャッシュ管理モジュール322Aは、演算子及び条件に適合するタプルを識別するために、データベース208からロードされページキャッシュの1つ又は複数のページに記憶されたタプルを処理するように構成されるので、旧来のページキャッシュ管理モジュールの機能性を拡張する。ページキャッシュ管理モジュール322Aは、記憶マネージャ320からクエリセマンティクスを受け取って、ロードされたページのタプルを処理するために、1つ又は複数の関数、例えば、init()、iter()、fini()などを適用することができる。
調整済みページキャッシュ管理モジュール322A、特にinit()、iter()、fini()関数は、プッシュダウンされた関係演算子をサポートするために実装されたクエリセマンティクス処理モジュールを動的にロードすることによって実装され得る。クエリセマンティクス処理モジュールは、クエリエンジン314から記憶エンジン316及び記憶マネージャ320を経てずっと下方に伝播された演算子及び任意選択の条件に適合するタプルを検索するためのロードされたページの処理をサポートするために、クエリセマンティクスとその文脈の両方だけでなく、ページ及びタプルの構造も認識するように設計及び構成される。
init()、iter()、及びfini()関数は、OS220のカーネルモジュールの内部に実装され得るので、調整済み関数を含むクエリセマンティクス処理モジュールは、OS220によって提供される1つ又は複数の関数、機構及び/又はサービスを使用して動的にロードされ得る。例えば、OS220がLinuxである場合、クエリセマンティクス処理モジュールは、モジュールを削除するための「rmmod」コマンドと任意選択で対になった、モジュールをLinuxカーネルに挿入するための「insmod」コマンドを使用して動的にロードされ得る。別の実施例で、OS220がLinuxであると再び仮定して、クエリセマンティクス処理モジュールは、クエリセマンティクス処理モジュールをLinuxカーネル・ページ・キャッシュに配備するためにeBPF仮想マシンを使用して動的にロードされ得る。
クエリセマンティクス処理モジュールは、データベースシステム200に動的にロードされ得、具体的にはRDBMS210をロードする間にOS220のカーネルにロードされ得る。しかしながら、RDBMS210をロードする前にOS220のカーネルにクエリセマンティクス処理モジュールをロードすることが可能である。
OS220のページキャッシュ管理モジュールは、したがって、カーネルモジュールを含むモジュールがそれらの調整されたinit()、iter()、及びfini()関数の実装をインスタンス化するために使用することができる登録機能をエクスポートすることができる。
調整済みページキャッシュ管理モジュール322Aは、RDBMS210に関連したクエリ演算子に必ずしも限定されない1つ又は複数のタイプの計算を使用した、適合タプル252を検索するためのロードされたページの追加の処理を含む、init()、iter()、及びfini()関数の内部で実行されるコードを意識していなくてもよい。しかしながら、RDBMS210の実装で、init()、iter()、及びfini()関数は、プッシュダウンされたクエリセマンティクスに従ってタプルを処理するために設計及び構成され得る。
ページキャッシュ管理モジュール322Aは、ロードされたタプルを読み出すために第1のロードされたページにアクセスする前にinit()関数を起動する(呼び出す)ことができる。init()関数は、クエリセマンティクス、すなわち演算子及び任意選択の条件を記憶するための必要なデータ構造を初期化することができる。
ページキャッシュ管理モジュール322Aは、それから、NDPシステムコールによって要求されたすべてのページに対して、調整されたiter()関数を起動する(呼び出す)ことができる。ページキャッシュ管理モジュール322Aは、演算子及び条件に適合するタプルを識別するために、記憶された演算子及び任意選択の条件に従ってそれぞれのページのタプルを処理するためにページキャッシュにロードされた後、ページごとにiter()関数を実行することができる。iter()関数を実行して、ページキャッシュ管理モジュール322Aは、結果、すなわち識別されたタプルをバッファに記憶することができ、バッファは、記憶エンジン316に割り当てられたユーザバッファにさらにコピーされ得る。
最後のiter()関数を実行し、したがって、ページキャッシュにロードされた最後のページを処理した後、ページキャッシュ管理モジュール322Aは、クエリセマンティクス、すなわち演算子及び任意選択の条件を記憶するために使用されたデータ構造を解放するためにfini()関数を起動する(呼び出す)ことができる。
メモリ管理モジュール322がOS220の固有のメモリ管理モジュールをバイパスする場合、例えば、記憶エンジン316がDirect I/Oなどを使う場合、記憶エンジン316は、クエリセマンティクスをバッファプール管理モジュール322Bに転送するように構成及び/又は調整され得る。そのような場合、図7で本明細書に後述されるように、APIは、記憶エンジン316からバッファプール管理モジュール322Bへのクエリセマンティクス、すなわち演算子及び任意選択で条件の伝播をサポートするように調整及び/又は拡張され得る。その上、拡張APIは、バッファプール管理モジュール322Bから記憶エンジン316への伝播された演算子に適合するタプルの転送をサポートするために適用され得る。当然ながら、記憶エンジン316及びバッファプール管理モジュール322Bは、拡張APIをサポートするように調整され得る。この場合、バッファプール管理モジュール322Bと記憶マネージャ320との間のインタフェースは、旧来のRDBMSに対して変化しないことに留意されたい。
図7に対してここで参照が行われ、図7は、本発明のいくつかの実施形態による、記憶マネージャ(VFSなど)を使用して記憶媒体から取得されたデータベースのタプルを処理するために記憶エンジンによって利用される例示的な調整済みバッファプール管理モジュールの略図である。調整済みバッファプール管理モジュール322Bは、記憶エンジン316などの記憶エンジンからの演算子及び任意選択で条件の伝播をサポートするように構成され得る。
調整済みページキャッシュ管理モジュール322Aについて説明されたのと同様に、バッファプール管理モジュール322Bを通常統合する記憶エンジン316は、クエリセマンティクスを受け取って、記憶媒体206から取得されたタプルを処理するために、例えば、init()、iter()、及びfini()関数などの1つ又は複数の関数を使用することができる。
バッファプール管理モジュール322Bは、記憶装置206にアクセスして、記憶装置206に記憶されたデータ、特にデータベース208などのデータベースのタプルを取得するために、OS220などのOSの1つ又は複数のサービス、具体的には記憶マネージャ320などの記憶マネージャを使用することができる。
ページキャッシュ管理モジュール322Aについて説明されたように、調整済みバッファプール管理モジュール322B、特にinit()、iter()、fini()関数は、既存のツールチェーン(コンパイラ、リンカなど)によって提供される動的ローディング関数、機構及び/又はサービスを使用してクエリセマンティクス処理モジュールを動的にロードすることによって実装され得る。クエリセマンティクス処理モジュールは、ページキャッシュ管理モジュール322Aについて説明されたように、下位レベルのソフトウェアモジュールへの、すなわちバッファプール管理モジュール322Bへのクエリセマンティクスの転送(伝播する)をサポートするため、並びに任意選択で、適合タプルを記憶エンジン316に戻しもっと先でクエリエンジン314に戻すために、init()、iter()、fini()関数及び論理を含み得る。
図1に対してもう一度参照が行われる。
108に示されるように、メモリ管理モジュール322、例えば、ページキャッシュ管理モジュール322A及び/又はバッファプール管理モジュール322Bは、演算子に従い、記憶エンジン316から下方に伝播された条件に任意選択で従って、データベース208から取得されたタプルを処理して、伝播された演算子に適合しかつ任意選択で条件に適合するタプルを識別することができる。
記憶装置206からデータ、具体的にはデータベース208のタプルを取得した後、メモリ管理モジュール322は、適合タプル252を識別するために当技術分野で知られているように、伝播された演算子及び任意選択の条件に従って、取得されたタプルを処理することができる。
例えば、タプルがページキャッシュ管理モジュール322Aによって処理される場合、記憶装置206から高速メモリにデータページをロードするために旧来のOSによって通常使用されるページキャッシュ管理モジュール322Aは、記憶エンジン316から記憶マネージャ320を介して下方に伝播された演算子及び条件に適合するタプルを識別するために、ロードされたページのタプルをさらに処理するように調整され得る。
別の実施例で、タプルが調整済みバッファプール管理モジュール322Bによって処理される場合、調整済みバッファプール管理モジュール322Bは、伝播された演算子に適合しかつ記憶エンジン316から下方に伝播された条件に任意選択で適合するタプルを識別するために、取得されたタプルを処理することができる。
110に示されるように、メモリ管理モジュール322は、適合タプル(見つかった場合)を記憶エンジン316に返すことができる。そのようなものとして、記憶エンジン316は、すべてのタプルが旧来の記憶エンジンに旧来のメモリ管理モジュールによって返される既存のRDBMSアーキテクチャによってなされ得るように、データベース208から取得されたすべてのタプルを受け取るよりむしろ、演算子に適合しかつ任意選択で条件に適合するタプルのみを受け取ることができる。
例えば、タプルがOS固有のページキャッシュ管理モジュール322Aによって処理される場合、調整済みページキャッシュ管理モジュール322Aは、適合タプルを記憶マネージャ320に転送することができ、記憶マネージャ320は、適合タプルを記憶エンジン316に、例えば、記憶エンジン316に割り当てられたユーザバッファに転送するために拡張OS APIを適用することができる。
別の実施例で、タプルが直接I/Oアクセス・バッファ・プール・管理モジュール322Bによって処理される場合、通常記憶エンジン316に統合される調整済みバッファプール管理モジュール322Bは、適合タプルを記憶エンジン316に内部で転送することができ、記憶エンジン316は、それらを記憶エンジン316に割り当てられたユーザバッファに記憶することができる。
112に示されるように、記憶エンジン316は、クエリセマンティクスAPIを使用して、下方に伝播された演算子及び任意選択の条件に適合するとメモリ管理モジュール322によって識別されたタプルをクエリエンジン314に返す。
114に示されるように、クエリエンジン314は、適合タプル252をリクエストマネージャ310に転送することができ、リクエストマネージャ310は、適合タプル252を出力することができる。
任意選択で、本明細書に前述されたように、クエリエンジン314は、クエリ250から抽出された演算子の一部のみを記憶マネージャへと下方に伝播する。伝播された演算子に適合するタプルを記憶エンジン316から受け取った後、クエリエンジン314は、返されたタプルに、適合タプル252を識別するために下方に伝播されなかった1つ又は複数の他の演算子を適用することができる。
図8A、図8B及び図8Cに対してここで参照が行われ、図8A、図8B及び図8Cは、クエリエンジンから記憶エンジンを経て、本発明のいくつかの実施形態による、記憶媒体から取得されたデータベースのタプルを処理するように調整された調整済みメモリ管理モジュールに、クエリ演算子及び条件を伝播する例示的なプロセスのフローチャートを提示する。プロセス100などのプロセスの変形である2つの例示的なプロセス800A及びプロセス800Bは、データベースシステム200などのデータベースシステムによって実行され得る。特にプロセス800A及びプロセス800Bは、記憶媒体206などの記憶媒体に記憶されたデータベース208などの関係データベースを管理するRDBMS210などの調整済みRDBMSを実行するデータベースシステム200によって実行される。RDBMS210は、適合タプルを識別するためにデータベース208から取得されたタプルに伝播された演算子及び任意選択の条件を適用するように調整されてこれらの適合タプルで記憶エンジンに応答する1つ又は複数のメモリ管理モジュールを使う記憶エンジン316などの記憶エンジンに、クエリセマンティクス(すなわち、演算子及び任意選択で条件)を伝播するように調整されたクエリ314などのクエリエンジンを含む。
プロセス800Aは、OS220などのOSの記憶マネージャ320などの調整済み記憶マネージャ、例えば、OS220に固有の調整済みメモリ管理モジュール、具体的には記憶媒体206にアクセスすることによってデータベース208から取得されたタプルを処理するように調整されたページキャッシュ管理モジュール322Aなどのページキャッシュ管理モジュールを使用するVFS記憶マネージャを利用する記憶エンジン316などの記憶エンジンを備えたRDBMS210によって実行され得る。
プロセス800Bは、記憶媒体206にアクセスするために記憶マネージャ320を使用してデータベース208から取得されたタプルを処理するように調整されたバッファプール管理モジュール322Bなどのメモリ管理モジュールを統合する記憶エンジン316を備えたRDBMS210によって実行され得る。
本明細書に前述されたように、プロセス800A及びプロセス800Bのほとんどのステップは類似している。ステップ802からステップ830までは、RBDMS210の両方の実装で同一であるクエリエンジン314及び記憶エンジン316によって行われ、それゆえプロセス800Aとプロセス800Bの両方で類似している。下位レベルでは、第1の実装で、すなわち、プロセス800Aで、記憶エンジン316は、クエリセマンティクスを記憶マネージャ320に転送し、一方第2の実装で、すなわち、プロセス800Bで、記憶エンジン316は、クエリセマンティクスを記憶エンジン316に通常統合されるバッファプール管理モジュール322Bに(内部で)転送する。それぞれのステップ832A及びステップ832Bの構文は、それゆえ、それぞれのソフトウェアモジュールに適合するために異なっている。
加えて、プロセス800Aで適用されるページキャッシュメモリ管理モジュール322Aは、タプルを処理するとともに記憶媒体206にアクセスするソフトウェアモジュールであるから、ページキャッシュメモリ管理モジュール322Aは、ステップ842Aで説明されるように記憶媒体208からページを取得する。これは、記憶マネージャ320によって取得された後にバッファプール管理モジュール322Aがタプルを処理するプロセス800Bとは異なる。それゆえ、ステップ842Bで説明されるように、バッファプール管理モジュール322Aは、記憶マネージャ320を使用してページを取得する。
802に示されるように、プロセス800A及びプロセス800Bは、プロセス100のステップ102で説明されるように、リクエストマネージャ310などのリクエストマネージャがクエリ250などのクエリを受け取ることから始まる。リクエストマネージャ310は、クエリ250を処理するためのリソースをさらに割り当ててスケジューリングすることができる。
804に示されるように、正規表現を使用して、パーサ312などのパーサが、クエリ250によって規定されたクエリ要素を識別するために当技術分野で知られているように、受け取ったクエリ250を解析することができる。
806に示されるように、クエリエンジン314は、プロセス100のステップ102で説明されるようにパーサ312によって識別されたクエリ要素から抽出された1つ又は複数の演算子に対するクエリプランを作成することができる。クエリエンジン314は、演算子の1つ又は複数をクエリ要素からさらに抽出される1つ又は複数の条件(存在している場合)にさらに関連付けることができる。
808に示されるように、クエリエンジン314は、クエリプランに従ってデータベース208内の処理タプルを指示し、クエリプランは、当技術分野で知られているように、それぞれが関係演算子又はテーブルアクセスであり得る複数のノードを含む抽象構文木(Abstract Syntax Tree、AST)として規定される。各ノードは、その子ノードと通信するために同じAPI(すなわち、open、next、close)を使用する。ASTにおける呼出しの伝播は、呼出しを受け取って再帰的にそれらを伝播する、最上位の演算子(ルート)から始まる。明確にするために、初期のopen()呼出し及び終了のclose()呼出しは提示されない。next()呼出しは、次のタプルで返答するために次の演算子を指示する。そのようなものとして、ASTのルート(すなわち、最初の演算子)は、子の最初のタプルを返すために、その子のnext()API関数を呼び出す。これは、テーブルアクセスである、すなわち、データベース208のタプルへのアクセスを必要とする子ノードに到達するまでASTの各枝を通して再帰的になされる。
条件ステップである810に示されるように、AST中の(現在処理されている)ノードが関係演算子、すなわちクエリエンジン呼出しである場合、プロセス800A/800Bは、812に分岐する。次のノードが関係演算子でない、すなわち記憶エンジン316によって扱われるテーブルアクセスである場合、記憶エンジン316は、呼び出される必要があり、プロセス800A/800Bは、814に分岐する。通常、ASTのトップレベルは演算子であり、ボトムレベルのみがテーブルアクセスである。それゆえ、本質的に、最下の関係演算子のみが、実際にデータベース208からタプルを読み出す必要があり、一方残りの演算子は、クエリプランに応じて、下位レベルの関係演算子のnext()関数からタプルを読み出すことができる。それゆえ、AST中の次のノードが関係演算子である場合、プロセスは、812に分岐し、一方AST中の次のノードがテーブルアクセスである場合、記憶エンジン316は、呼び出される必要があり、プロセスは、814に分岐する。
812に示されるように、現在のノードは演算子であるから、現在の演算子に従って処理されるべきタプルは、次の下位レベルの演算子から取得されてもよく、プロセスは、ASTを下方に伝播し続けるために810へと分岐を戻る。
814に示されるように、クエリエンジン314は、ASTを下方に伝播し終えており、したがって、テーブルアクセスを見いだしており、その場合、制御は、データベーステーブルの次のタプルを取得するために記憶エンジン316に移行する。記憶エンジンは、記憶エンジン316で次のテーブルを探査すること、換言すれば、伝播された演算子に適合しかつ任意選択で条件に適合するテーブルから読み出すタプルが依然としてあるかどうか、並びにテーブルの次のタプルが記憶エンジン316に既に存在するかどうかを決めることによって始まる。
条件ステップである816に示されるように、伝播された演算子及び条件に適合するデータベース208に、具体的にはデータベース208のそれぞれのテーブルに、処理されるべきそれ以上のタプルがない場合、プロセス800A/800Bは、ステップ818に分岐する。データベース208のそれぞれのテーブルに追加のタプルがあり得る場合、プロセス800A/800Bは、ステップ820に分岐する。
818に示されるように、伝播された演算子及び条件に適合するデータベースにそれ以上のタプルがなく、したがって記憶エンジン316は空タプルを返す。
条件ステップである820に示されるように、伝播された演算子及び条件に適合する次のタプルが記憶エンジン314で利用可能であるかどうかを判定するために、タプルヒットが検査される。次のタプルが記憶エンジン314で利用可能である場合、プロセス800A/800Bは、ステップ822に分岐する。例えば、ページのセットが前もって取得されたと仮定して、下方に伝播された演算子及び条件に応答して、演算子に適合しかつ任意選択で条件に適合する1つ又は複数のタプルが、それぞれのメモリ管理モジュールから、すなわち、プロセス800Aについてはページキャッシュ管理モジュール322Aから、又はプロセス800Bについてはバッファプール管理モジュール322Bから受け取られる。次のタプルが記憶エンジン314で利用可能でない場合、プロセス800A/800Bは、ステップ828に分岐する。
822に示されるように、伝播された演算子及び条件に適合する、次のタプルが記憶エンジン314で利用可能である。それゆえ、記憶エンジン314は、クエリエンジン314に次のタプルを単純に返す。
条件ステップである824に示されるように、クエリエンジン314は、記憶エンジン314から返されたタプルが空タプルであるかどうかを検査する。そのような場合、プロセス800A/800Bは、ステップ826に分岐する。次のタプルが空タプルでなく、したがって、演算子に適合しかつ任意選択で条件に適合する少なくとももう1つのタプルがある場合、プロセス800A/800Bは、ステップ828に分岐する。
826に示されるように、空タプルが、処理されるべきそれ以上のタプルがないことを示し得る。クエリエンジン314は、それゆえ、下方に伝播された演算子と任意選択の条件の両方に適合するタプルを含む結果テーブル、並びにクエリエンジン314によって処理された演算子及び任意選択で条件を返すことができる。このステップは、クエリエンジン314がすべてのタプルを処理し終えていることを示す。それゆえ、クエリの処理全体が終わっており、我々はクエリの返答として結果テーブルを返すことができる。
ステップ828に示されるように、タプルが空でない場合、クエリのすべての演算子及び条件に適合するタプルを最終的に生成するために、逆方向にクエリエンジン314の演算子を適用すること(すなわち、再帰を展開すること)によって結果タプルが生成される。クエリエンジンで演算子を適用することは、下方に伝播されなかった演算子のみを指すことに留意されたい。空でないタプルは、下方に伝播された演算子及び任意選択の条件に既に適合している。
本明細書に前述されたように、クエリの初期処理中に、RDBMS210のソフトウェアモジュールの1つ又は複数、例えば、クエリエンジン314は、どの演算子及び任意選択でどの条件が下方に伝播されてメモリ管理モジュール322によって適用されるべきであるか、並びにどの演算子及び任意選択でどの条件がクエリエンジン314それ自体によって適用されるべきであるかを決定(選択)することができる。それゆえ、ステップ812における演算子(next())は、クエリエンジン314によって適用されるように選択された演算子についてのみ、クエリエンジン314で再帰を呼び出して始める。その上、メモリ管理モジュール322によって適用されるように選択された演算子及び任意選択の条件は、クエリプランを生成した後に一度だけ記憶エンジンへと下方に伝播され得、したがって、(同じクエリについて)記憶エンジン316への各後続呼出しのために既に下方に伝播されていると仮定される。
ステップ830に示されるように、生成されたタプルは、結果テーブルに追加される。プロセス800A/800Bは、プロセス全体を再び繰り返すためにステップ808へと分岐を戻ることができる。換言すれば、前述の演算子のセットをデータベース208の次のタプルに、具体的にはデータベース208からロードされたタプルのテーブルに適用する。
プロセス800A/800Bは、それから、ステップ808へと分岐を戻り、ステップ808で、クエリエンジン314のルート演算子は、次のタプルのために再び全プロセスを起動する。
プロセス800Aの一部である832Aに示されるように、次のタプルが記憶エンジン316で利用可能でない場合、追加されたシステムコールsys_read_ndp()を使用して、記憶エンジン316は、クエリエンジン314から受け取ったクエリセマンティクス、すなわち演算子及び任意選択の条件を記憶マネージャ320、例えば、VFS層に転送する。記憶マネージャ320は次に、記憶媒体206、具体的にはデータベース208にアクセスするために記憶マネージャ320によって使用されるページキャッシュ管理モジュール322Aにクエリセマンティクスを転送する。ステップ828で本明細書に前述されたように、ページキャッシュ管理モジュール322Aによって適用及び処理されるように選択された演算子及び任意選択の条件は、ページキャッシュ管理モジュール322Aへの最初の呼出し中に一度だけ下方に伝播され得、それゆえ、(同じクエリについて)ページキャッシュ管理モジュール322Aへのその後のアクセスのために再び下方に伝播されるべきではない。
プロセス800Bの一部である832Bに示されるように、次のタプルが記憶エンジンで利用可能でない場合、記憶エンジン316は、クエリエンジン314から受け取ったクエリセマンティクス、すなわち演算子及び任意選択で条件をバッファプール管理モジュール322Bに転送する。しかしながら、通常バッファプール管理モジュール322Bは記憶エンジン316の一部であるから、このクエリセマンティクスの転送は、通常、記憶エンジン316内で実行される内部動作、例えば、関数init()、iter()及びfini()であり得る。
ステップ832Aでページキャッシュ管理モジュール322Aについて説明されたのと同様に、バッファプール管理モジュール322Bによって適用及び処理されるように選択された演算子及び任意選択で条件は、クエリプランを生成した後に一度だけ記憶エンジンへと下方に伝播され得、それゆえ、(同じクエリについて)記憶エンジン316へのその後のアクセスのために再び下方に伝播されるべきではない。
834に示されるように、メモリ管理モジュール322、プロセス800Aのページキャッシュ管理モジュール322A又はプロセス800Bのバッファプール管理モジュール322Bのいずれかは、データベース208のデータの次のページ、具体的にはそれぞれのテーブルのデータを含むページを探査する。
条件ステップである836に示されるように、データベース208のすべてのページ、具体的にはそれぞれのテーブルのデータを含むページが、メモリにロードされて処理された場合、プロセス800A/800Bは、ステップ836に分岐する。メモリにロードされなかったそれぞれのテーブルのデータを含む追加のページがある場合、プロセス800Aは、ステップ838に分岐する。
838に示されるように、メモリ管理モジュール322(すなわち、ページキャッシュ管理モジュール322A又はバッファプール管理モジュール322B)が、データベース208からロードされた後にそれぞれのテーブルのすべてのタプルを処理することを完了した後、メモリ管理モジュール322は、メモリ管理モジュール322に割り当てられたシステムバッファに記憶された適合タプルを記憶エンジン316に割り当てられたユーザバッファにコピーすることができる。プロセス800A/800Bは、それから、クエリエンジン314に制御を移すためにステップ820へと分岐を戻ることができ、クエリエンジン314は、次のタプルの処理を起動することができる。
条件ステップである840に示されるように、ページヒットの場合、すなわち次のタプルを含む次のページがページキャッシュで利用可能である(ロードされている)場合、プロセス800A/800Bは、ステップ846に分岐する。ページヒットがない場合、すなわち、次のタプルを含む次のページが、ロードされたページで利用可能でない場合、プロセス800A及びプロセス800Bは、それぞれステップ842A及びステップ842Bに分岐する。
プロセス800Aの一部である842Aに示されるように、ページキャッシュ管理モジュール322Aは、記憶装置206から次のページを取得する。
プロセス800Bの一部である842Bに示されるように、バッファプール管理モジュール322Bは、記憶マネージャ320、例えば、VFSを使用して記憶装置206から次のページを取得する。
844に示されるように、記憶装置206から取得されたページは、それぞれページキャッシュ又はバッファプールに挿入される(ロードされる)。
846に示されるように、ページキャッシュ管理モジュール322A又はバッファプール管理モジュール322Bは、それぞれページキャッシュ又はバッファプールから、次のページをフェッチする。
848に示されるように、ページキャッシュ管理モジュール322A又はバッファプール管理モジュール322Bは、演算子に適合しかつ記憶マネージャ320から受け取った条件に任意選択で適合するタプルを識別するために、現在処理されたページ内のすべてのタプルを処理する。
850に示されるように、ページキャッシュ管理モジュール322A又はバッファプール管理モジュール322Bは、処理されたページで識別された適合タプルをメモリ管理モジュール322、具体的にはページキャッシュ管理モジュール322A又はプール管理モジュール322Bに割り当てられたシステムバッファにコピーする。
プロセス800A及びプロセス800Bは、当然ながら、データベース208から取得したすべてのタプルを続けて処理することができる反復プロセスである。
本出願から成熟する特許多くの関連するシステム、方法及びコンピュータプログラムが開発されることになり、クエリセマンティクス及びクエリ演算子という用語の適用範囲は、そのような新技術を先験的に含むように意図される。
本明細書で使用される用語「約(about)」は、±10%を指す。
用語「備える(comprises,comprising)」、「含む(includes,including)」、「有する(having)」及びこれらの活用形は、「含むが、これに限定されない(including but not limited to)」を意味する。
用語「からなる(consisting of)」は「含み、かつこれに限定される(including and limited to)」を意味する。
本明細書で使用される、単数形「a」、「an」及び「the」は、文脈が別途明確に定めない限り、複数を指すことを含む。例えば、用語「合成物(a compound)」又は「少なくとも1つの合成物(at least one compound)」は、それらの混合物を含む、複数の合成物を含み得る。
本出願全体を通して、本発明のさまざまな実施形態が範囲形式で提示され得る。範囲形式での記述が単に利便性及び簡潔さを目的としており、本発明の適用範囲に対する柔軟性のない制限と解釈されるべきではないことは、理解されるべきである。したがって、範囲の記述は、具体的に開示されたすべての可能な部分範囲及びその範囲内の個々の数値を有するとみなされるべきである。例えば、1~6などの範囲の記述は、1~3、1~4、1~5、2~4、2~6、3~6などの具体的に開示された部分範囲、並びにその範囲内の個々の数、例えば、1、2、3、4、5及び6を有するとみなされるべきである。これは、範囲の広さにかかわらず当てはまる。
本明細書に数値範囲が示されているときはいつでも、それは、示された範囲内の任意の引用された数字(分数又は整数)を含むものとする。第1の指示数と第2の指示数と「の間の範囲である/範囲」、及び第1の指示数「から」第2の指示数「までの範囲である/範囲」という表現は、本明細書においては互換的に使用され、第1の指示数及び第2の指示数と、それらの間のすべての分数及び整数とを含むものとする。
明確にするために別個の実施形態に関連して説明されている、本発明のある特定の複数の特徴はまた、単一の実施形態において組み合わせて設けられてもよいことが理解される。逆に、簡潔さを目的として単一の実施形態に関連して説明されている、本発明のさまざまな特徴はまた、個々に設けられてもよく、又は任意の適切な部分的組合せで設けられてもよく、又は本発明の任意の他の説明されている実施形態において適切に設けられてもよい。さまざまな実施形態に関連して説明されているある特定の特徴は、実施形態がそれらの要素なしでは動作不能な場合を除いて、それらの実施形態の本質的な特徴とみなされるべきではない。