(57)【特許請求の範囲】
【請求項１】
分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、
前記集計処理の対象として前記キーを有する第１の入力データを受け付ける受付部と、
データベースを保持する保持部と、
前記受付部により受け付けられた前記第１の入力データに対して前記集計処理を行い、前記キーを有する第１の出力データおよび当該キーを有し前記保持部に保持された前記データベースに格納される第２の出力データの少なくとも一つを出力する処理部とを備え、
前記処理部は、前記キーを有するデータに対して前記集計処理を行い当該キーを有する第１の出力データおよび当該キーを有し前記保持部に保持された前記データベースに格納される第２の出力データの少なくとも一つを出力する他の処理部について、当該他の処理部による当該集計処理が正常に完了しなかった場合には当該処理部の処理結果を取り消し、
前記受付部は、前記処理部に対する前記第１の入力データとして、外部から受信した前記データ又は前記他の処理部から出力された第１の出力データを受け付けること
を特徴とするシステム。
【請求項２】
前記処理部は、前記第１の入力データに加えて、前記データベースから読み出した第３データを受け付け、当該第１の入力データおよび当該第３データに基づいて当該第１の入力データに対する処理を行うことを特徴とする請求項１に記載のシステム。
【請求項３】
分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、
前記集計処理の対象として前記キーを有する第１の入力データを受け付ける受付部と、
データベースを保持する保持部と、
前記受付部により受け付けられた前記第１の入力データに対して所定の処理を行い、処理結果に基づいて、当該キーを有する第１の出力データおよび当該キーを有し前記保持部に保持された前記データベースに格納される第２の出力データの少なくとも一つを出力する複数の処理部とを備え、
前記受付部は、外部から受信した前記データを前記複数の処理部のうちの先頭の処理部に対する第１の入力データとして受け付けて、当該先頭の処理部より後の各処理部に対しては、処理部の前段にある他の処理部から出力された第１の出力データを当該処理部に対する第１の入力データとして受け付けること
を特徴とするシステム。
【請求項４】
前記複数の処理部は、前記第１の入力データに加えて、前記データベースから読み出したデータを第２の入力データとして受け付け、当該第１の入力データおよび当該第２の入力データに基づいて前記所定の処理を行うことを特徴とする請求項３に記載のシステム。
【請求項５】
前記複数の処理部において、出力される第１の出力データがない場合、または出力される第１の出力データを第１の入力データとする他の処理部がない場合、前記キーを有するデータについての集計処理が終了することを特徴とする請求項３または４に記載のシステム。
【請求項６】
分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、
前記集計処理の対象として前記キーを有する第１の入力データを受け付ける受付部と、
データベースを保持する保持部と、
前記受付部により受け付けられた前記第１の入力データに応じた前記集計処理を行う手段である１または複数のオペレータを呼び出して、呼び出した１または複数の当該オペレータにより当該第１の入力データに対する所定の処理を行い、各オペレータの処理において、前記キーを有する第１の出力データおよび当該キーを有し前記保持部に保持された前記データベースに格納される第２の出力データの少なくとも一つを出力する処理部と、
前記処理部により出力された前記第１の出力データを記憶する記憶部とを備え、
前記受付部は、第１の入力データの受け付けに際し、前記記憶部に記憶された前記第１の出力データがある場合、当該第１の出力データを第１の入力データとして受け付け、当該記憶部に記憶された当該第１の出力データがない場合、外部から受信した前記データを第１の入力データとして受け付けること
を特徴とするシステム。
【請求項７】
前記処理部による前記所定の処理が終了した後、前記記憶部に記憶される前記第１の出力データがない場合、前記第２の出力データが格納された前記データベースの内容が確定されることを特徴とする請求項６に記載のシステム。
【請求項８】
前記処理部によるオペレータの処理が終了するごとに、前記データベースの内容が確定されることを特徴とする請求項６に記載のシステム。
【請求項９】
分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行う方法であって、
受付部が、前記集計処理の対象として前記キーを有する第１の入力データを受け付けるステップと、
処理部が、前記受付部により受け付けられた前記第１の入力データに対して前記集計処理を行い、前記キーを有する第１の出力データおよび当該キーを有しデータベースに格納される第２の出力データの少なくとも一つを出力するステップとを含み、
前記処理部は、前記キーを有するデータに対して前記集計処理を行い当該キーを有する第１の出力データおよび当該キーを有し前記データベースに格納される第２の出力データの少なくとも一つを出力する他の処理部について、当該他の処理部による当該集計処理が正常に完了しなかった場合には当該処理部の処理結果を取り消し、
前記受付部は、前記処理部に対する前記第１の入力データとして、外部から受信した前記データ又は前記他の処理部から出力された第１の出力データを受け付けること
を特徴とする方法。
【請求項１０】
分類のために用いられる値であるキーを有するデータを外部からコンピュータに受信させ、受信させたデータごとに集計処理を行うプログラムであって、
前記コンピュータを、
前記集計処理の対象として前記キーを有する第１の入力データを受け付ける受付手段、
前記受付手段により受け付けられた前記第１の入力データに対して前記集計処理を行い、前記キーを有する第１の出力データおよび当該キーを有しデータベースに格納される第２の出力データの少なくとも一つを出力する処理手段として機能させ、
前記処理手段は、前記キーを有するデータに対して前記集計処理を行い当該キーを有する第１の出力データおよび当該キーを有し前記データベースに格納される第２の出力データの少なくとも一つを出力する他の処理手段について、当該他の処理手段による当該集計処理が正常に完了しなかった場合には当該処理手段の処理結果を取り消し、
前記受付手段は、前記処理手段に対する前記第１の入力データとして、外部から受信した前記データ又は前記他の処理手段から出力された第１の出力データを受け付けること
を特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信したデータごとに集計処理を行うシステム、方法およびプログラムに関する。
【背景技術】
【０００２】
従来、到着する多数のイベントやデータに対する処理の方式として、一度受信したイベントやデータを蓄積してから、日、週、月単位等でまとめてバッチ処理により一括で処理を行う方式が存在する。一方、到着するデータを即時に処理する手法へのニーズが高まっている。例えば、データに対する処理内容や分析シナリオを予め設定しておき、到着するデータが条件に合致すると、即座に決められたアクションを実行するＣＥＰ（Complex Event Processing）と呼ばれる技術が存在する（例えば、特許文献１参照）。また、データベースのデータをまとめて変換して他のデータベースに保存する処理を行うＥＴＬ（Extract Transform Loading）と呼ばれる技術が存在する（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１１８９２８号公報
【特許文献２】特開２００５−０１１１０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
到着するデータを処理する手法として、保持しているデータと組み合わせて処理を行いその結果を保存する集計処理がある。この集計処理を到着するデータに対して即時に行う技術として、従来のデータベース管理システム（ＤＢＭＳ：Database Management System）やデータを即時に処理するストリーム処理用のミドルウェア等を組み合わせたアプリケーションが存在する。しかし、大量のデータの集計処理には非常に多くのデータアクセス処理が伴い、このようなアプリケーションを大量のデータの集計処理が行えるように対応させるのは容易ではなく、開発には多大なコストを要する。
【０００５】
本発明は、到着したデータごとにすでに保持しているデータと組み合わせて処理を行い、その結果を保存する集計処理を簡易に実現するためのシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
かかる目的のもと、本発明は、分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、集計処理の対象としてキーを有する第１データを受け付ける受付部と、データベースを保持する保持部と、集計処理を行う処理部である１または複数のオペレータにより、受付部に受け付けられた第１データに対する処理を行い、１または複数のオペレータの処理において生成されたキーを有する第２データを、保持部に保持されたデータベースに格納する格納部とを備えるシステムを提供する。
【０００７】
ここで、上記の格納部により呼び出されるオペレータは、第１データに加えて、データベースから読み出した第３データを受け付け、第１データおよび第３データに基づいて第１データに対する処理を行う、ものであってもよい。
【０００８】
また、本発明は、分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、データベースを保持する保持部と、キーを有する特定のデータを第１の入力データとして受け付け、第１の入力データに対して所定の処理を行い、処理結果に基づいて、キーを有する第１の出力データおよびキーを有し保持部に保持されたデータベースに格納される第２の出力データの少なくとも一つを出力する複数の処理部とを備え、複数の処理部において、外部から受信したデータを第１の入力データとする処理部を先頭とし、他の処理部が出力する第１の出力データを第１の入力データとして受け付ける処理部を他の処理部に後続させる、システムも提供する。
【０００９】
ここで、上記の処理部は、第１の入力データに加えて、データベースから読み出したデータを第２の入力データとして受け付け、第１の入力データおよび第２の入力データに基づいて所定の処理を行う、ものであってもよい。
【００１０】
また、上記の複数の処理部において、出力される第１の出力データがない場合、または出力される第１の出力データを第１の入力データとする他の処理部がない場合、キーを有するデータについての集計処理が終了する、ものであってもよい。
【００１１】
また、本発明は、分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行うシステムであって、集計処理の対象としてキーを有する第１の入力データを受け付ける受付部と、データベースを保持する保持部と、受付部により受け付けられた第１の入力データに応じた集計処理を行う手段である１または複数のオペレータを呼び出して、呼び出した１または複数のオペレータにより第１の入力データに対する所定の処理を行い、各オペレータの処理において、キーを有する第１の出力データおよびキーを有し保持部に保持されたデータベースに格納される第２の出力データの少なくとも一つを出力する処理部と、処理部により出力された第１の出力データを記憶する記憶部とを備え、受付部は、第１の入力データの受け付けに際し、記憶部に記憶された第１の出力データがある場合、第１の出力データを第１の入力データとして受け付け、記憶部に記憶された第１の出力データがない場合、外部から受信したデータを第１の入力データとして受け付ける、システムも提供する。
【００１２】
ここで、上記の処理部による所定の処理が終了した後、記憶部に記憶される第１の出力データがない場合、第２の出力データが格納されたデータベースの内容が確定される、ものであってもよい。
【００１３】
また、上記の処理部によるオペレータの処理が終了するごとに、データベースの内容が確定される、ものであってもよい。
【００１４】
さらに、本発明は、分類のために用いられる値であるキーを有するデータを外部から受信し、受信したデータごとに集計処理を行う方法であって、集計処理の対象としてキーを有する第１データを受け付けるステップと、集計処理を行う処理部である１または複数のオペレータにより、受け付けられた第１データに対する処理を行い、１または複数のオペレータの処理において生成されたキーを有する第２データを、記憶部に記憶されたデータベースに格納するステップとを含む方法も提供する。
【００１５】
さらにまた、本発明は、分類のために用いられる値であるキーを有するデータを外部からコンピュータに受信させ、受信させたデータごとに集計処理を行うプログラムであって、コンピュータに、集計処理の対象としてキーを有する第１データを受け付ける機能と、集計処理を行う処理部である１または複数のオペレータにより、受け付けられた第１データに対する処理を行い、１または複数のオペレータの処理において生成されたキーを有する第２データを、記憶部に記憶されたデータベースに格納する機能とを実現させるためのプログラムも提供する。
【発明の効果】
【００１６】
本発明によれば、到着したデータごとにすでに保持しているデータと組み合わせて処理を行い、その結果を保存する集計処理を簡易に実現するためのシステムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本実施の形態に係る集計処理システムの概略構成の一例を示す図である。
【図２】本実施の形態に係る基本モデルの一例を説明するための図である。
【図３】本実施の形態に係る基本モデルを組み合わせた構成の一例を説明するための図である。
【図４】本実施の形態に係るデータ処理部の機能構成例を示したブロック図である。
【図５】（ａ）（ｂ）は、本実施の形態に係るタプル定義情報の一例を示す図である。
【図６】本実施の形態に係るテーブル定義情報の一例を示す図である。
【図７】（ａ）（ｂ）は、本実施の形態に係るオペレータ定義情報の一例を示す図である。
【図８】本実施の形態に係るデータ処理部による集計処理手順の一例を示したフローチャートである。
【図９】本実施の形態に係るデータ処理部による集計処理の具体例を説明するための図である。
【図１０】本実施の形態に係る定義情報に関する記述の一例を示した図である。
【図１１】本実施の形態に係るデータ処理部による集計処理手順の他の一例を示したフローチャートである。
【図１２−１】本実施の形態に係る最適化処理の第１の例を説明するための図である。
【図１２−２】本実施の形態に係る最適化処理の第１の例を説明するための図である。
【図１３】本実施の形態に係るグループ化オペレータを実行する手順の一例を示したフローチャートである。
【図１４】本実施の形態に係る最適化処理の第２の例を説明するための図である。
【図１５】本実施の形態に係る並列化処理の手順の一例を示したフローチャートである。
【図１６】本実施の形態に係るデータ処理部を構成するのに好適なハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１８】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
【００１９】
＜集計処理システムの概要説明＞
図１は、本実施の形態に係る集計処理システム１の概略構成の一例を示す図である。集計処理システム１は、多数のデータが外部から次々と到着する場合に、データを蓄積してからまとめて処理を行うのではなく、データが到着するごとに集計処理を行うシステムである。本実施の形態において、集計処理とは、到着したデータに対して、すでに保持しているデータと組み合わせて演算を行い、その結果を保存してデータベースを更新する処理をいう。
【００２０】
本実施の形態に係る集計処理は、以下のような規則に基づいて実行される。集計処理システム１に対して外部からデータが到着すると、到着したデータはタプルの形式に変換される。タプルとは、データベースに格納される個々のデータであり、タプルは、列名および型が定められた列を一つ以上持つ。また、タプルには、キーとなる列（以下、キーとなる列をキー列と称する）が一つ以上定義されている。各タプルは、このキー列に入る値（以下、キー列に入る値をキー値と称する）により分類される。
【００２１】
そして、集計処理システム１は、キー値が同一である複数のタプルを一連のデータとして扱い、到着順に処理を行う。ただし、異なるキー値を持つデータ同士では、到着した順番通りに処理が行われるとは限らない。また、集計処理システム１は、全体として並列に多数のデータを受信するが、同一のキー値を持つデータが同時並行に到着することはないものとする。
【００２２】
また、集計処理システム１は、到着するデータごとに１または複数の集計処理を実行する。この集計処理は、トランザクションとして実行される。トランザクションとは、関連する複数の処理を一つの処理単位としてまとめたものであり、コミットされるかアボートされるかのいずれかにより処理が終了する。コミットとは、トランザクションの処理が成功してその処理結果が確定されることであり、アボートとは、トランザクションの処理が失敗して処理結果が反映されないことをいう。
【００２３】
即ち、集計処理システム１は、到着したある一つのデータに対して１または複数の集計処理をトランザクションとして実行する。そして、トランザクションの全ての集計処理が正常に終了した場合、トランザクションはコミットされ、集計処理の処理結果が確定したものとしてデータベースに反映される。一方、トランザクションの集計処理のうち少なくとも一つの集計処理で障害が発生して中断した場合、トランザクションはアボートされ、すでに実行された集計処理の処理結果も取り消されて、データベースはトランザクション実行前の元の状態に戻る。このようにして、集計処理システム１は、多数のデータを受信するのと並行して、データごとに集計処理を行う。
【００２４】
＜集計処理システムの構成の説明＞
次に、図１に示す集計処理システム１の構成要素について説明する。本実施の形態に係る集計処理システム１は、集計処理システム１の集計処理の対象となるデータをタプルの形式に変換しデータ処理部３に送信するデータ送信部２と、送信されたタプルに対して集計処理を実行するデータ処理部３とを備える。また、データ送信部２は複数のタプル送信部２０１を備え、データ処理部３は複数のＲＤＡ（Realtime Data Aggregation）サーバプロセス３０１およびＲＤＢ（Relational Database）サーバプロセス３０２を備えている。ＲＤＡサーバプロセスとは、本実施の形態に係る集計処理（リアルタイムデータ集計：ＲＤＡ）を実現するサーバプロセスである。ＲＤＢサーバプロセスとは、行と列とからなるテーブルの形式でデータを管理するサーバプロセスである。また、サーバプロセスとは、一定の目的のもとにサーバ装置で実行される処理手段である。
【００２５】
データ送信部２において、各タプル送信部２０１は、タプル送信プログラムを実行することにより、集計処理の対象となるデータをタプルの形式に変換し、変換後のタプルをデータ処理部３のＲＤＡサーバプロセス３０１に送信する。タプル送信部２０１は、集計処理システム１の外部にある集計処理の対象となるデータを有する装置から受信したデータに対して、タプルへの変換を行う。また、各タプル送信部２０１は、各ＲＤＡサーバプロセス３０１と相互に接続されている。タプルの送信に際し、タプル送信部２０１は、タプルのキー値に基づいて、ＲＤＡサーバプロセス３０１を識別する識別子を求め、求めた識別子で特定されるＲＤＡサーバプロセス３０１に対してタプルを送信する。識別子を求める手法としては、例えば、タプルのキー値からハッシュ値を計算し、ＲＤＡサーバプロセス３０１の数による剰余計算で識別子を計算する手法等がある。また、複数のタプル送信部２０１を別々のサーバやＰＣ（Personal Computer）等で実現しても良いし、１台のサーバ等で実現しても良い。
【００２６】
データ処理部３は、データ送信部２から送信されたタプルに対して集計処理を実行する。この集計処理の過程で参照されるデータは、ＲＤＡサーバプロセス３０１に接続されたＲＤＢサーバプロセス３０２に格納されているが、高速化の目的でＲＤＡサーバプロセス３０１内のメモリ上にも保持される。そして、集計処理の過程でデータベースのデータが更新される際には、ＲＤＢサーバプロセス３０２上に書き込まれるが、ＲＤＡサーバプロセス３０１のメモリ上にも保持されている場合には、その値も更新される。データ処理部３が実行する集計処理の詳細については後述する。
【００２７】
また、データ処理部３は、集計処理のプロセスを実現するサーバ等により実現される。なお、各サーバプロセスはネットワークで接続された任意のサーバ等に配置可能である。即ち、一つのサーバ等に複数のサーバプロセスを配置することも可能であり、複数のサーバプロセスを別々のサーバ等に配置することも可能である。さらに、例えば、このようなサーバにデータ送信部２のタプル送信プログラムを実行させて、データ送信部２およびデータ処理部３の機能を同一のサーバ等で実現するような構成にしても良い。
【００２８】
＜集計処理の基本モデルの説明＞
次に、データ処理部３が実行する集計処理の基本となる基本モデルについて説明する。図２は、本実施の形態に係る基本モデルの一例を説明するための図である。基本モデルでは、タプルに対する集計処理を実行するオブジェクト（以下、オペレータと称する）が一つ存在する。
【００２９】
そして、オペレータには、オペレータが処理の対象とするタプル（以下、入力タプルと称する）、入力タプルと組み合わせて処理が行われるテーブル（以下、入力テーブルと称する）、オペレータによる処理結果が書き込まれるテーブル（以下、出力テーブルと称する）、オペレータの処理により出力されるタプル（以下、出力タプルと称する）の情報が定義されている。図２に示す基本モデルでは、オペレータ２１に対して、入力タプル２２、入力テーブル２３、出力タプル２４、出力テーブル２５の情報が定義されているものとする。また、オペレータ２１は、データ処理部３のＲＤＡサーバプロセス３０１を実現する具体的な要素であり、入力テーブル２３、出力テーブル２５は、データ処理部３のＲＤＢサーバプロセス３０２を実現する具体的な要素である。本実施の形態では、第１の入力データに対して所定の処理を行う処理部の一例として、オペレータを設けている。
【００３０】
例えば、データ処理部３がデータ送信部２から送信されたタプル（入力タプル２２）を受け付けると、このタプル（入力タプル２２）を入力タプルとして定義するオペレータ２１が呼び出され、呼び出されたオペレータ２１の処理が実行される。オペレータ２１の処理では、入力タプル２２と入力タプル２２のキー列（キー値）に関連する入力テーブル２３のレコード群とに基づいて、集計データが生成される。ここで、レコードとは、テーブルにおける１件分のデータである。そして、生成された集計データの内容が出力テーブル２５に書き込まれるとともに、出力タプル２４の生成が行われる。
【００３１】
出力テーブル２５に書き込まれる内容には、少なくとも入力タプル２２のキー値が含まれるものとする。また、出力タプル２４は入力タプル２２に基づいて生成されるデータであるため、出力タプル２４は入力タプル２２のキー値を含むものとする。出力タプル２４は、次に処理を行うオペレータの入力タプルになることもあれば、データ処理部３の外部に出力されて集計処理システム１とは別のシステムで処理されることもある。
【００３２】
このようにして、オペレータ２１は、集計処理として、入力タプル２２と入力テーブル２３とに基づいて集計データを生成し、出力テーブル２５の更新や出力タプル２４の生成を行う。そして、この基本モデルを複数組み合わせれば、複数の集計処理が一連の処理として実行されることとなる。ただし、基本モデルは図２に示した構成に限られるものではない。各オペレータにおいて入力タプルは必須の定義項目であるが、オペレータによる処理の内容によっては、それ以外の入力テーブル、出力テーブル、出力タプルは定義されていなくても良い。例えば、入力テーブルが定義されていない場合、オペレータは入力タプルの情報から集計データの生成を行う。また、一つのオペレータに対して、入力テーブルや出力テーブルが複数定義されていても良いものとする。
【００３３】
＜基本モデルを組み合わせた構成の説明＞
次に、図２に示した基本モデルを複数組み合わせた構成において行われる処理について説明する。図３は、本実施の形態に係る基本モデルを組み合わせた構成の一例を説明するための図である。図３に示す構成では３つのオペレータ（オペレータＡ、オペレータＢ、オペレータＣ）が存在し、各オペレータによる集計処理は一つのトランザクションとして実行されるものとする。また、図示の例では、オペレータＡの入力テーブルは定義されておらず、オペレータＣの処理では出力タプルは生成されないものとする。
【００３４】
まず、データ送信部２から送信されたタプルＡがデータ処理部３に到着すると、タプルＡを入力タプルとして定義する（タプルＡに対応する）オペレータＡが呼び出される。オペレータＡの処理では、入力タプルであるタプルＡに基づいて、オペレータＡの出力テーブルとして定義されたテーブルＡにレコードが書き込まれるとともに、出力タプルとしてタプルＢが生成される。
【００３５】
次に、タプルＢに対応するオペレータとしてオペレータＢが呼び出される。オペレータＢの処理では、オペレータＢの入力タプルであるタプルＢと、入力テーブルであるテーブルＡとに基づいて、出力テーブルであるテーブルＢにレコードが書き込まれるとともに、出力タプルとしてタプルＣが生成される。
【００３６】
次に、タプルＣに対応するオペレータとしてオペレータＣが呼び出される。オペレータＣの処理では、オペレータＣの入力タプルであるタプルＣと、入力テーブルであるテーブルＢとに基づいて、出力テーブルであるテーブルＣにレコードが書き込まれる。オペレータＣの処理では出力タプルは生成されないため、ここで図３に示す一連の処理は終了する。
【００３７】
このようにして、データ送信部２から到着したタプルＡに対して、各オペレータによる集計処理がトランザクションとして実行される。また、各オペレータの出力テーブル（テーブルＡ〜Ｃ）に書き込まれるレコードには、タプルＡのキー値が含まれるものとする。さらに、各オペレータの出力タプル（タプルＢ、Ｃ）にも、タプルＡのキー値が含まれるものとする。なお、図３に示す例ではタプルＡが到着した場合について説明したが、実際には、タプルＡ以外に多数のタプルがデータ処理部３に到着しており、キー値が異なるタプルに対するトランザクションはそれぞれ個別の処理として実行される。
【００３８】
また、図３に示す構成では、３つのオペレータによる処理がトランザクションとして実行される例を示したが、オペレータの数に決まりはなく、例えば、一つのオペレータによる処理がトランザクションとして実行される場合もあるものとする。
【００３９】
また、図３に示す構成では、オペレータＡの出力テーブルとオペレータＢの入力テーブルとが共通のテーブルＡであり、オペレータＢの出力テーブルとオペレータＣの入力テーブルとが共通のテーブルＢである例を示したが、このような構成に限られるものではない。例えば、オペレータＡの出力テーブルがテーブルＡである場合にオペレータＢの入力テーブルがテーブルＢである、というように、あるオペレータの出力テーブルと次に処理を行うオペレータの入力テーブルとが異なるテーブルであっても良い。
【００４０】
＜データ処理部の機能構成の説明＞
次に、本実施の形態に係る集計処理を実行するデータ処理部３の機能構成について説明する。図４は、本実施の形態に係るデータ処理部３の機能構成例を示したブロック図である。
【００４１】
データ処理部３は、集計処理の対象となるタプルを受け付けるタプル受付部１１と、トランザクションを開始または完了させるトランザクション管理部１２と、タプル、テーブルまたはオペレータについて定義された情報を格納する定義情報管理部１３とを備える。また、データ処理部３は、集計処理において用いられるテーブルを格納するテーブル格納部１４と、タプルの各列に対して予め定められた関数（以下、タプル関数と称する）を実行するタプル関数実行部１５と、タプルに対する集計処理を実行する集計処理実行部１６と、集計処理により出力されたタプルを格納する出力タプル格納部１７とを備える。
【００４２】
受付部の一例としてのタプル受付部１１は、データ送信部２から送信されたタプルを受け付ける。また、タプル受付部１１は、タプルに対する集計処理が実行された後、次に集計処理を行うタプルとして、出力タプル格納部１７に格納されたタプルを受け付ける。ここで、タプル受付部１１は、出力タプル格納部１７が空であるか否かを判定し、出力タプル格納部１７が空でない場合に、出力タプル格納部１７に格納されているタプルを受け付ける。一方、出力タプル格納部１７が空である場合、タプル受付部１１は、トランザクション管理部１２に出力タプル格納部１７が空であることを通知する。本実施の形態では、データ送信部２から送信されたタプルを、第１データの一例として用いている。
【００４３】
出力タプル格納部１７に格納されているタプルは、データ送信部２から送信されたタプルと同一のキー値を持っている。出力タプル格納部１７にタプルが格納されている間、さらに同一のキー値を持つタプルがデータ送信部２から送信されたとしても、タプル受付部１１はデータ送信部２からのタプルを受け付けない。これは、同一のキー値を持つタプルが新たに受け付けられてトランザクションが開始されると、その前から実行中のトランザクションにより更新されているデータベースに対して、部分的にさらに更新が行われ、データベースに不整合が生じる場合があるためである。
【００４４】
このように、同一のキー値を持つタプルに関して出力タプル格納部１７に格納されたタプルがなくなり、トランザクションが完了してデータベースの更新内容が確定するまで、タプル受付部１１はそのキー値に関するデータ送信部２からのタプルを受け付けない。このような構成にすることで、データベースに不整合が生じることを抑制する。また、データの整合性を保つために、トランザクションの開始から完了（または中断）までの間、そのトランザクションの処理で使用される入力テーブル、出力テーブルは、別のトランザクションの処理では使用されないように制御される。
【００４５】
また、タプル受付部１１は、データ送信部２から入力されたタプル、または出力タプル格納部１７に格納されたタプルを受け付けると、タプルを受け付けたことをトランザクション管理部１２に通知するとともに、受け付けたタプルをタプル関数実行部１５に送信する。
【００４６】
トランザクション管理部１２は、１または複数のオペレータによる処理に対して、トランザクションを開始または完了させる。ここで、トランザクション管理部１２は、タプル受付部１１からタプルを受け付けた通知を受けると、トランザクションが開始済みか否かを判定する。トランザクションがまだ開始されていなければ、トランザクション管理部１２はトランザクションを開始する。
【００４７】
また、トランザクション管理部１２は、タプル受付部１１から出力タプル格納部１７が空であることの通知を受けると、トランザクションを完了（コミット）させる。さらに、トランザクション管理部１２は、集計処理が失敗した場合には、トランザクションを中断（アボート）させる。
【００４８】
定義情報管理部１３は、タプル、テーブルまたはオペレータについて定義された定義情報を格納する。タプルについて定義された情報（以下、タプル定義情報と称する）は、入力タプルや出力タプルとなるタプルに関する情報である。具体的には、タプル定義情報は、タプルのタプル名ごとに定められており、タプルが持つ各列の名称、各列の型、タプルにおいてキー列となる列名、各列に対して予め定められたタプル関数の情報が含まれる。タプル関数としては、例えば、タイムスタンプの列に現在時刻を記録する関数等がある。タプル定義情報の詳細については、図５で説明する。
【００４９】
また、テーブルについて定義された情報（以下、テーブル定義情報と称する）は、集計処理において入力テーブルや出力テーブルとして用いられるテーブルに関する情報である。具体的には、テーブル定義情報は、テーブルごとに定められており、テーブル名、テーブルが持つ各列の名称、各列の型、テーブルにおいてキー列となる列名の情報が含まれる。テーブル定義情報の詳細については、図６で説明する。
【００５０】
さらに、オペレータについて定義された情報（以下、オペレータ定義情報と称する）は、オペレータ呼び出し部１６１により呼び出されるオペレータに関する情報である。具体的には、オペレータ定義情報は、オペレータごとに定められており、オペレータ名、オペレータの処理で用いられるパラメータ、入力タプルのタプル名、出力タプルのタプル名、入力テーブルのテーブル名、出力テーブルのテーブル名の情報が含まれる。
【００５１】
また、オペレータ定義情報には、入力タプル・入力テーブルマッピング情報も含まれる。この入力タプル・入力テーブルマッピング情報は、入力タプルの列に対応するレコードを入力テーブルから取得するための情報であり、例えば、入力タプルの列名と入力テーブルの列名との対応情報である。さらに、オペレータ定義情報には、出力タプルの生成に際し、入力タプル、入力テーブル、出力テーブルのどの列の値を出力タプルにセットするか等の情報が定義されている場合もある。オペレータ定義情報の詳細については、図７で説明する。
【００５２】
テーブル格納部１４は、集計処理において入力テーブルや出力テーブルとして用いられるテーブルのデータを格納する。本実施の形態では、保持部、データベースを記憶する記憶部の一例として、テーブル格納部１４を設けている。
【００５３】
タプル関数実行部１５は、タプル受付部１１から送信されたタプルのタプル名と定義情報管理部１３に格納されたタプル定義情報とに基づいて、タプルの各列に対して定義されたタプル関数を実行する。ここで、タプル関数実行部１５は、タプル受付部１１から送信されたタプルのタプル名と、そのタプル名に対応するタプル定義情報とに基づいて、タプルに定義されたタプル関数があるか否かを判定する。定義されたタプル関数がある場合、タプル関数実行部１５は定義されたタプル関数を呼び出し、呼び出したタプル関数の処理を実行してタプルの列の値を変更する。そして、タプル関数実行部１５は、列の値を変更したタプルを集計処理実行部１６に送信する。定義されたタプル関数がない場合には、タプル関数実行部１５はタプル受付部１１から送信されたタプルをそのまま集計処理実行部１６に送信する。
【００５４】
次に、集計処理実行部１６について説明する。集計処理実行部１６は、オペレータを呼び出して処理を実行するオペレータ呼び出し部１６１と、出力テーブルのレコードを生成する出力レコード生成部１６２と、出力タプルを生成する出力タプル生成部１６３と、集計処理が成功したか否かを判定する集計処理判定部１６４とを有し、タプル関数実行部１５から送信されたタプルに対して集計処理を実行する。また、本実施の形態では、格納部、１または複数のオペレータにより所定の処理を行う処理部の一例として、集計処理実行部１６を設けている。
【００５５】
オペレータ呼び出し部１６１は、タプル関数実行部１５から送信されたタプルに対応するオペレータを呼び出し、オペレータの処理を実行する。ここで、オペレータ呼び出し部１６１は、タプル関数実行部１５から送信されたタプルのタプル名と定義情報管理部１３に格納されたオペレータ定義情報とに基づいて、このタプルを入力タプルとして定義するオペレータで未実行のものがあるか否かを判定する。未実行のオペレータがある場合、オペレータ呼び出し部１６１は、未実行のオペレータのオペレータ定義情報を定義情報管理部１３から取得する。また、未実行のオペレータが複数ある場合には、オペレータ呼び出し部１６１は、未実行のオペレータのうち一つを選択し、選択したオペレータの定義情報を取得する。本実施の形態では、第１の入力データの一例として、入力タプルを用いている。
【００５６】
次に、オペレータ呼び出し部１６１は、取得したオペレータ定義情報に定義された入力テーブルのレコード（以下、入力テーブルのレコードを入力レコードと称する）をテーブル格納部１４から取得する。そして、オペレータ呼び出し部１６１は、入力タプルの列の値と入力レコードとを引数としてオペレータの関数（以下、オペレータ関数と称する）を実行し、集計データを生成する。オペレータ関数の実行に際し、オペレータ呼び出し部１６１は、オペレータ定義情報の入力タプル・入力テーブルマッピング情報に基づいて、入力タプルの列に対応するレコードを入力テーブルから取得する。本実施の形態では、第３データ、第２の入力データの一例として、入力レコードを用いている。
【００５７】
また、オペレータ呼び出し部１６１は、タプル関数実行部１５から送信されたタプルに対応するオペレータが存在しない場合や、タプルに対応する各オペレータの処理が全て実行された場合、タプル受付部１１に対して、次に集計処理を行うタプルを出力タプル格納部１７から受け付けるように通知を行う。
【００５８】
出力レコード生成部１６２は、定義情報管理部１３から、オペレータ定義情報で定義された出力テーブルのテーブル定義情報を取得する。そして、オペレータ呼び出し部１６１により生成された集計データを出力テーブルのレコード（以下、出力テーブルのレコードを出力レコードと称する）の形式に変換して、変換により得た出力レコードを、テーブル格納部１４に格納された出力テーブルに書き込む。ここで書き込まれる出力レコードには、データ送信部２から送信されたタプルと同一のキー値が含まれるものとする。本実施の形態では、第２データ、第２の出力データの一例として、出力レコードを用いている。
【００５９】
出力タプル生成部１６３は、入力タプル、入力レコード、出力レコードに基づいて、出力タプルを生成する。ここで、出力タプル生成部１６３は、定義情報管理部１３から、オペレータ定義情報に定義された出力タプルのタプル名に対応するタプル定義情報を取得する。そして、出力タプル生成部１６３は、出力タプルのタプル定義情報に応じて入力タプル、入力レコード、出力レコードの列の値をセットして、出力タプルを生成する。ここで生成される出力タプルには、データ送信部２から送信されたタプルと同一のキー値が含まれるものとする。本実施の形態では、第１の出力データの一例として、出力タプルを用いている。
【００６０】
ここで、出力タプル生成部１６３は、出力タプルの生成に際し、オペレータ定義情報に入力タプル、入力テーブル、出力テーブルのどの列の値を出力タプルにセットするか等の情報が定義されていれば、この情報をもとに出力タプルを生成する。このような情報が定義されていない場合、出力タプル生成部１６３は、予め定められた処理系の規則により出力タプルを生成する。予め定められた処理系の規則とは、例えば、入力タプルの列と同じ名称である出力タプルの列には、その入力タプルの列の値をセットする等である。
【００６１】
集計処理判定部１６４は、集計処理、即ち、オペレータ呼び出し部１６１によるオペレータ関数の実行、出力レコード生成部１６２による出力テーブルへの書き込み、出力タプル生成部１６３による出力タプルの生成の処理が成功したか否かを判定する。集計処理が成功した場合、集計処理判定部１６４は、オペレータ呼び出し部１６１に対して、引き続き未実行のオペレータに対する処理を行うように通知を行う。また、集計処理において出力タプルが生成されていれば、集計処理判定部１６４は、生成された出力タプルを出力タプル格納部１７に格納させる。ここで、生成された出力タプルを入力タプルとして定義するオペレータが存在しない場合、例えば、集計処理判定部１６４は、出力タプルは集計処理システム１とは別のシステムで処理されるデータであるとして、出力タプル格納部１７に格納せずにデータ処理部３の外部に出力する。一方、集計処理が失敗した場合、集計処理判定部１６４は、トランザクション管理部１２に集計処理が失敗したことを通知する。
【００６２】
出力タプル格納部１７は、出力タプル生成部１６３により出力タプルが生成された場合、生成された出力タプルを格納する。本実施の形態では、第１の出力データを記憶する記憶部の一例として、出力タプル格納部１７を設けている。
【００６３】
＜タプル定義情報の説明＞
次に、定義情報管理部１３に格納されているタプル定義情報について説明する。図５（ａ）（ｂ）は、本実施の形態に係るタプル定義情報の一例を示す図である。図５（ａ）に示すタプル定義情報は、タプル名「PACKET_INFO」のタプル定義情報であり、図５（ｂ）に示すタプル定義情報は、タプル名「PACKET_INFO_2」のタプル定義情報である。
【００６４】
図５（ａ）に示すタプル定義情報には、タプル名「PACKET_INFO」のタプルに関して、各列の名称、各列の型、キー列の情報、各列のタプル関数が示されている。タプルの列は４つあり、各列の列名は「USERID」、「SEQID」、「PACKETNUM」、「TIME」である。また、「USERID」、「SEQID」、「PACKETNUM」、「TIME」の各列について、列の型はそれぞれ、STRING、INT、INT、TIMESTAMPである。さらに、列「USERID」のキー欄は「Yes」であるため、「USERID」の列がタプルのキー列であることがわかる。その他３つの列のキー欄は「No」であるため、キー列は「USERID」の列のみとなる。即ち、タプル名「PACKET_INFO」のタプルは列「USERID」の列の値により識別され、列「USERID」の値が同一である複数のタプルは一連のデータとして処理される。また、データ送信部２がこのタプルを送信する場合には、列「USERID」の値をもとに、タプルの送信先となるデータ処理部３を特定することとなる。
【００６５】
また、列「USERID」のタプル関数の欄は「NONE」であるため、タプル関数は定義されていない。一方、列「SEQID」のタプル関数の欄は「seqid()」であり、タプル関数が定義されている。タプル関数「seqid()」は、タプルのキー値に関連付けられている親テーブルの列「SEQID」の値を取得し、取得した値に１加算してタプルの列「SEQID」に記録するとともに、親テーブルの列「SEQID」の値も更新する関数である。即ち、キー列「USERID」の値が同一である複数のタプルでは、順番に「SEQID」の値が１加算されて付与されることになる。このような構成により、例えば、同じユーザＩＤを持つタプルに順番に番号（SEQIDの番号）が付与され、順次集計処理が行われることとなる。
【００６６】
また、列「TIME」にはタプル関数「currenttime()」が定義されている。タプル関数「currenttime()」が実行されると、タプルの「TIME」の列に、タプルの受信時刻として現在時刻のタイムスタンプが記録される。タイムスタンプとは、イベントが発生した日時、日付、時刻などを示す文字列である。
【００６７】
また、図５（ｂ）に示すタプル定義情報には、タプル名「PACKET_INFO_2」のタプルに関して、各列の名称、各列の型、キー列の情報、各列のタプル関数が示されている。タプルの列は４つあり、各列の列名はタプル「PACKET_INFO」の列名と同じで、「USERID」、「SEQID」、「PACKETNUM」、「TIME」である。また、タプルのキー列は「USERID」であり、各列のタプル関数は定義されていない。
【００６８】
＜テーブル定義情報の説明＞
次に、定義情報管理部１３に格納されているテーブル定義情報について説明する。図６は、本実施の形態に係るテーブル定義情報の一例を示す図である。図６に示すテーブル定義情報は、テーブル名「PACKET_INFO」のテーブル定義情報である。
【００６９】
図６に示すテーブル定義情報には、テーブル名「PACKET_INFO」のテーブルに関して、各列の名称、各列の型、キー列の情報が示されている。テーブルの列は４つあり、各列の列名は「USERID」、「SEQID」、「PACKETNUM」、「TIME」である。また、「USERID」、「SEQID」、「PACKETNUM」、「TIME」の各列について、列の型はそれぞれ、STRING、INT、INT、TIMESTAMPである。また、列「USERID」、「SEQID」のキー欄は「Yes」であるため、列「USERID」、「SEQID」の列がテーブルのキー列であることがわかる。即ち、テーブル名「PACKET_INFO」のレコードは、列「USERID」および列「SEQID」の値により識別される。
【００７０】
＜オペレータ定義情報の説明＞
次に、定義情報管理部１３に格納されているオペレータ定義情報について説明する。図７（ａ）（ｂ）は、本実施の形態に係るオペレータ定義情報の一例を示す図である。図７（ａ）に示すオペレータ定義情報は、オペレータ名「te_copy」の定義情報であり、図７（ｂ）に示すオペレータ定義情報は、オペレータ名「ee_avg」の定義情報である。
【００７１】
図７（ａ）に示すオペレータ定義情報には、オペレータ名「te_copy」のオペレータに関して、オペレータ名、オペレータ関数の実行に用いられるパラメータの情報、入力タプル名、出力タプル名、入力テーブル名、出力テーブル名が示されている。このオペレータ「te_copy」は、入力タプルの列値を出力テーブルに書き込む処理を行うオペレータである。オペレータ関数の実行に用いられるパラメータ欄は「NONE」であり、パラメータは定義されていない。また、入力タプル名は「PACKET_INFO」、出力タプル名は「PACKET_INFO_2」である。入力テーブル名は「NONE」であり入力テーブルは定義されておらず、出力テーブル名は「PACKET_INFO」である。入力テーブルが定義されていないため、入力タプル・入力テーブルマッピング情報も存在しない。
【００７２】
図７（ｂ）に示すオペレータ定義情報には、オペレータ名「ee_avg」のオペレータに関して、オペレータ名、オペレータ関数の実行に用いられるパラメータの情報、入力タプル名、出力タプル名、入力テーブル名、出力テーブル名が示されている。オペレータ「ee_avg」には、オペレータ「te_copy」と異なりパラメータが定義されている。オペレータ「ee_avg」はこのパラメータをもとに、入力テーブルのレコード群で集計タイプに対応する時間範囲内のレコードの平均値を計算し、計算した平均値を出力テーブルに書き込む処理を行う。集計タイプは、分単位、時単位、日単位、月単位等である。例えば、携帯電話のパケット数のデータが集計処理システム１に次々と到着する場合に、オペレータ「ee_avg」により一分単位（即ち、集計タイプが分単位）のパケット数の平均値が出力テーブルに書き込まれる。
【００７３】
また、オペレータ「ee_avg」には、入力テーブルとしてテーブル「PACKET_INFO」が定義されているため、入力タプル・入力テーブルマッピング情報が存在する。入力タプル・入力テーブルマッピング情報には、入力タプルの列名と、それに対応する入力テーブルの列名とが示されている。即ち、入力タプル「PACKET_INFO_2」の列名と、それに対応する入力テーブル「PACKET_INFO」の列名との対応が示されており、入力タプルの列「USERID」「SEQID」「PACKETNUM」「TIME」に対して、それぞれ入力テーブルの列「USERID」「SEQID」「PACKETNUM」「TIME」が対応していることがわかる。ここで、図７（ｂ）に示す例では、入力タプルの列とそれに対応する入力テーブルの列との列名が同じであるが、両者で列名が異なる場合もある。そのような場合であっても、入力タプル・入力テーブルマッピング情報により、入力タプルの列に入力テーブルのどの列が対応しているかがわかることになる。
【００７４】
＜集計処理手順の説明＞
次に、集計処理の手順について説明する。図８は、本実施の形態に係るデータ処理部３による集計処理手順の一例を示したフローチャートである。
【００７５】
まず、タプル受付部１１は、集計処理の対象となるタプルを受け付ける（ステップ１０１）。タプル受付部１１が最初に受け付けるタプルはデータ送信部２から入力されたタプルであるが、後述するステップ１０９で説明するように、タプル受付部１１は、出力タプル格納部１７に格納されたタプルを受け付ける場合もある。一例として、ここでは、タプル受付部１１はタプルＴ１を受け付けたものとする。
【００７６】
次に、タプル受付部１１は、トランザクション管理部１２にタプルＴ１を受け付けたことを通知するとともに、タプルＴ１をタプル関数実行部１５に送信する。そして、トランザクション管理部１２は、トランザクションが開始済みか否かを判定する（ステップ１０２）。トランザクションが開始済みであれば（ステップ１０２でＹｅｓ）、次にタプル関数実行部１５は、タプルＴ１に定義されたタプル関数があるか否かを判定する（ステップ１０３）。一方、トランザクションが開始されていなければ（ステップ１０２でＮｏ）、トランザクション管理部１２はトランザクションを開始し（ステップ１０４）、ステップ１０３へ移行する。
【００７７】
次に、ステップ１０３で、タプルＴ１に定義されたタプル関数がないと判定された場合（ステップ１０３でＮｏ）、オペレータ呼び出し部１６１は、タプルＴ１のタプル名と定義情報管理部１３に格納されたオペレータ定義情報とに基づいて、タプルＴ１を入力タプルとするオペレータで未実行のものがあるか否かを判定する（ステップ１０５）。一方、タプル関数実行部１５は、タプルＴ１に定義されたタプル関数があると判定した場合（ステップ１０３でＹｅｓ）、タプル関数を実行してタプルＴ１の列の値を変更し（ステップ１０６）、その後にステップ１０５へ移行する。
【００７８】
次に、ステップ１０５で、タプルＴ１を入力タプルとするオペレータで未実行のものがないと判定された場合（ステップ１０５でＮｏ）、タプル受付部１１は、出力タプル格納部１７が空であるか否かを判定する（ステップ１０７）。出力タプル格納部１７が空であれば（ステップ１０７でＹｅｓ）、トランザクション管理部１２によりトランザクションはコミットされ（ステップ１０８）、全ての集計処理の処理結果が確定したものとしてデータベース（各テーブル）に反映される。データベースへ反映されると本処理フローは終了する。一方、出力タプル格納部１７が空でなければ（ステップ１０７でＮｏ）、タプル受付部１１は、出力タプル格納部１７からタプルを取得し（ステップ１０９）、ステップ１０１へ移行する。
【００７９】
また、ステップ１０５で、オペレータ呼び出し部１６１は、タプルＴ１を入力タプルとするオペレータで未実行のものがあると判定した場合（ステップ１０５でＹｅｓ）、未実行のオペレータのうち一つを選択し、定義情報管理部１３から選択したオペレータのオペレータ定義情報を取得する（ステップ１１０）。そして、オペレータ呼び出し部１６１は、取得したオペレータ定義情報に定義された入力レコードをテーブル格納部１４から取得する。次に、オペレータ呼び出し部１６１は、タプルＴ１の列の値と入力レコードとを引数としてオペレータ関数を実行し、集計データを生成する。オペレータ関数の実行に際し、オペレータ呼び出し部１６１は、入力タプル・入力テーブルマッピング情報に基づいて、タプルＴ１の列に対応するレコードを入力テーブルから取得する。
【００８０】
そして、出力レコード生成部１６２は、ステップ１１０で取得済みのオペレータ定義情報で定義された出力テーブルのテーブル定義情報を取得し、オペレータ関数の実行により生成された集計データを出力レコードに変換して、変換により得た出力レコードを出力テーブルに書き込む（ステップ１１１）。さらに、オペレータ定義情報に出力タプルが定義されていれば、出力タプル生成部１６３は、出力タプルのタプル定義情報に応じて、タプルＴ１、入力レコード、出力レコードの値をセットして出力タプルを生成する。
【００８１】
次に、集計処理判定部１６４は、ステップ１１０およびステップ１１１の集計処理が成功したか否かを判定する（ステップ１１２）。集計処理が失敗した場合（ステップ１１２でＮｏ）、トランザクション管理部１２によりトランザクションはアボートされ（ステップ１１３）、トランザクションにおいてすでに実行された集計処理の処理結果は取り消されて、トランザクション実行前の元の状態に戻り、本処理フローは終了する。
【００８２】
一方、集計処理が成功した場合（ステップ１１２でＹｅｓ）、さらに集計処理判定部１６４は、出力タプル生成部１６３により出力タプルが生成されたか否かを判定する（ステップ１１４）。出力タプルが生成されていなければ（ステップ１１４でＮｏ）、タプルＴ１を入力タプルとするオペレータのうち、まだ実行されていないオペレータに対する処理を行うために、ステップ１０５へ移行する。一方、出力タプルが生成されていれば（ステップ１１４でＹｅｓ）、集計処理判定部１６４は、出力タプルを出力タプル格納部１７に格納し（ステップ１１５）、その後、ステップ１１４で否定の判断（Ｎｏ）がされた場合と同様に、ステップ１０５へ移行する。
【００８３】
＜集計処理の具体例＞
次に、図８に示した集計処理手順で行われる集計処理の具体例について説明する。図９は、本実施の形態に係るデータ処理部３による集計処理の具体例を示した図である。図９に示す集計処理は、データ送信部２が、例えば、携帯電話のパケット数のデータで「ユーザＩＤ」「パケット数」「時刻」の値を持つデータを受信して、タプルの形式に変換し、変換後のタプルをデータ処理部３に送信した場合に実行される集計処理の例である。データ処理部３に送信されるタプルは、図５（ａ）に示すタプル「PACKET_INFO」とし、４つのオペレータによる処理がトランザクションとして実行されることとする。また、タプル「PACKET_INFO」のキー値はユーザを識別するための番号である「ユーザＩＤ」であるとする。以下に示すステップは、図８の各ステップに対応するものとする。
【００８４】
まず、タプル「PACKET_INFO」がデータ処理部３に入力されると、タプル受付部１１がタプル「PACKET_INFO」を受け付ける（ステップ１０１）。ここで、トランザクションはまだ開始されていないため、トランザクション管理部１２はトランザクションを開始する（ステップ１０２、１０４）。次に、タプル関数実行部１５は、タプル「PACKET_INFO」に定義されたタプル関数「seqid()」、「currenttime()」を実行し、タプルの列の値を変更する（ステップ１０３、１０６）。
【００８５】
次に、オペレータ呼び出し部１６１は、定義情報管理部１３からタプル「PACKET_INFO」を入力タプルとするオペレータ「te_copy」の定義情報を取得する（ステップ１０５、１１０）。ここで取得されるオペレータ「te_copy」の定義情報は、図７（ａ）に示すオペレータ定義情報である。オペレータ定義情報に入力テーブルは定義されていないため、オペレータ呼び出し部１６１は、タプル「PACKET_INFO」の列の値を引数としてオペレータ関数を実行し、集計データを生成する。そして、出力レコード生成部１６２は、オペレータ定義情報に定義された出力テーブルであるテーブル「PACKET_INFO」の定義情報を取得し、集計データを出力レコードに変換し、変換により得た出力レコードを出力テーブル「PACKET_INFO」に書き込む（ステップ１１１）。ここで取得されるテーブル「PACKET_INFO」の定義情報は、図６に示すテーブル定義情報である。また、出力テーブルには、タプル「PACKET_INFO」と同一のキー値（ユーザＩＤ）が含まれる。
【００８６】
さらに、出力タプル生成部１６３は、出力タプルとしてオペレータ定義情報に定義されたタプル「PACKET_INFO_2」を生成する。ここで、出力タプル生成部１６３は、タプル「PACKET_INFO」、出力テーブル「PACKET_INFO」の値をもとに、図５（ｂ）に示すタプル「PACKET_INFO_2」を生成する。タプル「PACKET_INFO_2」には、タプル「PACKET_INFO」と同一のキー値（ユーザＩＤ）が含まれる。
【００８７】
集計処理が成功すると、出力タプル生成部１６３により出力タプル「PACKET_INFO_2」が生成されているため、集計処理判定部１６４は、出力タプル「PACKET_INFO_2」を出力タプル格納部１７に格納する（ステップ１１２〜１１５）。次に、ステップ１０５に移行するが、タプル「PACKET_INFO」を入力タプルとするオペレータは、オペレータ「te_copy」以外にはないため（ステップ１０５でＮｏ）、タプル受付部１１は出力タプル格納部１７からタプル「PACKET_INFO_2」を取得し（ステップ１０７、１０９）、続けてタプル「PACKET_INFO_2」に対する集計処理が行われる。
【００８８】
次に、タプル受付部１１がタプル「PACKET_INFO_2」を受け付けると（ステップ１０１）、トランザクションは開始済みであり（ステップ１０２）、タプル「PACKET_INFO_2」に定義されたタプル関数はないため（ステップ１０３）、オペレータ呼び出し部１６１は、タプル「PACKET_INFO_2」を入力タプルとするオペレータで未実行のものがあるか否かを判定する（ステップ１０５）。ここで、タプル「PACKET_INFO_2」を入力タプルとして定義するオペレータは、「ee_avg」「te_add」「ee_sum」の３つ存在するため、オペレータ呼び出し部１６１はそのうちの一つ、例えばオペレータ「ee_avg」を選択し、オペレータ「ee_avg」に関する処理を行う。オペレータ「ee_avg」の処理では、一分単位のパケット数の平均値が出力テーブルに書き込まれる。
【００８９】
オペレータ「ee_avg」の集計処理が成功して終わると（ステップ１１０〜１１５）、オペレータ呼び出し部１６１は、未実行のオペレータ「te_add」「ee_sum」のうちの一つを選択して続けて処理を行う。このようにして、オペレータ「te_add」「ee_sum」の集計処理も成功して終わると、タプル「PACKET_INFO_2」を入力タプルとする未実行のオペレータはないため（ステップ１０５でＮｏ）、タプル受付部１１は、出力タプル格納部１７が空であるか否かを判定する（ステップ１０７）。「ee_avg」「te_add」「ee_sum」の各オペレータの処理で出力タプルは生成されないものとすると、出力タプル格納部１７は空であるため、トランザクション管理部１２によりトランザクションはコミットされる（ステップ１０８）。そして、各オペレータの集計処理により各テーブルに書き込まれたデータは確定したものとされ、一連の集計処理は終了する。
【００９０】
このようにして、例えば、携帯電話のパケット数のデータが集計処理システム１に次々と到着する場合に、一分単位のパケット数の平均値等が出力テーブルに書き込まれる。ここで、同一のキー値（ユーザＩＤ）を持つ複数のデータは到着順に処理されるが、異なるユーザＩＤを持つデータ同士では、到着した順番通りに処理が行われるとは限らない。また、集計処理システム１は、多数のユーザによるデータを受信するため、異なるユーザＩＤを持つデータを並列に受信するが、あるユーザからのデータ、即ち、同一のユーザＩＤを持つデータを二つ以上同時に受信することはない。
【００９１】
＜定義情報の具体例＞
次に、定義情報（タプル定義情報、テーブル定義情報、オペレータ定義情報）に関する記述の具体例について説明する。定義情報の記述方式としては様々な方式が存在するが、ここでは一例として、ＸＭＬ（Extensible Markup Language）形式で記述した場合の例について説明する。図１０は、本実施の形態に係る定義情報に関する記述の一例を示した図である。
【００９２】
まず、<entity>タグにより、入力テーブルおよび出力テーブルが定義される。図示の例では、テーブル「DEVICE」とテーブル「DEVICE_INFO」が定義される。また、<entity>以下の<column>タグで、テーブルの列名と列型が定義される。列型にテーブル名が定義される場合には、別の＜entity＞タグでそのテーブルについて定義されていなければならない。また、<primarykey>タグで、キー列となる列名が指定される。<relation>タグは、テーブル間の関係付けを行うために用いられ、図示の例では、テーブル「DEVICE」からテーブル「DEVICE_INFO」に対して、テーブル「DEVICE」の「DEVICE_ID」列とテーブル「DEVICE_INFO」の「DEVICE_ID」列とを関係付けるように定義されている。
【００９３】
<tuple>タグでは、タプルが定義される。この<tuple>以下の<column>タグにより、タプルの列名と列型が定義される。図示の例では<columns useentity=”DEVICE_INFO”/>と定義されている。「DEVICE_INFO」は、<entity>タグで定義されているテーブル名である。このような記述により、同名のテーブルの列定義と同じ定義が使用される。<tuplefunction>タグでは、タプルの列に対してタプル関数が定義される。図示の例では、タプル関数として「seqid(SEQID)」、「currenttime()」が定義される。
【００９４】
<operator>タグでは、オペレータが定義される。図示の例では、タプル「DEVICE_INFO」を受けて、テーブル「DEVICE_INFO」に値を格納するという処理を行うオペレータが定義されている。この格納処理は、オペレータ「te_copy」で行われる。
【００９５】
また、図示の例では、テーブル「DEVICE_INFO」のレコード数はタプルの受信とともに単調増加となる。これに対して、レコード数の制限値を設定し、その数を超える場合は最も古いレコードを自動的に削除するような構成を定義することも可能である。これにより、テーブル「DEVICE_INFO」のレコード数が単調増加することを防ぐこともできる。例えば、<entity name=”DEVICE_INFO”>を<entity name="DEVICE_ INFO " writeonce="LAST_MODIFIED:100">というように定義する方法がある。このwriteonce属性は、DEVICE_IDごとに最大レコード数を100とし、それを超える場合は、LAST_MODIFIED列のタイムスタンプ値の古いものから削除していくという指示を行うものである。
【００９６】
このように、タプル定義情報、テーブル定義情報、オペレータ定義情報は定義され、オペレータによる処理が実現されることとなる。
【００９７】
以上のように、本実施の形態に係る集計処理システム１は、外部から到着する多数のデータに対して、データごとに即時に集計処理を行う。この集計処理において、集計処理システム１は、データがある条件に合致した場合に決められたアクションを実行したり、複数のデータをまとめて処理したりするのではなく、到着したデータごとにすでに保持しているデータと組み合わせて処理を行い、その結果を保存する処理を行う。
【００９８】
具体的には、集計処理システム１は、キー値が同一である複数のタプルを一連のデータとして扱い、タプルのキー値に関連するデータ群（入力テーブル）を参照し、タプルと入力テーブルとに基づいてオペレータによる処理を行い、出力テーブルへの書き込みや出力タプルの生成を行う。さらに、集計処理システム１は、複数の集計処理をトランザクションとして実行するため、一つのデータに対する複数の出力テーブルへの更新が一貫して行われる。
【００９９】
本実施の形態では、集計処理を実現するためのオペレータの基本モデルを提案するとともに、そのモデルに基づいて実現されたオペレータを組み合わせて実行するための機構も提案する。そのため、集計処理を実行するシステムを簡易に実現することが可能になり、さらに、例えば、基本操作を行うオペレータを予め提供することにより、システム開発者によるプログラム開発コストが削減される。また、例えば、拡張性が高く（スケーラブルで）メモリ上にデータを保持するデータグリッド技術を利用し、集計処理システム１を実現することで、拡張性のある高速な集計処理を行うシステムが簡易に実現される。
【０１００】
また、本実施の形態では、データ送信部２から入力されるタプルに対して実行されるオペレータの処理をまとめて一つのトランザクションとしたが、このような構成に限られるものではない。例えば、オペレータの処理を２つ以上のトランザクションとして実行しても良い。
【０１０１】
また、本実施の形態では、出力タプル格納部１７に格納されるタプルがなくなった時点でトランザクションがコミットされることとしたが、このような構成に限られるものではない。例えば、どの時点でトランザクションがコミットされるかプログラムの記述等により予め定められていても良い。
【０１０２】
＜集計処理手順の他の例＞
次に、集計処理の手順の他の例について説明する。図１１は、本実施の形態に係るデータ処理部３による集計処理手順の他の一例を示したフローチャートである。図８に示す集計処理の手順では、データ送信部２から入力されるタプルに対して実行されるオペレータの処理を一つのトランザクションとする場合について説明した。一方、図１１に示す集計処理の手順では、一つのオペレータの処理ごとにトランザクションを完了させるように予め指定されているものとする。
【０１０３】
まず、タプル受付部１１は、集計処理の対象となるタプルを受け付ける（ステップ２０１）。一例として、ここでは、タプル受付部１１はタプルＴ２を受け付けたものとする。そして、タプル受付部１１は、トランザクション管理部１２にタプルＴ２を受け付けたことを通知するとともに、タプルＴ２をタプル関数実行部１５に送信する。そして、トランザクション管理部１２は、トランザクションを開始させる（ステップ２０２）。
【０１０４】
次に、タプル関数実行部１５は、タプルＴ２に定義されたタプル関数があるか否かを判定する（ステップ２０３）。タプルＴ２に定義されたタプル関数がないと判定された場合（ステップ２０３でＮｏ）、ステップ１０５と同様に、オペレータ呼び出し部１６１は、タプルＴ２のタプル名と定義情報管理部１３に格納されたオペレータ定義情報とに基づいて、タプルＴ２を入力タプルとするオペレータで未実行のものがあるか否かを判定する（ステップ２０５）。一方、タプル関数実行部１５は、タプルＴ２に定義されたタプル関数があると判定した場合（ステップ２０３でＹｅｓ）、ステップ１０６と同様に、タプル関数を実行してタプルＴ２の列の値を変更する（ステップ２０４）。
【０１０５】
次に、ステップ２０５で、タプルＴ２を入力タプルとするオペレータで未実行のものがないと判定された場合（ステップ２０５でＮｏ）、タプル受付部１１は、ステップ１０７と同様に、出力タプル格納部１７が空であるか否かを判定する（ステップ２０６）。出力タプル格納部１７が空であれば（ステップ２０６でＹｅｓ）、本処理フローは終了する。ここで、開始されたトランザクションがコミットされていない場合にはコミットされる。一方、出力タプル格納部１７が空でなければ（ステップ２０６でＮｏ）、タプル受付部１１は、ステップ１０９と同様に、出力タプル格納部１７からタプルを取得し（ステップ２０７）、ステップ２０１へ移行する。
【０１０６】
また、ステップ２０５で、オペレータ呼び出し部１６１は、タプルＴ２を入力タプルとするオペレータで未実行のものがあると判定した場合（ステップ２０５でＹｅｓ）、未実行のオペレータのうち一つを選択し、トランザクション管理部１２によりトランザクションが開始されているか否かを判定する（ステップ２０８）。トランザクションが開始されていなければ（ステップ２０８でＮｏ）、トランザクション管理部１２はトランザクションを開始させる（ステップ２０９）。一方、トランザクションが開始されていれば（ステップ２０８でＹｅｓ）、オペレータ呼び出し部１６１は、選択したオペレータのオペレータ定義情報を定義情報管理部１３から取得する（ステップ２１０）。
【０１０７】
そして、オペレータ呼び出し部１６１は、ステップ１１１と同様に、オペレータ関数の実行、出力レコードの書き込みを行う（ステップ２１１）。さらに、オペレータ定義情報に出力タプルが定義されていれば、出力タプル生成部１６３は、出力タプルのタプル定義情報に応じて出力タプルを生成する。次に、集計処理判定部１６４は、ステップ１１２と同様に、集計処理が成功したか否かを判定する（ステップ２１２）。処理が失敗した場合（ステップ２１２でＮｏ）、トランザクションはアボートされ（ステップ２１３）、選択されたオペレータによる集計処理の処理結果は取り消されて元の状態に戻り、ステップ２０５へ移行する。
【０１０８】
一方、集計処理が成功した場合（ステップ２１２でＹｅｓ）、トランザクション管理部１２によりトランザクションはコミットされ（ステップ２１４）、選択されたオペレータによる集計処理の処理結果が確定したものとしてデータベース（各テーブル）に反映される。次に、集計処理判定部１６４は、ステップ１１４と同様に、出力タプル生成部１６３により出力タプルが生成されたか否かを判定する（ステップ２１５）。出力タプルが生成されていなければ（ステップ２１５でＮｏ）、ステップ２０５へ移行する。一方、出力タプルが生成されていれば（ステップ２１５でＹｅｓ）、ステップ１１５と同様に、集計処理判定部１６４は出力タプルを出力タプル格納部１７に格納し（ステップ２１６）、ステップ２０５へ移行する。
【０１０９】
以上のように、図１１に示す集計処理手順では、一つのオペレータの処理ごとにトランザクションが開始および完了される。オペレータの処理ごとにトランザクションを開始および完了させることにより、データ処理部３の処理としては一つのデータに対して順に集計処理が行われるとともに、例えば、ある集計処理が失敗したとしても、他の集計処理が続けて行われることとなる。ただし、データベースに不整合が生じるのを抑制するために、タプル受付部１１は、データ送信部２から送信されたタプルに関して出力タプル格納部１７に格納された出力タプルがなくなるまで、そのタプルと同一のキー値を持つタプルをデータ送信部２から受け付けないものとする。
【０１１０】
＜最適化処理の第１の例＞
次に、集計処理を最適化して性能を向上させるための最適化処理について説明する。図１２（図１２−１、図１２−２）は、本実施の形態に係る最適化処理の第１の例を説明するための図である。図１２−１は、最適化前の集計処理結果の一例を示した図であり、図１２−２は、最適化後の集計処理結果の一例を示した図である。
【０１１１】
図１２−１の集計処理結果は、外部のセンサーから１０秒ごとに送信されてくる温度情報に関して、センサーごとに毎分の温度の最大値と最小値とを記録していく集計処理の結果である。例えば、2012/12/25 10:00:00の時刻を持つタプルが到着すると、２つのオペレータが入力テーブル（温度テーブル）の2012/12/25 9:59台の入力レコード（9:59:00〜9:59:50の６つのレコード）を参照し、最大値または最小値を取得して、各オペレータの出力テーブル（温度最小値テーブル、温度最大値テーブル）に記録する。入力テーブルおよび出力テーブルのキー値はセンサーＩＤと時刻である。最適化前では、出力テーブルが、温度最大値テーブルおよび温度最小値テーブルの別々に定義されている。このため、２つのレコードがそれぞれの出力テーブルに書き込まれることとなる。
【０１１２】
しかし、これら２つのオペレータは入力レコードに関して同じレコード群を参照している。そのため、２つのオペレータをまとめると、入力レコードに対して一回の読み込み処理で最大値および最小値の計算が行われる。さらに、２つのオペレータは、出力レコードに関して同じキー値を持つレコードをそれぞれのテーブルに書き込んでいる。そのため、出力テーブルを一つのテーブルとすれば、オペレータは一つのレコードの書き込みで最大値と最小値とを書き込むこととなる。図１２−２は、このような最適化処理を施した結果を示した図であり、最適化処理を実行するために２つのオペレータはグループ化されている。
【０１１３】
このようなオペレータのグループ化を行うための条件は、グループ化する２つ以上のオペレータに関して、入力テーブルが同じであり同じレコード群を読み込むこと、出力テーブルに同じキー値を持つレコードを挿入または更新すること、同じタプルを読み込むこと、の３つである。オペレータ呼び出し部１６１は、ある２つ以上のオペレータに対して、この３つの条件が満たされているか否かを判定し、全ての条件が満たされている場合、それらのオペレータについてグループ化を行うことで、最適化処理が行われる。
【０１１４】
また、ある２つ以上のオペレータに関して、入力テーブルが同じであり同じレコード群を読み込むか否かの判定は、オペレータ定義情報の入力テーブル名、オペレータによる処理の内容、オペレータの処理で用いられるパラメータの情報をもとに行われる。また、ある２つ以上のオペレータに関して、出力テーブルに同じキー値のレコードを挿入または更新するか否かは、オペレータによる処理の内容に依存する。さらに、ある２つ以上のオペレータに関して、同じタプルを読み込むか否かの判定は、オペレータ定義情報をもとに行われる。
【０１１５】
グループ化されたオペレータ（以下、グループ化オペレータと称する）を実行するには、オペレータを呼び出す手順を拡張する必要があるが、例えば、図８のステップ１１０および１１１の処理を変更すれば良い。図１３は、本実施の形態に係るグループ化オペレータを実行する手順の一例を示したフローチャートである。本手順は、図８に示した手順において、ステップ１０５で肯定の判断（Ｙｅｓ）がされた後に実行されるものである。
【０１１６】
まず、オペレータ呼び出し部１６１は、グループ化オペレータであるか否かを判定する（ステップ３０１）。グループ化オペレータであれば（ステップ３０１でＹｅｓ）、オペレータ呼び出し部１６１は、グループ内で未実行のオペレータがあるか否かを判定する（ステップ３０２）。未実行のオペレータがある場合（ステップ３０２でＹｅｓ）、オペレータ呼び出し部１６１は、未実行のオペレータのうち一つを選択し、定義情報管理部１３から選択したオペレータのオペレータ定義情報を取得する（ステップ３０３）。そして、オペレータ呼び出し部１６１は、オペレータ関数の実行、出力レコードの書き込みを行う（ステップ３０４）。さらに、オペレータ定義情報に出力タプルが定義されていれば、出力タプル生成部１６３は、出力タプルのタプル定義情報に応じて出力タプルを生成する。その後、ステップ３０２に移行する。
【０１１７】
また、ステップ３０２で、オペレータ呼び出し部１６１がグループ内で未実行のオペレータはないと判定した場合（ステップ３０２でＮｏ）、本処理フローは終了する。また、ステップ３０１で、オペレータ呼び出し部１６１がグループ化オペレータではないと判定した場合（ステップ３０１でＮｏ）、図８のステップ１１０および１１１のオペレータ実行処理（ステップ３０５）が行われて、本処理フローは終了する。本処理フローが終了した後には、図８のステップ１１２に移行する。また、グループ化オペレータにより生成された出力タプルについては、図８のステップ１１５でまとめて出力タプル格納部１７に格納される。
【０１１８】
集計処理システム１がこのような最適化処理を行うことで、入力テーブルからの読み込み処理が削減されるとともに、出力テーブルへの書き込みレコード数が削減され、集計処理の性能が向上する。
【０１１９】
＜最適化処理の第２の例＞
次に、最適化処理の他の例について説明する。図１４は、本実施の形態に係る最適化処理の第２の例を説明するための図である。本例において実行される処理は、並列化処理である。並列化処理とは、一つの外部から到着するタプルに対する複数のオペレータ処理において、別々のスレッドで同時並行して処理を行うというものである。スレッドとは、演算手段であるＣＰＵ（Central Processing Unit）による処理の単位のことをいう。
【０１２０】
図１４に示す構成では、最初にスレッド１でオペレータ１およびオペレータ２の処理が行われる。次にオペレータ２が生成したタプルがオペレータ３Ａ〜３Ｃに渡され、これらのオペレータが別々のスレッドで並行に実行される。オペレータ３Ａはスレッド２で、オペレータ３Ｂはスレッド３で、オペレータ３Ｃとその後のオペレータ４Ｃとはスレッド４で実行される。これらのオペレータによる処理がまとまった一つのトランザクションであるとすると、スレッド１がスレッド２、３、４の終了を待ち、トランザクションがコミットされる。
【０１２１】
このようなオペレータの並列化処理を行うための条件は、同じタプルが入力タプルとして定義されていることであり、各オペレータのオペレータ定義情報をもとに、オペレータ呼び出し部１６１により並列化可能であるか否かが判定される．また、並列化処理を行う手法として、並列化可能であれば並列化処理を行うように予め設定される手法と、実行時のＣＰＵやメモリ資源の状況をみて並列化するか否かが判断される手法の２つがある。
【０１２２】
図１５は、本実施の形態に係る並列化処理の手順の一例を示したフローチャートである。本手順は、図８に示した手順において、ステップ１０３で否定の判断（Ｎｏ）がされた後、またはステップ１０６の後に実行されるものである。
【０１２３】
まず、オペレータ呼び出し部１６１は、並列化可能な二つ以上のオペレータがあるか否かを判定する（ステップ４０１）。並列化可能な二つ以上のオペレータがない場合（ステップ４０１でＮｏ）には、図８のステップ１０５へ移行する。一方、並列化可能な二つ以上のオペレータがある場合（ステップ４０１でＹｅｓ）、次に、オペレータ呼び出し部１６１は、並列化可能な各オペレータに対してスレッドを割り当て、個々のスレッドにてオペレータを実行する（ステップ４０２）。ステップ４０２では、各オペレータにおいてステップ１１０〜１１５の処理が行われる。そして、オペレータ呼び出し部１６１は、全スレッドの処理が終了したか否かを判定する（ステップ４０３）。全スレッドの処理が終了すれば（ステップ４０３でＹｅｓ）、本処理フローは終了する。本処理フローが終了した後には、図８のステップ１０５に移行する。
【０１２４】
集計処理システム１がこのような並列化処理を行うことで、一つのタプルに関連する一連の集計処理の処理時間が短縮され、集計処理の性能が向上する。ただし、ＣＰＵリソースがフルに使用されている状況では、一つのタプルに対する処理を並列化しても、そのオーバーヘッドにより逆に性能が低下する場合がある。例えば、ある特定のキー値に関連するタプルが連続して到着し、そのキー値以外のタプルはほとんど到着しておらずＣＰＵリソースが余っている状況であれば、並行化処理により処理時間は短縮される。
【０１２５】
以上説明した本実施の形態に係る集計処理システム１は、一つの独立したシステムとしてだけでなく、複数の同様の集計処理システム１を連結させた構成や、他のシステムに組み込まれた構成で用いられても良い。例えば、日本全国に散りばめられているセンサーの情報を集計する場合、地域ごとに本実施の形態に係る集計処理システム１を配置し、そこで一時的な集計を行い、それらの集計結果をまとめる別の集計処理システム１により、全国の情報の集計を行うようなシステム等が考えられる。
【０１２６】
＜ハードウェア構成例＞
図１６は、本実施の形態に係るデータ処理部３を構成するのに好適なハードウェア構成例を示す図である。ここでは、コンピュータに適用する場合について説明する。図１６に示すコンピュータは、演算手段であるＣＰＵ１０ａと、主記憶手段であるメモリ１０ｃを備える。また、外部デバイスとして、磁気ディスク装置（ＨＤＤ：Hard Disk Drive）１０ｇ、ネットワーク・インターフェイス１０ｆ、ディスプレイ装置を含む表示機構１０ｄ、音声機構１０ｈ、キーボードやマウス等の入力デバイス１０ｉ等を備える。
【０１２７】
図１６に示す構成例では、メモリ１０ｃおよび表示機構１０ｄは、システム・コントローラ１０ｂを介してＣＰＵ１０ａに接続されている。また、ネットワーク・インターフェイス１０ｆ、磁気ディスク装置１０ｇ、音声機構１０ｈおよび入力デバイス１０ｉは、Ｉ／Ｏコントローラ１０ｅを介してシステム・コントローラ１０ｂと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
【０１２８】
なお、図１６は、本実施の形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施の形態は、到着したデータごとにすでに保持しているデータと組み合わせて処理を行い、その結果を保存する処理を行うことが可能な装置に広く適用できるものであり、図示の構成においてのみ本実施例が実現されるのではない。
【０１２９】
図１６において、磁気ディスク装置１０ｇにはＯＳのプログラムやアプリケーション・プログラムが格納されている。そして、これらのプログラムがメモリ１０ｃに読み込まれてＣＰＵ１０ａに実行されることにより、本実施の形態におけるタプル受付部１１、トランザクション管理部１２、タプル関数実行部１５、集計処理実行部１６の各機能が実現される。また、定義情報管理部１３、テーブル格納部１４、出力タプル格納部１７は、メモリ１０ｃや磁気ディスク装置１０ｇ等の記憶手段により実現される。
【符号の説明】
【０１３０】
１…集計処理システム、２…データ送信部、３…データ処理部、１１…タプル受付部、１２…トランザクション管理部、１３…定義情報管理部、１４…テーブル格納部、１５…タプル関数実行部、１６…集計処理実行部、１６１…オペレータ呼び出し部、１６２…出力レコード生成部、１６３…出力タプル生成部、１６４…集計処理判定部、１７…出力タプル格納部、２０１…タプル送信部、３０１…ＲＤＡサーバプロセス、３０２…ＲＤＢサーバプロセス
【図１】
0006032680.tif 000002
【図２】
0006032680.tif 000003
【図３】
0006032680.tif 000004
【図４】
0006032680.tif 000005
【図５】
0006032680.tif 000006
【図６】
0006032680.tif 000007
【図７】
0006032680.tif 000008
【図８】
0006032680.tif 000009
【図９】
0006032680.tif 000010
【図１０】
0006032680.tif 000011
【図１１】
0006032680.tif 000012
【図１２−１】
0006032680.tif 000013
【図１２−２】
0006032680.tif 000014
【図１３】
0006032680.tif 000015
【図１４】
0006032680.tif 000016
【図１５】
0006032680.tif 000017
【図１６】
0006032680.tif 000018