(57)【特許請求の範囲】
【請求項１】
システムであって、
テーブルのパーティションに対応するアイテムの集合を維持するデータベース管理システムであって、前記アイテムの集合にアイテムを格納する第１のリクエストを、前記第１のリクエストを示す情報をログファイルに少なくとも書き込むことによって処理する前記データベース管理システムと、
前記データベース管理システムが前記第１のリクエストを処理することに応答して実行される第１の命令セットにアクセスできる、第１のコンピューティングノードを含む複数のコンピューティングノードと、
第２のコンピューティングノードであって、少なくとも、
前記第１のリクエストを示す前記情報を受信し、
前記複数のコンピューティングノードにおけるコンピューティングノードのリソース使用率をモニタリングし、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードのうちの少なくとも他のコンピューティングノードよりも低いことに少なくとも部分的に基づいて、前記第１の命令セットを実行するための前記第１の１つのコンピューティングノードを選択し、
追加のコンピューティングノードに前記第１の命令セットを実行させるデータを送信する前記第２のコンピューティングノードと、を備える、前記システム。
【請求項２】
前記第２のコンピューティングノードが、少なくとも、
前記第１のコンピューティングノードのリソース使用率をモニタリングし、
前記リソース使用率に少なくとも部分的に基づいて、前記第１の命令セットを実行するために、前記複数のコンピューティングノードのうちのあるコンピューティングノードを選択する、請求項１に記載のシステム。
【請求項３】
前記第２のコンピューティングノードが、少なくとも、
前記第１の命令セットのパフォーマンスに関連付けられる、前記第１のコンピューティングノードのリソース使用率をモニタリングし、
前記リソース使用率に基づいて、前記第１の命令セットのパフォーマンスを停止することを決定する、請求項１に記載のシステム。
【請求項４】
前記第１の命令セットが、前記アイテムの主キー、前記アイテムの以前の値または前記アイテムの新しい値の少なくとも１つを備えるパラメータの関数に対応する、請求項１に記載のシステム。
【請求項５】
前記複数のコンピューティングノードの容量が、前記データベース管理システムから独立してスケーリングされ得る、請求項１に記載のシステム。
【請求項６】
データベーストリガ機能を処理する方法であって、
第１のコンピューティングノードを含む複数のコンピューティングノードを、データベース管理システムによって維持されるアイテムの集合にアイテムを格納するリクエストに応答して実行される第１の命令セットに関連付けることであって、前記アイテムはテーブルのパーティションに対応するものであることと、
前記アイテムの集合に前記アイテムを格納する前記リクエストを示す情報を受信することと、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードの第２のコンピューティングノードよりも低いという判定に少なくとも部分的に基づいて、前記第１の命令セットを前記第１のコンピューティングノードで実行させることと、
前記第１のコンピューティングノードで前記第１の命令セットを実行することによって使用されるリソースに少なくとも部分的に基づいて、前記第１の命令セットを、前記複数のコンピューティングノードの追加のコンピューティングノードで実行させることと、を備える、前記方法。
【請求項７】
前記第１の命令セットを実行することによって使用されるリソースが閾値の量を超えたとき、前記第１の命令セットのパフォーマンスを停止することをさらに含む、請求項６に記載の方法。
【請求項８】
前記第１の命令セットが、前記アイテムの主キーまたは前記アイテムに対する変更を示す情報の少なくとも１つを備える１つまたは複数のパラメータの関数に対応する、請求項６に記載の方法。
【請求項９】
前記アイテムを格納する前記リクエストを示す前記情報が、ログのリポジトリから読み出される、請求項６に記載の方法。
【請求項１０】
前記テーブルの前記パーティションに対応する第１のハッシュ空間と複数の命令セットの関連性を示す情報を格納することであって、前記複数の命令セットは前記第１の命令セットを含む、前記格納することと、
前記第１のハッシュ空間に関連付けられた前記複数の命令セットをそれぞれ、前記アイテムを格納する前記リクエストを示す前記情報を受信したことに応答して実行させることと、をさらに含む、請求項６に記載の方法。
【請求項１１】
前記第１の命令セットを含む複数の命令セットを、前記アイテムを格納する前記リクエストを示す前記情報を受信したことに応答して実行させることをさらに含む、請求項６に記載の方法。
【請求項１２】
システムであって、
１つまたは複数のプロセッサと、
命令を格納する１つまたは複数の非一時的なコンピュータ可読ストレージ媒体と、を備え、前記システムは、前記１つまたは複数のプロセッサによって前記命令が実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
第１のコンピューティングノードを含む複数のコンピューティングノードを、データベース管理システムによって維持されるアイテムの集合に複数のアイテムを格納するリクエストに応答して実行される第１の命令セットに関連付けさせ、
前記アイテムの集合にアイテムを格納する、複数のリクエストの第１のリクエストを示す情報を受信させ、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードの第２のコンピューティングノードよりも低いという判定に少なくとも部分的に基づいて、前記第１の命令セットを前記第１のコンピューティングノードで実行させる命令を格納させ、
前記第１のコンピューティングノードで前記第１の命令セットを実行することによって使用されるリソースに少なくとも部分的に基づいて、前記第１の命令セットを、前記複数のコンピューティングノードの追加のコンピューティングノードで実行することを示す情報を送信させる、前記システム。
【請求項１３】
前記１つまたは複数のコンピューティングデバイスによって実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
第１のハッシュ空間と複数の命令セットの関連性を示す情報を格納させ、前記複数の命令セットは前記第１の命令セットを含み、
前記第１のハッシュ空間に関連付けられた前記複数の命令セットをそれぞれ、前記第１のリクエストを示す前記情報を受信したことに応答して実行させる命令をさらに備える、請求項１２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１５年９月２８日に出願された米国特許出願第１４/８６８，２３６号の利益を主張するものであり、この出願の開示は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００２】
データベーストリガは、通常、データベース上で生じたイベントに応答して実行される命令を備える。データベーストリガは、例えば、データベース管理システムによって維持されるテーブルに関連付けられ、挿入、更新または削除コマンドがテーブル上で行われるたびに実行され得る。トリガは、データの検証、関係完全性の維持及び他の機能などの様々な目的のために用いられ得る。データベーストリガを実装する従来の手法は、トリガの定義を格納し適用可能なイベントが生じるとトリガを実行するデータベース管理システムを含み得る。
【０００３】
以下の詳細な説明は、添付の図面とあわせて閲読されることにより、より良好に理解され得る。例示する目的のために、本開示の態様の様々な例が図面に図示されるが、本発明は、開示される特定の方法及び手段に限定されない。
【図面の簡単な説明】
【０００４】
【図１】分散型ストリームベースのトリガシステムを描写した図である。
【図２】ストリームベースのトリガ機能を処理するシステムを描写した図である。
【図３】データベースログファイルの複製及びストリーミングを描写した図である。
【図４】ログファイルイベントのストリームの送信器として構成されたコンピューティングノードを描写した図である。
【図５】トリガ機能の実行器として構成されたコンピューティングノードを描写した図である。
【図６】イベントストリームに基づいてトリガ機能を実行することを描写した流れ図である。
【図７】イベントストリームに基づいてトリガ機能を実行するプロセスを描写した流れ図である。
【図８】１つまたは複数のコンピューティングノードのグループでトリガ機能を実行することを描写した流れ図である。
【図９】本開示の態様を実施し得るコンピューティング環境の実施形態を描写したブロック図である。
【図１０】本開示の態様を実施し得るコンピューティングシステムの実施形態を描写したブロック図である。
【発明を実施するための形態】
【０００５】
本明細書で開示するのは、ホスト型データベースシステムに対するスケーラブルなトリガサービスを提供するシステム、方法及びコンピュータプログラム製品である。トリガまたはトリガ機能は、データベース管理システム上で生じるイベントに応答して実行される命令セットであってもよい。例えば、データベース管理システムは、アイテムの集合、１つの例としては、様々なアイテムすなわちロウを含むデータベーステーブルを維持し得る。アイテムがテーブルに挿入されるとまたは既存のアイテムが修正されると、トリガ機能が起動して、様々な関連動作を行い得る。例えば、アイテムが挿入または修正されると、トリガ機能が起動して、アイテムの検証、異常なアクセスパターンの検出及び他のタスクを行い得る。アイテムの検証は、レンジチェックなどの機能を含み得る。異常なアクセスパターンの検出は、更新と更新の間の関係の検査、更新頻度に関するメトリクスの計算などを含み得る。
【０００６】
ホスト型データベースシステムでは、ホスティングサービスのカスタマがトリガ機能の使用を希望する場合がある。しかしながら、ホスト型データベースサービスはマルチテナントの場合があり、これは、１つより多いカスタマが所与のデータベース管理システムによって対応され得ることを意味する。結果的に、トリガ機能がデータベース管理システムによって実行されるもの等のトリガに対する従来のいくつかの手法は、マルチテナントシステムには不適切であり得る。１つのテナントのためにトリガ機能を実行することは、例えば、別のテナントによって必要とされるリソースを消費し得る。
【０００７】
ホスト型データベースシステムも、スケーラブルであってもよい。より大きな作業負荷またはデータセットを収容するために、シャードと称されることもある追加のコンピューティングノードがシステムに追加され得る。本明細書中に開示されるように、トリガ機能を実行するシステムもスケーラブルにされ得る。スケーリング機構は、さらに、データベースのストレージ及び作業負荷能力をスケーリングするのに用いられるノードから独立してもよい。言い換えると、コンピューティング能力は、データベース管理システムの能力から独立して、必要とされるときにトリガ機能を実行することを対象とし得る。
【０００８】
ある例では、分散型データベース管理システムは、アイテムの集合を維持し得る。データベース管理システムが、集合にアイテムを格納するリクエストを処理する際、そのリクエストを記述しているログファイルをログファイルにまず書き込むことによってそれを行う。そうすることによって、データベース管理システムは、リクエストされた変更が永続的になるようにし得る。システム障害の場合、ログファイルはアクセスされ得、障害が発生したときに中断されたリクエストを処理するためにその情報が用いられる。ログファイルは、データの集合に関するイベントを記述している情報のストリームのデータソースとしても用いられ得る。ログファイル内のデータは、特定のハッシュ空間に対応し得る。これは、パーティション作業−ログファイルを生成するデータベースは、テーブルのハッシュベースのパーティションに対応し得る−の結果として起こり得る。
【０００９】
トリガ機能を処理するために、コンピューティングノードの第１のグループが構成され得る。この構成には、機能の定義を第１のグループのコンピューティングノードにアップロードすることが含まれ得る。定義は、例えば、サービスのカスタマのクライアントデバイスからアップロードされたスクリプトファイルとして与えられ得る。スクリプトのアップロードをリクエストするとき、カスタマは、スクリプトが適用されるのはどのアイテムかの指示もクライアントデバイスに提供し得る。例えば、カスタマは、第１のテーブルに対してトリガ機能の定義の１つのセットを、第２のテーブルに対してトリガ機能の第２のセットをアップロードすることを希望してもよい。場合によっては、スクリプトは、特定のハッシュ空間またはパーティションに関連付けられ得る。いくつかの例では、ハッシュ空間はパーティションに対応し得る。
【００１０】
第２のコンピューティングノードは、コンピューティングノードの第１のグループのうちの１つであってもよくまたはその外部にあってもよく、データベースログファイルから読み出されるレコードを受信し得る。レコードの１つは、例えば、アイテムの集合にアイテムを格納するリクエストに対応し得る。レコードには、アイテムの主キー及び２つの値のセットといった情報が含まれ得る。値のセットのうち１つは、リクエストより前のアイテムに対する値であり得、セットの他方は、リクエストがデータベース管理システムによって処理された後のアイテムに対する値であり得る。
【００１１】
第２のコンピューティングノードは、コンピューティングノードの第１のグループのリソース使用率をモニタリングし得る。使用率に基づいて、トリガ機能を処理するために、コンピューティングノードが第１のグループから選択され得る。第２のコンピューティングノードは、トリガ機能を実行するべきであることを示す命令を、選択されたコンピューティングノードに送信し得る。命令には、アイテムの主キー及び古い値と新しい値のセットといった情報も含まれ得る。次いで、第１のコンピューティングノードは、与えられた情報をパラメータとして用いて、トリガ機能を実行し得る。
【００１２】
図１は、分散型ストリームベースのトリガシステム１５０を描写した図である。ストリームベースのトリガシステム１５０は、コンピューティングノードを、コンピューティングノードクラスタ１２６の１つまたは複数のコンピューティングノード１２０〜１２４に追加することによって、様々な作業負荷に対してスケーラブルであり得る。本明細書中に記載するように、コンピューティングノードは、プロセッサ及びメモリを備えるコンピューティングデバイスを含み、複数のコンピューティングノードにコンピューティングデバイスを共有することを許可する仮想化構成要素も備え得る。コンピューティングノードクラスタ１２６には、いくつかの例では、コンピューティングノードクラスタ１２６内のコンピューティングノード１２０〜１２４のアソシエーションが備えられ得る。場合によっては、コンピューティングノードクラスタ１２６は、コンピューティングノードクラスタ１２６内のコンピューティングノード１２０〜１２４間の通信を容易にするために、専用通信インフラ及びストレージエリアネットワークなどのハードウェア構成要素も備え得る。
【００１３】
データベース１００は、アイテムの集合を維持する分散型データベースであり得る。本明細書中で用いるアイテムは、データベーステーブルのロウ、値のセット等などの情報の関連セットを指し得る。通常、アイテムは、固有識別の値または値のセットに関連付けられ、これは主キーと称されることもある。
【００１４】
アイテムの集合は、パーティション１０１ａ及び１０１ｂに維持され得る。パーティションは、ある範囲のデータに対応するアイテムのサブセットを含み得る。例えば、データのより大きな集合におけるアイテムが、それらの主キーの値に基づいて水平方向に区切られ得る。これは、ハッシュ関数を主キーの値に適用することによってなされ得る。ハッシュ関数の適用によって出力されるハッシュ値は、ハッシュ空間にマッピングされ得、そしてこれらハッシュ空間は、パーティション１０１ａ、１０１ｂにマッピングされ得る。
【００１５】
データベース１００は、アイテムの集合にアイテムを格納するリクエストを処理し得る。本明細書中で用いられるように、データの格納とは、データベース１００によって維持されるメモリ及びストレージ構造に対する修正を指し得る。本明細書中で用いられるように、アイテムの格納とは、アイテムの挿入、更新または修正に関連し得る。
【００１６】
データベース１００は、描写したトランザクションログ１０２ａ、１０２ｂの１つといったトランザクションログにアイテムの更新リクエストを示す情報を格納し得る。トランザクションログ１０２ａ、１０２ｂは、ストレージデバイスで維持される１つまたは複数のファイルを含み得る。パーティション１０１ａ、１０１ｂはそれぞれ、データをトランザクションログ１０２ａ、１０２ｂに書き込み得る。リクエストを示す情報は、いくつかの例では、データベース１００がそのメモリ及びストレージ構造を更新してアイテムの更新リクエストによって指示される変更を反映するのに先立って書き込まれ得る。この手法により、データベース１００がアイテムの更新リクエストが完全に処理されるよりも前に実行を中止した場合、リクエストをトランザクションログ１０２ａ、１０２ｂから回復させることができるので、システム障害の場合において変更が永続的なものであることが確保され得る。トランザクションログのエントリはまた、データを他のデータベースインスタンスに複製するのにも用いられ得る。さらに、本明細書中に記載するように、トランザクションログ１０２ａ、１０２ｂは、ストリームベースのトリガシステム１５０によってデータのソースとして用いられ得る。トランザクションログ１０２ａ、１０２ｂのエントリは、データベース１００のアイテムの集合になされる更新を示すデータのストリームとして提供され得る。そのストリームのデータは、トリガ条件として機能し得、これに応答して、コンピューティングノードクラスタ１２６のコンピューティングノード１２０〜１２４によって様々な動作が行われ得る。
【００１７】
ログストリーミングモジュール１０４は、情報をトランザクションログ１０２ａ、１０２ｂから読み出し、その情報を、処理するために入力／出力ストリームに書き込み得る。ログストリーミングモジュール１０４は、場合によっては、情報をトランザクションログ１０２ａ、１０２ｂから直接取得し得る。他の場合には、ログストリーミングモジュール１０４は、情報を、トランザクションログ１０２ａ、１０２ｂの複製されたコピーまたはサブセットから取得し得る。ログストリーミングモジュール１０４は、いくつかの例では、入力／出力ストリームに書き込まれるであろう、トランザクションログ１０２ａ、１０２ｂからのエントリのサブセットをフィルタリングし得る。
【００１８】
ログストリーミングモジュール１０４は、トランザクションログ１０２ａ、１０２ｂの１つまたは複数から読み出しをし得る。場合によっては、ログストリーミングモジュール１０４は、年代順に順序付けられたデータのストリームを作成するために、複数のログファイル１０２ａ、１０２ｂからデータを抽出し再順序付けし得る。場合によっては、パーティションは、親パーティションが１つまたは複数の子パーティションに関連付けられた系列に関連付けられ得る。ログストリーミングモジュール１０４は、イベントのレコードが異なるログファイルに格納されているとしても、イベントのストリームをそれらが生じた順に再構成するために、パーティションの系列の知識を取得し利用し得る。
【００１９】
通常、所与のトランザクションログ１０２ａ、１０２ｂは、特定のハッシュ空間に対応し得る。これは、各パーティション１０１ａ及び１０１ｂが特定のハッシュ空間に関連付けられている結果であり得る。したがって、ログストリーミングモジュール１０４への入力は、特定のハッシュ空間内にあるアイテムに対する更新を示す情報のストリームから構成され得る。
【００２０】
ストリームのレコードは、パーティション１０１ａ、１０１ｂの１つによって維持されるアイテムの集合でアイテムを更新するリクエストを示し得る。レコードには、アイテムの主キー、アイテムの以前の値及びアイテムの新しい値などのデータが含まれ得る。
【００２１】
マッピングモジュール１１８は、ログストリーミングモジュール１０４からの情報のストリームを処理し得る。マッピングモジュール１１８は、アイテムの集合にデータを格納するリクエストの各レコードを検査しどのようにレコードを扱うべきかを決定することによって、情報のストリームを処理し得る。マッピングモジュール１１８は、コンピューティングノードクラスタ１２６の能力を用いて、アイテムの集合にデータを格納するリクエストがトリガ機能によって処理されるべきであることを判定し得る。
【００２２】
マッピングモジュール１１８は、コンピューティングノードクラスタ１２６のコンピューティングノード１２０のリソース使用率をモニタリングし得る。モニタリングは、入力／出力使用率、中央処理装置（「ＣＰＵ」）使用率などの追跡から構成され得る。マッピングモジュール１１８は、コンピューティングノードクラスタ１２６のコンピューティングノード１２０で動作する性能追跡構成要素から使用率の情報を受信し得る。
【００２３】
マッピングモジュール１１８は、コンピューティングノードクラスタ１２６のコンピューティングノード１２０〜１２４の特定のノードが、ストリームから受信した情報に基づいてトリガ機能を実行するべきであることを判定し得る。判定は、選択されたコンピューティングノード−例えば、コンピューティングノードクラスタ１２６の他のコンピューティングノード１２２〜１２４の少なくとも１つよりも使用率が低い、描写されたコンピューティングノード１２０に基づき得る。場合によっては、マッピングモジュール１１８は、コンピューティングノードクラスタ１２６のコンピューティングノード１２０〜１２４によって行われた以前の処理も検討し得る。例えば、マッピングモジュール１１８は、所与のアイテムに対して、当該アイテムに対応する全ての更新が同一のコンピューティングノード１２０上で処理されることを確保し得る。これは、場合によっては、特定のハッシュ空間にマッピングされるアイテムの全てが同一のコンピューティングノード１２０に送られるように、追加のハッシュ関数とハッシュ空間のマッピングを適用することによってなされ得る。
【００２４】
図２は、ストリームベースのトリガ機能を処理するシステムを描写した図である。クライアントデバイス２００は、ネットワーク２０４を介して、スクリプト２０２などの命令セットをスクリプト配置モジュール２０６に提供し得る。命令セットは、トリガ機能と呼ばれ得る。トリガ機能は、更新イベントに対応するために、コンピューティングノードクラスタ２２２のコンピューティングノード２１０〜２１４の１つで起動し得る。トリガ機能の命令セットを受信すると、スクリプト配置モジュール２０６は、図１に描写したデータベース１００のトランザクションログ１０２などのデータベーストランザクションログからのイベントを処理するのに用いられ得る１つまたは複数のコンピューティングノード２１０及び２１２を識別し得る。
【００２５】
スクリプト２０２は、スクリプト配置モジュール２０６からコンピューティングノードクラスタ２２２のコンピューティングノード２１０〜２１４の１つまたは複数に送信され得る。次いで、スクリプトは、トリガ機能を実行するために選択されたコンピューティングノード（例えば、コンピューティングノード２１０及び２１２）に格納され得る。トリガ機能を実行するために選択されるコンピューティングノードの数は、作業負荷及びコンピューティングノード２１０〜２１４の容量使用率といった係数に基づき得る。
【００２６】
各コンピューティングノード２１０〜２１４のストリーム処理モジュール２１６〜２２０は、各スクリプトへのアクセスを維持し得、スクリプトが定義するトリガ機能の起動を提供し得る。例えば、ストリーム処理モジュール２１６は、アイテムの特定の集合に関するイベントのカテゴリといったイベントのカテゴリとスクリプト２０２及び／またはスクリプト２０２が定義するトリガ機能の間の関連性を維持し得る。ストリーム処理モジュール２１６は、その関連付けられたストリームサブセット２２４から着信イベントを読み出し、スクリプト２０２によって定義されるトリガ機能を評価し得る。ストリーム処理モジュール２１６は、スクリプト２０２に含まれトリガ機能を構成する命令セットを実行し得る。ストリーム処理モジュール２１６は、トリガ機能にパラメータを提供し得る。例えば、ストリーム処理モジュール２１６は、ストリームサブセット２２４の更新イベントに対応する主キー、古い値及び新しい値を取得し得、イベントに適用可能であるトリガ機能（または複数のトリガ機能）に、主キー、古い値及び新しい値をパラメータとして与え得る。いくつかの例では、ストリームサブセット２２４などのストリームから読み出されるイベントは、複数のトリガ機能に対応し得る。ストリーム処理モジュール２１６は、イベントをストリームサブセット２２４から受信すると、イベントに関連付けられた、複数のトリガ機能のそれぞれを起動し得る。
【００２７】
ストリーム処理モジュール２１６〜２２０はそれぞれ、イベントの対応するストリームサブセット２２４〜２２８を受信し得る。ストリーム処理モジュール２１０〜２１４のそれぞれが受信することのできるイベントセットは、場合によっては、データベース上で生じるイベントのサブセットに限定され得る。サブセットは、図１で描写したように、ログストリーミングモジュール１０４により、かつ、マッピングモジュール１１８の動作により、フィルタリング基準の適用に基づいて決定され得、このことにより、イベントは、マッピングモジュール１１８によって取得されるハッシュ値及びハッシュ空間のマッピング１１８に基づいてストリーム処理モジュール２１６〜２２０に送信され得る。図１を参照すると、ハッシュ空間１０８〜１１６とコンピューティングノード１２０〜１２４の間の接続線は、入力をストリーム処理モジュール２１６〜２２０に与えるストリームに対応し得る。
【００２８】
図３は、データベースログファイルの複製及びストリーミングを描写した図である。データベース３００は、情報を、ストレージデバイス３０８のトランザクションログファイル３１４に格納し得る。トランザクションログファイル３１４の情報は、アイテムの集合で様々なアイテムを更新するリクエストを示す情報を備え得る。コンピューティングノード３２０の構成要素であるログストリーミングモジュール３２６は、トランザクションログファイル３１４の情報にアクセスし得、アイテムの集合でアイテムを更新するリクエストに対応するイベントのストリーム３３２を形成し得る。
【００２９】
様々な例では、オリジナルのトランザクションログファイル３１４が他のストレージデバイス３０６及び３１０に複製され得、ログファイルの複製３１２及び３１６を形成する。データベース３００は、場合によっては、データベース３００のコンテンツを複製し次いで各自それぞれのログファイルを生成する他のデータベースに対するマスタに指定され得る。他の場合には、トランザクションログファイル３１４は、全体的にまたは部分的にコピーされて、ログファイルの複製３１２及び３１６を形成し得る。コンピューティングノード３１８及び３２２の構成要素であるストリーミングモジュール３２４及び３２８は、それぞれログファイルの複製３１２及び３１６を読み出して、対応するストリーム３３０及び３３４を形成し得る。ログファイルの複製３１２及び３１６は、複製されたデータベースでトリガ機能を処理するのに用いられ得、または、トリガ機能のさらなるスケーリング処理の手段として用いられ得る。
【００３０】
複製処理３０２及び３０４は、トランザクションログファイル３１４のコンテンツのサブセットをログファイルの複製３１２及び３１６に転送するように構成され得る。これは、転送されるデータ量の減少、ストリーミングモジュール３２４及び３２８の効率の向上を含む様々な理由のために行われ得る。
【００３１】
図４は、ログファイルイベントのストリームの送信器として構成されたコンピューティングノードを描写した図である。コンピューティングノード４００は、ログストリーミングモジュール４０４及びマッピングモジュール４１４を備え得る。ログリーダモジュール４０４は、データをログファイル４０２から読み出し、イベントレコード４０８をコンピューティングノード４００のメモリ４０６内に配置する。ログファイル４０２は、パーティション４２４に関連付けられたストレージデバイスから読み出され得る。マッピングモジュール４１４は、トリガ機能を実行する予定のコンピューティングノードに更新をストリームするのにストリームサブセット４２０〜４２２のどれが用いられるべきかを判定し得る。マッピングモジュール４１４は、その判定を、選択するコンピューティングノードの使用率レベルなどの係数に基づいて行い得る。使用率レベルは、場合によっては、トリガ機能を実行するために構成されたノードのクラスタ内の他のコンピューティングノードの使用率レベルと比較され得る。
【００３２】
ログストリーミングモジュール４０４は、イベントレコード４０８を、メモリ４０６に維持されたキュー４２６内に配置し得る。いくつかの例では、キュー４２６は、図４に描写されたストレージデバイス４１６などの永続的なストレージ機構によってサポートされ得る。キュー４２６は、先入れ先出（「ＦＩＦＯ」）キューとして、またはそれと同様に操作され得る。通常、アイテムの集合に更新を適用する順序は保存される。
【００３３】
ストリームサブセット４２０〜４２２も、キュー構造を備え得る。いくつかの例では、これらの構造は、コンピューティングノード４００のメモリ４０６に含まれ得る。他の例では、キュー構造は別のコンピューティングノード上に維持され得る。図１に戻って参照すると、コンピューティングノード１２０〜１２４はそれぞれ、特定のストリームサブセットに対応するイベントを保持するためのキュー構造（図示せず）を含み得る。例えば、再度図１を参照すると、ハッシュ空間１０８及び１１０は、コンピューティングノード１２０に向けられているストリームサブセットに対応し得る。キュー構造は、この場合、コンピューティングノード１２０のメモリ及び／または永続的なストレージデバイスに維持され得る。
【００３４】
ストリームサブセットのキュー（図示せず）の順序付けもＦＩＦＯであってもよい。しかしながら、ストリームサブセット４２０〜４２２はそれぞれ、ログストリーミングモジュール４０４によってメモリ４０６内のキュー４２６内に配置されたレコードのストリームの非重複のサブセットに対応し得ることに留意されたい。マッピングモジュール４１４は、集合の所与のアイテムに対して、当該アイテムに関するすべての更新が同一のストリームサブセット４２０または４２２に向けられるように動作する。したがって、ストリームサブセット４２０〜４２２のそれぞれで、個々のアイテムに対するイベントの順序付けは保存される。
【００３５】
図５は、トリガ機能の実行器として構成されたコンピューティングノードを描写した図である。キュー５１２は、コンピューティングノード５００のメモリに維持され得る。キュー５１２は、図４に描写されたストリームサブセット４２０または４２２の１つに対応するイベントのレコードを含み得る。例示の目的のために、イベントは、図５に描写したように、ストリームサブセット４２２からのものであると仮定し得る。
【００３６】
ストリーム処理モジュール５０６は、レコードをキュー５１２から読み出し、スクリプト処理モジュール５０８のメソッドを起動し得、これに、更新されたアイテムの主キー、アイテムの以前の値及びアイテムの新しい値などの、イベントに関する情報が与えられる。スクリプト処理モジュール５０８は、どのスクリプトまたはスクリプト（複数）がイベントに応答して実行されるべきかを判定し得る。スクリプトは、いくつかの例では、コンピューティングノード５００のストレージ５０２に維持され得る。スクリプトは、コンピューティングノード５００がスクリプトに関連付けられるべき、例えば、関連イベントに遭遇すると関連付けられたトリガ機能を実行するというタスクが割り当てられるべきであるという判定に応答してストレージ５０２に配置され得る。コンピューティングノードのクラスタにおいて、特定のコンピューティングノードが、アイテムの特定の集合、アイテムの集合のパーティション等に対してトリガ機能を実行するために選択され得る。
【００３７】
スクリプト処理モジュール５０８は、通常ストレージ５０２に、イベントの特性をスクリプト５０４に関係させる情報を維持し得る。いくつかの例では、情報は、テーブルまたはパーティションの識別子などのスキーマアイテムとスクリプトのマッピングを備え得る。この情報を用いて、スクリプト処理モジュール５０８は、スクリプトによって定義されたトリガ機能が行われ得るようにスクリプトをメモリ５１０内にロードし実行させることによって、ストリーム処理モジュール５０６によってキュー５１２から読み取られたイベントに応答し得る。図５に描写したように、実行スクリプト５１４は、スクリプトモニタリングモジュール５１８によってモニタリングされ得る。モニタリングは、スクリプトは実行にどれくらいかかるか、スクリプトはメモリ及び中央処理装置（「ＣＰＵ」）サイクルをどれくらい消費するかなどを追跡することを備え得る。いくつかの例では、この情報は、トリガ機能のパフォーマンスがホスト型サービスとして与えられる場合に適切なビリングを確保することができるプロビジョニングモデル（図示せず）に与えられ得る。
【００３８】
スクリプト終了モジュール５１６も、実行スクリプト５１４のパフォーマンスを追跡し得る（スクリプトモニタリングモジュール５１８の援助を用いる場合もある）。スクリプト終了モジュール５１６は、実行スクリプト５１４が特定のパラメータを超えた場合、スクリプトの実行を終了し得る。例えば、実行スクリプト５１４は、その実行時間後、または入力／出力の使用率が閾値を超えた後、終了され得る。閾値は、他のカスタマによって、サービスの質のレベルによって等知覚されるパフォーマンスに影響を与え得るリソース消費レベルといった様々な係数に基づき得る。
【００３９】
図６は、イベントストリームに基づいてトリガ機能を実行するプロセスを描写した流れ図である。ブロックシーケンスとして描写したが、当業者は、描写された順序は本開示の範囲を限定するものとして構成されておらず、描写されたブロックで示された動作の少なくともいくつかは変更、省略、再順序付け、追加の動作で補完、または並列動作され得ることを理解されよう。描写されたプロセスの実施形態は、本明細書中で記載するコンピューティングシステムなどのコンピューティングシステムによって実行されるコンピュータ実行可能命令の様々な組み合わせを用いて実装され得る。
【００４０】
ブロック６００は、アイテムの集合をデータベース管理システムで維持することを描写する。各アイテムは、主キー及び１つまたは複数の追加の値を備え得る。アイテムはロウと称され得、集合はテーブルと称され得る。集合（またはテーブル）は、通常、名前または他の識別子に関連付けられ得る。識別子は、いくつかの例では、スクリプト及びそれが定義するトリガ機能を、テーブルに対応するイベントに関連付けるために用いられ得る。
【００４１】
ブロック６０２は、第１のコンピューティングノードを含む複数のコンピューティングノードに、データベース管理システムが集合にアイテムを格納するリクエストを処理することに応答して実行される命令セットを格納することを描写する。アイテムの格納とは、新しいアイテムの挿入または既存のアイテムの更新を指し得る。命令セットは、トリガ機能としてスクリプトファイルに定義され得る。命令セットは、例えば図５に描写したように、アイテムの格納リクエストなどの様々なイベントに応答してトリガ機能を実行する予定のコンピューティングノードのメモリに格納され得る。
【００４２】
ブロック６０４によって描写されるように、データベース管理システムは、集合にアイテムを格納するリクエストを、リクエストを示す情報をログファイルに少なくとも書き込むことによって処理し得る。次いで、この情報は、ブロック６０６によって描写されるように、ログファイルから読み出され、第２のコンピューティングノードに送信され得る。第２のコンピューティングノードは、例えば、図４に描写したコンピューティングノード４００を含み得る。ブロック６０８は、１つまたは複数のコンピューティングノードの第２のグループが、リクエストを示す情報を受信し得ることを描写する。
【００４３】
第２のコンピューティングノードは、いくつかの例では、アイテムの主キーがある値の範囲内に存在するという判定に応答して、リクエストを示す情報を受信し得る。例えば、第２のコンピューティングノードは、グループ内の各コンピューティングノードがデータベースログファイルに記録されたイベントの一部にアクセスするようなコンピューティングノードのグループに関連付けられ得る。各コンピューティングノードによってアクセスされる部分は、イベントが対応するアイテムの主キーに基づき得る。
【００４４】
ブロック６１０によって描写されるように、第２のコンピューティングノードは、複数のコンピューティングノードの使用率をモニタリングし得る。使用率は、経時的にモニタリングされ得、またはスポットチェックされ得る。入力／出力使用率、ＣＰＵ使用率などの様々な使用率の係数がモニタリングされ得る。使用率が低いコンピューティングノードは、トリガ機能を処理する候補として好ましい場合がある。コンピューティングノードの使用率が閾値レベルより高くなると、追加のコンピューティングノードがシステムに追加され得る。使用率が他の何らかの閾値レベルを下回ると、コンピューティングノードは削除され得る。これらの技術によって、トリガを処理するための容量はスケーリング可能になる。
【００４５】
ブロック６１２は、命令セットを実行するために、複数のコンピューティングノードから第１のコンピューティングノードを選択することを描写する。選択は、第１のコンピューティングノードの使用率レベルに少なくとも部分的に基づき得る。いくつかの例では、第１のコンピューティングノードは、使用率が閾値レベルを下回ったときに選択され得る。場合によっては、第１のコンピューティングノードは、複数のコンピューティングノードの他のコンピューティングノードに対するその使用率に基づいて選択され得る。
【００４６】
ブロック６１４は、第１の命令セットの実行を示すデータを、第１のコンピューティングノードに送信することを描写する。送信は、ブロック６１２によって描写されたように、命令セットを実行するために第１のコンピューティングノードを選択したことに応答してなされる。
【００４７】
図７は、イベントストリームに基づいてトリガ機能を実行するプロセスの追加の実施形態を描写した流れ図である。ブロックシーケンスとして描写したが、当業者は、描写された順序は本開示の範囲を限定するものとして構成されておらず、描写されたブロックで示された動作の少なくともいくつかは変更、省略、再順序付け、追加の動作で補完、または並列動作され得ることを理解されよう。描写されたプロセスの実施形態は、本明細書中で記載するコンピューティングシステムなどのコンピューティングシステムによって実行されるコンピュータ実行可能命令の様々な組み合わせを用いて実装され得る。
【００４８】
ブロック７００は、第１のコンピューティングノードを含む複数のコンピューティングノードを、データベース管理システムによって維持されるアイテムの集合にアイテムを格納するリクエストに応答して実行される第１の命令セットに関連付けることを描写する。
【００４９】
ブロック７０２は、データベース管理システムによって処理される、アイテムの集合にアイテムを格納する第１のリクエストを示す情報を受信することを描写する。情報は、データベース管理システムのログファイルから直接的にまたは間接的に受信され得る。情報は、例えば、ログファイルの複製から読み出され得る。
【００５０】
ブロック７０４は、第１のコンピューティングノードの使用率を含む複数のコンピューティングノードの使用率をモニタリングすることを描写する。様々な例では、コンピューティングノードの使用率レベルを用いて、トリガ機能のパフォーマンスを扱うために一番使用されていないコンピューティングノードを選択し得る。使用率レベルは、追加のコンピューティングノードを複数のコンピューティングノードにいつ追加するべきかを判定するのにも用いられ得る。これにより、トリガ機能を実行する能力のスケーリングが可能になり得る。
【００５１】
ブロック７０６は、第１のリクエストを示す情報の受信に少なくとも部分的に基づいて、かつ、命令セットに関連付けられ得る他のコンピューティングノードと比較した第１のコンピューティングノードの相対的使用率に少なくとも部分的に基づいて、第１の命令セットを第１のコンピューティングノードで実行させることを描写する。第１のコンピューティングノードで第１の命令セットを実行させることは、第１の命令セットを実行するコマンドを示すデータを送信することを含み得る。データには、影響を受けるアイテムの主キー、アイテムの以前の値及びアイテムの現在の値などの更新に関する情報も含まれ得る。
【００５２】
図８は、１つまたは複数のコンピューティングノードのグループでトリガ機能を実行することを描写した流れ図である。ブロックシーケンスとして描写したが、当業者は、描写された順序は本開示の範囲を限定するものとして構成されておらず、描写されたブロックで示された動作の少なくともいくつかは変更、省略、再順序付け、追加の動作で補完、または並列動作され得ることを理解されよう。描写されたプロセスの実施形態は、本明細書中で記載するコンピューティングシステムなどのコンピューティングシステムによって実行されるコンピュータ実行可能命令の様々な組み合わせを用いて実装され得る。
【００５３】
ブロック８００は、１つまたは複数のコンピューティングノードのグループから選択されたコンピューティングノードでスクリプトの実行を開始することを描写する。コンピューティングノードのグループは、スクリプトによって定義されるようなトリガ機能を実行するのに利用可能になされ得る。これは、スクリプトをコンピューティングノードに格納することを含み得、スクリプトを実行可能な形式にコンパイルするといったさらなるステップも含み得る。
【００５４】
コンピューティングノードのグループがトリガ機能を実行するのに利用可能になされ得るが、システムは、特定のアイテムに関するすべてのトリガ機能を実行するためにグループから特定のコンピューティングノードを選択し得ることに留意されたい。例えば、第１の一連の更新は、テーブルＴのアイテムＸ１になされ得、第２の一連の更新はテーブルＴのアイテムＸ２になされ得る。同一のトリガ機能がいずれのケースでも適用され得る。ハッシュ関数とハッシュ空間のマッピングを用いて、システムは、起動がＸ１に関するとき、トリガ機能の起動のすべてを第１のコンピューティングノードで実行させ得、Ｘ２に関するトリガ機能の起動のすべてを第２のコンピューティングノードで実行させ得る。
【００５５】
スクリプトを実行するために選択されるコンピューティングノードは、それが、スクリプトを実行するべきであると指示するメッセージを受信し得る。例えば、図５に描写したように、ストリーム処理モジュール５０６はメッセージを受信し、それをスクリプト処理モジュール５０８に転送し得る。スクリプト処理モジュール５０８は、次いで、スクリプトの実行を開始し得る。
【００５６】
ブロック８０２は、スクリプトの実行をモニタリングすることを描写する。スクリプトを実行している間、それが消費するコンピューティングリソース及びそれが実行するのにかかる時間の長さがモニタリングされ得る。図５は、例えば、スクリプトに関する様々なパフォーマンスのメトリクス、例えばそれが実行するのにかかる時間、それが消費するメモリ及びＣＰＵサイクルなどを追跡するスクリプトモニタリングモジュール５１８を描写する。
【００５７】
ブロック８０４によって描写されるように、スクリプトは、そのリソース使用率が閾値を超えた場合に終了され得る。閾値は、特にサービスの他のテナントに対して実行している他のトリガのサービスの質のレベルと干渉するであろうリソース使用率の量といった様々な係数に基づいて設定され得る。
【００５８】
ブロック８０６は、全体のリソース使用率が第１の閾値を超えたときに追加のコンピューティングノードをグループに追加することを描写する。コンピューティングノードのリソース可用性はモニタリングされ得、リソース使用率が閾値の量を超えた場合、追加のコンピューティングノードがグループに追加され得る。これは、ハッシュ空間の定義をさらなるサブグループに分割すること、及びサブグループの１つを新しいコンピューティングノードに割り当てることを含み得る。システムは、分割を行う前に、特定のアイテムに関する保留イベントが全て処理されることを確保してもよい。
【００５９】
図９は、本発明の態様を実施し得る分散型コンピューティング環境の例を描写した図である。様々なユーザ９００ａは、任意の種類のコンピューティングデバイス９０２ａで動作している様々なクライアントアプリケーションとインタラクトして、通信ネットワーク９０４を介して、データセンタ９２０内の様々なコンピューティングノード９１０ａ及び９１０ｂで実行している処理と通信し得る。代替として、クライアントアプリケーション９０２ｂは、ユーザの介入なしに通信し得る。通信ネットワーク９０４は、インターネット、有線及び無線ローカルエリアネットワーク、光ファイバーネットワーク、衛星通信などを含む通信技術の任意の組み合わせを含み得る。任意の数のネットワークプロトコルが使用され得る。
【００６０】
コンピューティングノード９１０ａ及び９１０ｂで実行している処理との通信は、ゲートウェイ９０６及びルータ９０８を介して提供され得る。多数の他のネットワーク構成も使用され得る。図９に明示的に描写されていないが、様々な認証機構、ウェブサービス層、ビジネスオブジェクトまたは他の中間層が、コンピューティングノード９０１ａ及び９１０ｂで実行している処理との通信を仲介するために提供され得る。これらの中間層のいくつかは、それら自体が、コンピューティングノードの１つまたは複数で実行される処理を備え得る。コンピューティングノード９１０ａ及び９１０ｂならびにそこで実行している処理はまた、ルータ９０８を介して互いに通信し得る。代替として、別個の通信経路が使用され得る。一部の実施形態では、データセンタ９２０は、追加のデータセンタと通信するように構成され得、コンピューティングノード及びそこで実行している処理が他のデータセンタ内のコンピューティングノード及び動作している処理と通信し得るようになる。
【００６１】
コンピューティングノード９１０ａは、１つまたは複数のプロセッサ９１６ａ、１つまたは複数のメモリ９１８ａ及び１つまたは複数のストレージデバイス９１４ａを備える物理的なハードウェアに存在するものとして描写される。コンピューティングノード９１０ａの処理は、オペレーティングシステムと連動して実行し得、または、プロセッサ９１６ａ、メモリ９１８ａまたはストレージデバイス９１４ａなどの物理的なリソースと直接インタラクトするベアメタルプロセスとして実行し得る。
【００６２】
コンピューティングノード９１０ｂは、仮想化構成要素９１２を備え得、これは、物理的なプロセッサ、メモリ及びストレージデバイスなどの様々な物理的なリソースに対する共有アクセスを提供する仮想マシンホスト及び仮想マシンインスタンスを含み得る。これらのリソースには、描写されたプロセッサ９１６ｂ、メモリ９１８ｂ及びストレージデバイス９１４ｂが含まれ得る。任意の数の仮想化機構は、物理的なリソースに対する共有アクセスを提供するために使用され得る。
【００６３】
図９に描写した様々なコンピューティングノードは、ウェブサービス、データベース管理システム、ビジネスオブジェクト、モニタリング及び診断設備などをホストするように構成され得る。コンピューティングノードは、パーソナルコンピュータ、サーバ、クラスタ化コンピューティングデバイス等といった様々な種類のコンピューティングリソースを指し得る。コンピューティングノードは、例えば、セルフォン、スマートフォン、タブレット、組み込み型デバイス等といった様々なコンピューティングデバイスを指し得る。仮想化を使用することなく実装されると、コンピューティングノードは、コンピュータ可読命令を格納するように構成された１つまたは複数のメモリ及び命令を読み出し実行するように構成された１つまたは複数のプロセッサを含み得る。コンピューティングノードは、１つまたは複数のストレージデバイス、ネットワークインタフェース、通信バス、ユーザインタフェースデバイスなども備え得る。コンピューティングノードは、ハイパーバイザとともにまたはハイパーバイザなしで実装される仮想マシン、仮想化ベアメタル環境等といった仮想化されたコンピューティングリソースも利用し得る。仮想化ベースのコンピューティングノードは、したがって、仮想化リソース及び、仮想化リソースを実行するのに必要な物理的なハードウェアの両方を包含する。コンピューティングノードは、オペレーティングシステム及びアプリケーションプログラムを実行するように構成され得る。一部の実施形態では、コンピューティングノードは、ベアメタルアプリケーションプログラムも備え得る。
【００６４】
少なくとも一部の実施形態では、本明細書中に記載する技術の１つまたは複数の一部またはすべてを実装するサーバは、１つまたは複数のコンピュータアクセス可能な媒体を含むまたは１つまたは複数のコンピュータアクセス可能な媒体にアクセスするように構成された汎用コンピュータシステムを含み得る。図１０は、１つまたは複数のコンピュータアクセス可能な媒体を含むまたは１つまたは複数のコンピュータアクセス可能な媒体にアクセスするように構成された汎用コンピュータシステムを描写する。例示された実施形態では、コンピューティングデバイス１０００は、入力／出力（「Ｉ／Ｏ」）インタフェース１０３０を介して、システムメモリ１０２０に連結される、１つまたは複数のプロセッサ１０１０ａ、１０１０ｂ及び／または１０１０ｎ（本明細書中では、プロセッサ１０１０として単数でまたはプロセッサ（複数）１０１０として複数で呼ばれ得る）を含む。コンピューティングデバイス１０００は、Ｉ／Ｏインタフェース１０３０に連結されるネットワークインタフェース１０４０をさらに含む。
【００６５】
様々な実施形態では、コンピューティングデバイス１０００は、１つのプロセッサ１０１０を含むユニプロセッサシステム、またはいくつかのプロセッサ１０１０（例えば、２つ、４つ、８つ、または別の好適な数）を含むマルチプロセッサシステムであってもよい。プロセッサ１０１０は、命令を実行することが可能な任意の好適なプロセッサであってもよい。例えば、様々な実施形態では、プロセッサ１０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣもしくはＭＩＰＳ  ＩＳＡ、または任意の他の好適なＩＳＡなどの様々な命令セットアーキテクチャ（「ＩＳＡ」）のうちのいずれかを実装する、汎用または組込み型プロセッサであってもよい。マルチプロセッサシステムでは、プロセッサ１０１０はそれぞれ、同じＩＳＡを一般に実装し得るが、必ずしもそうでなくてもよい。
【００６６】
一部の実施形態では、グラフィックスプロセッシングユニット（「ＧＰＵ」）１０１２は、グラフィックスレンダリングのかつ／またはフィジックスプロセッシングの能力を提供するのに関与し得る。ＧＰＵは、例えば、グラフィック計算に特殊化した高並列化プロセッサアーキテクチャを備え得る。一部の実施形態では、プロセッサ１０１０及びＧＰＵ１０１２は、同一種類のデバイスの１つまたは複数として実装され得る。いくつかの例では、ＧＰＵ１０１２は、計算を行い、プロセッサ１０１０と協働してまたはプロセッサ１０１０の代わりに命令を実行し得る。したがって、本明細書中で用いるように、プロセッサという用語は、ＧＰＵを包含し得る。同様に、一次プロセッサ１０１０の動作を補完または置換する他の高並列化プロセッサアーキテクチャも、プロセッサという用語に包含される。
【００６７】
システムメモリ１０２０は、プロセッサ（複数可）１０１０によってアクセス可能な命令及びデータを格納するように構成され得る。様々な実施形態では、システムメモリ１０２０は、静的ランダムアクセスメモリ（「ＳＲＡＭ」）、同時性動的ＲＡＭ（「ＳＤＲＡＭ」）、非揮発性／フラッシュ（登録商標）タイプのメモリまたは任意の他のタイプのメモリなどの任意の好適なメモリ技術を使用して実装されてもよい。例示された実施形態では、上述の方法、技術及びデータなどの１つまたは複数の所望の機能を実装するプログラム命令及びデータは、システムメモリ１０２０内にコード１０２５及びデータ１０２６として格納されていることが示される。
【００６８】
一実施形態では、Ｉ／Ｏインタフェース１０３０は、プロセッサ１０１０、システムメモリ１０２０、及びネットワークインタフェース１０４０または他の周辺インタフェースを含む、デバイス内の任意の周辺デバイス間のＩ／Ｏトラフィックを調整するように構成され得る。一部の実施形態では、Ｉ／Ｏインタフェース１０３０は、１つの構成要素（例えば、システムメモリ１０２０）からのデータ信号を、別の構成要素（例えば、プロセッサ１０１０）による使用に好適な形式に変換するように、任意の必要なプロトコル、タイミング、または他のデータ変換を行なってもよい。一部の実施形態では、Ｉ／Ｏインタフェース１０３０は、例えば、ペリフェラルコンポネントインターコネクト（「ＰＣＩ」）バス規格またはユニバーサルシリアルバス（「ＵＳＢ」）規格の異形などの様々な種類の周辺バスを通じて取設されるデバイスに対するサポートを含み得る。一部の実施形態では、Ｉ／Ｏインタフェース１０３０の機能は、例えば、ノースブリッジ及びサウスブリッジなどの２つ以上の別個の構成要素に分割されてもよい。また、一部の実施形態では、システムメモリ１０２０へのインタフェースなどのＩ／Ｏインタフェース１０３０の機能性の一部または全ては、プロセッサ１０１０内へ直接組み込まれてもよい。
【００６９】
ネットワークインタフェース１０４０は、データが、コンピューティングデバイス１０００と、例えば他のコンピュータシステムなどまたはデバイスなどの、ネットワークまたはネットワーク（複数）１０５０に取設される他のデバイスまたはデバイス（複数）１０６０の間で交換されることを可能にするように構成され得る。様々な実施形態では、ネットワークインタフェース１０４０は、例えばイーサネットネットワークのタイプなどの任意の好適な有線または無線一般データネットワークを介した通信をサポートし得る。さらに、ネットワークインタフェース１０４０は、アナログ音声ネットワークまたはデジタルファイバ通信ネットワーク等の電気通信／テレフォニネットワークを介した、ファイバチャネルＳＡＮ（ストレージエリアネットワーク）などのストレージエリアネットワークを介した、または任意の他の好適なタイプのネットワーク及び／もしくはプロトコルを介した通信をサポートしてもよい。
【００７０】
一部の実施形態では、システムメモリ１０２０は、対応する方法及び装置の実施形態を実装するための上述されるようなプログラム命令及びデータを格納するように構成されたコンピュータアクセス可能な媒体の一実施形態であってもよい。しかしながら、他の実施形態では、プログラム命令及び／またはデータは、異なるタイプのコンピュータアクセス可能な媒体において、受信、送信、または記憶されてもよい。一般的に述べると、コンピュータアクセス可能な媒体は、Ｉ／Ｏインタフェース１０３０を介してコンピューティングデバイス１０００に連結される、磁気もしくは光媒体、例えば、ディスクもしくはＤＶＤ／ＣＤなどの非一時的記憶媒体またはメモリ媒体を含んでもよい。非一時的コンピュータアクセス可能記憶媒体はまた、システムメモリ１０２０または別のタイプのメモリとして、コンピューティングデバイス１０００の一部の実施形態に含まれてもよい、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなど等の任意の揮発性または非揮発性媒体も含んでもよい。さらに、コンピュータアクセス可能媒体は、ネットワークインタフェース１０４０を介して実装されてもよい、ネットワーク及び／もしくは無線リンク等の通信媒体を介して伝送される電気、電磁気、もしくはデジタル信号などの送信媒体または信号を含んでもよい。図１０に例示したものなどの複数のコンピューティングデバイスの一部または全部は、様々な実施形態において、記載される機能性を実装するために使用されてもよく、例えば、様々な異なるデバイス及びサーバ上で実行するソフトウェア構成要素が、機能性を提供するために協働してもよい。一部の実施形態では、記載される機能性の一部分は、汎用コンピュータシステムを使用して実装されることに加えて、またはその代わりに、ストレージデバイス、ネットワークデバイスまたは特殊目的コンピュータシステムを使用して実装されてもよい。本明細書中で用いるように「コンピューティングデバイス」という用語は、少なくとも全てのこれらのタイプのデバイスを指し、これらのタイプのデバイスに限定されない。
【００７１】
コンピューティングデバイス１０００は、モジュール（図示せず）を含むソフトウェア命令によって構成され得る。モジュールは、他のモジュールとともに入力及び出力を含む関連機能のセットを実行するために、全体的にまたは部分的にシステムメモリ１０２０にロードされる命令セットを含む、コンピューティングデバイス１０００の構成要素である。システムメモリ１０２０のコード１０２５及びデータ１０２６は、命令をロードすることによって変更される。プロセッサ１０１０、またはマルチプロセッサシステムにおいては１０１０ａ〜１０１０ｎ及び／またはＧＰＵ１０１２とシステムメモリ１０２０の間のＩ／Ｏインタフェース１０３０を介しての相互変化に影響を受ける。モジュールは、システムメモリ１０２０を介してコンピューティングデバイス１０００の他のモジュールと、かつネットワークインタフェース１０４０及びネットワーク１０５０を介して他のデバイス１０６０とインタラクトし得る。
【００７２】
コンピューティングノードとも称され得るコンピュートノードは、タブレットコンピュータ、パーソナルコンピュータ、スマートフォン、ゲーム機、コモディティハードウェアコンピュータ、ウェブサービス、コンピューティングクラスタ及びコンピューティング機器などの様々なコンピューティング環境で実装され得る。これらのコンピューティングデバイスまたは環境のうちいずれかは、便宜のために、コンピュートノードとしてまたはコンピューティングノードとして記載され得る。
【００７３】
インターネット及び／または他のネットワークを介して、分散しているクライアントのセットにアクセス可能な１つまたは複数のウェブサービス（様々な種類のクラウドベースのコンピューティングまたはストレージなど）を提供するために、企業または公共部門の団体等のエンティティによって設定されたネットワークは、プロバイダネットワークと称され得る。そうしたプロバイダネットワークには、プロバイダネットワークによって提供されるインフラ及びウェブサービスを実装し分散するために必要とされる、多数のデータセンタがホストする様々なリソースプール、例えば、物理的及び／または仮想化コンピュータサーバ、ストレージデバイス、ネットワーク機器等の集合が含まれ得る。リソースは、一部の実施形態では、インスタンスとして、関連サービスセットとして等、ストレージのためのストレージキャパシティの量、処理のための処理能力などのウェブサービスに関する様々なユニットでクライアントに提供され得る。仮想コンピューティングインスタンスには、例えば、指定された計算能力（ＣＰＵの種類及び数、メインメモリサイズなどを指示することによって指定され得る）及び指定されたソフトウェアスタック（例えば、ハイパーバイザ上で実行され得ることになるオペレーティングシステムの特定のバージョン）を有する１つまたは複数のサーバが含まれ得る。
【００７４】
いくつかの異なるタイプのコンピューティングデバイスは、汎用目的または特殊目的のコンピュータサーバ、ストレージデバイス、ネットワークデバイスなどを含む、様々な実施形態においてプロバイダネットワークのリソースを実装するために、単独でまたは組み合わせて用いられ得る。一部の実施形態では、クライアントまたはユーザには、例えばユーザにアドミニストレータログイン及びパスワードを与えることによって、リソースインスタンスへの直接アクセスが提供され得る。他の実施形態では、プロバイダネットワークオペレータは、例えばクライアントが、インスタンスまたは実行プラットフォームに直接アクセスする必要なしに、クライアントの代わりに、アプリケーションに好適な実行プラットフォーム（アプリケーションサーバインスタンス、Ｊａｖａ（商標）仮想マシン（「ＪＶＭ」）、汎用目的または特殊目的のオペレーティングシステム、Ｒｕｂｙ、Ｐｅｒｌ、Ｐｙｔｈｏｎ、Ｃ、Ｃ＋＋などの様々なインタープリタ型またはコンパイル型プログラミング言語をサポートするプラットフォームまたは高性能コンピューティングプラットフォームなど）上で、指定されたクライアントアプリケーションの実行要件及びアプリケーションの計画実行をクライアントが指定することを可能にし得る。所与の実行プラットフォームは、一部の実施態様では、１つまたは複数のリソースインスタンスを利用し得、他の実施態様では、複数の実行プラットフォームが、単一のリソースインスタンスにマッピングされ得る。
【００７５】
多くの環境では、様々なタイプの仮想化コンピューティング、ストレージ及び／または他のネットワークアクセス可能機能性を実装するプロバイダネットワークのオペレータは、カスタマが、様々なリソース取得モードでリソースに対するアクセスを予約または購入することを可能にし得る。コンピューティングリソースプロバイダは、カスタマが所望のコンピューティングリソースを選択かつ起動し、コンピューティングリソースにアプリケーション構成要素を配置し、環境で実行しているアプリケーションを維持するための設備を提供し得る。さらに、コンピューティングリソースプロバイダは、カスタマが、アプリケーションに割り当てられたリソースの数及び種類を、アプリケーションの変更の要求またはそのキャパシティ要件として、手動または自動スケーリングのいずれかで、迅速かつ容易にスケールアップまたはスケールダウンするための設備をさらに提供し得る。コンピューティングリソースプロバイダにより提供されるコンピューティングリソースは、インスタンスと呼ばれ得る個別のユニットにおいて利用可能とされ得る。インスタンスは、物理的なサーバハードウェアプラットフォーム、サーバで実行する仮想マシンインスタンスまたはその２つの何らかの組み合わせを表し得る。様々な種類及び構成のインスタンスが、様々なオペレーティングシステム（「ＯＳ」）及び／またはハイパーバイザを実行する様々なサイズのリソースを含んで、様々なインストールされたソフトウェアアプリケーション、ランタイムなどとともに利用可能とされ得る。インスタンスは、さらに、例えば論理領域、フォールトトレラント領域、データセンタまたは基礎をなしているコンピューティングハードウェアの他の地理的位置を表す特定の可用性ゾーンで利用可能とされ得る。インスタンスは、インスタンスの冗長性を高めるために、可用性ゾーン内でまたは可用性ゾーン全体でコピーされ得、インスタンスは、特定の可用性ゾーン内でまたは可用性ゾーンにわたって、移動され得る。一例として、可用性ゾーンにおける特定のサーバとのクライアントの通信のレイテンシは、異なるサーバとのクライアントの通信のレイテンシよりも少なくなり得る。このように、インスタンスは、全体的なクライアントの経験を高めるために、高いレイテンシのサーバから低いレイテンシのサーバに移動され得る。
【００７６】
一部の実施形態では、プロバイダネットワークは、複数の地理的領域に編成されてもよく、各領域は、１つまたは複数の可用性ゾーンを含んでもよい。次いで、可用性ゾーン（可用性コンテナとも呼ばれ得る）は、所与の可用性ゾーン内のリソースが他の可用性ゾーン内の不具合から隔離または防護され得るように構成された１つまたは複数の異なる場所またはデータセンタを備えてもよい。つまり、１つの可用性ゾーン内の不具合が、任意の他の可用性ゾーン内に不具合をもたらすことは予期されない場合がある。したがって、リソースインスタンスの可用性プロファイルは、異なる可用性ゾーン内のリソースインスタンスの可用性プロファイルから独立していることが意図される。クライアントは、それぞれの可用性ゾーンにおいて複数のアプリケーションインスタンスを起動させることで、彼らのアプリケーションを単一の場所での不具合から保護することが可能になり得る。同時に、一部の実施態様では、安価かつ低レイテンシのネットワーク接続が、同一の地理的領域内に存在するリソースインスタンス間に提供され得る（かつ、同一の可用性ゾーンのリソース間のネットワーク送信は早くさえなり得る）。
【００７７】
先行セクションに記載されるプロセス、方法及びアルゴリズムのそれぞれは、１つまたは複数のコンピュータまたはコンピュータプロセッサによって実行される命令によって、完全にまたは部分的に自動化されて実施され得る。命令は、ハードドライブ、ソリッドステートメモリ、光ディスクなどの任意のタイプの非一時的なコンピュータ可読媒体またはコンピュータストレージデバイスに格納され得る。プロセス及びアルゴリズムは、アプリケーション特定回路に部分的にまたは全体的に実装され得る。開示されたプロセス及びプロセスのステップの結果は、例えば揮発性のまたは非揮発性のストレージなどの任意の種類の非一時的なコンピュータストレージで永続的にまたはそうではなく格納され得る。
【００７８】
前述の様々な特徴及びプロセスは、互いから独立して用いられ得、または様々なやり方で組み合わせて用いられ得る。全ての可能な組み合わせ及びサブ組み合わせは、本開示の範囲内にあることが意図される。加えて、一定の方法またはプロセスブロックは、一部の実施態様では省略され得る。本明細書中で記載される方法及びプロセスも、いずれかの特定の順序に限定されるものではなく、それに関連するブロックまたは状態は、適切である他の順序で実行することができる。例えば、記載されるブロックまたは状態は、具体的に開示されたもの以外の順序で実行され得、または、複数のブロックまたは状態は、単一のブロックまたは状態として組み合わされ得る。例示的なブロックまたは状態は、直列に、並列に、または何らかの他の態様で実行され得る。ブロックまたは状態は、開示された例示的な実施形態に追加または削除され得る。本明細書中に記載された例示的なシステム及び構成要素は、記載されたものとは異なって構成され得る。例えば、要素は、開示された例示的な実施形態と比較して、追加、削除または再配置され得る。
【００７９】
様々なアイテムがメモリまたはストレージに格納されて用いられているものとして示され、これらのアイテムまたはその一部はメモリ管理及びデータの完全性の目的でメモリと他のストレージデバイスの間で転送され得ることも理解されるであろう。代替として、他の実施形態では、ソフトウェア命令及び／またはシステムの一部または全部は、別のデバイスのメモリで実行され、コンピュータ間通信を介して例示されたコンピューティングシステムと通信し得る。さらに、一部の実施形態では、システム及び／またはモジュールの一部または全部は、他のやり方で、例えば、以下に限定されるものではないが、１つまたは複数の特定用途向け集積回路（「ＡＳＩＣ」）、標準集積化回路、コントローラ（例えば、適切な命令を実行することによるものであり、マイクロコントローラ及び／または組み込み型コントローラを含む）、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）、結合プログラマブル論理回路（「ＣＰＬＤ」）などを含む、ファームウェア及び／またはハードウェアで少なくとも部分的に実装または提供され得る。命令、システム及びデータ構造の一部または全部も、ハードディスク、メモリ、ネットワーク、または適切なデバイスによってもしくは適切な接続を介して読み出されるポータブルメディア品などのコンピュータ可読媒体に格納され得る（例えばソフトウェア命令または構造化データとして）。命令及びデータ構造も、無線ベース媒体及び有線／ケーブルベース媒体を含む様々なコンピュータ可読伝送媒体で生成データ信号として伝送され得（例えば、搬送波または他のアナログもしくはデジタル伝播信号の一部として）、様々な形式をとり得る（例えば、単一もしくは多重アナログ信号の一部として、または複数の離散デジタルパケットもしくはフレームとして）。そうしたコンピュータプログラム製品は、他の実施形態では、他の形式も取り得る。したがって、本発明は、他のコンピュータシステム構成で実施され得る。
【００８０】
前述の事項は、以下の条項を鑑みてより良く理解でき得る。
【００８１】
１．システムであって、
ハッシュ空間に対応するアイテムの集合を維持するデータベース管理システムであって、前記アイテムの集合にアイテムを格納する第１のリクエストを、前記第１のリクエストを示す情報をログファイルに少なくとも書き込むことによって処理する前記データベース管理システムと、
前記データベース管理システムが前記第１のリクエストを処理することに応答して実行される第１の命令セットにアクセスできる、第１のコンピューティングノードを含む複数のコンピューティングノードと、
第２のコンピューティングノードであって、少なくとも
前記第１のリクエストを示す前記情報を受信し、
前記複数のコンピューティングノードにおけるコンピューティングノードのリソース使用率をモニタリングし、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードの追加のコンピューティングノードよりも低いことに少なくとも部分的に基づいて、前記第１の命令セットを実行するための前記第１の１つのコンピューティングノードを選択し、
前記第１の１つまたは複数のコンピューティングノードに前記第１の命令セットを実行させるデータを、前記第１のコンピューティングノードに送信する、前記第２のコンピューティングノードとを備える、前記システム。
【００８２】
２．前記第２のコンピューティングノードが、少なくとも
前記第１のコンピューティングノードのリソース使用率をモニタリングし、
前記リソース使用率に少なくとも部分的に基づいて、前記第１の命令セットを実行するために、前記複数のコンピューティングノードのうちあるコンピューティングノードを選択する、条項１に記載のシステム。
【００８３】
３．前記第２のコンピューティングノードが、少なくとも
前記第１の命令セットのパフォーマンスに関連付けられる、前記第１のコンピューティングノードのリソース使用率をモニタリングし、
前記リソース使用率に基づいて、前記第１の命令セットのパフォーマンスを停止することを決定する、条項１に記載のシステム。
【００８４】
４．前記第１の命令セットが、前記アイテムの主キー、前記アイテムの以前の値または前記アイテムの新しい値の少なくとも１つを含むパラメータの関数に対応する、条項１に記載のシステム。
【００８５】
５．前記複数のコンピューティングノードの容量が、前記データベース管理システムから独立してスケーリングされ得る、条項１に記載のシステム。
【００８６】
６．データベーストリガ機能を処理する方法であって、
第１のコンピューティングノードを含む複数のコンピューティングノードを、データベース管理システムによって維持されるアイテムの集合に複数のアイテムを格納するリクエストに応答して実行される第１の命令セットに関連付けることであって、前記複数のアイテムは第１のハッシュ空間に対応するものであることと、
ログデータのリポジトリに、前記複数のアイテムを格納する、前記データベース管理システムによって処理される複数のリクエストを示す情報を格納することと、
ログデータの前記リポジトリから、前記アイテムの集合にアイテムを格納する、前記複数のリクエストの第１のリクエストを示す情報を受信することと、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードの第２のコンピューティングノードよりも低いという判定に少なくとも部分的に基づいて、前記第１の命令セットを前記第１のコンピューティングノードで実行させることとを備える、前記方法。
【００８７】
７．前記第１の命令セットを前記第１のコンピューティングノードで実行することによって使用されるリソースに少なくとも部分的に基づいて、前記第１の命令セットを、前記複数のコンピューティングノードの追加のコンピューティングノードで実行させることをさらに含む、条項６に記載の方法。
【００８８】
８．前記第１の命令セットを実行することによって使用されるリソースが閾値の量を超えたとき、前記第１の命令セットのパフォーマンスを停止することをさらに含む、条項６に記載の方法。
【００８９】
９．前記第１の命令セットが、前記アイテムの主キーまたは前記アイテムに対する変更を示す情報の少なくとも１つを備える１つまたは複数のパラメータの関数に対応する、条項６に記載の方法。
【００９０】
１０．ログデータの前記リポジトリが、前記データベース管理システムのログファイルのサブセットを備える、条項６に記載の方法。
【００９１】
１１．前記第１のハッシュ空間と複数の命令セットの関連性を示す情報を格納することであって、前記複数の命令は前記第１の命令セットを含む、前記格納することと、
前記第１のハッシュ空間に関連付けられた前記複数の命令セットそれぞれを、前記第１のリクエストを示す前記情報を受信したことに応答して実行させることとをさらに含む、条項６に記載の方法。
【００９２】
１２．前記第１の命令セットを含む複数の命令セットを、前記第１のリクエストを示す前記情報を受信したことに応答して実行させることをさらに含む、条項６に記載の方法。
【００９３】
１３．１つまたは複数のコンピューティングデバイスによって実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
第１のコンピューティングノードを含む複数のコンピューティングノードを、データベース管理システムによって維持されるアイテムの集合に複数のアイテムを格納するリクエストに応答して実行される第１の命令セットに関連付けさせ、
前記アイテムの集合にアイテムを格納する、複数のリクエストの第１のリクエストを示す情報を受信させ、
前記第１のコンピューティングノードのリソース使用率が前記複数のコンピューティングノードの第２のコンピューティングノードよりも低いという判定に少なくとも部分的に基づいて、前記第１の命令セットを前記第１のコンピューティングノードで実行させる命令を格納する、非一時的なコンピュータ可読ストレージ媒体。
【００９４】
１４．前記１つまたは複数のコンピューティングデバイスによって実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
前記第１のコンピューティングノードで前記第１の命令セットを実行することによって使用されるリソースに少なくとも部分的に基づいて、前記第１の命令セットを前記複数のコンピューティングノードの追加のコンピューティングノードで実行することを示す情報を送信させる命令をさらに含む、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【００９５】
１５．前記１つまたは複数のコンピューティングデバイスによって実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
前記第１の命令セットを実行することによって使用されるリソースに少なくとも部分的に基づいて、前記第１の命令セットのパフォーマンスを停止することを判定させる命令をさらに備える、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【００９６】
１６．前記第１の命令セットは、前記アイテムの主キーまたは前記アイテムに対する変更を示す情報の少なくとも１つを備える１つまたは複数のパラメータの関数に対応する、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【００９７】
１７．前記複数のアイテムにおけるアイテムが第１のハッシュ空間に対応する、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【００９８】
１８．前記１つまたは複数のコンピューティングデバイスによって実行されると、前記１つまたは複数のコンピューティングデバイスに少なくとも、
第１のハッシュ空間と複数の命令セットの関連性を示す情報を格納させ、前記複数の命令は前記第１の命令セットを含み、
前記第１のハッシュ空間に関連付けられた前記複数の命令セットのそれぞれを、前記第１のリクエストを示す前記情報を受信したことに応答して実行させる命令をさらに備える、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【００９９】
１９．前記第１のハッシュ空間がパーティションに対応する、条項１８に記載の非一時的なコンピュータ可読ストレージ媒体。
【０１００】
２０．前記第１の命令セットが、クロスリージョンレプリケーション、データ検証またはアクセスパターン検出の少なくとも１つを実行するためのスクリプトを備える、条項１３に記載の非一時的なコンピュータ可読ストレージ媒体。
【０１０１】
別途具体的に記述されない限りまたは用いられている文脈内でそれ以外に理解されない限り、とりわけ、「ｃａｎ（することができる）」、「ｃｏｕｌｄ（できるであろう）」、「ｍｉｇｈｔ（かもしれない）」、「ｍａｙ（してもよい）」、「ｅ．ｇ．（例えば）」などの本明細書中で用いられる条件的言語は、特定の特徴、要素、及び／またはステップを特定の実施形態が含み、一方で他の実施形態が含まないことを伝えるために一般に使用される。したがって、そのような条件的言語は、一般に、特徴、要素、及び／またはステップが、１つまたは複数の実施形態にいずれの形であれ必要とされるか、あるいは１つまたは複数の実施形態が、オーサ入力またはプロンプティングを用いて、または用いずに、これらの特徴、要素、及び／またはステップが含まれるか、または任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。用語「ｃｏｍｐｒｉｓｉｎｇ（備える）」、「ｉｎｃｌｕｄｉｎｇ（含む）」、「ｈａｖｉｎｇ（有する）」などは同義であり、オープンエンドに包含的に用いられ、追加の要素、特徴、行為、動作などを排除しない。また、用語「ｏｒ（または）」は、その包含的な趣旨で（排除的な趣旨ではなく）用いられ、例えば要素のリストをつなぐのに用いられた際に、用語「ｏｒ（または）」はリストの要素の１つ、いくつかまたは全てを意味する。
【０１０２】
特定の例示的な実施形態を記載してきたが、これらの実施形態は例としてのみ提示したものであり、本明細書中に開示する発明の範囲を限定する意図はない。したがって、前述の説明のいずれも、任意の特定の特徴、特性、ステップ、モジュールまたはブロックが必要であるまたは必須であることを意味する意図はない。実際のところ、本明細書中に記載される新規の方法及びシステムは、様々な他の形式で実施され得、さらに、本明細書中に記載される方法及びシステムの形式の様々な省略、置換及び変更は、本明細書中に開示する発明の精神から逸脱せずになされ得る。添付の特許請求の範囲及びそれらの均等物は、本明細書中に開示される発明の特定の範囲及び精神に収まるような形式または修正を包含するように意図されている。
【図１】
0006618614.tif 000002
【図２】
0006618614.tif 000003
【図３】
0006618614.tif 000004
【図４】
0006618614.tif 000005
【図５】
0006618614.tif 000006
【図６】
0006618614.tif 000007
【図７】
0006618614.tif 000008
【図８】
0006618614.tif 000009
【図９】
0006618614.tif 000010
【図１０】
0006618614.tif 000011