JP2023024403A - 順不同ストリームにわたるスライディングウィンドウ集約のための遅延伝搬 - Google Patents
順不同ストリームにわたるスライディングウィンドウ集約のための遅延伝搬 Download PDFInfo
- Publication number
- JP2023024403A JP2023024403A JP2022125618A JP2022125618A JP2023024403A JP 2023024403 A JP2023024403 A JP 2023024403A JP 2022125618 A JP2022125618 A JP 2022125618A JP 2022125618 A JP2022125618 A JP 2022125618A JP 2023024403 A JP2023024403 A JP 2023024403A
- Authority
- JP
- Japan
- Prior art keywords
- node
- aggregation
- nodes
- propagation
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/22—Traffic shaping
- H04L47/225—Determination of shaping rate, e.g. using a moving window
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/28—Flow control; Congestion control in relation to timing considerations
- H04L47/283—Flow control; Congestion control in relation to timing considerations in response to processing delays, e.g. caused by jitter or round trip time [RTT]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】順不同データストリームからのデータアイテムをスライディングウィンドウにわたって効率的に集約するためのシステム、コンピュータ可読媒体及び方法を提供する。【解決手段】遅延伝搬プロセスでは、伝搬は、SとTとの間のノードのいずれかにおいて遅延され、専用のセグメント内のノードにおいて遅延され、伝搬を遅延させるための次のストラテジを定めるか又は設定し、伝搬をノードS'において遅延される。S'は、Nの先行ノードN'に向かい、次いで、その明示的な外向きの垂直方向連結に従うことによって決まる。すなわち、S'は、Nよりも前にある別のノードからの値を待っている最初に訪問されるノードである。Nに先行物がない場合、伝搬は遅延されない。伝搬は、ノードS'がSとTとの間にない場合にも、遅延されない。さらに、SとS'は、同じ集約ノードである可能性があり、この場合、Nからの伝搬がSにおいて直接遅延される。【選択図】図8
Description
関連出願の相互参照
本出願は、ここに参照によりその全体が本明細書に組み込まれている、2021年8月6日に出願した「DELAYED PROPAGATIONS FOR SLIDING-WINDOW AGGREGATIONS OVER OUT-OF-ORDER STREAMS」という名称の米国仮特許出願第63/230,074号の優先権を主張するものである。
本出願は、ここに参照によりその全体が本明細書に組み込まれている、2021年8月6日に出願した「DELAYED PROPAGATIONS FOR SLIDING-WINDOW AGGREGATIONS OVER OUT-OF-ORDER STREAMS」という名称の米国仮特許出願第63/230,074号の優先権を主張するものである。
本開示は、順不同データストリームにわたるスライディングウィンドウ集約のための遅延伝搬のための、方法、システム、およびコンピュータ可読媒体に関する。
例えばITシステムの装置および構成要素によって、今日ではしばしばマシン生成されるデータは、リアルタイムで処理および解析される(またはしばしばリアルタイムで処理および解析されなければならない)。例として、モノのインターネット(IoT)では、さまざまな装置が絶えずデータを生成しており、このデータは、クラウド内で実行されているサービスによって、またはエッジノードにおいて直接、即座に解析される。次いで、処理されたデータは、おそらくはデータコンシューマに転送され、データコンシューマは、そのデータを他の供給元からのデータと組み合わせるかまたはそのデータに基づいて決定を下すことができる。
そのようなデータの処理はしばしば、データをデータストリームまたはイベントストリームの形態でオンライン処理する、Apache Flinkのようなストリーム処理のフレームワーク、エンジン、またはサービスによって行われる(httpsウェブサイト:<<flink.apache.org>>、<<de.wikipedia.org/wiki/Apache_Flink>>、<<azure.microsoft.com/en-us/services/stream-analytics/>>、および<<en.wikipedia.org/wiki/Azure_Stream_Analytics>>(そのそれぞれの内容全体がここに、参照によりその全体が本明細書に組み込まれている)を参照されたい)。それらの応用分野は数多く、応用分野には、システムモニタリング、システム検証およびデバッグ、侵入、監視、不正の検知、広告および電子商取引でのようなデータマイニング、およびその他多くのものが含まれる。
それらの応用分野における解析にはしばしば、何らかの形態でデータをスライディングウィンドウにわたってリアルタイムで集約することが関与する。M. Stonebraker、U. Cetintemel、およびS. Zdonik:「The 8 requirements of real-time stream processing」、SIGMOD Record 34(4)、2005年(その内容全体がここに、参照によりその全体が組み込まれている)を参照されたい。スライディングウィンドウにわたるデータ集約の単純な例は、オンラインオークションにおいて直近1時間にわたって付け値を絶えずカウントするというものである。スライディングウィンドウにわたるデータ集約は、ステートフルな計算である。ステートは基本的に、その暫定集約値を有する、現在活動状態にある/不完全なタイムウィンドウからなる。新たに受信されたストリーム要素は、新たなタイムウィンドウを作成し、複数の暫定集約値の更新をトリガし、いくつかのタイムウィンドウの集約を最終決定することができる。しかし、ステートを維持すると、計算コストが高くなることがあり、ステートの更新は、特に大きなデータ速度を伴うリアルタイムの応用では、急速にボトルネックになることがある。
ストリーム要素が、必ずしもそれらが生成された順序で受信されるとは限らないことがあるとき、データストリームの効率的な処理はさらに複雑になる。解析結果は、ストリーム要素のデータが処理される順序に応じて決まることがある。ネットワーク遅延およびネットワークパケットの再送が、ストリーム要素がデータストリーム内で順序通りに並んでいないことがある1つの理由である。ストリーム要素のバッファリングおよび並べ替えをすると、解析の結果が遅延し、すなわち、処理されたデータストリームの出力のレイテンシに害が及ぶ。さらに、バッファリングおよび並べ替えをする結果、メモリおよび計算上の大きなオーバーヘッドが生じることがあり、それが急速に別のボトルネックになることがある。
D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年(その内容全体がここに、参照により本明細書に組み込まれている)は、順不同イベントストリームに対してシステム挙動をモニタするための、グラフベースのデータ構造について記載している。このグラフベースのデータ構造を最適化したものについては、F. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号(その内容全体がここに、参照により本明細書に組み込まれている)に記載されている。しかし、記載されているモニタリング手法では、解析結果はブール値に限定されている。大まかに言うと、あるタイムポイントにおいて所与の仕様が真であるか、それとも偽であるかのチェックに限定される。これにより、集約もブール値に限定される。
httpsウェブサイト:<<flink.apache.org>>
httpsウェブサイト:<<de.wikipedia.org/wiki/Apache_Flink>>
httpsウェブサイト:<<azure.microsoft.com/en-us/services/stream-analytics/>>
httpsウェブサイト:<<en.wikipedia.org/wiki/Azure_Stream_Analytics>>
M. Stonebraker、U. Cetintemel、およびS. Zdonik:「The 8 requirements of real-time stream processing」、SIGMOD Record 34(4)、2005年
D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年
K. Tangwongsan、M. Hirzel、S. Schneider、およびK.-L. Wu:「General incremental sliding-window aggregation」、Proceedings of the VLDB Endowment、8(7)、2015年
D. Basin、F. Klaedtke、およびE. Zalinescu:「Greedily computing associative aggregations on sliding windows」、Information Processing Letters、115(2)、2015年
K. Tangwongsan、M. Hirzel、およびS. Schneider:「Optimal and general out-of-order sliding-window aggregation」、Proceedings of the VLDB Endowment、12(10)、2020年
J. Traub、P. M. Grulich、A. Rodriguez Cuellar、S. Breβ、A. Katsifodimos、T. Rabl、およびV. Markl:「Scotty: General and efficient open-source window aggregation for stream processing systems」、ACM Transactions on Database Systems. 46(1):1、2021年
本開示の一態様は、データプロデューサ構成要素の分散システムから受信した順不同データストリームにわたるスライディングウィンドウ内でのデータ集約を、値伝搬を遅延させることによって計算する、コンピュータ実装方法であって、データ構造を格納するメモリに接続されたプロセッサ内で実施され、データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含む、コンピュータ実装方法を提供する。方法は、データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであり、最終値が、データ値およびタイムスタンプを含み、第1のノードが、第1のタイムウィンドウ内の複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、第1の集約ノードの既存の部分集約が存在しないときは、最終値を使用して第1の集約ノードの部分集約を作成し、または第1の集約ノードの既存の部分集約が存在するときは、最終値を第1の集約ノードの既存の部分集約と結合して、第1の集約ノードの部分集約を作成することと、第1の集約ノードの部分集約を、第1のタイムウィンドウ内の複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであり、残りの集約ノードのうちの各次ノードについて、その集約ノードの暫定値が部分集約の値によって更新される、伝搬させることと、各次ノードについて伝搬を遅延させるかどうかを判定することと、伝搬を遅延させるとの判定に応答して、次集約ノードへの部分集約の伝搬を遅延させることとを含む。
本開示の主題について、下で、例示的な図に基づいてさらにより詳細に説明する。本明細書において説明および/または図示する全ての特徴は、単独で、またはさまざまな組合せで組み合わせて使用することができる。さまざまな実施形態の特徴および利点は、以下の詳細な説明を、以下の内容を示す添付の図面を参照して読めば、明らかとなろう。
本開示は、順不同データストリームからのデータアイテムをスライディングウィンドウにわたって効率的に集約するための方法を提供する。本方法では、ある特定のタイムウィンドウについて値の集約を遅延させ、複数のタイムウィンドウに再使用することのできる部分集約を計算する。
本開示の実施形態の利点には、集約においてマップのような任意のデータ型を可能にできる(現況技術においてそうであったようにブールに限定されるのではない)こと、また整数のような他の基本型に限定されない場合があることが含まれる。
本開示の実施形態では、集約が(本発明以前に可能であったものに比べて)高速に計算されることも可能にする。現況技術においては、新たに受信したストリーム要素について、関連する全てのタイムウィンドウが更新されることがある。本開示の実施形態では伝搬を遅延させるので、新たなストリーム要素を受信したときに、より少数のタイムウィンドウが更新される。さらに、本開示の実施形態では、部分集約された値の再計算を低減させ、それにより性能の改善ももたらされる。
本開示の実施形態では、グラフベースのデータ構造を非ブール値に拡張し、順不同データストリームに対してスライディングウィンドウにわたって非ブール値を有する集約を計算できるようにする。さらに、本開示の態様では、以前または以後のデータ値も欠落しているためそれぞれの集約がまだ完全ではない場合、集約のためのデータ値の伝搬の遅延を含む。遅延伝搬は、後にそれらを効率的に伝搬させるために、収集され、部分集約される。複数のタイムウィンドウについて伝搬を遅延させ、収集することにより、データ値を集約する計算が加速する。
一実施形態によれば、データプロデューサ構成要素の分散システムから受信した順不同データストリームにわたるスライディングウィンドウ内でのデータ集約を、値伝搬を遅延させることによって計算する、コンピュータ実装方法であって、データ構造を格納するメモリに接続されたプロセッサ内で実施され、データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含む、コンピュータ実装方法。方法は、データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであって、最終値が、データ値およびタイムスタンプを含み、第1のノードが、第1のタイムウィンドウ内の複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、第1の集約ノードの既存の部分集約が存在しないときは、最終値を使用して第1の集約ノードの部分集約を作成し、または第1の集約ノードの既存の部分集約が存在するときは、最終値を第1の集約ノードの既存の部分集約と結合して、第1の集約ノードの部分集約を作成することと、第1の集約ノードの部分集約を、第1のタイムウィンドウ内の複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであって、残りの集約ノードのうちの各次ノードについて、その集約ノードの暫定値が部分集約の値によって更新される、伝搬させることと、各次ノードについて伝搬を遅延させるかどうかを判定することと、伝搬を遅延させるとの判定に応答して、次集約ノードへの部分集約の伝搬を遅延させることとを含む。
一実施形態によれば、方法は、複数の集約ノードのうちのある集約ノードのステータスが最終であるとき、その集約ノードの最終値を、第1の水平層より上にある層上のノードに送ることをさらに含む。
一実施形態によれば、第1のノードの最終値は、ブール、整数、文字列、浮動小数点、ベクトル、およびマップからなる群から選択される値型を有する。
一実施形態によれば、次ノードについて伝搬を遅延させるかどうかを判定することは、次ノードが第1のノードと同じ水平層上の先行ノードからの値を待っているかどうかを判定することを含む。
一実施形態によれば、方法は、後に、遅延が生じたノードが下層上の別のノードからの値を受け取ったことに応答して、遅延された部分集約の伝搬を再開させることをさらに含む。
一実施形態によれば、部分集約は平衡探索木または順序配列として格納される。
一実施形態によれば、方法は、ある集約ノードにおける部分集約の遅延伝搬を、その集約ノードが第1の集約ノードのタイムウィンドウ内にないと決定されたときにドロップさせることをさらに含む。
一実施形態によれば、分散システム内のネットワーク装置であって、1つまたは複数のプロセッサと、命令、およびデータ構造を格納するメモリとを含み、データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含み、命令が、1つまたは複数のプロセッサによって実行されるとネットワーク装置に、分散システムのデータプロデューサ構成要素から受信した順不同データストリームにわたるスライディングウィンドウ内での集約を、値伝搬を遅延させることによって計算する方法を実施させる、ネットワーク装置が提供される。方法は、データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであって、最終値が、データ値およびタイムスタンプを含み、第1のノードが、第1のタイムウィンドウ内の複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、第1の集約ノードの既存の部分集約が存在しないときは、最終値を使用して第1の集約ノードの部分集約を作成し、または第1の集約ノードの既存の部分集約が存在するときは、最終値を第1の集約ノードの既存の部分集約と結合して、第1の集約ノードの部分集約を作成することと、第1の集約ノードの部分集約を、第1のタイムウィンドウ内の複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであって、残りの集約ノードのうちの各次ノードについて、その集約ノードの暫定値が部分集約の値によって更新される、伝搬させることと、各次ノードについて伝搬を遅延させるかどうかを判定することと、伝搬を遅延させるとの判定に応答して、次集約ノードへの部分集約の伝搬を遅延させることとを含む。
一実施形態によれば、メモリは、1つまたは複数のプロセッサによって実行されるとネットワーク装置に、複数の集約ノードのうちのある集約ノードのステータスが最終であるとき、その集約ノードの最終値を第1の水平層より上にある層上のノードに送らせる命令をさらに格納する。
一実施形態によれば、次ノードについて伝搬を遅延させるかどうかを判定するための命令は、次ノードが第1のノードと同じ水平層上の先行ノードからの値を待っているかどうかを判定するための命令を含む。
一実施形態によれば、第1のノードの最終値は、ブール、整数、文字列、浮動小数点、ベクトル、およびマップからなる群から選択される値型を有する。
一実施形態によれば、メモリは、1つまたは複数のプロセッサによって実行されるとネットワーク装置に、後に、遅延が生じたノードが下層上の別のノードからの値を受け取ったことに応答して、遅延された部分集約の伝搬を再開させる命令をさらに格納する。
一実施形態によれば、部分集約はメモリ内に平衡探索木または順序配列として格納される。
一実施形態によれば、メモリは、1つまたは複数のプロセッサによって実行されるとネットワーク装置に、ある集約ノードにおける部分集約の遅延伝搬を、その集約ノードが第1の集約ノードのタイムウィンドウ内にないと決定されたときにドロップさせる命令をさらに格納する。
一実施形態によれば、有形の非一時的なコンピュータ可読媒体であって、命令をその上に有し、この命令が、1つまたは複数のプロセッサによって単独で、または組み合わせて実行されると、データプロデューサ構成要素の分散システムから受信した順不同データストリームにわたるスライディングウィンドウ内での集約を、値伝搬を遅延させることによって計算する方法の実行を可能にし、方法が、1つまたは複数のプロセッサに結合されたメモリユニット内のデータ構造を定義することであり、データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含む、定義することと、データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであり、最終値が、データ値およびタイムスタンプを含み、第1のノードが、第1のタイムウィンドウ内の複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、第1の集約ノードの既存の部分集約が存在しないときは、最終値を使用して第1の集約ノードの部分集約を作成し、または第1の集約ノードの既存の部分集約が存在するときは、最終値を第1の集約ノードの既存の部分集約と結合して、第1の集約ノードの部分集約を作成することと、第1の集約ノードの部分集約を、第1のタイムウィンドウ内の複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであり、残りの集約ノードのうちの各次ノードについて、その集約ノードの暫定値が部分集約の値によって更新される、伝搬させることと、各次ノードについて伝搬を遅延させるかどうかを判定することと、伝搬を遅延させるとの判定に応答して、次集約ノードへの部分集約の伝搬を遅延させることとを含む、有形の非一時的なコンピュータ可読媒体が提供される。
システムモデル
本開示の態様について、図1によって示す、基礎をなすシステムモデル10に関連して説明する。システム10は、複数の構成要素から構成することができる。これらの構成要素は、例えば、クラウドベースのITシステムのソフトウェア構成要素、またはIoT装置、またはその両方の混合物とすることができる。システム構成要素のうちのいくつかが、データを生成する。そのような構成要素は、データプロデューサと呼ばれる。例として、IoTセンサは温度を毎秒測定することがある。装置の測定値は、プラットフォーム15、例えば分散システム内または構成要素のネットワーク内のネットワーク装置に絶えず送信される。プラットフォームは、データプロデューサからのデータを処理し、解析するためのサービスをホストする。すなわち、サービスは、データプロデューサからのデータストリームを受信し、処理する。データの処理は、通常、何らかのデータ値の集約を含む。例として、集約は、ある時間期間にわたる平均温度と、この期間における最小温度および最大温度とを計算することを含むことができる。おそらくは集約されている、処理されたデータもやはりデータストリームであり、それはデータコンシューマに絶えず送信され、データコンシューマは、データを単に収集し、それをさらに処理することもあり、あるいは処理されたデータに基づいて決定を下す、かつ/またはアクションを実施することもある。例として、平均温度が高すぎる場合、データコンシューマは、冷却ユニットを開始し、構成要素のワークロードを低減させ、または構成要素をシャットダウンすることがある。
本開示の態様について、図1によって示す、基礎をなすシステムモデル10に関連して説明する。システム10は、複数の構成要素から構成することができる。これらの構成要素は、例えば、クラウドベースのITシステムのソフトウェア構成要素、またはIoT装置、またはその両方の混合物とすることができる。システム構成要素のうちのいくつかが、データを生成する。そのような構成要素は、データプロデューサと呼ばれる。例として、IoTセンサは温度を毎秒測定することがある。装置の測定値は、プラットフォーム15、例えば分散システム内または構成要素のネットワーク内のネットワーク装置に絶えず送信される。プラットフォームは、データプロデューサからのデータを処理し、解析するためのサービスをホストする。すなわち、サービスは、データプロデューサからのデータストリームを受信し、処理する。データの処理は、通常、何らかのデータ値の集約を含む。例として、集約は、ある時間期間にわたる平均温度と、この期間における最小温度および最大温度とを計算することを含むことができる。おそらくは集約されている、処理されたデータもやはりデータストリームであり、それはデータコンシューマに絶えず送信され、データコンシューマは、データを単に収集し、それをさらに処理することもあり、あるいは処理されたデータに基づいて決定を下す、かつ/またはアクションを実施することもある。例として、平均温度が高すぎる場合、データコンシューマは、冷却ユニットを開始し、構成要素のワークロードを低減させ、または構成要素をシャットダウンすることがある。
データストリームのストリーム要素は、必ずしもそれらが生成された順序で受信されるとは限らないことがある。すなわち、ストリーム要素は、プラットフォームにおいて順不同で受信されることがある。順不同ストリーム要素の1つの理由として、ネットワーク遅延がある。さらに、ドロップされたネットワークパケットが、再送でない場合は無限の遅延を生じることがある。ストリーム要素の順序を推論するために、各ストリーム要素はタイムスタンプを備えるものと想定する。タイムスタンプは、ストリーム要素の作成時刻である。タイムスタンプは線形に順序付けられる。しばしば、タイムスタンプは物理時計から生じる。図2は、各ストリーム要素がタイムスタンプおよびデータアイテムを含む例を示す。この例では、ストリーム要素e'のタイムスタンプ(2)が先行ストリーム要素eのタイムスタンプ(7)未満であるため、ストリーム要素e'はデータストリーム内で順不同に出現している。
スライディングウィンドウにわたる集約
データ集約は、複数のストリーム要素のデータアイテムを結合するものである。典型的には、この結合には、何らかの時間期間にわたって受信されたストリーム要素のデータアイテムが関与する。そのような時間期間はしばしば、スライディングウィンドウによって与えられる。スライディングウィンドウは、データストリームのストリーム要素が正しく順序通りに並んでいることを条件として、そのデータストリームと共に移動するタイムウィンドウである。図3は、τタイムスタンプがタイムウィンドウの第1のストリーム要素のタイムスタンプであり、κタイムスタンプがタイムウィンドウの最終ストリーム要素のタイムスタンプである、例を示す。タイムウィンドウは、例えば、持続時間と方向(順方向もしくは逆方向)とによって、または専用の開始タグおよび終了タグによって、指定することができる。タイムウィンドウは図3に示すように一部重なり合うことができる、すなわち複数のタイムウィンドウ内で生じるデータ要素が複数の集約に寄与する、ということに留意されたい。さらに、タイムウィンドウ内のストリーム要素の数は異なってよい。タイムウィンドウが空であることも、すなわちタイムウィンドウがどんなストリーム要素も収容していないことも、あり得る。
データ集約は、複数のストリーム要素のデータアイテムを結合するものである。典型的には、この結合には、何らかの時間期間にわたって受信されたストリーム要素のデータアイテムが関与する。そのような時間期間はしばしば、スライディングウィンドウによって与えられる。スライディングウィンドウは、データストリームのストリーム要素が正しく順序通りに並んでいることを条件として、そのデータストリームと共に移動するタイムウィンドウである。図3は、τタイムスタンプがタイムウィンドウの第1のストリーム要素のタイムスタンプであり、κタイムスタンプがタイムウィンドウの最終ストリーム要素のタイムスタンプである、例を示す。タイムウィンドウは、例えば、持続時間と方向(順方向もしくは逆方向)とによって、または専用の開始タグおよび終了タグによって、指定することができる。タイムウィンドウは図3に示すように一部重なり合うことができる、すなわち複数のタイムウィンドウ内で生じるデータ要素が複数の集約に寄与する、ということに留意されたい。さらに、タイムウィンドウ内のストリーム要素の数は異なってよい。タイムウィンドウが空であることも、すなわちタイムウィンドウがどんなストリーム要素も収容していないことも、あり得る。
データ集約の単純な例として、ITシステム内の装置の直近1時間以内のログイン試行の失敗をカウントすることを考慮されたい。この場合、データストリームは、ログ記録されたタイムスタンプ付きシステムイベントからなる。カウントは、専用のチェックイベントを通じてトリガされることが可能であり、または周期的に、例えば10分ごとに行われる。ストリーム要素が、必ずしもそれらが生成された順序で受信されるとは限らないとき、この単純な例の場合でさえ、所与のタイムウィンドウ内でログイン試行の失敗を正しく効率的にカウントすることは困難となる。具体的には、遅れて到着するストリーム要素は、スライディングウィンドウにわたる集約を計算するときに除外すべきではない。
集約は通常、基礎をなすモノイドの上に定義される。すなわち、データアイテムは、データアイテムを結合する結合的演算子(associative operator)
と、中立元e∈Dとを有する集合Dからのものである。
は結合性であるため、
のような項への括弧の入れ方は無関係であることに留意されたい。しかし、
が交換可能ではないとき、要素の順序は重要である。モノイドの例は、加法+および中立元としての0を有する整数、ならびに行列乗算および単位行列を有するn≧1の場合のn×n行列である。さらなる例については、K. Tangwongsan、M. Hirzel、S. Schneider、およびK.-L. Wu:「General incremental sliding-window aggregation」、Proceedings of the VLDB Endowment、8(7)、2015年(その開示全体がここに、参照により本明細書に組み込まれている)を参照されたい。
グラフベースのデータ構造については、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年(その開示全体がここに、参照により本明細書に組み込まれている)に記載されており、その最適化したもののいくつかについては、F. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号(その開示全体がここに、参照により本明細書に組み込まれている)に記載されている。
図4Aおよび図4Bはそれぞれ、グラフベースのデータ構造および最適化されたグラフベースのデータ構造の例を示す。グラフベースのデータ構造のノードは、セグメントにグルーピングされている。各セグメントは、タイムポイントまたはギャップのいずれかに対応する。タイムポイントは、受信したストリーム要素のタイムスタンプに関連し、ギャップは、重なり合いがなく、空でなく、単集合でないタイムインターバルに関連し、このタイムインターバルは、グラフベースのデータ構造に将来追加される可能性のあるタイムポイントのためのプレースホルダとしての働きをする。セグメントは、それらのタイムスタンプおよびタイムインターバルに従って昇順に並べられ、双方向リスト内に格納される。ノードは層内に水平に格納される。各層は、あるノードタイプに、例えば与えられた仕様からのある特定の時間的部分論理式(temporal subformula)のノードに、対応する。各層のノードも双方向リスト内に格納される。すなわち、各ノードは、同じ種類のその先行物および後続物への水平方向連結(horizontal link)を有する。セグメントおよびノードは、それらのタイムスタンプおよびタイムインターバルの順に並べられているので、ノード同士は、それらの時間的位置によって比較することができる。具体的には、ある特定の条件を有する別のノードに「最も近い」ノードが、明確に定義される。
さらに、各ノードは垂直方向連結(vertical link)も有することができる。D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年では、各ノードは、その(ブール)値が最終であるときにそれを各ノードが伝搬させる先であるノードへの連結を有する。さらに、そのような各連結に対して、対応する戻り連結がある。問題を単純にするために、以下では、層Lのノードが、多くても、単一の下層L'からのノードのいくつかからしか値を受け取ることができず、層Lのノードが(層Lが最上層でなければ)それらの値を、単一の上層L''のいくつかのノードに伝搬させる、と仮定されたい。いくつかの層のノードはそれらの値を、受信したストリーム要素のデータアイテムから直接取得することに留意されたい。
一実施形態では、明示的な連結がメモリ内に格納される。対照的に、暗黙的な連結はメモリ内に格納されず、それらは、(ノードのタイムスタンプ/ギャップおよびメトリック制約と共に)明示的な連結から導出される。例えば、F. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されているグラフベースのデータ構造は、垂直方向連結のいくつかのみを明示的に格納する。残りの垂直方向連結は暗黙的であり、必要なときにいつでも明示的な垂直方向連結と水平方向連結の両方から導出される。これには、グラフベースのデータ構造を(例えば値を上方に伝搬させたときにノードを消去することにより、または新たなストリーム要素を受信したときにセグメントを分割することにより)更新するときに、より少数の連結が更新されればよいという利点がある。さらに、グラフベースのデータ構造を格納するために、より少ないメモリが使用される。具体的には、次の垂直方向連結を明示的に格納すれば十分である。ノードは、値が伝搬される先である最も近いノードへの明示的な外向きの垂直方向連結を有する。ノードN1、...、NnからノードNへの全ての外向きの連結について、Nは、単一の戻り連結を有する。N1、...、Nnがそれらのインターバル順に並べられていると仮定して、ノードNへの明示的な外向きの垂直方向連結を有する最も遠方のノードであるノードNnへの、Nからの垂直方向連結を格納すれば十分である。Nへの明示的な外向きの連結を有するノードがない場合、戻り連結はないことに留意されたい。ノードは、複数の異なる下層のノードから値を受け取る場合、各層について戻り連結を有する。
図4Bに示すグラフベースのデータ構造では、全てのノードが一定して多数の(constantly many)外向きの連結を有するのに対し、図4Aに示すグラフベースのデータ構造では、ノードはワーストケースにおいて線形的に多数の(linearly many)外向きの連結を有する。一定して多数の外向きの連結とは、外向きの連結の数が一定であることを意味する。一実施形態では、例えば、ノードは、(1)ノードがリスト内の最初のノードでもなく最後のノードでもないことを条件として、2つの外向きの水平方向連結(先行物および後続物)を有し、(2)ノードが最上層のノードではないことを条件として、単一の外向きの垂直方向連結を有する。特殊なケースでは、ノードはさらにより少数の連結を有することに留意されたい。例として、ノードがリスト内の最初のノードである場合、その先行物への連結はニル(nil)である。これらの連結は、上で述べた/説明した明示的な*連結であることに留意されたい。単一の連結をメモリ内に格納することは、連結のリストをメモリ内に格納することに比べてかなり安価となることに留意されたい。このグラフベースのデータ構造は、F. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されたものよりもわずかにより少数の連結を収容することにも留意されたい。最後に、ノードに格納される値は、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年のようにブール値に限定されるのではない。実際、ノードの値は、整数、浮動小数、ベクトル、およびマップなど、任意のデータ型のものとすることができる。
グラフベースのデータ構造の基本的な更新は、(1)タイムポイントを追加すること、(2)ギャップを除去すること、および(3)値を伝搬させることを含むことができる。タイムポイントを追加するには、そのタイムポイントのタイムスタンプを含むギャップが分割され、そのギャップのセグメントが、結果として得られる、それら自体のノードを有するセグメントと置き換えられる。新たなセグメント内のノードは、それら自体の値を、分割されたセグメントのノードから継承する。さらに、値を伝搬させ、ギャップを除去し、またはセグメントを分割するとき、無関係なノードはグラフベースのデータ構造から除去されることに留意されたい。ギャップを縮小させることが、グラフベースのデータ構造の別の更新の一例である。
図5は、図5の最上部に示す図4Bからのグラフに対する更新の例を示す。第1に、ギャップ(4.2,4.3)がグラフから除去される。第2に、タイムスタンプ4.0を有する新たなタイムポイントがグラフに追加される。この新たなタイムポイントを追加するために、タイムスタンプ4.0を含むインターバル(3.14,4.2)が分割され、その結果、新たなセグメントがもたらされる。第3に、セグメント{4.0}内の下層のノードが、その値を上方向に伝搬させ、このノードが除去され、この値が伝搬される先であるノードの値が更新される。この例は、全てのケースを示しているとは限らないことを理解されたい。例えば、複数のギャップが除去される可能性があり、複数の値が伝搬される可能性があり、ギャップの分割が常に3つの新たなセグメントをもたらすとは限らないことがあり、外向きの連結のないノードがグラフから除去されることがあり、内向きノード(明示的または暗黙的)を有していないノードが、完全であり、それらの値を伝搬させる、などである。
集約ノード
新たなタイプのノード、すなわち集約ノードを、本明細書において導入する。そのような各ノードは、結合的演算子
新たなタイプのノード、すなわち集約ノードを、本明細書において導入する。そのような各ノードは、結合的演算子
と、初期値z∈Dと、インターバルIによって与えられるメトリック制約とによって与えられる、あるタイムウィンドウにわたる集約に関連付けることができる。インターバルIは、ノードのセグメントのインターバルと共に、ノードの集約のタイムウィンドウを決定する。例えば、セグメントが、タイムスタンプτを有するタイムポイントに対応する場合、タイムウィンドウはτ+Iとすることができ、セグメントが、タイムインターバルJを有するギャップに対応する場合、タイムウィンドウはJ+Iとすることができる。直感的に言うと、τおよびJは、Iだけシフトされ、このタイムウィンドウと一部重なり合う全てのセグメントをカバーする。タイムインターバルKを有するセグメントは、(i)J+Iに含まれる(すなわちK⊆J+Iである)ことがあり、(ii)J+Iに部分的に含まれる(すなわちK∩(J+I)≠
であるがK⊆J+Iではない)ことがあり、かつ(iii)J+Iに対して素である(すなわちK∩(J+I)=
である)ことがある。ケース(i)では、タイムインターバルKを有するセグメントの入力ノードは、タイムウィンドウ内に含まれ、ケース(iii)では、タイムインターバルKを有するセグメントの入力ノードは、タイムウィンドウ内に含まれない。ケース(ii)では、セグメントのうちの少なくとも1つがギャップのはずであり、タイムインターバルKを有するセグメントの入力ノードがタイムウィンドウ内に含まれるか否かは、「保留中」である。
一実施形態では、同じ水平層上の集約ノードは、同じ初期特性に、例えば演算子、初期値、およびメトリック制約に関連する。上記では、タイムウィンドウは、等しいタイムスタンプまたはより大きなタイムスタンプを有するストリーム要素のみにそれらが及ぶように限定されていたことに留意されたい。より小さなタイムスタンプを有するストリーム要素も含む、またはより小さなタイムスタンプを有するストリーム要素のみを含むタイムウィンドウのための拡張は簡単である。具体的には、両方の方向のタイムウィンドウを用いた集約は、単方向のタイムウィンドウを用いた2つの集約に分割することができる。
図6は、一実施形態による集約ノード20およびそのノードのフィールドの例を示す。一実施形態では、集約ノード20は、prev、next、out、およびinというフィールドを含むことができる。集約ノード20のprev、next、out、およびinというフィールドは、グラフベースのデータ構造の明示的な水平方向連結および垂直方向連結を表す。集約ノード20のvalueというフィールドは、そのノードにその時点までに伝搬された値を格納することができる。伝搬された値は、結合して、例えば結合的演算子
によって結合して、単一の値にすることができ、当初、値はzである。値は必ずしもブール値であるとは限らないことに留意されたい。値の型は、集約に応じて決まる。例えば、値は、整数値、マップ、浮動小数点値などとすることができる。さらに、値は暫定である場合がある。例えば、値は、ノードのタイムウィンドウ内の全ての値がそれまでのところ集約ノードに伝搬されたというわけではない場合、暫定とすることができる。さらに、集約ノード20は、一実施形態では、以下の保留中伝搬および遅延伝搬のためのpendingおよびdelayedというフィールドを含む。
・保留中伝搬は、集約のメトリック制約を満足させるがメトリック制約が有効ではない、あるタイムポイントからの伝搬であり、すなわち、このタイムポイントは、集約のタイムウィンドウの部分であることもそうでないこともある。各保留中伝搬はタイムスタンプおよび値を備える。集約ノードは、ノードのセグメントがギャップに対応する場合にのみ、保留中伝搬を有することがある。
・遅延伝搬は、まだ完全に実行されていない伝搬である。具体的には、伝搬はこのノードにおいて一時中断されている。保留中伝搬と同様に、各遅延伝搬はタイムスタンプおよび値を備える。
・保留中伝搬は、集約のメトリック制約を満足させるがメトリック制約が有効ではない、あるタイムポイントからの伝搬であり、すなわち、このタイムポイントは、集約のタイムウィンドウの部分であることもそうでないこともある。各保留中伝搬はタイムスタンプおよび値を備える。集約ノードは、ノードのセグメントがギャップに対応する場合にのみ、保留中伝搬を有することがある。
・遅延伝搬は、まだ完全に実行されていない伝搬である。具体的には、伝搬はこのノードにおいて一時中断されている。保留中伝搬と同様に、各遅延伝搬はタイムスタンプおよび値を備える。
保留中伝搬と遅延伝搬はどちらも、それらのタイムスタンプ順に並べられる。例えば、それらは配列または平衡探索木内に格納することができる。
Goプログラミング言語において、例えば、集約ノードは、以下のフィールドを有する構造体(struct)型として実装することができる。
type AggregationNode struct {
owner *Segment //ノードを収容したセグメント。
val Value //ノードの値およびそのステータス。
pending PendingPropagations //ノードの保留中伝搬。
delayed DelayedPropagations //ノードの遅延伝搬。
next *AggregationNode //後続ノードへの水平方向連結。
prev *AggregationNode //先行ノードへの水平方向連結。
out *OutNode //明示的な外向きの垂直方向連結。
in *InNode //明示的な内向きの垂直方向連結(戻り連結)。
}
ここで、ノードの明示的な連結は、一実施形態ではポインタとして実装される。連結のポインタは、明示的な連結が存在しない場合、ニルとすることができ、例えば、ノードが集約ノードの双方向リストの先頭である場合、そのprevフィールドはニルであることに留意されたい。さらに、(垂直方向)内向きおよび外向きノードのタイプは、それぞれの層のノードの種類に応じて決まることに留意されたい。あるいは、ノード上のオペレーションに関するAPIを有するノードのためのインターフェース型を使用することもできる。さらに、集約ノード型は、ノードが位置するセグメント(ownerフィールド)へのポインタを維持する。例として、このポインタに従うことによって、ノードのタイムスタンプまたはインターバルをそれぞれ、ノードがタイムポイントであるセグメント内にあるか、それともギャップであるセグメント内にあるかに応じて、取得することができる。
type AggregationNode struct {
owner *Segment //ノードを収容したセグメント。
val Value //ノードの値およびそのステータス。
pending PendingPropagations //ノードの保留中伝搬。
delayed DelayedPropagations //ノードの遅延伝搬。
next *AggregationNode //後続ノードへの水平方向連結。
prev *AggregationNode //先行ノードへの水平方向連結。
out *OutNode //明示的な外向きの垂直方向連結。
in *InNode //明示的な内向きの垂直方向連結(戻り連結)。
}
ここで、ノードの明示的な連結は、一実施形態ではポインタとして実装される。連結のポインタは、明示的な連結が存在しない場合、ニルとすることができ、例えば、ノードが集約ノードの双方向リストの先頭である場合、そのprevフィールドはニルであることに留意されたい。さらに、(垂直方向)内向きおよび外向きノードのタイプは、それぞれの層のノードの種類に応じて決まることに留意されたい。あるいは、ノード上のオペレーションに関するAPIを有するノードのためのインターフェース型を使用することもできる。さらに、集約ノード型は、ノードが位置するセグメント(ownerフィールド)へのポインタを維持する。例として、このポインタに従うことによって、ノードのタイムスタンプまたはインターバルをそれぞれ、ノードがタイムポイントであるセグメント内にあるか、それともギャップであるセグメント内にあるかに応じて、取得することができる。
値伝搬
図7および図8は、一実施形態による、ノードNから上層の集約ノードへの値の伝搬を示す。Nの値を伝搬させるためには、Nは、好ましくは、タイムスタンプを有するタイムポイントであるセグメント内にあるべきである。そうでない場合、Nが収容されているセグメントはギャップセグメントである。プレースホルダとしての働きをするギャップは後に除去されるか、または複数のセグメントに分割されることがあるので、Nの値を伝搬させることは健全ではない。さらに、Nの値は、好ましくは、Nの値を伝搬させるときに暫定であるべきではない。
図7および図8は、一実施形態による、ノードNから上層の集約ノードへの値の伝搬を示す。Nの値を伝搬させるためには、Nは、好ましくは、タイムスタンプを有するタイムポイントであるセグメント内にあるべきである。そうでない場合、Nが収容されているセグメントはギャップセグメントである。プレースホルダとしての働きをするギャップは後に除去されるか、または複数のセグメントに分割されることがあるので、Nの値を伝搬させることは健全ではない。さらに、Nの値は、好ましくは、Nの値を伝搬させるときに暫定であるべきではない。
図7には、伝搬を遅延させない伝搬プロセスが示されており、これについて最初に説明するのは、その説明が、後に伝搬が遅延され、それについて説明されることがあるときにその伝搬を理解するのに役立つためである。図7の点線のボックスは、Nのスコープ内にある、すなわち、ノードNをそれらのタイムウィンドウ内に有する、全ての集約ノードを収容している。換言すれば、Nは、まさに点線のボックス内のノードに向かう、外向きの垂直方向連結を有する。ここで、最も近いノードSへの連結は明示的である。他の連結は暗黙的であり、図7に示していない。一般に、ノードのスコープは、ノードがその値を伝搬させる先である最も遠方のノードを決定する。例えば、このスコープは、最小または最大のタイムスタンプを通じて与えることができる。図7のノードNの場合、この値はmin({τ}-I)またはmin(J-I)であり、ここで、Iは集約のメトリック制約であり、τ/JはノードNのタイムスタンプ/ギャップである。さらに、min(X)は、集合Xの最小値を表すことに留意されたい。集約ノードは、下層上の所与のタイムウィンドウ内のノードからの値を集約することを思い出されたい。集約ノードのタイムウィンドウは、ノードのタイムスタンプτまたはノードのギャップJと、集約のメトリック制約、すなわちインターバルIとによって与えられる。ノードのスコープは、下層からのノードの観点から画定され、すなわちノードのスコープは、値が伝搬される先のノードを指定する。対照的に、ノードのタイムウィンドウは、上層上のノードの観点から画定され、すなわちノードのタイムウィンドウは、値の*受け取り*元のノードを指定する。
Nの値は、上方にその外向きの明示的な垂直方向連結に沿ってノードSに伝搬され、次いで、上層上を水平方向連結に沿って、Nからあまりにも遠方のノードを訪問するまで、すなわち、Nが集約ノードのタイムウィンドウ内になくなるまで、または水平方向先行連結がニルになる(すなわちその層の先頭で)まで、伝搬される。図7では、このノードは、ノードTの先行物(またはニル)である。SとTとの間の全てのノードについて、それらの暫定集約値が、伝搬された値に従って更新される。ノードSまたはTは、ギャップであるセグメント内にある可能性があり、Nのセグメントは、それらのノードのタイムウィンドウ内に完全に収容されているとは限らないことがある。一実施形態では、そうである場合、NのセグメントのタイムスタンプおよびNの値が、それらのノードの保留中伝搬に追加され、この保留中伝搬は後に、セグメントを分割することから生じる派生ノードについて実行される。保留中伝搬は、そのタイムスタンプが集約ノードのタイムウィンドウ内に部分的に含まれていないとき、ドロップされることもある。
さらに、Nはグラフベースのデータ構造から除去される。SとTとの間の集約ノードで、明示的または暗黙的な垂直方向連結を有しておらず、かつ保留中伝搬を有していない(すなわちNがそれらのノードの最後に残った入力であった)ものは、完全であり、すなわちそれらのノードは、その値を最終決定し、その値をさらに上方に伝搬させる。
その一実施形態を図8に示す遅延伝搬プロセスでは、伝搬が、Sから開始してTに向かって続く集約ノードを繰り返し訪問するとき、遅延され得る。伝搬は、SとTとの間のノードのいずれかにおいて遅延させることができる。例として、伝搬は、専用のセグメント内のノードにおいて遅延させることができる。以下では、図8に示す伝搬を遅延させるための次のストラテジが定められ、または設定され、この場合、伝搬はノードS'において遅延される。S'は、Nの先行ノードN'に向かい、次いで、その明示的な外向きの垂直方向連結に従うことによって決まる。すなわち、S'は、Nよりも前にある別のノードからの値を待っている、最初に訪問されるノードである。Nに先行物がない場合、伝搬は遅延されない。伝搬は、ノードS'がSとTとの間にない場合にも、遅延されない。さらに、SとS'は、同じ集約ノードである可能性がある。この場合、Nからの伝搬がSにおいて直接遅延される。
伝搬された値に従って、SからDまでのノードの値が更新される。Sは、上記のように、セグメント内のノードとすることができ、Nのセグメントは、Sのタイムウィンドウ内に完全に収容されているとは限らないことがある。この場合、伝搬は、Sの値を更新するのではなく、Sの保留中伝搬に追加される。同様に、DがTであり、Nのセグメントが、Tのタイムウィンドウ内に完全に収容されているとは限らない場合、伝搬は、Dの保留中伝搬に追加される。
Sの遅延伝搬のいくつかも、さらに伝搬されることがある。すなわち、次の、δが(i)Nのタイムスタンプと(ii)Nの隣にある、集約ノードSへの入力(存在する場合)のタイムスタンプまたはインターバルとの間のタイムスタンプを有する、という条件を満足させる、Sにおける遅延伝搬δは、Nの値と共に伝搬される。(ii)におけるこのタイムスタンプまたはインターバルは、N.nextがニルではなく、かつN.next.outがSを指す場合に、存在することに留意されたい。そうでない場合、δは、Nのタイムスタンプより後のタイムスタンプを有し、やはりさらに伝搬させることができる。
(SおよびDからの)ノードを繰り返し処理するとき、現在訪問されている集約ノードのタイムウィンドウ内にない上記のSからの遅延伝搬は、ドロップされる。現在訪問されている集約ノードの値伝搬および保留中伝搬が、それに応じて更新される。ノードS'において、残りの伝搬がこのノードの遅延伝搬に追加される。さらに、伝搬を遅延させる定められたストラテジに従って、S(除外)とDとの間の集約ノードには、明示的な内向きの垂直方向連結がないため、遅延伝搬がない。
全てのタイムウィンドウがO(n)ノードを収容していると仮定して、伝搬を遅延させない場合の伝搬は常に、線形的に多数のノードを訪問し、線形的に多数の値更新を実施する。伝搬を遅延させるとき、伝搬される値のために、ワーストケースではO(n)ノードのみが訪問され、更新される。しかし、遅延伝搬が後に別途実行される場合、それほど多くのことは得られず、というのも、本発明者らは後に、ノード(またはギャップを分割することから生じるそれらの派生物)を訪問し、更新することがあるためである。次に、一実施形態による、集約ノードにおいて遅延伝搬同士を効率的に結合し、したがって、本発明者らがそれらを一緒に実行できるようにする方法について説明する。
遅延伝搬同士を結合するとき、伝搬に優先順位を付けることが有益である。一例が図9に示されており、この場合、ノードN1とN2はどちらも、それらの値を上方に、明示的な外向きの連結に沿って、同じ集約ノードSに伝搬させる。N2がその値をN1より前に伝搬させるように、優先順位付きキューを使用することができる。優先順位は、タイムウィンドウが右手にストリーム要素に及ぶ場合、より大きなタイムスタンプを有するノードに与えられるべきである。これにより、N2の伝搬が即座に遅延され、N1の伝搬と共に結合され、実行される結果となる。すなわち、両方の伝搬を結合するとき、それらを順次実行するのではなく、それらは基本的に一度に実行される。
部分集約
一実施形態によれば、集約ノードの値を、遅延伝搬を含めてそのノードに伝搬された値ごとに別々に更新するのではなく、伝搬同士を結合して部分集約にすることができ、値を伝搬させるときに部分集約を使用することができる。部分集約は、例えば平衡探索木または順序配列を使用して遅延伝搬として集約ノードに格納される。一実施形態では、部分集約に関して以下のオペレーションを実施することができる。
P.Add(t,ν):タイムスタンプtおよび値νを有する伝搬を、部分集約Pに追加する。
P.Drop(t):タイムスタンプt以降を有する伝搬を、部分集約Pからドロップさせる。
P.Append(Q):部分集約Qを部分集約Pにアペンドする。
一実施形態によれば、集約ノードの値を、遅延伝搬を含めてそのノードに伝搬された値ごとに別々に更新するのではなく、伝搬同士を結合して部分集約にすることができ、値を伝搬させるときに部分集約を使用することができる。部分集約は、例えば平衡探索木または順序配列を使用して遅延伝搬として集約ノードに格納される。一実施形態では、部分集約に関して以下のオペレーションを実施することができる。
P.Add(t,ν):タイムスタンプtおよび値νを有する伝搬を、部分集約Pに追加する。
P.Drop(t):タイムスタンプt以降を有する伝搬を、部分集約Pからドロップさせる。
P.Append(Q):部分集約Qを部分集約Pにアペンドする。
さらに、次の2つの関数を部分集約に使用することができる。
P.Key():部分集約Pのキーを返す。
P.Value():部分集約Pの値を返す。
P.Key():部分集約Pのキーを返す。
P.Value():部分集約Pの値を返す。
(一実施形態における)部分集約の重要な一態様は、部分集約における第1の伝搬のタイムスタンプである。値を、ノードからその明示的な外向きの連結に沿って集約ノードに、すなわち図8に示すようにノードNからノードSに伝搬させるとき、Sにおける遅延伝搬がNによって「ブロック」されるかどうかの決定が下される。これらの遅延伝搬は、部分集約として格納され結合される。この部分集約に新たな伝搬が、Addオペレーションを使用することによって追加される(そのような部分集約が存在しない場合、伝搬を収容した新たな部分集約が作成される)。後に、部分集約は、それが「ブロック」されるまで、または残りの全ての集約ノードが訪問されるまで、残りの集約ノードに伝搬される。集約ノードを繰り返し処理するとき、無関係な伝搬を部分集約からドロップさせるために、Dropオペレーションを使用できることに留意されたい。集約ノードの値を更新するときに、Value関数を使用することができる。部分集約が「ブロック」されると、その部分集約は現在の集約ノードに追加され、その際、Key関数が使用され、またAppendオペレーションを使用することができる。
以下では、部分集約の効率的な実装について説明する。以下では、ドメインDおよび演算
を有するモノイドが逆関数-1:D→Dも有する、特殊なケースが考慮される。例として、
が整数にわたる加法である場合、d∈Dの逆元は-dである。この特殊なケースでは、部分集約により、伝搬がキュー(先入れ先出し)内に格納される。さらに、部分集約により、図10に示すように、伝搬の値同士を結合したものが値として維持される。部分集約の値は、伝搬を追加または除去したときに、それに応じて更新される。
一例として、前後へのポインタを有する双方向リスト内に伝搬を格納する実装を考慮されたい。
・伝搬が追加される(P.Add)ときはいつも、伝搬はリストの前方に追加される(図10を参照されたい)。さらに、部分集約Pの値は、追加された伝搬の値νを用いて更新され、すなわち、部分集約Pの値は、
・伝搬が追加される(P.Add)ときはいつも、伝搬はリストの前方に追加される(図10を参照されたい)。さらに、部分集約Pの値は、追加された伝搬の値νを用いて更新され、すなわち、部分集約Pの値は、
.Value()に設定される。
・伝搬がドロップされる(P.Drop)ときはいつも、伝搬はリストの最後尾から除去される(図10を参照されたい)。さらに、部分集約Pの値が、伝搬の逆元値νを用いて更新されるとき、部分集約Pの値は、
・伝搬がドロップされる(P.Drop)ときはいつも、伝搬はリストの最後尾から除去される(図10を参照されたい)。さらに、部分集約Pの値が、伝搬の逆元値νを用いて更新されるとき、部分集約Pの値は、
に設定される。所与のタイムスタンプtについての全ての伝搬をPから除去するとき、方法は、より小さなタイムスタンプを有する伝搬が訪問されるまで、リストの最後尾から伝搬を繰り返し処理する。訪問された伝搬の値が結合され、部分集約の値がそれに応じて逆元値を用いて更新され、伝搬がリストから除去される。
さらに、P.Value()が、部分集約Pの値を返し、P.Key()が、Pの伝搬スライス内の第1の要素のタイムスタンプを返し、P.Append(Q)が、Qの値を用いてPの値を更新し、Qの伝搬のリストをPの伝搬のリストにアペンドする。
伝搬のリストがそれらのタイムスタンプ順に並べられているという不変部分について、追加される伝搬はより小さなタイムスタンプを有するものと想定する。同様に、伝搬をアペンドするときにも同様に想定する。さらに、P.Appendを効率的に実装するために、P.Append(Q)は、Qのリストを「スティール(steal)」し、Qが後に使用されないものと想定する。上述のように値を集約ノードに伝搬させるときに、これらの想定は満たされる。
部分集約のこの実施形態では、オペレーションのワーストケースならし計算量はO(1)である。重要な知見には、(i)値がP.Value()によって再計算されないこと、および(ii)P.Add(t,ν)またはP.Append(Q)によって追加され、ドロップされない伝搬に関して、P.Drop(t)が、多くても、線形多数の
演算を実施すること、が含まれる。
ここで、一般的なケースの一例に移って、モノイドが必ずしも逆関数を有するとは限らないことを考慮されたい。単一のキューの代わりに、2つの配列またはリストが伝搬を格納するために使用される。さらに、部分集約の値が、伝搬を迅速に除去するように格納される。Goプログラミング言語における対応するstruct型の一例は、以下の、
type PartialAggregation struct {
val Value //前方の伝搬値の集約された値。
front []propagation
back []aggregated
}
と
type propagation struct {
ts Timestamp //伝搬のタイムスタンプ。
val Value //伝搬の値。
}
、および
type aggregated struct {
propagation
comb Value //後方スライス内のインデックス0からそれぞれのエントリのインデックス
//までの伝搬値の集約された値。
}
の通りとすることができ、
ここで、前方および後方とは、スライス、すなわち動的にサイズ設定される配列である。前方というスライス内の伝搬は、それらのタイムスタンプに関して降順に並べられ、後方というスライス内の伝搬は昇順に並べられる。これにより、迅速に、新たな伝搬を前方スライスに追加し、後方スライスから伝搬を除去することが可能になる。部分集約の関数およびオペレーションの実装形態は、次の通りとすることができ、ここでkはP.frontの長さであり、lはP.backの長さであり、ここで、一般性を失うことなく、部分集約Pは少なくとも1つの伝搬を収容する、すなわちkとlの両方が0になることはない、と想定する。
・P.Key()は、k>0である場合、P.front[k-1].tsを返し、そうでない場合、P.back[0].tsを返す。
・P.Value()は、l=0である場合、P.valを返し、そうでない場合、
type PartialAggregation struct {
val Value //前方の伝搬値の集約された値。
front []propagation
back []aggregated
}
と
type propagation struct {
ts Timestamp //伝搬のタイムスタンプ。
val Value //伝搬の値。
}
、および
type aggregated struct {
propagation
comb Value //後方スライス内のインデックス0からそれぞれのエントリのインデックス
//までの伝搬値の集約された値。
}
の通りとすることができ、
ここで、前方および後方とは、スライス、すなわち動的にサイズ設定される配列である。前方というスライス内の伝搬は、それらのタイムスタンプに関して降順に並べられ、後方というスライス内の伝搬は昇順に並べられる。これにより、迅速に、新たな伝搬を前方スライスに追加し、後方スライスから伝搬を除去することが可能になる。部分集約の関数およびオペレーションの実装形態は、次の通りとすることができ、ここでkはP.frontの長さであり、lはP.backの長さであり、ここで、一般性を失うことなく、部分集約Pは少なくとも1つの伝搬を収容する、すなわちkとlの両方が0になることはない、と想定する。
・P.Key()は、k>0である場合、P.front[k-1].tsを返し、そうでない場合、P.back[0].tsを返す。
・P.Value()は、l=0である場合、P.valを返し、そうでない場合、
を返す。
・P.Add(t,ν)は、P.frontの終わりに伝搬を追加し、それに応じてP.valを更新し、すなわち、P.frontはappend(P.front,propagation{t,ν})に設定され、P.valは
・P.Add(t,ν)は、P.frontの終わりに伝搬を追加し、それに応じてP.valを更新し、すなわち、P.frontはappend(P.front,propagation{t,ν})に設定され、P.valは
に設定される。
・P.Append(Q)は、PとQの2つの前方スライスを結合し、すなわち、P.frontは、スライスP.frontがアペンドされたスライスQ.frontに設定され、すなわち、P.frontはappend(Q.front,P.front...)に設定される。P.valは
・P.Append(Q)は、PとQの2つの前方スライスを結合し、すなわち、P.frontは、スライスP.frontがアペンドされたスライスQ.frontに設定され、すなわち、P.frontはappend(Q.front,P.front...)に設定される。P.valは
に設定され、P.backはQ.backに設定される。本発明者らはここでスライスP.backが空であると想定していることに留意されたい。さらに、PはQのスライスを「スティールする」ので、本発明者らはQが後に使用されないと想定する。
・P.Drop(t)は、Pの前方スライスおよび後方スライスを、次のように更新する。
゜k>0、かつP.front[0].tsがtより前ではないケース:P.backが空スライスに設定される。P.front内に格納された、tより後の伝搬が、P.backに逆順に移動される。スライスP.backのエントリ内の対応するcomb値がそれに応じて設定される。最後に、P.frontが空スライスに設定され、P.valがモノイドの中立元に設定される。
゜そうでない場合:エントリのタイムスタンプがtより前ではない最小インデックスiを見出すために、P.back内で二分探索が行われる。後に、対応する伝搬がP.back内でドロップされ、すなわち、P.backはP.back[:i]に設定される。
・P.Drop(t)は、Pの前方スライスおよび後方スライスを、次のように更新する。
゜k>0、かつP.front[0].tsがtより前ではないケース:P.backが空スライスに設定される。P.front内に格納された、tより後の伝搬が、P.backに逆順に移動される。スライスP.backのエントリ内の対応するcomb値がそれに応じて設定される。最後に、P.frontが空スライスに設定され、P.valがモノイドの中立元に設定される。
゜そうでない場合:エントリのタイムスタンプがtより前ではない最小インデックスiを見出すために、P.back内で二分探索が行われる。後に、対応する伝搬がP.back内でドロップされ、すなわち、P.backはP.back[:i]に設定される。
図11は、一実施形態による、前方スライスおよび後方スライスを有する部分集約データ構造(PartialAggregation)を示す。遅延伝搬は、前方スライスからも直接ドロップさせることができることに留意されたい。この場合、後方が最初に空にされ、前方内の残りのエントリが後方スライスに移動される。上でプログラミング言語Goにおけるこれらのオペレーションの一例として、図12のリスティング1および図13のリスティング2を参照されたい。ここで、モノイドはPartialAggregation型に追加され、またここで、値およびタイムスタンプは、簡単にするためマシン整数型のものである。
特殊なケースと同様に、例えば追加される伝搬はすでに格納されている伝搬よりも小さなタイムスタンプを有するという同様の想定を行うことができる。やはり特殊なケースと同様に、オペレーションのワーストケースならし計算量はO(1)である。同様の計算量境界(complexity bound)を有する部分集約のための他の実装が可能である。例えば、スライスの代わりに双方向リストを使用することができる。しかし、スライスのほうがしばしば、オーバーヘッドがわずかに小さく、というのもスライスは、それらの要素を連続したメモリセル内に格納するためである。別の実装形態は、D. Basin、F. Klaedtke、およびE. Zalinescu:「Greedily computing associative aggregations on sliding windows」、Information Processing Letters、115(2)、2015年(その内容全体がここに、参照により本明細書に組み込まれている)に記載されている、ツリー様データ構造および値を結合する貪欲手法に基づく。記載されているデータ構造および手法に基づいて、実行される
演算の回数をさらに低減させることができる。これは、
がコストのかかる演算であり、かつツリー様データ構造を維持するコストが、
に比べて小さくなるときに興味深い。最後に、D. Basin、F. Klaedtke、およびE. Zalinescu:「Greedily computing associative aggregations on sliding windows」、Information Processing Letters、115(2)、2015年に記載されている、貪欲手法およびそのツリー様データ構造も、K. Tangwongsan、M. Hirzel、およびS. Schneider:「Optimal and general out-of-order sliding-window aggregation」、Proceedings of the VLDB Endowment、12(10)、2020年(その内容全体がここに、参照により本明細書に組み込まれている)に言及されている「TwoStack」ソリューションも、データストリーム内のストリーム要素が順不同に出現することのある状況には該当しない。
ギャップの分割
一実施形態によれば、新たなストリーム要素を受け取ったとき、グラフベースのデータ構造内の、そのストリーム要素のタイムスタンプを含むギャップは、分割することができる。ギャップの分割は、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年、ならびにF. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されているように行うことができる。ノードの明示的な垂直方向連結は、好ましくは調整すべきであり、一方、暗黙的な垂直方向連結のための調整は不要である。集約ノードの保留中伝搬および遅延伝搬も、好ましくは調整すべきである。さらに、ギャップの分割は、場合によっては遅延伝搬のいくつかを含む値の伝搬、および無関係なノードの消去をトリガすることができる。
一実施形態によれば、新たなストリーム要素を受け取ったとき、グラフベースのデータ構造内の、そのストリーム要素のタイムスタンプを含むギャップは、分割することができる。ギャップの分割は、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年、ならびにF. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されているように行うことができる。ノードの明示的な垂直方向連結は、好ましくは調整すべきであり、一方、暗黙的な垂直方向連結のための調整は不要である。集約ノードの保留中伝搬および遅延伝搬も、好ましくは調整すべきである。さらに、ギャップの分割は、場合によっては遅延伝搬のいくつかを含む値の伝搬、および無関係なノードの消去をトリガすることができる。
ギャップの除去
一実施形態によれば、ギャップがいかなるタイムポイントも含んでいないことが分かったとき、グラフベースのデータ構造からそのギャップを除去することができる。そのような情報は、ある特定の時間までの全てのストリーム要素が受信されたことをストリームプロセッサに知らせる、いわゆるウォーターマークメッセージを通じて受け取ることができる。あるいは、連続番号を使用して、ある特定の時間期間内の全てのストリーム要素が受信されたかどうかを導出することもできる。D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年を参照されたい。
一実施形態によれば、ギャップがいかなるタイムポイントも含んでいないことが分かったとき、グラフベースのデータ構造からそのギャップを除去することができる。そのような情報は、ある特定の時間までの全てのストリーム要素が受信されたことをストリームプロセッサに知らせる、いわゆるウォーターマークメッセージを通じて受け取ることができる。あるいは、連続番号を使用して、ある特定の時間期間内の全てのストリーム要素が受信されたかどうかを導出することもできる。D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年を参照されたい。
ギャップの分割については、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年、ならびにF. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されているようにギャップの除去を行うことができる。この場合も、保留中伝搬および遅延伝搬は、好ましくは調整すべきである。
上ですでに説明したように、本開示は、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年に記載されているグラフベースのデータ構造、ならびにF. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号に記載されているその最適化版を、改善し、拡張するものである。例えば、本開示では、(1)集約ノードにおける伝搬を遅延させ、(2)それらのノードにおける遅延伝搬を部分集約として収集し、(3)部分集約を複数のノードに伝搬させ、それにより、伝搬中に部分集約を正しく維持することによって、値をスライディングウィンドウにわたって効率的に集約する仕方について説明している。ストリーム要素の値同士は、結合的演算子を通じて結合され、それらの値は順不同に受け取られることが可能である。
本開示における状況と同様の状況が、F. Klaedtke:「Efficient stream processing with data aggregations in a sliding window over out-of-order data streams」、米国特許出願公開第20210124746A1号(その内容全体がここに、参照により本明細書に組み込まれている)においても考慮されている。同文献では、ストリーム要素間にギャップのないストリーム要素が一緒にグルーピングされ、それぞれのストリーム要素がタイムウィンドウを完全にカバーしているときに、それらの値が一緒に集約される。そのようなグルーピングによりまた、グループピングによって完全にカバーされる左端タイムウィンドウおよび右端タイムウィンドウについての集約が維持される。これらの集約は、2つの隣接するグルーピングをマージすることから生じたグルーピング内の完全なタイムウィンドウの集約された値を計算するために使用することができる。
順不同ストリームから値を集約する状況は、J. Traub、P. M. Grulich、A. Rodriguez Cuellar、S. Breβ、A. Katsifodimos、T. Rabl、およびV. Markl:「Scotty: General and efficient open-source window aggregation for stream processing systems」、ACM Transactions on Database Systems. 46(1):1、2021年(その内容全体がここに、参照により本明細書に組み込まれている)の中でも考慮されている。Traubらによる研究における根底にある着想は、ストリーム要素をグルーピングして「スライス」にすること、およびスライスごとに個別に値を集約することである。これらのスライス集約が、次いで、タイムウィンドウ内のストリーム要素の集約の計算に使用される。すなわち、タイムウィンドウ内の全てのストリーム要素が受信されたときはいつも、そのタイムウィンドウ内のスライスが選択され、スライス集約同士が一緒に集約される。これは健全であり、というのも、Traubらは、スライスがタイムウィンドウ内に完全に収容されているか、それともタイムウィンドウ内に全く収容されていないか、のどちらかを必要とするためである。スライスは、複数のタイムウィンドウ内に収容されていることがあり、したがって、スライス集約はそのような場合には複数回使用される。Traubらの提案したアーキテクチャは、スライスを初期化するための構成要素、新たなストリーム要素を受信したときにスライスを更新するための構成要素、およびスライスから集約された値を計算するための構成要素からなる。スライスを管理する際のオーバーヘッドがあることに留意されたい。例えば、多くの小規模スライスがある場合(タイムウィンドウがしばしば一部重なり合うときに該当する)、このオーバーヘッドは重要な要素(significant factor)になり得る。
上記の2つの研究とは対照的に、本開示における部分集約は、小さなオーバーヘッドを有し、D. Basin、F. Klaedtke、およびE. Zalinescu:「Runtime verification over out-of-order streams」、ACM Transactions on Computational Logic、21(1):5、2020年、ならびにF. Klaedtke:「Method for operating a monitoring entity」、米国特許第10725887B2号の、グラフベースのデータ構造にシームレスに統合される。例えば、本開示における部分集約は、タイムウィンドウのサイズに依存せず、リアルタイムで更新される。本開示の実施形態のもう1つの違いは、構成可能性を直接サポートすることである。グラフベースのデータ構造は、水平方向に層をなした構造とし、垂直方向にセグメントをなした構造とすることができることを思い出されたい。結合および集約のためにいくつかの層を有することによって、簡単に集約を結合し、さらにはネストすることさえできる。垂直方向連結は、依存関係を定め、値がどこに伝搬されるべきかを決定する。さらに、ギャップはセグメントとして明示的に表されることに留意されたい。これには、ギャップ内のノードの値が分かる、またはそれを推論できるとき、その値をある特定のケースにおいて上方向に伝搬できるという利点がある。これにより、タイムウィンドウについての集約結果の早期の出力が可能になる。
本開示の実施形態は、有利には以下を含む。
1)タイムウィンドウの暫定集約値に対する値更新を遅延させ、遅延された複数の値更新物を収集して、そのタイムウィンドウについての単一の値更新物にすること、ならびに/または
2)あるタイムウィンドウについての遅延された複数の値更新物からなる値更新物を、隣接するタイムウィンドウについての個別の値更新物に、リアルタイムで調整すること。この調整とは、遅延された値更新物の追加およびドロップ、ならびに2つのそのような値更新物の結合である。ここで、遅延された値更新物は、(a)端部にあるもの(すなわち最初のものおよび最後のもの)に迅速にアクセスできるように、かつ(b)遅延された値更新物が、遅延された値更新物の部分(プレフィックスおよびサフィックス)集約で拡張されるように、順序通りに並べられた状態で、格納される。
1)タイムウィンドウの暫定集約値に対する値更新を遅延させ、遅延された複数の値更新物を収集して、そのタイムウィンドウについての単一の値更新物にすること、ならびに/または
2)あるタイムウィンドウについての遅延された複数の値更新物からなる値更新物を、隣接するタイムウィンドウについての個別の値更新物に、リアルタイムで調整すること。この調整とは、遅延された値更新物の追加およびドロップ、ならびに2つのそのような値更新物の結合である。ここで、遅延された値更新物は、(a)端部にあるもの(すなわち最初のものおよび最後のもの)に迅速にアクセスできるように、かつ(b)遅延された値更新物が、遅延された値更新物の部分(プレフィックスおよびサフィックス)集約で拡張されるように、順序通りに並べられた状態で、格納される。
これらの技術改善は、有利には、特に、大きなスライディングウィンドウまたは高いデータ速度レートを有する順不同データストリームにわたる集約を計算するためのデータストリーム処理における、より良好なワーストケース計算量、したがって性能およびスケーラビリティの改善をもたらす。
本開示の実施形態では、基礎をなす結合的演算子を用いた集約をサポートしている。結合的演算子を必要とすることは、ストリーム処理においてデータを集約する際に一般に広く使用されており、すなわち、結合的演算子はすでに広く応用されている。より限定的である、すなわち可換演算子しかサポートしていない現況技術に比べて、これは有利である。
いくつかの実施形態では、集約された値内に遅延伝搬が含まれていないことがあるので、不完全なタイムウィンドウの値が、ある特定の「単調」条件を満足させるかどうかのチェックは行われない。
本開示の実施形態は、IoT(モノのインターネット)プラットフォームビジネス(例えばFIRWARE)の差別化に使用することができる。ストリーム処理は、IoT装置からのデータを収集し解析する応用分野において不可欠な部分であり得る。
本開示の実施形態は、データストリームを解析するIoTプラットフォームのセキュリティおよびセキュリティオペレーションセンタ(SOC)を強化するために実装することができる。
(同様の状況について論じている)さらなる関連情報は、J. Traub、P. M. Grulich、A. Rodriguez Cuellar、S. Breβ、A. Katsifodimos、T. Rabl、およびV. Markl.「Scotty: General and efficient open-source window aggregation for stream processing systems」、ACM Transactions on Database Systems. 46(1):1、2021年(「Traubら」)(その内容全体がここに、参照により本明細書に組み込まれている)に見出すことができる。一部重なり合うタイムウィンドウの場合、本開示の手法は、Traubらの手法に比べてより良好にスケーリングし、したがって、順不同データストリームにわたる集約を計算するためのより良好な性能をもたらすはずである。
本開示の一態様は、順不同データストリームにわたるスライディングウィンドウ内での集約を、値伝搬を遅延させることによって計算するための方法を提供する。方法は、次のうちの1つまたは複数を含む。
1)ノードのステータスが、例えば新たに受信したストリーム要素のため、もしくはノードが下層上のノードから値を受け取ったため、最終になる、
2)ノードは、その最終値の、その外向きの垂直方向連結に沿った、上層上の最も近い集約ノードへの伝搬を開始する。具体的には、伝搬(すなわち伝搬された値)は、この集約ノードの既存の部分集約に追加されてよい。部分集約は、この集約ノードにおける遅延伝搬を含むか、もしくはその遅延伝搬からなることができる、
3)伝搬ノードのスコープ内にある集約ノードが、伝搬が終了するかもしくは伝搬が一時中断されるまで、繰り返し処理される、
4)集約ノードにおいて伝搬を実行するとき、集約ノードの暫定値が部分集約の値によって更新される。集約ノードが完全である場合、その値は最終となり、集約ノードはその値を出力するか、もしくはそれを上層上のノードに伝搬させる。この層上での伝搬は次集約ノードに進み、その際、部分集約内の無関係な伝搬がドロップされ、この部分集約が次ノードの部分集約と結合される、かつ/または
5)集約ノードにおいて伝搬を遅延させるとき、伝搬は、後に、例えば下層上の別のノードから受け取った値と共に再開させることができる。
1)ノードのステータスが、例えば新たに受信したストリーム要素のため、もしくはノードが下層上のノードから値を受け取ったため、最終になる、
2)ノードは、その最終値の、その外向きの垂直方向連結に沿った、上層上の最も近い集約ノードへの伝搬を開始する。具体的には、伝搬(すなわち伝搬された値)は、この集約ノードの既存の部分集約に追加されてよい。部分集約は、この集約ノードにおける遅延伝搬を含むか、もしくはその遅延伝搬からなることができる、
3)伝搬ノードのスコープ内にある集約ノードが、伝搬が終了するかもしくは伝搬が一時中断されるまで、繰り返し処理される、
4)集約ノードにおいて伝搬を実行するとき、集約ノードの暫定値が部分集約の値によって更新される。集約ノードが完全である場合、その値は最終となり、集約ノードはその値を出力するか、もしくはそれを上層上のノードに伝搬させる。この層上での伝搬は次集約ノードに進み、その際、部分集約内の無関係な伝搬がドロップされ、この部分集約が次ノードの部分集約と結合される、かつ/または
5)集約ノードにおいて伝搬を遅延させるとき、伝搬は、後に、例えば下層上の別のノードから受け取った値と共に再開させることができる。
当業者なら理解するように、本出願において説明した全ての方法、装置、要素、ユニット、および手段は、ソフトウェア要素もしくはハードウェア要素、またはそれらの任意の種類の組合せとして、実装することができる。本開示において説明したさまざまなエンティティによって実施される全てのステップ、ならびにさまざまなエンティティによって実施されると説明された機能は、それぞれのエンティティがそれぞれのステップおよび機能を実施するように適合または構成されていることを意味することが意図されている。たとえ、例示的実施形態についての以下の説明の中で、外部エンティティによって実施される特定の機能またはステップが、その特定のステップまたは機能を実施するエンティティの特定の詳細な要素の説明に反映されていないとしても、これらの方法および機能は、それぞれのソフトウェア要素もしくはハードウェア要素、またはそれらの任意の種類の組合せとして、実装することができる。
図14を参照すると、処理システム900は、1つまたは複数のプロセッサ902、メモリ904、1つまたは複数の入力/出力装置906、1つまたは複数のセンサ908、1つまたは複数のユーザインターフェース910、および1つまたは複数のアクチュエータ912を含むことができる。処理システム900は、本明細書において開示した各コンピューティングシステムを表すことができる。
プロセッサ902は、1つまたは複数のコアをそれぞれが有する1つまたは複数の別個のプロセッサを含むことができる。別個のプロセッサはそれぞれ、同じまたは異なる構造を有することができる。プロセッサ902は、1つまたは複数の中央処理装置(CPU)、1つまたは複数のグラフィック処理装置(GPU)、回路(例えば特定用途向け集積回路(ASIC))、デジタル信号プロセッサ(DSP)などを含むことができる。プロセッサ902は、共通の基板に取り付けることも、複数の異なる基板に取り付けることもできる。
プロセッサ902は、少なくとも、1つまたは複数の別個のプロセッサのうちの1つがある特定の機能、方法、または動作を具現化する動作を実施することが可能であるときに、その機能、方法、または動作を実施するように構成されている(例えば機能、方法、または動作の実施を可能にするように構成されている)。プロセッサ902は、その機能、方法、または動作を具現化する動作を、例えばメモリ904上に格納されたコードを実行すること(例えばスクリプトを解釈すること)によって、かつ/または1つもしくは複数のASICの中にデータを通すことによって、実施することができる。プロセッサ902、したがって処理システム900は、本明細書において開示したありとあらゆる機能、方法、および動作を自動的に実施するように構成することができる。したがって、処理システム900は、本明細書において説明したプロトコル、装置、メカニズム、システム、および方法のいずれか(例えばその全て)を実施するように構成することができる。
例えば、本開示において、方法もしくは装置がタスク「X」を実施する(またはタスク「X」が実施される)と言明されるとき、そのような言明は、タスク「X」を実施するように処理システム900を構成できることを開示するものと理解されたい。処理システム900は、少なくとも、プロセッサ902が機能、方法、または動作を実施するように構成されているときに、その機能、方法、または動作を実施するように構成される。
メモリ904は、揮発性メモリ、不揮発性メモリ、およびデータを格納することの可能な他の任意の媒体を含むことができる。揮発性メモリ、不揮発性メモリ、および他の任意のタイプのメモリはそれぞれ、複数の別個の位置に位置し、異なる構造をそれぞれが有する、複数の異なるメモリ装置を含むことができる。メモリ904は、遠隔にホストされた(例えばクラウド)ストレージを含むことができる。
メモリ904の例には、RAM、ROM、フラッシュメモリ、EEPROM、DVDやブルーレイ(登録商標)ディスクなど任意の種類の光記憶ディスク、磁気記憶装置、ホログラフィック記憶装置、HDD、SSD、命令またはデータ構造の形態のプログラムコードを格納するために使用することのできる任意の媒体など、非一時的なコンピュータ可読媒体が含まれる。本明細書において説明したありとあらゆる方法、機能、および動作は、メモリ904内に保存された有形のかつ/または非一時的な機械可読コード(例えば解釈可能なスクリプト)の形態で完全に具現化することができる。
入力-出力装置906は、ポート、アンテナ(すなわちトランシーバ)、印刷された導電性経路(printed conductive path)など、データを通すための任意の構成要素を含むことができる。入力-出力装置906は、USB(登録商標)、DisplayPort(登録商標)、HDMI(登録商標)、イーサネットなどを介した有線通信を可能にすることができる。入力-出力装置906は、適切なメモリ904との電子的通信、光学的通信、磁気的通信、およびホログラフィック通信を可能にすることができる。入力-出力装置906は、WiFi(登録商標)、Bluetooth(登録商標)、セルラー(例えばLTE(登録商標)、CDMA(登録商標)、GSM(登録商標)、WiMax(登録商標)、NFC(登録商標))、GPSなどを介したワイヤレス通信を可能にすることができる。入力-出力装置906は、有線通信経路および/またはワイヤレス通信経路を含むことができる。
センサ908は、環境の物理的な測定値を捕捉し、それをプロセッサ902に報告することができる。ユーザインターフェース910は、ディスプレイ、物理的なボタン、スピーカ、マイクロホン、キーボードなどを含むことができる。アクチュエータ912は、プロセッサ902が機械力を制御することを可能にすることができる。
処理システム900は、分散させることができる。例えば、処理システム900のいくつかの構成要素は、遠隔にホストされたネットワークサービス(例えばクラウドコンピューティング環境)内に存在することができ、一方、処理システム900の他の構成要素は、局所のコンピューティングシステム内に存在することができる。処理システム900は、図9に示す複数の特徴/機能をある特定のモジュールが含む、モジュール式設計を有することができる。例えば、I/Oモジュールは、揮発性メモリおよび1つまたは複数のプロセッサを含むことができる。別の例として、個々のプロセッサモジュールは、読出し専用メモリおよび/またはローカルキャッシュを含むことができる。
以上、本開示の主題について、図面および先の説明の中で詳細に図示し説明してきたが、そのような図示および説明は、限定的なものではなく例証的または例示的なものとみなされたい。本明細書において行った、本発明を特徴付けるどんな言明も、限定的なものではなく例証的または例示的なものとみなされたい。上で説明したさまざまな実施形態からの特徴の任意の組合せを含むことのできる変更および修正を、当業者によって、上の説明の範囲内で加えることができることが、理解されよう。
10 システムモデル、システム
15 プラットフォーム
20 集約ノード
900 処理システム
902 プロセッサ
904 メモリ
906 入力/出力装置、入力-出力装置
908 センサ
910 ユーザインターフェース
912 アクチュエータ
D 集合、ドメイン
e 先行ストリーム要素、中立元
e' ストリーム要素
I インターバル
i 最小インデックス
J タイムインターバル、ギャップ
K タイムインターバル
L 層
L' 1つ下の層
L'' 1つ上の層
N ノード
N' Nの先行ノード
N1、...、Nn ノード
P 部分集約
Q 部分集約
S 集約ノード
S' ノード
T ノード
t タイムスタンプ
X 集合
z 初期値
δ 遅延伝搬
κ タイムスタンプ
ν 値、逆元値
τ タイムスタンプ
15 プラットフォーム
20 集約ノード
900 処理システム
902 プロセッサ
904 メモリ
906 入力/出力装置、入力-出力装置
908 センサ
910 ユーザインターフェース
912 アクチュエータ
D 集合、ドメイン
e 先行ストリーム要素、中立元
e' ストリーム要素
I インターバル
i 最小インデックス
J タイムインターバル、ギャップ
K タイムインターバル
L 層
L' 1つ下の層
L'' 1つ上の層
N ノード
N' Nの先行ノード
N1、...、Nn ノード
P 部分集約
Q 部分集約
S 集約ノード
S' ノード
T ノード
t タイムスタンプ
X 集合
z 初期値
δ 遅延伝搬
κ タイムスタンプ
ν 値、逆元値
τ タイムスタンプ
Claims (15)
- データプロデューサ構成要素の分散システムから受信した順不同データストリームにわたるスライディングウィンドウ内でのデータ集約を、値伝搬を遅延させることによって計算する、コンピュータ実装方法であって、データ構造を格納するメモリに接続されたプロセッサ内で実施され、前記データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含み、前記方法が、
前記データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、前記複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取るステップであり、前記最終値が、データ値およびタイムスタンプを含み、前記第1のノードが、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、ステップと、
前記第1の集約ノードの既存の部分集約が存在しないときは、前記最終値を使用して前記第1の集約ノードの部分集約を作成し、または前記第1の集約ノードの前記既存の部分集約が存在するときは、前記最終値を前記第1の集約ノードの前記既存の部分集約と結合して、前記第1の集約ノードの前記部分集約を作成するステップと、
前記第1の集約ノードの前記部分集約を、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させるステップであり、前記残りの集約ノードのうちの各次ノードについて、前記集約ノードの暫定値が前記部分集約の値によって更新される、ステップと、
各次ノードについて前記伝搬を遅延させるかどうかを判定するステップと、
前記伝搬を遅延させるとの判定に応答して、次集約ノードへの前記部分集約の伝搬を遅延させるステップと
を含む、方法。 - 前記複数の集約ノードのうちのある集約ノードのステータスが最終であるとき、前記ある集約ノードの最終値を、前記第1の水平層より上にある層上のノードに送るステップをさらに含む、請求項1に記載の方法。
- 前記第1のノードの前記最終値が、ブール、整数、文字列、浮動小数点、ベクトル、およびマップからなる群から選択される値型を有する、請求項1に記載の方法。
- 次ノードについて前記伝搬を遅延させるかどうかを判定する前記ステップが、前記次ノードが前記第1のノードと同じ水平層上の先行ノードからの値を待っているかどうかを判定するステップを含む、請求項1に記載の方法。
- 後に、前記遅延が生じた前記ノードが前記下層上の別のノードからの値を受け取ったことに応答して、遅延された部分集約の伝搬を再開させるステップをさらに含む、請求項1に記載の方法。
- 部分集約が平衡探索木または順序配列として格納される、請求項1に記載の方法。
- ある集約ノードにおける前記部分集約の遅延伝搬を、前記ある集約ノードが前記第1の集約ノードの前記タイムウィンドウ内にないと決定されたときにドロップさせるステップをさらに含む、請求項1に記載の方法。
- 分散システム内のネットワーク装置であって、
1つまたは複数のプロセッサと、
命令およびデータ構造を格納するメモリと
を備え、前記データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含み、前記命令が、前記1つまたは複数のプロセッサによって実行されると前記ネットワーク装置に、前記分散システムのデータプロデューサ構成要素から受信した順不同データストリームにわたるスライディングウィンドウ内での集約を、値伝搬を遅延させることによって計算する方法を実施させ、前記方法が、
前記データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、前記複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであり、前記最終値が、データ値およびタイムスタンプを含み、前記第1のノードが、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、
前記第1の集約ノードの既存の部分集約が存在しないときは、前記最終値を使用して前記第1の集約ノードの部分集約を作成し、または前記第1の集約ノードの前記既存の部分集約が存在するときは、前記最終値を前記第1の集約ノードの前記既存の部分集約と結合して、前記第1の集約ノードの前記部分集約を作成することと、
前記第1の集約ノードの前記部分集約を、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであり、前記残りの集約ノードのうちの各次ノードについて、前記集約ノードの暫定値が前記部分集約の値によって更新される、伝搬させることと、
各次ノードについて前記伝搬を遅延させるかどうかを判定することと、
前記伝搬を遅延させるとの判定に応答して、次集約ノードへの前記部分集約の伝搬を遅延させることと
を含む、ネットワーク装置。 - 前記メモリが、前記1つまたは複数のプロセッサによって実行されると前記ネットワーク装置に、前記複数の集約ノードのうちのある集約ノードのステータスが最終であるとき、前記ある集約ノードの最終値を前記第1の水平層より上にある層上のノードに送らせる命令をさらに格納する、請求項8に記載のネットワーク装置。
- 次ノードについて前記伝搬を遅延させるかどうかを判定するための前記命令が、前記次ノードが前記第1のノードと同じ水平層上の先行ノードからの値を待っているかどうかを判定するための命令を含む、請求項8に記載のネットワーク装置。
- 前記第1のノードの前記最終値が、ブール、整数、文字列、浮動小数点、ベクトル、およびマップからなる群から選択される値型を有する、請求項8に記載のネットワーク装置。
- 前記メモリが、前記1つまたは複数のプロセッサによって実行されると前記ネットワーク装置に、後に、前記遅延が生じた前記ノードが前記下層上の別のノードからの値を受け取ったことに応答して、遅延された部分集約の伝搬を再開させる命令をさらに格納する、請求項8に記載のネットワーク装置。
- 部分集約が前記メモリ内に平衡探索木または順序配列として格納される、請求項8に記載のネットワーク装置。
- 前記メモリが、前記1つまたは複数のプロセッサによって実行されると前記ネットワーク装置に、ある集約ノードにおける前記部分集約の遅延伝搬を、前記ある集約ノードが前記第1の集約ノードの前記タイムウィンドウ内にないと決定されたときにドロップさせる命令をさらに格納する、請求項8に記載のネットワーク装置。
- 有形の非一時的なコンピュータ可読媒体であって、命令をその上に有し、前記命令が、1つまたは複数のプロセッサによって単独で、または組み合わせて実行されると、データプロデューサ構成要素の分散システムから受信した順不同データストリームにわたるスライディングウィンドウ内での集約を、値伝搬を遅延させることによって計算する方法の実行を可能にし、前記方法が、
前記1つまたは複数のプロセッサに結合されたメモリユニット内のデータ構造を定義することであり、前記データ構造が、同じ水平層上のノードが同じ演算子、初期値、およびメトリック制約に関連する、ノードの階層構成を含む、定義することと、
前記データ構造の第1の水平層上の第1のタイムウィンドウ内の複数の集約ノードのうちの第1の集約ノードにおいて、前記複数の集約ノードより下にある下層のノードのうちの第1のノードからの最終値を受け取ることであり、前記最終値が、データ値およびタイムスタンプを含み、前記第1のノードが、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちのそれぞれの集約ノードのスコープ内にある、受け取ることと、
前記第1の集約ノードの既存の部分集約が存在しないときは、前記最終値を使用して前記第1の集約ノードの部分集約を作成し、または前記第1の集約ノードの前記既存の部分集約が存在するときは、前記最終値を前記第1の集約ノードの前記既存の部分集約と結合して、前記第1の集約ノードの前記部分集約を作成することと、
前記第1の集約ノードの前記部分集約を、前記第1のタイムウィンドウ内の前記複数の集約ノードのうちの残りの集約ノードに順序通りに繰り返し伝搬させることであり、前記残りの集約ノードのうちの各次ノードについて、前記集約ノードの暫定値が前記部分集約の値によって更新される、伝搬させることと、
各次ノードについて前記伝搬を遅延させるかどうかを判定することと、
前記伝搬を遅延させるとの判定に応答して、次集約ノードへの前記部分集約の伝搬を遅延させることと
を含む、有形の非一時的なコンピュータ可読媒体。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163230074P | 2021-08-06 | 2021-08-06 | |
US63/230,074 | 2021-08-06 | ||
US17/493,897 US11546263B1 (en) | 2021-08-06 | 2021-10-05 | Delayed propagations for sliding-window aggregations over out-of-order streams |
US17/493,897 | 2021-10-05 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023024403A true JP2023024403A (ja) | 2023-02-16 |
Family
ID=84693093
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022125618A Pending JP2023024403A (ja) | 2021-08-06 | 2022-08-05 | 順不同ストリームにわたるスライディングウィンドウ集約のための遅延伝搬 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11546263B1 (ja) |
JP (1) | JP2023024403A (ja) |
DE (1) | DE102022208237A1 (ja) |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070226362A1 (en) * | 2006-03-21 | 2007-09-27 | At&T Corp. | Monitoring regular expressions on out-of-order streams |
US9479383B2 (en) * | 2011-07-12 | 2016-10-25 | Hughes Network Systems, Llc | Data compression for priority based data traffic, on an aggregate traffic level, in a multi stream communications system |
US9497250B2 (en) | 2012-10-29 | 2016-11-15 | International Business Machines Corporation | Runtime grouping of tuples in a streaming application |
US10311061B2 (en) * | 2015-11-06 | 2019-06-04 | Sap Se | Quality-driven processing of out-of-order data streams |
US20180039672A1 (en) * | 2016-08-04 | 2018-02-08 | At&T Intellectual Property I, L.P. | Method and apparatus for answering queries based on partial aggregations of a continuous data stream |
US10528120B2 (en) * | 2016-12-14 | 2020-01-07 | Sap Portals Israel Ltd. | Customized internet-of-things data packaging and brokering |
EP3529700B1 (en) | 2017-01-23 | 2022-02-09 | NEC Corporation | Method for operating a monitoring entity |
ES2922820T3 (es) | 2017-04-12 | 2022-09-20 | Barcelona Supercomputing Center Centro Nac De Supercomputacion | Estructuras de datos distribuidas para la agregación de ventanas deslizantes o aplicaciones similares |
CN109327400B (zh) * | 2017-08-01 | 2022-04-26 | 华为技术有限公司 | 一种数据通信方法及数据通信网络 |
US10672204B2 (en) * | 2017-11-15 | 2020-06-02 | The Boeing Company | Real time streaming analytics for flight data processing |
US10764312B2 (en) | 2017-12-28 | 2020-09-01 | Microsoft Technology Licensing, Llc | Enhanced data aggregation techniques for anomaly detection and analysis |
DE102018009821A1 (de) * | 2018-12-14 | 2020-06-18 | Diehl Metering S.A.S. | Verfahren zum Sammeln von Daten sowie Sensor, Datensammler und Messdaten-lnformationsnetzwerk |
US11194812B2 (en) | 2018-12-27 | 2021-12-07 | Microsoft Technology Licensing, Llc | Efficient aggregation of sliding time window features |
US11283969B2 (en) * | 2019-08-09 | 2022-03-22 | Verizon Media Inc. | System and method for managing a virtual studio |
US20220286399A1 (en) * | 2019-09-11 | 2022-09-08 | Intel Corporation | Hardware queue scheduling for multi-core computing environments |
US11809430B2 (en) * | 2019-10-23 | 2023-11-07 | Nec Corporation | Efficient stream processing with data aggregations in a sliding window over out-of-order data streams |
US11055262B1 (en) * | 2020-03-09 | 2021-07-06 | Snowflake Inc. | Extensible streams on data sources |
US20220283876A1 (en) * | 2021-03-03 | 2022-09-08 | NEC Laboratories Europe GmbH | Dynamic resource allocation for efficient parallel processing of data stream slices |
-
2021
- 2021-10-05 US US17/493,897 patent/US11546263B1/en active Active
-
2022
- 2022-08-05 JP JP2022125618A patent/JP2023024403A/ja active Pending
- 2022-08-08 DE DE102022208237.0A patent/DE102022208237A1/de active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102022208237A1 (de) | 2023-02-09 |
US11546263B1 (en) | 2023-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11614969B2 (en) | Compression techniques for encoding stack trace information | |
US9367293B2 (en) | System and method for compiler assisted parallelization of a stream processing operator | |
US9965518B2 (en) | Handling missing data tuples in a streaming environment | |
EP3679473B1 (en) | A system and method for stream processing | |
US10664756B2 (en) | Scalable streaming decision tree learning | |
US10853370B2 (en) | Devices and/or methods to provide a query response based on ephemeral data | |
US20160259704A1 (en) | Breakpoint prediction | |
WO2017196748A1 (en) | Compression techniques for encoding stack trace information | |
JP2023024403A (ja) | 順不同ストリームにわたるスライディングウィンドウ集約のための遅延伝搬 | |
US10171288B2 (en) | Diagnosing faults in stateless distributed computing platforms | |
US10002162B2 (en) | Supplementing a tuple with a derived value | |
CN117459483A (zh) | 高并发流数据乱序处理方法、装置、设备及存储介质 |