(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-01
(45)【発行日】2022-06-09
(54)【発明の名称】準リアルタイムデータ集計を計算するための検索及び取得データ処理システム
(51)【国際特許分類】
G06F 16/22 20190101AFI20220602BHJP
G06Q 30/02 20120101ALI20220602BHJP
G06F 16/245 20190101ALI20220602BHJP
【FI】
G06F16/22
G06Q30/02 300
G06F16/245
【外国語出願】
(21)【出願番号】P 2019193640
(22)【出願日】2019-10-24
(62)【分割の表示】P 2018530555の分割
【原出願日】2016-12-20
【審査請求日】2019-10-29
(32)【優先日】2015-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2016-11-23
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】マクリーン,ジョン
(72)【発明者】
【氏名】ヴェイサー,ポール
【審査官】原 秀人
(56)【参考文献】
【文献】国際公開第2014/021978(WO,A3)
【文献】米国特許出願公開第2014/0324530(US,A1)
【文献】中挾 晃介 外,StreamOLAPにおける問合せの最適化手法,第7回データ工学と情報マネジメントに関するフォーラム (第13回日本データベース学会年次大会) [online] The 7th Forum on Data Engineering and Information Management,日本,電子情報通信学会データ工学研究専門委員会 日本データベース学会 情報処理学会データベースシステム研究会,2015年03月04日,pp. 1-8,Internet<URL:http://db-event.jpn.org/deim2015/paper/29.pdf>
【文献】データベース管理者必見のテクニック満載 SQL Server7.0パワフルチューニング,Enterprise Servers WORLD,日本,(株)IDGジャパン,2001年04月01日,第4巻第4号,pp. 106-109
(58)【調査した分野】(Int.Cl.,DB名)
G06F16/00-16/958
G06Q 30/02
(57)【特許請求の範囲】
【請求項1】
データ処理システムによって実行される、データを処理するための方法であって、
キーに関連付けられる、受信された複数のデータレコード中のデータレコードを検出することであって、
キーは、ユーザを一意的に識別し、前記検出されたデータレコードは、複数のフィールドを含み、前記複数のフィールドの特定の一つは、
前記検出されたデータレコードに関連付けられるユーザを一意的に識別する特定の
キーを特定
し、
前記フィールドの別の一つは、そのフィールドに格納されているデータが特定のイベントタイプに関連付けられることを特定するイベントタイプフィールドである、検出することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキー及び前記
特定のイベントタイプに関連付けられるデータの履歴集計のためにデータレコードを検索することであって、前記履歴集計は、以前の期間からの事前に計算されたデータ集計である、検索することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーについて、前記検出されたデータレコードの前記イベントタイプフィールドからのデータを前記履歴集計に結合することにより、前記特定のイベントタイプについての結合データを計算することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーに関連付けられる別のデータレコードを、
前記特定のイベントタイプについての前記結合データを前記データレコードのフィールドに挿入することにより、変更することと、
を含む方法。
【請求項2】
データを処理するためのデータ処理システムであって、
1つ以上のプロセッサと、
1つ以上の機械可読ハードウェア記憶デバイスであって、前記1つ以上のプロセッサに、
キーに関連付けられる、受信された複数のデータレコード中のデータレコードを検出することであって、
キーは、ユーザを一意的に識別し、前記検出されたデータレコードは、複数のフィールドを含み、前記複数のフィールドの特定の一つは、
前記検出されたデータレコードに関連付けられるユーザを一意的に識別する特定の
キーを特定
し、
前記フィールドの別の一つは、そのフィールドに格納されているデータが特定のイベントタイプに関連付けられることを特定するイベントタイプフィールドである、検出することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキー及び前記
特定のイベントタイプに関連付けられるデータの履歴集計のためにデータレコードを検索することであって、前記履歴集計は、以前の期間からの事前に計算されたデータ集計である、検索することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーについて、前記検出されたデータレコードの前記イベントタイプフィールドからのデータを前記履歴集計に結合することにより、前記特定のイベントタイプについての結合データを計算することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーに関連付けられる別のデータレコードを、
前記特定のイベントタイプについての前記結合データを前記データレコードのフィールドに挿入することにより、変更することと、
を含む動作を実行させるように実行可能である命令を記憶する1つ以上の機械可読ハードウェア記憶デバイスと、
を含むデータ処理システム。
【請求項3】
1つ以上の機械可読ハードウェア記憶デバイスであって、1つ以上のプロセッサに、
キーに関連付けられる、受信された複数のデータレコード中のデータレコードを検出することであって、
キーは、ユーザを一意的に識別し、前記検出されたデータレコードは、複数のフィールドを含み、前記複数のフィールドの特定の一つは、
前記検出されたデータレコードに関連付けられるユーザを一意的に識別する特定の
キーを特定
し、
前記フィールドの別の一つは、そのフィールドに格納されているデータが特定のイベントタイプに関連付けられることを特定するイベントタイプフィールドである、検出することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキー及び前記
特定のイベントタイプに関連付けられるデータの履歴集計のためにデータレコードを検索することであって、前記履歴集計は、以前の期間からの事前に計算されたデータ集計である、検索することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーについて、前記検出されたデータレコードの前記イベントタイプフィールドからのデータを前記履歴集計に結合することにより、前記特定のイベントタイプについての結合データを計算することと、
前記検出されたデータレコードに関連付けられる前記ユーザを一意的に識別する前記特定のキーに関連付けられる別のデータレコードを、
前記特定のイベントタイプについての前記結合データを前記データレコードのフィールドに挿入することにより、変更することと、
を含む動作を実行させるように実行可能である命令を記憶する1つ以上の機械可読ハードウェア記憶デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本明細書は、特にネットワーク内に分散されたデータソースからのデータ取得を提供するように適合された方法及びデータ構造に関する。
【背景技術】
【0002】
背景
ある例では、アプリケーションを実行するシステムは、データウェアハウス(例えば、ロジスティクスハブ、分散された機械、移動通信、又は小売店に関するデータウェアハウス)に蓄積されたデータを取得し、そのデータをバッチで集計することによってデータを集計する。これらのアプリケーションは、多くの場合、バッチアプリケーションと呼ばれ、それは、これらが受信したデータをデータウェアハウスに(バッチで)蓄積し、その後、データウェアハウスからデータを再び取得して集計を計算するからであり、データ集計時にレイテンシが生じる。加えて、これらのアプリケーションは、大量のデータが関わるため、リアルタイムのデータ(及び/又はウェアハウスデータ)の集計に問題を伴う。
【0003】
図1Aを参照すると、環境2は、バッチデータに対して異なるタイプのアプリケーションを実行するための異なるアプリケーション(エンジン)を含む。この例では、データソース3からのデータは、エンタプライズデータウェアハウス(EDW)4に蓄積される。ロジスティクスアプリケーション5a、5b、5c、5d(それぞれ異なる動作、ルール、又はアプリケーションを実装する)の各々は、そのアプリケーションにとって適当なデータをEDW 4から個々に取得する。これらの異なるアプリケーション5a、5b、5c、5dの各々は、異なるデータタイプ及びストリームに作用し、そのようにしてEDW 4から適当なデータを取得する。これらの異なるアプリケーション5a、5b、5c、5dの各々は、多くの動作、ルール、及びアプリケーションを実行してもよい。各アプリケーションは同じ一般的ワークフローを使用する。
【0004】
他の例では、例えば、米国特許第9,002,770号に記載されているようなルール用のユーザインタフェースにより、ユーザ(例えば、1人のユーザ)は、あるアプリケーションで使用するためのルール(例えば、SMSの利用>40)を定義でき、そのルールに合った関連データを取得するためにデータベース内の適当なデータレコードにアクセスするためのコンピュータコードを記述しなくてよい。一般に、ユーザがアプリケーションを定義するとき、ユーザは、ルールを(例えば、スプレッドシートに)書き込み、その後、このスプレッドシートをコンピュータプログラマに送り、ルールを実装するためのコードが記述されるようにする。ルール用のユーザインタフェースにより、ユーザは、単純にユーザインタフェース内でルール(例えば、ルールを表すアイコン)を選択して、そのルールのための数値又は条件を指定できる。システムは、イベントにより明示される適当なデータを取得するために必要な命令を生成するように構成される。ルール用のユーザインタフェースを通じて、ユーザは、ルールを編集でき、ルールの編集のためにプログラマを雇う必要がない。
【発明の概要】
【課題を解決するための手段】
【0005】
概要
いくつかの例において、データ処理システムによって実行される、データを処理するための方法は、1つ以上のデータストリームからデータを間欠的に受信することであって、受信されたデータは、データレコードを含む、受信することと、1つ以上のデータストリームからのデータが継続的に受信されるときに、受信されたデータレコード中の2つ以上の特定のデータレコードを検出することであって、検出された2つ以上の特定のデータレコードの各々は、特定の識別子を含む、検出することと、その特定の識別子について、検出された2つ以上の特定のデータレコードを含む、データレコードの集合を作成することと、データレコードの集合に含まれる少なくとも1つの特定のデータレコードについて、特定の識別子に関連付けられるデータの履歴集計のためにデータレコードを検索することであって、履歴集計は、以前の期間からの事前に計算されたデータ集計である、検索することと、少なくとも1つの特定のデータレコードに基づいて、及び履歴集計に基づいて結合データを計算することと、データレコードを、結合データをデータレコードのフィールドに挿入することにより、及び集合内のデータレコードの少なくとも1つからのデータをデータレコードの別のフィールドに挿入することにより変更することと、変更されたデータレコードに1つ以上のルールを適用することにより、変更されたデータレコードを処理することと、ルールを適用することに基づいて、1つ以上のアクションを開始するための1つ以上の命令をメモリに書き込むことと、1つ以上のアクションを開始するためのキューに1つ以上の命令をパブリッシュすることとを含む。1つ以上のコンピュータのシステムは、システム上にインストールされるか、動作時にアクションを実行するか、又はシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを有することによって特定の動作又はアクションを実行するように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると、装置にアクションを実行させる命令を含むことにより、特定の動作又はアクションを実行するように構成され得る。
【0006】
この態様において、集合内のデータレコードの少なくとも1つからのデータをデータレコードの他のフィールドに挿入することは、集合に含まれる少なくとも1つの特定のデータレコードからのデータを、挿入することによって変更されるデータレコードの他のフィールドに挿入することを含む。データレコードの集合は、データレコードからのデータを含む第一のデータレコードであり、方法は、複数のデータレコードを収集することと、データレコードを単一のキューにパブリッシュすることと、キューから2つ以上の特定のデータレコードを検出することと、2つ以上の特定のデータレコードを第一のデータレコード中に結合することであって、2つ以上の特定のデータレコードは、異なるタイプのイベントであることを表すデータを含む、結合することと、第一のデータレコードを、少なくとも1つの特定のデータレコードのための結合データで拡張することとをさらに含む。以前の期間は、検出の実行前の時間である。アクションは、第一のデータレコードに、第一のデータレコードに含まれる特定のイベントに関連付けられる顧客に関する顧客プロフィールデータをアタッチすることと、第一のデータレコードに、特定のイベントに関する履歴集計を有するアペンダブルルックアップファイル(ALF)をアタッチすることとを含む。
【0007】
この態様において、結合データを計算することは、履歴集計に増分データを付加することであって、増分データは、履歴集計が計算された時間から、現在時間の1分以内である準現在時間までのデータを含む、付加することと、増分データの付加に基づいて、データの準リアルタイム集計を生成することとを含む。ユーザのクライアントデバイスから、アプリケーションを定義する1つ以上のルールを表すデータを受信することと、受信されたデータに基づいて、アプリケーションを定義する1つ以上のルールを生成することと、1つ以上のルールで実行することに基づいて、間欠的に受信された1つ以上のデータストリームに対してアプリケーションを実装することとをさらに含む、請求項1の方法である。1つ以上のデータストリームを受信することは、第一のタイプのイベントを表すデータを有する第一のデータストリームを受信することと、第二のタイプのイベントを表すデータを有する第二のデータストリームを受信することとを含む。
【0008】
この態様において、1つ以上のアプリケーションを、1つ以上の命令に含まれるパブリッシュされたアクショントリガに対して実行することである。データレコードは、イベントを含む。検索することは、データレポジト中を検索すること、又はメモリ内で検索することを含む。
【0009】
上記の全部又は一部は、コンピュータプログラム製品として実装され得、これは、ハードドライブ、ダイナミックランダムアクセスメモリ等のランダムアクセスメモリ記憶デバイス、機械可読ハードウェア記憶デバイス、及び他のタイプの非一時的機械可読記憶デバイス等の1つ以上の非一時的機械可読記憶デバイス及び/又は1つ以上のコンピュータ可読ハードウェア記憶デバイスに記憶され、1つ以上の処理デバイス上で実行可能な命令を含む。上記の全部又は一部は、装置、方法、又は電子システムとして実装され得、これは、上記の機能を実装するための実行可能な命令を記憶する1つ以上の処理デバイス及びメモリを含み得る。
【0010】
1つ以上の実施形態の詳細は、添付の図面及び以下の説明に示されている。本明細書に記載の技術の他の特徴、目的、及び利点は、説明及び図面から且つ請求項から明らかになるであろう。
【図面の簡単な説明】
【0011】
【
図1A】異なるデータストリーム内のバッチデータに作用する各種のエンジンの概略図である。
【
図1B】様々なアプリケーションを実装し、バッチ及びリアルタイムデータに作用する1つのエンジンの概略図である。
【
図1C】ワイドレコードを用いるリアルタイム実行の概略図である。
【
図2】準リアルタイムイベント集計を計算するためのシステムの概略図である。
【
図5】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図6】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図7】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図8】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図9】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図10】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図11】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図12】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図13】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図14】イベントパレットからのグラフィカルユーザインタフェースの一例である。
【
図16】準リアルタイムイベント集計を計算することの概略図である。
【発明を実施するための形態】
【0012】
説明
本開示によるシステムは、間欠的に(例えば、周期的又は継続的に)様々なデータソースからのデータを受信する。データが間欠的に受信されるときに、システムは、データを1つのデータストリーム中に(例えば、受信されたデータをキューにマルチパブリッシュすることにより)収集し、準現在時間で(例えば、1ミリ秒、2ミリ秒等で)これらのデータを1つのワイドレコードに、例えばキューにマルチパブリッシュされたデータを含むワイドレコードを生成することによって結合する。データは、データウェアハウスから(バッチで)取得されるのではなく、データソースから準リアルタイムで収集される。この収集データはイベントを含み、これには、例えば、アクションの発生(例えば、音声通話を行うこと又は音声通話の長さ)を示すデータを含むレコード又はアクションの発生を示すデータが含まれる。これらの各種のデータソースからのデータを結合することにより、ワイドレコードは、異なるタイプのイベント(例えば、ショートメッセージサービス(SMS)イベント、音声イベント、データイベント等)を含む。システムは、このワイドレコードをイベント集計、無イベントデータ、状況データ、及び各種のディメンション、例えば顧客データ(例えば、顧客のプロフィール)、アカウントデータ等でエンリッチ化する。一般に、ディメンションは、イベントに関連付けられるエンティティ(例えば、顧客、ディーラ等)に関するデータを含む。一般に、イベント集計は、明示された期間にわたる集計において発生したイベントの量を示すデータを含む。一般に、無イベントデータは、イベントが発生しなかったことを示すデータを含む。例えば、無イベントデータは、ユーザが最後にメール又はSMSメッセージを送信してから経過した時間の量を指定してもよい。一般に、状態データは、特定のアプリケーション(例えば、キャンペーン)、実装、又は実行の状態(例えば、進捗状況)を示すデータを含む。
【0013】
システムは、各アプリケーションではなく、1つのワイドレコードに対して複数のレベル(例えば、加入者(顧客)レベル、ディーラ(小売店)レベル等)で動作する複数の異なるアプリケーションの実行を可能にし、レベルのタイプは、データレポジトリからバッチで取得されるデータに対して実行される。この例では、これらのレベルの各々は特定のタイプのエンティティ、例えば、モバイルデバイス加入者、モバイルデバイスディーラ等を表す。これらの「任意イベント」アプリケーションを構築するために、システムはイベントパレットを含み、これは、ユーザ(例えば、ユーザ)が一連のルール(例えば、ルール)を定義する中で(例えば、ルール用のユーザインタフェースを含むルール環境によって)使用されてもよい事前に定義されたイベントの集合、イベント集計、無イベント、及びアプリケーション状態にアクセスし、これを見るためのインタフェースを含む。すなわち、イベントパレットは、特定の配置のイベント及びデータを明示し、それによりルール用のユーザインタフェースを用いて、これらのイベントを含むか又はそれに基づく適当なルールを作成できる。例えば、イベントパレットは、(例えば、ルールを定義するためのルール環境により)ある顧客が20件のSMSメッセージを送信すると、その顧客に5ドルのクレジットを提供することを明示するプログラムのためのルールを定義するために使用されてもよい。この例では、ユーザは、ルールを定義する中で、SMSメッセージに関するイベント集計を使用してもよい。イベントパレットは、各種のレベルで動作する各種のタイプのアプリケーション及び異なるタイプのイベントについて利用可能なイベント及びイベント集計の群を含むため、ユーザはイベントパレットを用いて、各々が複数のタイプのイベントにまたがる複数の異なるタイプのアプリケーションを構築できる。この例では、システムは、イベントパレット内で定義されるイベントの全部(又はイベントの少なくとも一部)に関する数値を含むイベントレコードを生成する。ある例では、イベントパレット内で定義されたイベントの数値は、イベントレコードのサブレコード(例えば、あるレコード中に含まれるレコード)に含まれる。例えば、イベントパレットは加入者プロフィールイベントを定義し、これらは、イベントレコード中のプロフィールサブレコード中に蓄積される。ある例において、イベントレコードは、イベントパレットに含まれるすべてのイベントのワイドレコードである。この例では、イベントレコードは、データアイテムを有するデータレコードを含む。
【0014】
事前投入された(又は事前生成された)イベントレコードに対してアプリケーションを実行することにより、システムは、システムがデータウェアハウス又はデータベースから、アプリケーションがそれに対して実行されるデータを取得しなければならない場合の処理時間と比較して、リアルタイムでの且つリアルタイムのデータを用いたより高速のアプリケーション処理を提供する。このようなイベントレコードの生成プロセスにより、データの非正規化が行われ、その中で同じデータが意図的に複数のレコード(例えば、イベントレコード、データを蓄積するデータベース等)へ広げられる。データの非正規化により、アプリケーション実行のための処理速度が高まるが、これは、システムがデータを取得するためにデータベースクエリを実行する必要がなくなるからである。
【0015】
イベントパレット内のイベントを含むアプリケーションをリアルタイムデータストリームに対してリアルタイムで実行できるようにするために、システムは、イベントパレット内のすべてのイベントのワイドレコードを生成して、アプリケーションが実行されるときに、関連データのためにデータベースクエリを実行しなければならないことに関連付けられるレイテンシを短縮し、アプリケーション実行中にエンリッチメントを実行すること(例えば、アプリケーション実行中に集計を計算すること)に関連付けられるレイテンシを短縮する。むしろ、リアルタイムデータストリーム中で受信される各イベントについて、イベントパレット全体及びエンリッチメント(例えば、リアルタイム集計)を含むイベントレコードが事前に構築され、このイベントレコードが、アプリケーション実行のためのキューにパブリッシュされ、それによって低レイテンシのマルチイベント型の任意イベントアプリケーションが生成され、アプリケーションをデータベースクエリ及びルックアップに関係なく実行することが可能となる。加えて、(特定のキー又は識別子に関連付けられる)すべてのイベントを含むこの1つのレコード(例えば、ワイドレコード)の生成を通じて、システムは柔軟性も高め、それは、アプリケーションごとにデータベースクエリ及び取得を実行しなければならないのではなく、レコードをすべてのエンジン及びアプリケーションに適用できるからでる。ある例において、このキー又は識別子は、ユーザ識別子(ID)キーを含む。この例において、システムは、特定のユーザに関するすべてのイベントをユーザIDキーに基づいて収集し、同じグループに含める。加えて、このシステムでは柔軟性が高まり、それは、エンジンが特定のタイプのデータをEDWから取得するように、及び/又はEDW中のレコードの特定のフィールドをクエリするように事前に構成する必要がないからである。むしろ、システムは、ワイドレコード(これは、例えば、上述のユーザIDキー等の特定のキーに関連付けられるすべてのイベントを含む)を生成し、したがってワイドレコード中のデータに対してアプリケーション又はエンジンを実行でき、それにより、アプリケーションは、ワイドレコードに含まれるそのデータに基づいて「オンザフライ」で実行することが可能となる。
【0016】
図1Bを参照すると、システム6は、データをデータソース7(例えば、ネットワーク内に分散されたデータソース)から受信し、収集プロセス9を実装して、例えばデータをキューにマルチパブリッシュすることにより、データを1つのデータストリームに収集する。キューにマルチパブリッシュされたデータから、システム6は、後にさらに詳しく説明するように、データに含まれるイベントのワイドレコードを生成する。この例では、システム6は、データがデータソース7(例えば、ロジスティクスハブ、分散された機械、移動通信、又は小売店に関するデータソース)から受信されるときに準リアルタイムでデータを収集する。収集の一環として、システム6は、EDW 8中にデータ(又はデータの一部)を蓄積する。データの収集自体は、データが例えば後にデータウェアハウスから取得されるのではなく、データソース7から受信されるため、準リアルタイムデータで行われる。ワイドレコードは、(データウェアハウスから取得されたデータから生成されるのではなく)この収集データから生成されるため、ワイドレコードは、データが収集されるときに準リアルタイムで生成され、更新される。システム6は、検出及び動作エンジン10も含み、これは、収集データ(例えば、ワイドレコード内のデータ)にルールを適用し、収集されたデータ中の1つ以上の部分がルールの1つ以上の条件を満たすことを検出し、適当なアクションを実行する。この図の例において、検出及び動作エンジン10は、異なるタイプのアプリケーションであるアプリケーション11a、11b、11c、11dのためのルールを実行する。アプリケーション11a、11b、11c、11dの各々は、ルールを定義するための環境を用いて構成されるデータフローグラフとして実装されてもよい。検出及び実行エンジン10は、1つのワイドレコードに対して実行するため、検出及び動作エンジン10は、異なるエンジンに異なるアプリケーションごとに適当な異なるデータストリームに対して実行させるのではなく、各種の異なるアプリケーション11a、11b、11c、11dを1つのデータストリーム(例えば、ワイドレコード)に対して実装できる。
【0017】
図1Cを参照すると、イベントベースのアプリケーション12は、その実行中、上述の方法を用いて生成されたワイドレコードを使用する。この例では、アプリケーション12は、1つ以上の特定の加入者に関するイベントレコードに含まれるイベントに基づき、各種のイベントトリガ及びアクションを明示する。アプリケーション12は、各種の決定点(例えば、「加入者は50件のSMSメッセージを消費したか?」)を含む。アプリケーションがそれについて予期される特定の加入者について、検出及び動作エンジン10は、アプリケーション12のいずれのブランチを横切るかを、その加入者に関するイベントレコードに含まれるイベント(又はその欠如)に基づいて、及びアプリケーション内の加入者の状態(例えば、「アプリケーション状態」)に基づいて決定する。一般に、アプリケーション状態は、アプリケーションの実行中に加入者が移行した先の特定のコンポーネント(例えば、特定のイベントトリガ又は特定のアクション)を指す。例えば、アプリケーション状態は、アプリケーション内のいずれのイベントトリガ又はアクションが現在特定の加入者のために実行されているかを明示する。いくつかの例において、検出及び動作エンジン10は、指定された期間だけ待機してから、アプリケーション12のブランチを選択する。これらの指定された期間だけ待機することにより、検出及び動作エンジン10は、イベントレコードに挿入される新しいイベントを分析する。
【0018】
この例では、アプリケーション12はイベントトリガ19を含み、これは、特定の加入者のためのサービスが作動されると、検出及び動作エンジン10が、2日間で特定の加入者により消費されたSMSメッセージの量をモニタする開始アクション20を実行することを明示する。この例では、イベントトリガ19は、ルールがアプリケーション12により実行されるための前提条件である。イベントトリガ19が満たされると、検出及び動作エンジン10は開始アクション20を実行する。検出及び動作エンジン10は、ワイドレコード内の作動イベントを検出することにより、特定の加入者がイベントトリガ19を満たしたことを特定し、その作動イベントに関連付けられる加入者を(加入者IDを介して)特定する。
【0019】
この例では、加入者が(例えば、イベントレコード内のSMS利用イベント集計により指定されるように)過去2日間に少なくとも50件のSMSメッセージを消費すると、イベントトリガ13が実行される。イベントトリガ13は、提案されたリロードアクション14を実行し、これにより、検出及び動作エンジン10は、この特定の加入者に対してリロードするように促す。加入者がリロードを実行すると、その特定の加入者に関するイベントレコードのエントリが、リロードを表すイベントで更新される。このイベントレコードの更新により、アプリケーション12はイベントトリガ15を実行し、これは、リロードが成功すると、アクション16を実行してパケットプロポーザルSMSをその加入者に送信することを明示する。一般に、パケット提案は、パッケージ又はバンドルサービを購入する提案である。
【0020】
ユーザがパケットプロポーザルSMSに対して応答を送信すると、イベントレコードは、その応答を表し、また応答が3時間未満で受信されたことを表すイベントで更新される。検出及び動作エンジン10は、イベントレコード内の更新を検出し、イベントトリガ17が実行されるようにする。イベントトリガ17は、応答が10時間未満で受信された場合、加入者がパッケージ購入を履行したとして、(その特定の加入者に関して)アプリケーションを終了するアクション18を実行することを明示する。イベントレコード内の特定の加入者に関するエントリが、その特定の加入者がアクション16に対する応答を送信しなかったことを明示すると、アプリケーション12は、その特定の加入者に関してアプリケーションを終了するアクション25も明示する。
【0021】
ある例において、イベントレコード内の特定の加入者に関するエントリは、その加入者がリロードを実行しなかったことを、例えばリロードイベントの不存在を通じて、又はリロードの不存在を明示する派生イベントを通じて明示する。この例では、アプリケーション12は、例えば、ユーザが次の3時間以内にリロードを実行するか否かをモニタするために、3時間待機するイベントトリガ23を明示する。この3時間が経過すると、イベントトリガ23は、加入者に対してリロードのリマインダSMSを送信するというリマインダアクション24が実行されるようにする。加入者がリマインダSMSに応答しない場合、アプリケーション12は、その特定の加入者に関してアプリケーションを終了するアクション26を明示する。
【0022】
アクション20に応答して、特定の加入者に関するエントリは、加入者が過去2日間に少なくとも50件のSMSを消費しなかったことを明示してもよい。エントリは、50件のSMSの消費の不存在を明示する派生イベントを通じて、又は消費が50件のSMSより少なかったことを明示するSMS利用集計イベントを通じてこれを明示してもよい。この例では、アプリケーション12は、5日間待機し、その後、リマインダSMSを送信するアクション22を実装するイベントトリガ21を含む。リマインダを送信した後、加入者が依然として(例えば、イベントレコード中でその加入者に関するイベントにより明示されるように)さらに5日間で50件のSMSを消費しなかった場合、アプリケーション12は、顧客回収チームにアラートを送信して(例えば、チームに対し、その消費者がサービスを使用していないことを伝え)、その特定の加入者に関してアプリケーションを終了するアクション28を実行するイベントトリガ27を明示する。
【0023】
図2を参照すると、環境30は、イベントが受信されときに準リアルタイムで異なるタイプのイベントのワイドレコードを生成する。この例では、環境30は、イベントを収集し、イベント内の1つ以上の所定の条件(ルール内で明示される)が満たされたことを検出し、検出されたイベントにとって適当なアクションを実行する収集(Collect)検出(Detect)動作(Act)(CDA)システム32を含む。この例では、CDAシステム32は、データウェアハウス38(及び/又はCDAシステム32のメモリ)内でデータレコードを検索し、バッチデータ40を取得し、また例えば受信されたリアルタイムデータを拡張するために使用されるプロフィールデータを取得するための検索及び取得システムでもある。ある例において、CDAシステム32は、5000万人の加入者について1日あたり20億以上のイベントを処理し、イベントタイプごとに集計を計算する。この例では、CDAシステム32は、データソース36からリアルタイムデータストリーム34を受信する。本明細書で使用される限り、リアルタイムは、その各々についてデータが受信又はアクセスされてから、そのデータの処理が実際に行われたときまでのタイムラグがあってもよいが、データが依然としてデータ受信時にライブタイムで処理される準リアルタイム及び実質的なリアルタイムを含むが、これらに限定されない。リアルタイムデータストリーム34から、CDAシステム32は、イベントを含むデータを間欠的に受信する。受信されたデータは、異なるタイプのイベントも含む。ある例において、リアルタイムデータストリームの第一のストリームは、第一のタイプのイベントを表すデータを含み、リアルタイムデータストリームの第二のストリームは、第二のタイプのイベントを表すデータを含む。CDAシステム32は、リアルタイムデータストリーム34中で受信された異なるタイプのイベントを収集するための収集エンジン42を含む。収集エンジン42は、EDWから抽出されたデータではなく、リアルタイムイベントに作用するため、CDAシステム32は、イベントに対して(それが受信されたときに)、及びイベントの準リアルタイム集計に対して即時の応答を提供することができ、これはまた、アプリケーションの結果を即時に可視化する。収集エンジン42は、イベントを1つのデータストリーム中に収集し、このイベントをキューへマルチパブリッシュする。ある例では、収集エンジン42は、連続的フローを用いてイベントを収集して、受信したイベントを継続的に処理し、これは、米国特許第6,654,907号に記載されているとおりであり、その全内容が参照により本願に援用される。
【0024】
リアルタイムデータストリーム34からのイベントが収集エンジン42によって間欠的に受信され続けるとき、収集エンジン42は、例えばイベントパレット内に含まれるか、又は特定のユーザ属性(例えば、ユーザ識別子(ID)、ユーザキー等)に関連付けられる等、共通の品質を共有する2つ以上の特定のイベントを(例えば、キュー内で)検出する。ある例において、共通の品質は、その2つ以上の特定のイベントの特定のフィールド(例えば、ユーザIDフィールド)のための対応する数値であり、2つ以上の特定のイベントは、明示されたイベントタイプであり、及び/又はその2つ以上の特定のイベントはイベントパレットにより定義される。
【0025】
収集エンジン42は、検出された2つ以上の特定のイベントを含むイベントの集合を作成する。この例では、収集エンジン42は、検出されたイベントの集合を含むイベントレコード46を生成する。収集エンジン42はまた、エンリッチメント及び集計44をイベントレコード46、例えばワイドレコードに挿入する。一般に、エンリッチメントは、(過去において受信されるか又は事前に計算されて)データウェアハウス内に蓄積された、あるイベントに関係するデータである。例えば、イベントは、ユーザが送信したSMSメッセージの数を明示してもよく、またそのユーザのユーザIDを含んでいてもよい。この例では、データウェアハウス38は、同じユーザIDを含む(又はそれに関連付けられる)データを蓄積する。この蓄積データはユーザプロフィールデータを含み、これは、例えば、ユーザの最新のハンドセットのタイプを含む。収集エンジン42は、イベントレコード46に、イベントレコード46に含まれる特定のイベントに関連付けられる顧客に関する顧客プロフィールデータをアタッチ又は挿入する。
【0026】
収集エンジン42は、イベントレコード46に含まれるイベントの1つ以上について、1つ以上の集計(すなわち、イベント集計)も計算する。特定のユーザ(イベントに含まれるユーザIDにより明示される)に関する特定のイベントについて、収集エンジン42は、データウェアハウス38から、その特定のユーザに関するその特定のイベントのバッチデータ40を取得する。バッチデータ40は、特定のイベントに関する履歴集計を含み、履歴集計は、以前の期間、例えば開始時間から、検出イベントの実行前の特定の時間までの期間からのイベントデータの事前計算された集計である。一般に、イベントデータは、あるイベントの特定の品質、属性、又は特徴(例えば、データ利用イベントのためのデータ利用量)を示すデータを含む。例えば、イベントの品質は、特定のフィールド(イベントに含まれる)、イベントに含まれるフィールドの特定の数値、イベントに含まれるか若しくはそれに関連付けられる特定のユーザIDキー、そのイベントに関する特定のフィールド若しくは特定のフィールドの数値の不存在等を含む。特定のユーザに関する特定のイベントのリアルタイムデータストリーム34内に含まれるデータに基づき、及び履歴集計に基づき、収集エンジン42は、結合されたイベントデータ、例えばイベントに関する準リアルタイム集計を計算する。収集エンジン42は、イベントレコード46を少なくとも1つの特定のイベントに関する結合イベントデータでエンリッチ化する。
【0027】
ある例において、イベントレコード46のイベントの1つは、ユーザID 5454hdrmに関連付けられるジョン・ドウのデータ利用である。この例では、収集エンジン42は、データウェアハウス38から、ユーザID 5454hdrmに関連付けられる「データ利用」のイベントに関するバッチデータ40を取得する。この特定のユーザに関するこのイベントに関する準リアルタイム集計を計算するために、収集エンジン42は、バッチデータ40を増分データ41と集計して、このイベントに関する準リアルタイム集計43を計算する。
【0028】
この例では、増分データ41は、リアルタイムデータストリーム34から受信したデータのうち、その特定のユーザについて集計されるイベントタイプに関する部分を含む。増分データ41は、履歴集計が最後に計算された時間から準現在時間、例えば準リアルタイムデータストリームが受信される時間までに発生する。例えば、バッチデータ40は、ユーザであるジョン・ドウが先月に65メガバイトのデータを使用したと明示し、増分データ41は、ユーザであるジョン・ドウが過去5分間で1メガバイトのデータを使用したことを明示する。バッチデータ40を増分データ41と集計することにより、収集エンジン42は、顧客であるジョン・ドウに関するこの特定のデータ利用イベントの準リアルタイム集計43を計算する。収集エンジン42は、例えば、この特定のユーザのこの特定のイベントに関するレコードの一部として、イベントレコード46に準リアルタイム集計43を挿入する。収集エンジン42はまた、イベントレコード46に、例えばバッチデータ40により明示される特定のイベントに関する履歴集計を有するアペンダブルルックアップファイル(ALF)にアタッチする。収集エンジン42は、履歴集計を有するALFをアタッチして、例えば新しいイベントが受信されたときに、新しい準リアルタイム集計を計算する際に履歴集計の使用を促進する。
【0029】
この例では、収集エンジン42は、イベントレコード46を検出エンジン48に送信する。検出エンジン48はルール50を含み、これは、例えば、異なるタイプのエンティティのための各種の異なるアプリケーションを実行するためのルールを含む。検出エンジン48は、各種のアプリケーションを実行するための1つのエンジン及びアプリケーションを含む。この例では、CDAシステム32は、ユーザのクライアントデバイスから、アプリケーションを定義する1つ以上のルールを表すデータを受信する。例えば、ユーザは、イベントパレットを用いてルールを定義してもよい。CDAシステム32は、受信したデータに基づいて、アプリケーションを定義する1つ以上のルールを生成する。CDAシステム32は、これらの1つ以上のルールを、1つ以上のルールを実施するように構成されたプロセス、例えば検出エンジン48に渡す。検出エンジン48は、イベントレコード46に対するルール50の実行に基づいてアプリケーションを実行する。検出エンジン48は、状態遷移53も含み、これは、例えば、ユーザが遷移した又は進んだ先のアプリケーション内の状態を明示するデータを含む。状態遷移53に基づいて、検出エンジン48は、アプリケーション内のいずれのアクションが実行されるか、及び/又はアプリケーション内のいずれの決定ブランチを実行するかを識別する。例えば、その加入者に関する状態遷移53により明示されるようなアプリケーション内の特定の加入者の状態に基づいて、検出エンジン48は、アプリケーションのいずれのコンポーネントがすでに実行されたか、アプリケーションのいずれのコンポーネントを次に実行させるかを、加入者のアプリケーション状態に従って識別する。
【0030】
イベントレコード46は、異なるタイプのイベント、例えばSMSイベント、音声イベント、データイベント等を含む。したがって、ルール50は、各種の異なるタイプのイベントに関する条件を有するルールを含む。一般に、ルールは条件を含み、それを満たすことによってアクションが実行される。この例では、1つのルール(「ルール1」)は、ユーザが過去6カ月間に30件のSMSメッセージを送信したという条件を有していてもよい。この条件を満たすと、ルール1は、そのユーザに$5のクレジットを発行するというアクションを明示する。他のルール(「ルール2」)は、ユーザが前月中に使用したデータが50メガバイト未満であったという条件を有していてもよい。この条件が満たされると、ルール2は、そのユーザに対し、例えば、データ利用増大の動機付けのために利用割引をオファーするというアクションを明示する。この例では、ルール1及びルール2は、いずれも異なるタイプのイベント(すなわち、それぞれSMSイベント及びデータイベント)を使用する。検出エンジン48は、異なるタイプのイベントに依存するルールを含むブログラムを実行でき、それは、イベントレコード46が異なるイベントタイプを含む1つのワイドレコードであるからである。加えて、検出エンジン48は、多数の異なるアプリケーションのためのアプリケーションを実行する1つのエンジンであり、これは、検出エンジン48が、すべての異なる動作レベルのすべてのイベントタイプを含むイベントレコード46を受信するからである。すなわち、検出エンジン48は、異なるイベントレコード(各々が、それぞれのアプリケーションにとって適当なデータのタイプを含む)に対して異なるアプリケーションを実行する異なるエンジンを有するのではなく、1つのワイドレコード、すなわちイベントレコード46に対して複数の異なるアプリケーションを実行するように構成される。
【0031】
イベントレコード46における、ルール50の条件の少なくとも1つを満たすイベント(又はイベントの集計)を検出すると、検出エンジン48は、1つ以上のアクション(例えば、条件が満たされた場合にルールにより明示されるもの)を開始するために、アクショントリガ51をキュー52にパブリッシュする。ある例では、アクショントリガは、いずれのアクションを実行するか、それらがいずれのアプリケーションのために実行されているか、及びユーザ(例えば、そのためにアクションが実行される加入者又はディーラ)を明示するデータを含む。検出エンジン48は、アクショントリガ51中で明示されたアクションを実行するためのキュー52をアクションエンジン54に送信する。この例では、アクションエンジン54は、各種のアクション、例えばクレジットをユーザアカウントに発行すること、メッセージを送信すること、割引きメッセージを送信すること等を実行するように構成される。
【0032】
典型的に、データストリームから収集されたデータは、CDAシステムが処理を行うのに必要なすべての情報、例えばユーザ名及びプロフィール情報を含んでいるとは限らない。このような場合、データ(すなわち、データストリームから収集されたデータ)は、プロフィールデータをリアルタイムデータストリーム内で受信されたデータと結合することにより、及び準リアルタイム集計を計算することにより拡張される。プロフィールデータをリアルタイムデータストリームからのデータと結合することにより、及び準リアルタイム集計を計算することにより、検索及び取得システムは、検索及び取得システムの処理要件に合わせた有意義なデータレコード(例えば、キーに関連付けられる受信された準リアルタイムデータ、そのキーに関するプロフィールデータ、そのキーに関する準リアルタイム集計を含むもの)を生成する。一般に、処理要件は、システムによって実行される各種の動作(及び/又は実行されるルール)及びこれらの動作の実行に必要な各種のデータを含む。加えて、イベントレコード内のイベントの各々に対応するデータが事前投入された「全イベント」又はフィールド(及び/又は所定のフィールド群)を含むデータレコードのこのような事前計算又生成は、ネットワークのボトルネック箇所、例えば、リアルタイムデータストリームの処理時の輻輳を回避し、緩和するのに役立つ。これは、処理に必要なデータのすべてが1つのレコード(例えば、複数のレコード中の1つのレコード)に含まれているからであり、例えば、そのようにして、データレコード又はレコードの集合の処理における各ステージ又はステップでのデータ取得、計算、及びデータベースクエリを排除又は減少させる。加えて、CDAシステム内のメモリ又はキャッシュされたインデックス内にエンハンスメントデータ(例えば、プロフィールデータ)の多くを保存することにより、システムは、それが事前計算された(複数のレコードの)レコードを生成する際、そのデータにより迅速にアクセスできる。
【0033】
例えば、本明細書に記載のシステムは、システムが例えば他の時点での負荷と比較して軽い負荷を受けているときに、エンリッチメント及びエンハンスメントデータをメモリ内に(又はインデックス付きキャッシュ内に)ロードするように構成される。システムは、システムが他に軽減された負荷を受けているときに、エンハンスメントデータをプリロードする柔軟性を有するため、システムは、例えば、データレコードの処理が行われるとき(及び負荷が増大している期間である)にリアルタイムでそれを行わなければならないのではなく、負荷が軽いときにエンハンスメントデータをメモリにロードすることにより、負荷を分散させることができる。
【0034】
図3を参照すると、イベントレコード60は、フィールド62a、62b、及びサブレコード62c~62iを含む。変形形態では、各サブレコード62c~62iは、レコード(又はその一部)を挿入するためのフィールドである。この例では、イベントレコード60は、例えば、あるキーに関連付けられる受信された準リアルタイムデータ、そのキーに関するプロフィールデータ、及びそのキーに関する準リアルタイム集計を含むエンハンストデータレコードを含む。一般に、サブレコードは、あるレコード内のレコードである。そのため、サブレコード自体が複数のフィールドを含む。この例では、イベントレコード60は、例えばイベント検出を実行する中でシステムにより処理及び分析されるすべてのフィールド及び/又はサブレコードを含む。
【0035】
この例では、イベントレコード60は、このイベントレコードにより表されるイベントに関連付けられる加入者を一意的に識別する加入者IDのためのIDフィールド62aを含む。イベントレコード60は、このイベントレコードがそのために生成される準リアルタイムデータストリーム中で検出されたイベントのタイプを明示するためのイベントタイプフィールド62bも含む。イベントには様々な異なるタイプがあり、例えば、データイベント、音声イベント、SMSイベント等である。この例では、イベントタイプは、例えば、最後に受信したデータ中で明示されているような加入者の音声イベントである。この例では、CDAシステム32は、リアルタイムデータストリーム34を受信し、リアルタイムデータストリーム34において、特定の加入者IDに関連付けられる加入者に関する音声イベントを検出する。それに応答して、CDAシステム32は、イベントレコード60を生成し、検出された加入者IDを挿入し(例えば、加入者IDの「1Q7QF」がIDフィールド62aに挿入される)、検出されたイベントタイプ(例えば、音声イベント)をイベントタイプフィールド62bに挿入する。この例では、音声イベントは、加入者による現在の音声利用を示すデータを含む。この例では、加入者の音声利用を示すデータは増分データであり、それは、これがこの特定のイベントのための利用の増加量(例えば、この特定のエンティティに関する特定のイベントのための、現在時間からこのイベントに関するデータが前回データウェアハウス38にバッチで記憶されたときまでの間の音声利用の量)を表すからである。
【0036】
イベントレコード60は音声イベントサブレコード62cを含み、これは、音声イベント自体の品質又は特徴を明示するデータ、例えば、その音声イベントが発生した地理位置(例えば、地理位置:イスタンブール)、その音声イベントが受信された時間(例えば、受信時間:12:00:01)、及び音声イベントの持続時間(例えば、持続時間:42分07秒)等を記憶するためのフィールドを有する。
【0037】
イベントレコード60は、他のタイプのイベント(例えば、SMS及びデータイベント)のためのイベントサブレコードも、これらの他のタイプのイベントが検出されない場合でも含む。この例では、イベントレコード60はSMSイベントサブレコード62d及びデータイベントサブレコード62eを含み、その各々は「なし」の数値を有し、これは、これらのタイプのイベントが、イベントレコード60がそのために生成された検出イベント内に含まれていないことを明示する。しかしながら、イベントレコード60は、イベントレコード60が生成される特定の時点におけるすべてのイベントタイプの状態の完全なレコードを構築するために、SMSイベントサブレコード62dとデータイベントサブレコード62eとを含む。
【0038】
イベントレコード60は、加入者プロフィールを挿入するための加入者プロフィールサブレコード62fも含む。この例では、CDAシステム32は、データウェアハウス38から、IDフィールド62aに含まれる加入者IDにより表される加入者に関する加入者プロフィールを取得する。CDAシステム32は、取得された加入者プロフィール(例えば、イベントのディメンション)を加入者プロフィールサブレコード62fのフィールドに挿入する。この例では、加入者プロフィールサブレコード62fは、
図3の例示的な例に示されているように、プランフィールド、アドレスフィールド、及び発信日フィールドを含む。
【0039】
イベントレコード60は、各種のエンリッチメント及びイベント集計を挿入するためのエンリッチメントサブレコード62gも含む。この例では、エンリッチメントサブレコード62gは、準リアルタイム音声、データ、及びSMS集計を含む。この例では、音声集計は、例えば音声イベントサブレコード62cの持続時間フィールドに明示されているような、この特定のユーザに関する音声利用の履歴(例えば、バッチ)集計と増分音声利用とに基づく。データ集計は、EDWにコミットされるのではなく、CDAシステム32のメモリに蓄積されている履歴データ利用及びその日の増分データ利用を明示するバッチデータに基づいている。SMS集計は、CDAシステム32のメモリに蓄積されている履歴SMS利用及びその日の増分SMS利用を明示するバッチデータに基づいている。ある例では、リアルタイムデータストリーム内で受信されたテータは(例えば、CDAシステム32の)メモリに記憶され、その後、例えば1日の終わり等、明示された時間間隔でEDWストレージにコミットされる。イベントレコード60のエンリッチメントサブレコード62gのためのデータ集計を特定することにおいて、CDAシステム32は、バッチデータをメモリ内にある増分データ(特定の加入者に関するデータ利用を明示する)と集計する。イベントレコード60が音声イベントについて生成されても、エンリッチメントサブレコード62gには依然としてデータ及びSMS集計が投入され、これは、これらの集計がアプリケーションの実行に必要であり得るからである(例えば、アプリケーションの特定のコンポーネントが、データ及び/又はSMS集計に基づく実行のための条件を有する場合)。
【0040】
イベントレコード60は、加入者が遷移した先のアプリケーション内の状態を明示するアプリケーション状態サブレコード62iも含む。この例では、アプリケーション状態サブレコード62iは、複数の異なるアプリケーションのいずれのアプリケーションが実行されているか(すなわち、アプリケーション29a)、及びそのアプリケーションのいずれのコンポーネントが実行されているか(すなわち、コンポーネント23b)を明示する状態フィールドを含む。ある例では、アプリケーション状態は、サブレコード62iを介して追跡される。アプリケーション状態は、ロジックにとって有意義であり、状態は、特定の種類のアプリケーションの実装に必要である。
【0041】
図4を参照すると、データフローグラフ70は、リアルタイムデータストリームに含まれるデータ項目に対してプロセスを実行する。この例では、CDAシステム32は、イベントレコード60等のイベントレコードの生成において、及びイベントレコードをプロフィールデータ及び集計でエンリッチ化することにおいて、データフローグラフ70を実行する。データフローグラフ70は、複数のデータ処理エンティティ(例えば、1つまた複数のCPU)を表す複数のグラフ構成要素を有し、これらは、データ処理エンティティ間のデータの流れを表す1つ以上のリンクにより接続される。データフローグラフ70は、あるソースデータリーダ又は複数のソースデータリーダに加入する(例えば、それからデータを受信する)加入コンポーネント72を含む。加入コンポーネント72を通じて、データフローグラフ70は、リアルタイムデータストリームに含まれるデータ項目にリアルタイムでアクセスする。この例では、加入コンポーネント72は、データキュー(例えば、その読み取りやすさを確保するために、データストリームに対してある初期処理を実行してもよい)からリアルタイムデータストリーム(例えば、数千のレコードを含む)を受信する。データは、加入コンポーネント72からパーティションコンポーネント74へ流れ、これは、データフロー中で受信したデータ項目(イベントを含む)をイベントタイプにより区切るか又は分割する。この例では、パーティションコンポーネント74は、イベントパレット内で定義されている異なるタイプのイベントを検出するように構成され、様々なタイプのイベントを特定のタイプのイベントを処理するように構成された他のコンポーネントへと区切る。
【0042】
この例において、データフローグラフ70は、利用イベントコンポーネント76、イベントコンポーネント78、システムイベントコンポーネント80、及びイベントコンポーネント82を含む。データは、パーティションコンポーネント74から、イベントコンポーネント76、イベントコンポーネント78、システムイベントコンポーネント80、及びイベントコンポーネント82の1つ以上へ流れる。
【0043】
利用イベントコンポーネント76は、利用イベントを処理するための動作を含み、これには、例えば、SMS利用、音声利用、データ利用の量を明示するイベントが含まれる。これらの動作は、イベントを含むレコードのいずれの部分が利用量を明示するデータを含んでいるか、及びレコードのいずれの部分が、ユーザID又はユーザを一意的に識別する他のタイプのデータを明示するデータ等、他のタイプデータを含むかを識別する。
【0044】
この例において、加入者イベントコンポーネント78は、例えば、顧客又は加入者に関するイベントを含む加入者イベントを処理するための動作を含む。各種のタイプの加入者イベントがあり、これには、例えば、アクティベーションイベント(すなわち、ユーザがいつモバイルデバイスを作動させたか)、位置イベント(すなわち、ユーザがモバイルデバイスをいずれの地理的位置から使用するか)等が含まれる。加入者イベントコンポーネント78に含まれるこれらの動作は、加入者イベントを含むレコードを分析して、レコードのいずれの部分が加入者イベントを含んでいるか、及びレコードのいずれの部分が識別ユーザデータを含むかを識別する。
【0045】
システムイベントコンポーネント80は、例えば、ユーザのシステムとの対話に関するイベントを含むシステムイベントを処理するための動作を含む。システムイベントには各種のタイプがあり、これには、例えば、加入者沈黙日数、加入者履行応答等を明示するイベントが含まれる。システムイベントコンポーネント80に含まれるこれらの動作は、システムイベントを含むレコードを分析して、レコードのいずれの部分がそのシステムイベントを含むか、及びレコードのいずれの部分が識別ユーザデータを含むかを、このデータをワイドレコードに挿入する準備のために識別する。
【0046】
イベントコンポーネント82は、例えば、ディーラ又は小売店に関するイベントを含む特定のタイプのイベントを処理するための動作を含む。ディーライベントには様々なタイプがあり、これには、例えば、ディーラの売上、販売された製品等を明示するイベントが含まれる。イベントコンポーネント82に含まれるこれらの動作は、イベントに含まれるレコードを分析して、レコードのいずれの部分がそのイベントを含むか、及びレコードのいずれの部分が識別データを含むかを、このデータをワイドレコードに挿入する準備のために識別する。
【0047】
データフローグラフ70は、派生イベントを識別するための動作を含む派生イベントコンポーネント84も含む。一般に、派生イベントは、他のデータから派生し、及び/又はある事象から若しくは事象の不存在から派生するイベントを含む。派生イベントには様々なタイプがあり、これには、例えば、加入者音声沈黙日数、加入者SMS沈黙日数、加入者データ沈黙日数等を明示するイベントが含まれる。この例では、派生イベントコンポーネント84は、これらの派生イベントを特定するための動作を含む。ある例では、CDAシステム32は、リアルタイムデータストリーム中で受信したイベント内において、特定のユーザに関する特定のタイプのイベント(例えば、SMS利用)の不存在を検出することにより、これらの派生イベントを特定する。検出すると、CDAシステム32は、閾値期間にわたりその特定のイベントの不存在があったか否かを特定して、派生イベントの存在を検出する。閾値期間中に不存在があったか否かを特定するために、CDAシステム32は、データレポジトリからその特定のユーザに関するデータ、例えば前回発生したイベントを明示するデータを取得する。閾値期間中にその特定のイベントの不存在があった場合、CDAシステム32は派生イベントを検出する。この例では、CDAシステム32は、受信するリアルタイムデータストリーム中のデータ(又はその欠如)に基づいて、及びデータレポジトリ中に蓄積された他のデータ(イベント)に基づいて、ユーザ(例えば、加入者、ディーラ等)の1つ以上に関する派生イベントを検出する。
【0048】
この例において、データフローグラフ70は、結合動作を実行する結合コンポーネント86を含む。「結合」動作は、様々なタイプのデータ、例えばイベントコンポーネント76、78、80、82、84からのイベントを結合する。この例では、データは、イベントコンポーネント76、78、80、82、84から結合コンポーネント86へ流れ、これがイベントをワイドレコード中で結合する。この例では、イベントコンポーネント76、78、80、82、84の各々は、そのイベントに関連付けられるエンティティを一意的に識別するデータ、例えばそのエンティティのためのユーザID等に関連付けられるイベントを結合コンポーネント86に送信する。
【0049】
この例において、データは、結合コンポーネント86から加入者エンリッチメントコンポーネント87へ流れ、これは、ワイドレコードを特定のタイプのエンティティ、すなわち加入者に関するプロフィールデータでエンリッチ化するための動作を含む。この例では、結合コンポーネント86から加入者エンリッチメントコンポーネント87へ流れるデータは、ワイドレコード中のいずれのイベントが加入者イベントであるか、及び例えばこれらの加入者に関する加入者プロフィールのルックアップを可能にするためのその加入者イベントに関連付けられるユーザIDを明示するデータである。ワイドレコード中に含まれる特定のイベントについて、加入者エンリッチメントコンポーネント87に含まれる動作は、そのイベントに関するユーザIDを用いて、ユーザIDにより明示されるユーザに関するプロフィールデータを(データレポジトリから)取得する。加入者エンリッチメントコンポーネント87は、取得したプロフィールデータを例えばイベントと共にワイドレコードに挿入する。
【0050】
データは、エンリッチコンポーネント87からエンリッチコンポーネント88へ流れ、これは、ワイドレコードを他の特定のタイプのエンティティ、すなわちディーラに関するプロフィールデータでエンリッチ化するための動作を含む。この例では、エンリッチメントコンポーネント87からエンリッチメントコンポーネント88へ流れるデータは、ワイドレコード中のいずれのイベントが特定のタイプのイベントであるか、及び例えばそのエンティティに関連付けられるプロフィールのルックアップを可能にするための、(これらの特定のタイプのイベントに関連付けられる)特定のエンティティに関連付けられるユーザID(すなわち、ディーラID)を明示するデータである。プロフィールには様々なタイプのデータが含まれ、これには、例えば、エンティティが好ましいベンダであるか否か、エンティティがチェーンの一部であるか否か、及びそうである場合にいずれの一部であるか等を明示するデータが含まれる。ワイドレコードに含まれる特定のイベントについて、エンリッチメントコンポーネント88に含まれる動作は、そのイベントに関するユーザIDを用いて、そのユーザIDにより明示されるディーラに関するプロフィールデータを(データレポジトリから)取得する。エンリッチメントコンポーネント88は、取得されたプロフィールデータを、例えばそのエンティティに関するイベントと共にワイドレコードに挿入する。
【0051】
データは、エンリッチメントコンポーネント88から利用集計コンポーネント90へ流れ、これは、例えば、利用イベントを含む様々なタイプのイベントに関する準リアルタイム集計を計算するための動作を含む。特定のユーザ(例えば、加入者又はディーラ)に関する特定のイベントについて、利用集計コンポーネント90は、そのユーザのバッチデータ(例えば、バッチで蓄積された事前計算された集計を明示するデータ)を取得し、増分データ(例えば、リアルタイムデータストリーム内で受信した1つ以上のイベント)をバッチデータに付加して、準リアルタイム集計を計算する。利用集計コンポーネント90は、ワイドレコード中に、例えば特定のユーザの特定のイベントに関する計算された準リアルタイムイベント集計を挿入する。ある例において、利用集計コンポーネント90はまた、各種の時間間隔(例えば、毎日、毎週、毎月等)でワイドレコードに、集計(例えば、音声集計、データ集計、リロード集計等)を有するALFファイルをアタッチする。一般に、リロードは、プリペイド式の通話又はモバイルサービスプランに追加の金銭、分、及び/又はデータを追加することである。
【0052】
この例において、ミニバッチ方式で(例えば、N分ごとに)計算され、ワイドレコードに追加される、例えばカレンダ集計(例えば、1日、1週間、1カ月等のイベント集計)を含む各種の異なるタイプの集計がある。一般に、ミニバッチは、明示された時間間隔(例えば、N分ごと)に発生し、データウェアハウス内に(バッチで)蓄積されるイベントデータの事前計算集計を含む。データウェアハウス内のカレンダ集計は、その特定のカレンダ集計のための最新のミニバッチ集計が含まれるように継続的及び/又は定期的に更新される。一般に、ミニバッチ集計は、バッチ集計より頻繁に行われ、バッチ集計は、例えば、ミニバッチ集計のように3分ごとではなく、3日ごとに行われる可能性がある。ミニバッチ集計はより頻繁に行われるため、これらのタイプの集計は、より小さいバッチのデータを集計する。また、範囲限定集計(例えば、過去1分間、過去N時間、過去N日間等)もあり、これらは、イベントが入力されるときにエンリッチメント中に計算され、またワイドレコードにも追加される。範囲限定集計は、EDWにコミットされるのではなく、CDAシステム32のメモリに蓄積され、したがってイベントが到着するときにリアルタイムで計算される。
【0053】
データは、集計コンポーネント90からパブリッシュコンポーネント92へ流れ、これはワイドレコードを、例えば複数の異なるアプリケーションがワイドレコードに対して実行されるようにするためのキューにパブリッシュする。ワイドレコードをキューにパブリッシュすることにより、(ワイドレコード内の)サブレコードの各々は、キューにエントリとして含められ、これは、各種のアプリケーションがキューのエントリに対して実行されるからである。
【0054】
変形形態では、データフローグラフは、例えば、収集動作からの各種のフォーマットが共通のペイロードに変換される場合、結合コンポーネントを含んでいなくてもよい。この例では、具体的なイベントフォーマットを認識する必要がないため、結合コンポーネントがない。ある例では、データフローグラフ70は、範囲限定集計計算も実行し、カレンダ(例えば、バッチ)集計は、エンリッチメント(例えば、コンポーネント87、88)の外で別々に実行される。
【0055】
この例において、データフローグラフ70は頂点(データ処理コンポーネント又はデータセットを表す)を含み、これらは、頂点間で方向を有するリンク(ワークエレメント、すなわちデータの流れを表す)により接続される。このようなデータフローグラフを作成するためのシステムは、「Executing Computations Expressed as Graphs」という名称の米国特許第5,966,072号に記載されており、その内容全体が参照により本願に援用される。このシステムに従って作成されるデータフローグラフは、グラフのコンポーネントによって表される個々のプロセスへの且つそれからのデータを取得するため、データをプロセス間で移動させるため、及びプロセスの実行順序を定義するための方法を提供する。このシステムは、利用可能なあらゆる方法からプロセス間通信方法を選択するアルゴリズムを含む(例えば、グラフのリンクに従う通信経路は、TCP/IP又はUNIXドメインソケットを使用して、又は共通メモリを使用して、プロセス間のデータの受け渡しを行うことができる)。
【0056】
本明細書に記載されているプロセス又は方法は、コンピューティングシステムにより実行でき、このコンピューティングシステムは、データストレージに連結された開発環境であって、データフローグラフに関連付けられる、1つ以上の入力データセットからグラフコンポーネントのグラフを通って1つ以上の出力データセットへ流れるデータに対して実行されるグラフベースの計算を実装するデータ処理アプリケーションを構築するように構成され、データフローグラフがデータストレージ内のデータ構造により明示され、データフローグラフが、1つ以上のリンクにより接続されたグラフコンポーネントを表す複数のノードを有し、リンクがデータ構造により明示されて、グラフコンポーネント間のデータの流れを表す、開発環境、及び/又は1つ以上のコンピュータ上にホストされるランタイム環境であって、データフローグラフを明示する蓄積されたデータ構造を読み、グラフコンポーネントの計算を実行するためのコンピューティングリソースを割り当て、構成するように構成された前置実行モジュールを含み、データフローグラフに割り当てられた計算の実行をスケジュールし、制御するための実行モジュールを含むランタイム環境を含む。
【0057】
次に、
図5~14を参照すると、イベントパレット内に各種のイベントを表示する各種のグラフィカルユーザインタフェースが示されている。(イベントパレットを通じて示される)これらのイベントの各々は、イベントレコード中(適当なフィールド又はサブレコード中)に含まれていてもよい。このようにすべてのイベントをイベントレコードに含めることにより、ユーザは、アプリケーションを各種のイベントに基づいて定義して、その定義されたアプリケーションをイベントレコードに対して実行することが可能であり(適当なデータをデータベースに問い合わせなければならないのではない)、これは、イベントレコードが、イベントパレット内にアプリケーションの定義に使用可能なイベントのすべて(又はその一部)を含んでいるからである。
【0058】
図5を参照すると、グラフィカルユーザインタフェース100がイベントパレット内に含まれている。この例では、イベントパレットは、1つ以上のルールを定義する中で使用されてもよい利用可能な所定のイベントを表示する一連のグラフィカルユーザインタフェースを含むアプリケーションである。この例では、ルールは、前提条件を定義する表現を含み、それが満たされるとアクションが実行される。イベントパレットを通じて、ユーザは、あるイベントに基づく表現を定義してもよい。例えば、表現は、特定のイベントが閾値又は所定の数値に到達することであってもよい。この表現に関して、ユーザは、表現が満たされたときに実行されることになる1つ以上のアクションも定義してよい。
【0059】
この例では、グラフィカルユーザインタフェース100は、ルールのための表現を定義するために使用されてもよい各種の入力、並びに検出されたイベントの属性を示すデータを表示する。現在時間属性102aは、現時点又は現在の時間を示すデータを表示する。イベント時間属性102bは、あるイベントが最後に検出された時間を示すデータを表示する。イベント時間属性102bが選択されると、ユーザは、最後に検出されたイベントを見ることができる。イベントタイプデータ102cは、ルールの定義で使用するために利用可能な各種のタイプのイベントを示すデータを表示する。これらのイベントは、例えば、加入者レベル及びディーラレベルを含む各種のレベルで検出される。イベントタイプデータ102cを選択すると、様々な異なるタイプのイベントのリスト107が表示される。この例では、デバイスがいつ作動されたかを明示する作動イベント、エンティティがモバイルデバイスプランを変更したことを明示するプラン変更イベント、ユーザがモバイルデバイスを使用しなかった日数を明示する沈黙日数イベント、ユーザがモバイルデバイスを変更したことを明示するハンドセット変更イベント等がある。
【0060】
グラフィカルユーザインタフェース100は、ディーラID又は加入者ID等、エンティティに関するキーを表示するキーデータ102dも含む。すなわち、キーデータ102dは、グラフィカルユーザインタフェース100が実際のイベントを閲覧するために使用されるとき、それについてのあるイベントがグラフィカルユーザインタフェース100内で閲覧されている特定のエンティティに関するキー又はユーザIDを示すデータを表示する。この例では、ユーザは、様々な異なるキーをスクロールして(又は選択して)、これらのそれぞれのキーに関連付けられる各種の異なるイベントを閲覧してもよい。特定のキーを選択すると、各データ又はデータフィールド102a~102mがその特定のキーに関する数値を表示するように更新される。
【0061】
この例において、グラフィカルユーザインタフェース100により、ユーザは、例えば図示されていないコントローラを用いて、検出されたイベントを閲覧できる。ユーザが特定の検出イベントを閲覧するとき、キーデータ102d(例えば、更新された識別子)が、閲覧されているイベントに関するIDを表示するように更新される。ユーザが他の異なるイベントを選択すると、キーデータ102は、他の異なるイベントに関するIDを表示するように更新される。グラフィカルユーザインタフェース100はアプリケーション状態データ102eを含み、これには、例えば、あるアプリケーションの開始及び終了時間を明示するデータ、特定のアプリケーションのために実行されたアクションの数等が含まれる。
【0062】
グラフィカルユーザインタフェース100は、加入者プロフィールデータ102fも含み、これを選択すると、ワイドレコードに入力され、ルールの定義に使用できる様々な種類の加入者プロフィールデータが表示される。グラフィカルユーザインタフェース100は、加入者イベント102gも含み、それを選択すると、ワイドレコードに挿入され、ルールの定義に使用できる様々な種類の加入者イベントが表示される。グラフィカルユーザインタフェース100は、加入者シンセティックイベント102hも含み、それを選択すると、ワイドレコードに挿入され、ルールの定義において利用できる様々な種類の加入者シンセティックイベントが表示される。一般に、シンセティックイベントは派生イベントである。グラフィカルユーザインタフェース100は、加入者集計102iも含み、それを選択すると、各種の加入者イベントに関する準リアルタイム集計が表示される。
【0063】
グラフィカルユーザインタフェース100は、プロフィールデータ102jも含み、これを選択すると、ワイドレコードに挿入され、ルールの定義に使用できる様々な種類のプロフィールデータが表示される。グラフィカルユーザインタフェース100は、イベント102kも含み、これを選択すると、ワイドレコードに挿入され、ルールの定義に使用できる様々な種類のイベントが表示される。グラフィカルユーザインタフェース100は、シンセティックイベント102mも含み、これを選択すると、ワイドレコードに挿入され、ルールの定義に使用できる様々な種類のシンセティックイベントが表示される。グラフィカルユーザインタフェース100は、集計102lも含み、これを選択すると、各種のイベントの準リアルタイム集計が表示される。この例では、ワイドレコードはイベント102gを含む。特定の加入者イベントについて、ワイドレコードは、その加入者のプロフィール、並びにシンセティックイベント及び集計も含む。ワイドレコードはイベント102kを含む。あるエンティティに関連付けられる特定のイベントについて、ワイドレコードは、そのエンティティのプロフィール、並びにそのエンティティのシンセティックイベント及び集計も含む。
【0064】
図6を参照すると、グラフィカルユーザインタフェース110は、イベントパレット内に含まれるイベント112を表示する。この例では、加入者プロフィールデータ114は、プロフィールデータ114a、ハンドセットデータ114b、付加価値サービス(VAS)データ114c(例えば、リングトルネ)、残高データ114d、保険データ114e、及び追加オファーデータ114fを含む。これらのタイプのデータの各々は、様々なタイプのサブデータ、例えば、データ114a~114fにより表されるカテゴリの1つに分類される、より詳細な、すなわち詳しいデータを含む。
【0065】
この例において、ハンドセットデータ114bは、詳細データ116、すなわち加入者番号、移動局国際加入者ディレクトリ番号(MSISDN)、ブランド、機種、国際移動体装置識別番号(IMEI)、国際移動体加入者識別番号(IMSI)、ターゲットセグメント、及び汎用パケット無線サービス(GPRS)を含む。この例では、様々なタイプの詳細データ116は、様々なタイプのユーザデータに関する特定のユーザレコードの実値を表示する。この例では、加入者番号データは数値116aを表示しており、これは、グラフィカルユーザインタフェース110を介してそれに関するイベント及びデータが閲覧されている特定の加入者の加入者番号の数値である。グラフィカルユーザインタフェース110は、プロフィールデータ114aに関する詳細データ118も表示して、発信エンティティ及び作動日等、詳細なプロフィール特定データを提供する。この詳細データ116、118は、加入者イベントに関連付けられるワイドレコード中に加入者イベントへのエンリッチメントとして含められる。
【0066】
図7を参照すると、グラフィカルユーザインタフェース120は、イベントパレット内に含められ、イベント122を含む。この例では、プロフィールデータ124は、詳細データ126、例えば名前、MSISDN、アドレス等を含む。この詳細データ126は、あるイベントに関連付けられるワイドレコードに含められる。
【0067】
図8を参照すると、グラフィカルユーザインタフェース130は、イベントパレットに含められ、ルールの定義に使用でき、ワイドレコードに含められる異なるタイプの加入者イベント132を表示する。加入者イベント132は、作動イベント132a(ユーザが電話を作動したかを明示する)、追加オファーイベント(ユーザが追加オファーに応答したか否かを明示する)、データ利用イベント132c(ユーザのデータ利用量を明示する)、ハンドセット変更イベント132d(ユーザがハンドセットをアップグレード又は変更したか否かを明示する)、購入イベント132e(ユーザが購入したか否かを明示する)、プラン変更イベント132f(ユーザがデバイスプランを変更したか否かを明示する)、ラッフル登録イベント132g(ユーザがラッフル登録を行ったか否かを明示する)、リロードイベント132h(ユーザがモバイルカード又はモバイルデバイスをリロードしたか否かを明示する)、残高イベント132i(アカウント残高の残りの金額を明示する)、SMS返信イベント132j(ユーザがSMSメッセージに返信したか否かを明示する)、SMS利用イベント132k(SMS利用量を明示する)、音声利用イベント132l(音声利用量を明示する)、VASイベント132n及びクーポンイベント132oを含む。これらの加入者イベントの各々は、それに関いてこれらのイベントが検出された加入者の加入者プロフィール及び加入者IDと共に、及びこれらのイベントのイベント集計と共にイベントレコードに含められる。
【0068】
図9を参照すると、グラフィカルユーザインタフェース136は、作動イベント132aの様々なタイプ138を表示する。例えば、1つのタイプの作動イベントは、作動処理日であり、これは、加入者の作動が処理された日を明示する。この例では、特定の加入者レコードからのライブの数値(すなわち、2014-06-26 10:55:28)が作動処理日イベントの横に示され、これは、ユーザが、そのユーザがルールを定義しているときにレコード(例えば、ワイドレコード)の実際のイベントの数値を見ているからである。前述のように、ユーザは、様々なレコードの実際のイベント数値をスクロールしてもよい。
【0069】
図10を参照すると、グラフィカルユーザインタフェース140は、残高イベント132iのタイプ142を表示する。この例では、これらの残高イベント132iは、例えば、各種の加入者について検出されたときにワイドレコード中に含められる。
図11を参照すると、グラフィカルユーザインタフェース150は、ワイドレコードに含めるための追加オファーイベント132bの様々なタイプ152を表示する。
図12を参照すると、グラフィカルユーザインタフェース160は、ワイドレコードに含められるハンドセット変更イベント132dのタイプ162を表示する。
【0070】
図13を参照すると、グラフィカルユーザインタフェース170はイベント171を含む。この例では、様々なタイプのシンセティックイベント172が示されており、これには、沈黙日数イベント174(これは、ユーザがモバイルデバイスを使用しなかった日数を明示する)、履行応答イベント176(これは、ユーザがオファーを履行又は受け入れたか否かを明示する)、猶予日イベント178(これは、ユーザが支払又は他の要求されているアクションの実行を、リマインダ又は他のアクションがとられるまでに猶予される日数を明示する)、無イベント180(これは、指定の期間内にいかなるイベントも不存在であることを明示する - 例えば、加入者が30日間にわたってイベント又はアクションを実行しなかった場合、メッセージを送信する)、及びタイマイベント182(これは、特定の時間が到来したことを明示する)が含まれる。この例では、グラフィカルユーザインタフェース170は、沈黙日数イベント、すなわち活動又はデバイスの利用が全くなかった期間の各種のタイプ179も表示する。沈黙日数イベントには様々なタイプがあり、例えば、リロード沈黙日数、SMS沈黙日数、音声沈黙日数、データ沈黙日数、及び総沈黙日数である。この例では、グラフィカルユーザインタフェース170は、タイマイベント182のためのタイムスタンプ182aも表示する。この例では、シンセティックイベント172は、例えばエンリッチメントサブレコード、加入者シンセティックイベント専用サブレコード(例えば、加入者シンセティックイベントサブレコード)、又はエンリッチメントサブレコード中に含められることにより、加入者に関するイベントレコードに含められる。
【0071】
図14を参照すると、グラフィカルユーザインタフェース190がイベントパレットに含められ、これにより、ユーザは、ルールの定義において各種のイベント集計を選択できる。この例では、グラフィカルユーザインタフェース190はイベント192を含み、これには、加入者集計194が含まれる。前述のように、加入者集計は、特定の加入者イベントに関する準リアルタイム集計であり、準リアルタイム集計は、その特定の加入者イベントに関するバッチデータと、リアルタイムデータストリーム中で受信されたその特定の加入者イベントに関する増分データとの集計である。この例では、加入者集計194は、データサマリ集計194a(例えば、様々な期間にわたるデータ利用の集計)、リロードサマリ集計194b(例えば、様々な期間にわたるモバイルデバイスリロードの集計)、SMSサマリ集計194c(例えば、様々な期間にわたるSMS利用の集計)、音声サマリ集計194d(例えば、様々な期間にわたる音声利用の集計)、及び月間活動集計194e(例えば、月の期間にわたり行われる集計)を含む。
【0072】
グラフィカルユーザインタフェース190は、音声サマリ集計194dに含まれる様々なタイプのイベントを表示する。これらのタイプのイベントは、1日の音声イベント集計196(例えば、特定の加入者に関する日ベースでの各種のタイプの音声利用の集計)、1週間の音声イベント集計198(例えば、特定の加入者に関する週ベースでの音声利用の集計)及び1カ月の音声イベント集計200(例えば、特定の加入者に関する月ベースでの音声利用の集計)を含む。1日の音声イベント集計196中には各種の異なる集計があり、これには、例えば、1日の総音声集計196a、1日のオンネット通話(例えば、ネットワーク内又はネットワーク上の)音声集計196b、1日のオフネット通話(例えば、ローミング)音声集計196c、及び1日の国際ダイヤル通話(IDD)音声集計196d(例えば、国際電話)が含まれる。1日の総音声集計196aに関して、CDAシステム32はまた、異なるタイプの1日の総音声集計、例えば1日の音声通話204(例えば、日ベースでの特定の加入者に関する音声通話の量を明示するデータ)、1日の音声消費206(例えば、日ベースでの音声通話に特定加入者が費やした金額を明示するデータ)、及び1日の音声持続時間208(例えば、特定の加入者に関する1日の通話の長さを明示するデータ)を特定する。これらの各種のタイプの音声サマリ集計194dは、各種のイベントをイベントパレットに含めるために生成中のレコードに追加される。
【0073】
グラフィカルユーザインタフェース190はまた、様々なタイプのリロードサマリ集計194b、例えば、1日のリロードサマリ集計210(例えば、1日に集計された特定の加入者に関するリロードの金額)、1週間のリロードサマリ集計212、及び1カ月のリロードサマリ集計214を表示する。この例では、様々なタイプの1日のリロードサマリ集計210があり、これには、1日のリロード216(例えば、特定の加入者が特定の日にリロードを行った回数)、及び1日のリロード金額218(例えば、1日に特定の加入者が実行したリロードの金額)が含まれる。この例では、これらの各種のタイプのリロードサマリ集計194bは、CDAシステム32により生成中のワイドレコードに追加される。
【0074】
図15を参照すると、CDAシステム32は、イベントベースのマーケティングを実行する際のプロセス220を実行し、その中で、複数の異なるアプリケーション(例えば、アプリケーション又はプログラム)がデータ受信中にリアルタイムデータストリームに対して実行される。動作中、CDAシステム32は、1つ以上のデータストリームからデータを間欠的に受信し(220)、このようなデータはイベントを含む。1つ以上のデータストリームからのイベントが引き続き間欠的に受信されるときに、CDAシステム32は、受信されたイベント内の2つ以上の特定のイベントを検出し(222)、この検出された2つ以上の特定イベントは、共通の品質を共有し、例えばイベントパレット内で定義される。他の例では、共通の品質は、CDAシステム32が特定のエンティティに関するイベントを検出するため、共通のユーザID又はユーザキーとすることができる。CDAシステム32は、検出された2つ以上の特定のイベントを含むイベントの集合を作成(又は更新)する(224)。集合が(例えば、過去に行われたプロセス220内で)すでに作成されている例では、CDAシステム32は、例えば、新たに検出されたイベントで集合を更新する。例えば、CDAシステム32は、検出されたイベントのレコード(例えば、ワイドレコード)を作成する。このレコードにおいて、各イベントは、エンティティID、例えば加入者ID又はエンティティIDに関連付けられる。この例では、エンティティIDは、リアルタイムデータストリーム内でイベントにすでに関連付けられ、CDAシステム32は、エンティティID及びイベントをワイドレコードに挿入する。
【0075】
CDAシステム32は、ワイドレコード内のイベントを、それぞれのイベントに関連付けられるそのエンティティに関するプロティールデータをレコードに追加すること(又はアタッチすること)により、及びイベント集計を追加することによりエンリッチ化する。ある例では、イベントの集合に含まれる少なくとも1つの特定のイベントについて、CDAシステム32は、データレポジトリから、少なくとも1つの特定のイベントに関する履歴集計を取得し(226)、この履歴集計は、過去の期間からのイベントデータの事前計算された集計である。この例において、履歴集計は、開示時間から終了時間までの事前計算された集計である。この事前計算された集計は、(開始時間から終了時間までに発生した個々のイベントから)バッチで計算され、バッチデータと呼ばれる。CDAシステム32は、少なくとも1つの特定のイベントに基づいて、及び履歴集計に基づいて結合イベントデータも計算する(228)。この例では、結合イベントデーは、特定の加入者に関する特定のイベントについての準リアルタイム集計である。
【0076】
準リアルタイム集計は、イベント集計の前回のバッチ計算以降の(この特定の加入者のこの特定のタイプのイベントに関する)履歴集計と、リアルタイムデータストリーム中で受信される(この特定の加入者のこの特定のイベントタイプに関する)増分イベントとに基づく。結合イベントデータの計算時、増分イベントは、準リアルタイムデータストリーム中でそのときに受信されてもよく、又は結合イベントデータの計算が、増分イベントが準リアルタイムデータストリーム内で受信された後、増分イベントがEDWに記憶される前に行われる場合、CDAシステム32のメモリに記憶されてもよい。この準リアルタイム集計は、適当なイベントに関するワイドレコードに他の前述のエンリッチメントと共に挿入される。ルール(複数のアプリケーション及び/又はアプリケーションを定義する)は、このワイドレコード(イベント及びエンリッチメントを含む)に対し、例えばワイドレコードに含まれるサブレコードを、そのルールを実装するルールエンジンを通じて受け渡すことによって実行される。CDAシステム32は、実行されたルールの1つ以上がワイドレコードの内容によって(例えば、ワイドレコード中のサブレコードの1つの内容によって)満たされるか否かを特定する(229)。ルールの前提条件を満たす(特定のエンティティの特定のイベント並びに関係するエンリッチメント及び集計を含む)サブレコードを検出すると、CDAシステム32は、このルールのためのアクションを識別し、いずれのアクションをいずれのエンティティのために実行するかを明示するデータを含むアクショントリガを生成する。結合イベントデータに基づいて、CDAシステム32は、1つ以上のアクションを開始するためのキューにアクショントリガをパブリッシュする(230)。この例において、アクショントリガは、キュー内のエントリである。CDAシステム32は、キュー内のエントリを分析し(例えば、先入れ先出しの順序)、アクショントリガにより明示されたアクション、例えば、エンティティに対して、オファーを認識させるSMSメッセージを送信すること等を実行するか、又はその実行を開始する。
【0077】
アクショントリガをパブリッシュした後、又はCDAシステム32が、実行されたルールのいずれもワイドレコードの内容によって(例えば、ワイドレコード内のサブレコードの1つの内容によって)満たされないと判断すると、CDAシステム32は、アプリケーションの1つ以上が依然として実行中であるか否かを特定する(232)。アプリケーションの1つ以上が依然として実行中であれば、CDAシステム32は、例えば、アプリケーションが実行を停止するまでアクション222、224、226、228、230、232を繰り返す。アプリケーションが実行を停止すると、CDAシステム32は、プロセス220を停止する(234)。
【0078】
図16を参照すると、環境240はイベントベースのマーケティングの例示的な実装を示す。この例では、CDAシステム32は、リスニングプロセス241を(例えば、収集エンジン42に対して)実行し、1つ以上のリアルタイムデータストリームを間欠的に(例えば、継続的に)聞き、受信し、処理する。リスニングプロセス241は、特定の加入者の特定のイベントタイプに関する増分データ242(例えば、1件のメッセージという現在のSMS利用)を受信して処理する。準リアルタイム集計を計算するために、CDAシステム32は、(例えば、データレポジトリから)増分データ242中で表されるイベントのタイプ(例えば、SMSイベント)に関するバッチデータ248を取得する。この例では、バッチデータ248は、増分データ242に関連付けられるエンティティのSMS利用の履歴集計を含む。この例では、CDAシステム32は、(データ242、248に関連付けられる特定のエンティティに関する)集計SMS利用254を、増分データ242をバッチデータ248と集計することによって計算する。変形形態では、CDAシステム32は、例えば新しい増分データが過去に受信されているが、CDAシステム32がこの新たに受信したデータをEDWに記憶させるそのバッチ処理を依然として実行していない場合、CDAシステム32のメモリからSMS利用に関する追加の増分データにもアクセスしてよい。この変形形態では、CDAシステム32は、増分データ242、バッチデータ248、及びメモリ内に蓄積されている追記の増分データを集計することにより、準リアルタイムの集計SMS利用データ254を生成する。
【0079】
CDAシステム32は、(データ242に関連付けられる特定のエンティティに関する)集計音声利用258も、増分音声利用データ(CDAシステム32のメモリに蓄積されている)をバッチ音声利用データ(EDWから取得される)と集計することによって計算する。CDAシステム32は、(データ242に関連付けられる特定のエンティティに関する)集計データ利用データ259も、増分データ利用(CDAシステム32のメモリに蓄積されている)をバッチデータ利用(EDWから取得)と集計することによって計算する。CDAシステムは、集計音声利用258及び集計データ利用データ259を、イベントレコード260に含めて、イベントレコード260が、特定のアクションが集計データ及び/又は音声利用の閾値に依存するようなアプリケーションによって使用可能となるようにするために計算する。
【0080】
CDAシステム32は、イベントレコード260中に加入者IDフィールド242、イベントタイプフィールド244、音声イベントサブレコード246、SMSイベントサブレコード250(現在のSMS利用イベント242を含む)、データイベントサブレコード251、加入者プロフィールサブレコード252、エンリッチメントサブレコード253、及びアプリケーション状態サブレコード261を挿入することによってイベントレコード260を生成し、これらの各タイプのサブレコードは、
図3に関して前述した。この例では、エンリッチメントサブレコード253は、集計SMS利用データ254、集計音声利用データ258、及び集計データ利用データ259を含む。この例では、現在のSMS利用イベント242は、SMSイベントサブレコード250に記憶される。
【0081】
この例において、CDAシステム32は、1つ以上のアプリケーションをイベントレコード260に対して実行し、その1つ以上のアプリケーション内のルールのいずれの前提条件がイベントレコード260によって満たされたかを特定するための検出エンジンを実行する269。この例では、CDAシステム32は、SMSイベントサブレコード250中の現在のSMS利用イベント242が、アプリケーション内のルールの前提条件のうち、顧客をアップグレードするための1つを満たしたことを検出する。この検出に基づいて、CDAシステム32は、明示されたアクションを実行するためのアクショントリガ268を生成する。この例では、アクショントリガ268は、顧客に電子メールを送信し、サービスをアップグレードするためのプロモーションを顧客に知らせるアクションを明示する。CDAシステム32は、電子メール270がユーザに送信されるようにするアクショントリガを実行する。
【0082】
図17を参照すると、プロセス300は、データを処理するための検索及び取得データ処理システムによって実行される。動作中、システムは、1つ以上のデータストリームからデータを間欠的に受信し(302)、受信されたデータは、データレコードを含む。1つ以上のデータストリームからのデータが継続的に受信されているときに、システムは、受信されたデータレコード中の2つ以上の特定のデータレコードを検出し(304)、検出された2つ以上の特定のデータレコードの各々は、特定の識別子を含む。この例では、システムは、キーを伴うレコード、例えば、特定の識別子又はキーに関連付けられるデータレコードを検出する。その特定の識別子について、システムは、検出された2つ以上の特定のデータレコードを含むデータレコードの集合を作成する(306)。データレコードの集合に含まれる少なくとも1つの特定のデータレコードについて、システムは、データレポジトリ(及び/又はメモリ内にキャッシュ又は記憶されたデータ)中のデータレコードから特定の識別子に関連付けられるデータの履歴集計を検索し(308)、履歴集計は、前の期間からの事前計算されたデータ集計である。システムは、少なくとも1つの特定のデータレコードに基づいて、及び履歴集計に基づいて結合データを計算する(310)。この例では、結合データは、エンハンスメントを含み、これは、リアルタイムデータストリームから受信したデータにこの結合データが含まれないからである。
【0083】
システムはまた、データレコードを、結合データをデータレコードのフィールドに挿入することにより、及び集合内のデータレコードの少なくとも1つからのデータをデータレコードの別のフィールドに挿入することにより変更する(312)。例えば、変更されたデータレコードは、すべてのイベントのレコード、例えばイベントレコード60を含んでいてもよい(
図3)。この例では、結合データは、音声集計データであってもよく、エンリッチメントサブレコード62gに挿入されてもよい。この例では、エンリッチメントサブレコードは、イベントレコード60中のフィールドである。他の例では、変更されたデータレコードは、他のレコード又は受信若しくは計算された他のデータを投入すべきフィールドを有するデータレコードを含んでいてもよい。システムはまた、集合内のデータレコードの少なくとも1つからのデータをデータレコードの別のフィールドに挿入する。例えば、集合に含まれるデータレコードの1つが、音声通話の場所、持続時間、及び受信時間を示す音声レコードである場合、システムは、音声レコードからのこのデータをレコード60のフィールド62cに挿入する。この例では、システムは、例えば、レコード60のフィールド62fに挿入されるプロフィールデータとして、レコードに他のエンリッチメント又はエンハンスメントを追加してもよい。
【0084】
また、変更されたデータレコードを、変更されたデータレコードに1つ以上のルールを適用することによって処理するシステムである。ルールを適用することに基づいて、システムは、システムのメモリに1つ以上のアクションを開始するための1つ以上の命令を書き込む(314)。いくつかの例では、命令はアクショントリガを含む。システムは、1つ以上の命令を、1つ以上のアクションを開始するためのキューにパブリッシュする(316)。
【0085】
本明細書に記載の技術を用いて、イベントパレットは、異なるレベル(例えば、ディーラレベル、加入者レベル等)で行われる異なるタイプのイベント(例えば、SMS、音声、データ等)を定義する。これらの事前定義されたイベントを用いて、ユーザ(例えば、分析者)は、イベントパレット内で定義されたイベントの1つ以上が満たされたときに実行されるべき各種のアクションを明示するルールを定義できる。1つのシステムが、これらの各種のタイプの、異なるレベルで行われるイベントに関するルールを含む複数のアプリケーションを実行できるようにするために、システムは、イベントパレットに含まれるイベントのワイドレコードを生成し、これらのイベントをプロフィールデータ及び集計でエンリッチ化して、準リアルタイム集計を実装できる準リアルタイムアプリケーションを提供する。バッチアプリケーションを実装するのではなく、本明細書に記載の技術を用いて実行されリアプリケーションは、大量のデータの集計履歴をリアルタイムで、且つ低レイテンシで生成するマルチイベント型のアプリケーションであり得る。連続フローを介したデータの準リアルタイム処理、ワイドレコードの生成、及びバッチ及び増分によるものの両方の集計の構築を通じて、本明細書に記載のシステムは、より効率的に且つ迅速にデータを集計し、アプリケーションを実行することができ、準リアルタイム集計を用いてマルチイベント型のアプリケーションを実行する際のレイテンシの量が削減される。ある例では、システムは、例えば、レコードをアプリケーションにパブリッシュする前に、特定のキーに関するイベント、エンリッチメント(例えば、プロフィール情報)、及び集計のレコード(例えば、ワイドレコード)を集計し、計算する。そのようにすることにより、システムは、アプリケーションが実行されて、生成されたレコードに適用されているときに、実行時に計算がより高効率となり、例えば、これは、システムがすでに集計を事前計算し、プロフィール情報のクエリを行い、またこの事前計算された情報を処理のためのレコードに含めており、それによってアプリケーションが実行されているときにそのようにすることによって処理にレイテンシを取り入れる必要がないからである。特に、集計の事前計算と、サブレコードの事前生成及び編集と、システムがイベント検出のために解析するように構成されたデータ及びイベントのためのすべてのフィールド(集計のフィールドを含む)及びサブレコードを含む1つのレコードの生成と、さらにこれらのフィールドの少なくともいくつかへの事前計算された集計又はリアルタイム集計(事前計算された集計と増分データを集計することに基づく)の事前投入とにより、システムがレコードの処理の実行中及びレコードの受信にデータにアクセスし、取得し、集計を計算しなければならないのではなく、システムは、データ処理のための1つの包括的なレコードを生成できる。このようなすべてのフィールド及びサブレコードを有する1つのレコードの生成により、実行時にデータウェアハウスからのデータにアクセスし、実行時に集計を計算する効率と比較して、システムによるより効率的なデータアクセス及び処理が可能となる。本明細書に記載の技術を使用して、システムは、生成されたレコード(すなわち、1つのレコード)をシステムによる処理のためのキューにパブリッシュし、そうする中でレコードの処理における実行時のレイテンシを短縮する。
【0086】
上述の技術は、コンピュータ上で実行されるソフトウェアを用いて実装できる。例えば、ソフトウェアは、各々が少なくとも1つのプロセッサ、少なくとも1つのデータ記憶システム(揮発性及び不揮発性メモリ及び/又は記憶要素を含む)、少なくとも1つの入力デバイス又はポート、及び少なくとも1つの出力デバイス又はポートを含む1つ以上のプログラムされた又はプログラム可能なコンピュータシステム(これは、分散型、クライアント/サーバ、又はグリッド等、各種のアーキテクチャであり得る)で実行される1つ以上のコンピュータプログラム内で手順を形成する。ソフトウェアは、例えば、データフローグラフの設計及び構成に関する他のサービスを提供するより大型のプログラムの1つ以上のモジュールを形成できる。グラフのノード及び要素は、コンピュータ可読媒体に記憶されたデータ構造又はデータレポジトリ内に記憶されたデータモデルに適合する他の組織的データとして実装できる。
【0087】
ソフトウェアは、汎用又は専用プログラム可能コンピュータによって読取可能なCD-ROM等の記憶媒体及び/又はハードウェア記憶デバイスで提供するか、又はネットワークの通信媒体を通じてそれが実行されるコンピュータの記憶媒体へ配信する(伝播信号内で暗号化される)ことができる。機能は、すべて専用コンピュータ上で又はコプロセッサ等の専用ハードウェアを用いて実行できる。ソフトウェアは、ソフトウェアにより明示される計算の異なる部分が異なるコンピュータにより実行される分散方式で実装できる。このようなコンピュータプログラムの各々は、好ましくは、汎用又は専用プログラム可能コンピュータにより読取可能であり、記憶媒体又はデバイスがコンピュータシステムにより読み取られたときに、本明細書に記載の手順を実行するようにコンピュータを構成し、動作させるために、記憶媒体又はデバイス(例えば、ソリッドステートメモリ若しくは媒体、又は磁気若しくは光媒体)上に記憶され、又はそれにダウンロードされる。本発明のシステムは、コンピュータプログラムを用いて構成されるコンピュータ可読記憶媒体として実装されると考えることもでき、この場合、そのように構成された記憶媒体は、本明細書に記載の機能を実行するために指定され、あらかじめ定義された方法でコンピュータシステムを動作させる。
【0088】
本発明の多数の実施形態が説明された。それでもなお、本発明の趣旨及び範囲から逸脱することなく、各種の変更形態がなされ得ることが理解される。例えば、上述のステップのいくつかは順序に依存しないことができ、したがって記載されたものと異なる順番で実行できる。加えて、前述の例及び技術は、様々な用途に広く適用可能である。
【0089】
上述の説明は例示のためであり、付属の特許請求の範囲により定義される本発明の範囲を限定しないと理解されたい。例えば、上述の機能ステップの多くは、全体的な処理に実質的な影響を与えることなく、異なる順番で実行できる。他の実施形態は、以下の特許請求の範囲に含まれる。