詳細な説明
図1を参照すると、データ構造(例えば、テーブル)を修正するためのネットワーク化されたシステム10が示されている。具体的には、ネットワーク化されたシステム10は、複数のデータソースからデータ構造を取得すること及びデータソースからのそれらのデータ構造の1つ又は複数のフィールド(又は他の属性若しくはフィールドの属性)を修正することを可能にする。概して、フィールドは、例えば、リレーショナルデータベース内にデータ及び/又はローを記憶するためのデータレコードの指定の部分を含む。概して、属性は、例えば、データ形式等の特性を含む。ネットワーク化されたシステム10は、データソース12a〜12cを含む。ネットワーク化されたシステム10は、例えば、データ構造にアクセスするための、それらのデータ構造の何れをクライアント装置に提供するかを指定し、且つそれらのデータ構造を修正するための実行システム14を含む。実行システム14は、データソース12a〜12cからデータ構造を受信及び記憶するための(例えば、揮発性メモリ、不揮発性メモリ等を含む)メモリ16を含む。
一例では、メモリ16がデータソース12a〜12cのそれぞれへの参照を記憶する。メモリ16は、データソース12a〜12c内に含まれるデータ構造をそれらのデータソースのそれぞれから受信する。メモリ16は、実行システム14にデータ構造を伝送したデータソースへの参照に関連してデータ構造(及びテーブル内のレコード等、データ構造内に含まれるデータ)を記憶する。実行システム14は、例えば、データの提供元である1つ又は複数のデータソースを選択し、それらの選択された1つ又は複数のデータソース内の1つ又は複数のデータ構造を選択し、且つ1つ又は複数の選択されたデータソース内の1つ又は複数のデータ構造を(例えば、フィールド名を修正することによって)修正するためのデータ構造選択及びデータ構造修正モジュール18(以下では「モジュール18」)も含む。データ構造がテーブルである一例では、テーブル内のカラムをフィールドと呼び、テーブル内のローをレコードと呼ぶ。モジュール18は、例えば、様々なデータ構造からの2つ以上のフィールドの結合を含む新たなデータ構造を生成できるようにすることにより、データ構造及び/又はデータ構造内のフィールドの強化も可能にする。実行システム14は、例えば、修正されたデータ構造の視覚的表現を(クライアント装置上で表示される)ユーザインタフェース24内でレンダリングするためのレンダリングモジュール20を含む。
セグメント化のための命令を指定するために、ユーザは、ユーザインタフェース24によってデータ構造の1つ又は複数のフィールド又は部分を選択する。概して、セグメント化は、データレコードの集合を1つ又は複数の指定の基準を満たすデータレコードのみに定め、細分するプロセスを含む。ユーザインタフェース24をレンダリングするクライアント装置は、データ構造の1つ又は複数のフィールド又は部分の選択を指定するデータをレンダリングモジュール20に伝送する。レンダリングモジュール20は、(選択を指定する)このデータをセグメント化モジュール22に伝送し、セグメント化モジュール22は、メモリ16又は他のデータリポジトリ内に記憶される様々なデータレコードのセグメント化を実施し、出力データセット26を作成する。
図2を参照すると、ネットワーク化されたシステム10は、データ構造A〜データ構造D(例えば、テーブル)を修正するように構成される実行システム14を有する。この具体例では、データ構造A及びデータ構造Cがデータ構造修正モジュール18によって修正される。グラフィカルユーザインタフェース18bに示すように、データ構造修正モジュール18から、「カード購入Visa」及び「顧客エンゲージメント」と題されたフィールドでそれぞれデータ投入され、且つ「ID」、「取引金額」並びに「ID」及び「期間」のフィールド名をそれぞれ含む修正されるデータ構造A及びBが図示されている。データ構造修正モジュール18は、レンダリングモジュール20に送信する修正されたフィールドデータ18aも作成し、レンダリングモジュール20は、結合ID、例えば返却データレコード内に含まれるIDフィールドの値に基づいて返却データレコードを結合するための命令と共に、修正された構造A及びCの表現21をユーザインタフェース24(図1)によってレンダリングする。概して、修正されたフィールドデータは、データ構造のフィールドに対する1つ又は複数の修正、例えばフィールドの名前又はデータ構造内のカラム若しくはローの修正等を指定するデータを含む。
実行システム14は、修正されたフィールドデータ18a(IDによる結合(取引金額>$5000)&(顧客エンゲージメント<6カ月))をセグメント化モジュール22に送信し、セグメント化モジュール22は、データソース、例えば12dにアクセスするためのセグメント化ロジック22aに基づいて(クエリ(取引金額>$5000)&(顧客エンゲージメント<6カ月)のクエリを作成し、データソース12dは、そのそれぞれが図示のように「ID:f423543 VISA:7349.00」及び「ID:f423543 顧客エンゲージメント:2カ月」のコンテンツをそれぞれ含む2つのレコード13a、13bを返す。返却レコード22bは、セグメント化モジュール22に送り返され、(結合IDによる)返却レコードの結合18a「ID:f423543 VISA:$7349.00 顧客エンゲージメント:2カ月」を指定するための論理モジュール25に与えられる。
次に、図3を参照すると、複合キーモジュール30によって複合キーを作成するように構成される実行システム14が示されている。データ構造修正モジュール18は、修正されたフィールドデータを複合キーモジュール30に送信する。複合キーモジュール30は、返却レコードの結合18a「ID:f423543 VISA:$7349.00 顧客エンゲージメント:2カ月」も送信され、複合キー31aと複合値31bとを連結したものであり、データストア12e内に記憶される複合キー値31を作成する。概して、複合キーは、データレコード内のもう1つのフィールドの1つ又は複数の値から生成されるキーを含む。概して、複合値は、複合キーの生成元である値の1つ又は複数に関係する幾つかの集約又は他のデータを含む。この例では、複合値が「5550.32,345.24,12.01,23」の集約を含み、そのそれぞれは、現在の取引の現在の金額、指定の期間(例えば、過去30日間)にわたるその特定のIDに関連する平均取引金額、その期間にわたって生じた最低取引金額及びその期間にわたって生じた取引数のカウントをそれぞれ示す。以下で説明するように、複合キーモジュール30及び互いからの出力に対してそれぞれ操作するレンダリングモジュール20、セグメント化モジュール22及び論理モジュール25も図示する。
図4を参照すると、データレコードフィールドの値に由来する複合キー及び関連する複合値の構造32が示されている。この例では、システム10は、加入者ID(SubID)フィールド、イベントタイプフィールド、日付フィールド及び(音声イベントの時間の長さを指定する)長さフィールドの4つのフィールドを含むデータレコード32aを受信する。この例では、SubIDフィールドの値は、「43054421」である。イベントタイプフィールドの値は、「音声」である。日付フィールドの値は、「4/3/2018」である。長さフィールドの値は、「4.34分」である。データレコード32a内の最初の3つのフィールドの値から、システム10は、幾つかのキー、例えばフィールドの可能な組み合わせごとに1つのキーを生成する。一部の例では、データレコードが「n」個のフィールドを有する場合、フィールドの異なる組み合わせの数は、2nである。テーブル33aに示すように、この例では、データレコード32内のフィールドからシステム10が7個の別個のキーを生成する。7個の別個のキーは、下記の通りである。
キー1:SubID
キー2:SubID.イベントタイプ
キー3:SubID.日付
キー4:SubID.イベントタイプ.日付
キー5:イベントタイプ
キー6:日付
キー7:イベントタイプ.日付
複合キーのそれぞれについて、システムは1つ又は複数の指定された値を含む複合値を生成する。「SubID」キー(即ちテーブル33a内のキー1)では、(テーブル33a内の複合値1によって示す)複合値は、SubIDによって表される加入者について指定の期間(例えば、5日間)にわたって受信されるイベントの平均数(「Average」)及びその加入者について指定の期間にわたって受信されるイベント数のカウント(「Count」)である。即ち、「SubID」のキーでは、テーブル33aに示すように複合値は、「Average,Count」である。
「SubID.イベントタイプ」のキー(即ちテーブル33a内のキー2)では、(テーブル33a内の複合値2によって示す)複合値は、SubIDによって表される加入者について指定の期間(例えば、5日間)にわたって受信される(キー内で指定されるイベントタイプの)イベントの平均数(「Average」)、指定のイベントタイプのイベントの最短時間(「Min」)、指定のイベントタイプのイベントの最長時間(「Max」)及びその加入者について指定の期間にわたって受信される(キー内で指定されるイベントタイプの)イベント数のカウント(「Count」)である。即ち、「SubID.イベントタイプ」のキーでは、テーブル33aに示すように複合値は、「Average,Min,Max,Count」である。
「SubID.日付」キー(即ちテーブル33a内のキー3)では、(テーブル33a内の複合値3によって示す)複合値は、SubIDフィールドによって指定される加入者について日付フィールドによって指定される日付に受信されるイベント数のカウント(「Count」)である。即ち、「SubID.日付」のキーでは、テーブル33aに示すように複合値は、「Count」である。
「SubID.イベントタイプ.日付」のキー(即ちテーブル33a内のキー4)では、(テーブル33a内の複合値4によって示す)複合値は、SubIDフィールド内で指定される加入者に関する指定のイベントタイプの、且つ日付フィールド内の指定の日付のイベントの最短時間(「Min」)、SubIDフィールド内で指定される加入者に関する指定のイベントタイプの、且つ日付フィールド内の指定の日付のイベントの最長時間(「Max」)及びSubIDフィールド内で指定される加入者に関し且つ日付フィールド内の指定の日付の(キー内で指定されるイベントタイプの)イベント数のカウント(「Count」)である。即ち、「SubID.イベントタイプ.日付」のキーでは、テーブル33aに示すように複合値は、「Min,Max,Count」である。
「イベントタイプ」のキー(即ちテーブル33a内のキー5)では、(テーブル33a内の複合値5によって示す)複合値は、指定の期間(例えば、5日間)にわたって受信される(キー内で指定されるイベントタイプの)イベントの平均数(「Average」)、指定の期間にわたる指定のイベントタイプのイベントの最短時間(「Min」)、指定の期間にわたる指定のイベントタイプのイベントの最長時間(「Max」)及び指定の期間にわたる(キー内で指定されるイベントタイプの)イベント数のカウント(「Count」)である。即ち、「イベントタイプ」のキーでは、テーブル33aに示すように複合値は、「Average,Min,Max,Count」である。
「日付」キー(即ちテーブル33a内のキー6)では、(テーブル33a内の複合値6によって示す)複合値は、日付フィールドによって指定される日付に受信されるイベント数のカウント(「Count」)である。即ち、「日付」のキーでは、テーブル33aに示すように複合値は、「Count」である。
「イベントタイプ.日付」のキー(即ちテーブル33a内のキー7)では、(テーブル33a内の複合値7によって示す)複合値は、日付フィールド内の指定の日付の指定のイベントタイプのイベントの最短時間(「Min」)、日付フィールド内の指定の日付の指定のイベントタイプのイベントの最長時間(「Max」)及び日付フィールド内の指定の日付の(キー内で指定されるイベントタイプの)イベント数のカウント(「Count」)である。即ち、「イベントタイプ.日付」のキーでは、テーブル33aに示すように複合値は、「Min,Max,Count」である。
テーブル33bは、キー1〜7の実際のキー及び関連する複合値である複合値1〜7をそれぞれ示す。この例では、キー1〜7の値がデータレコード33a内のフィールドの値から生成される。システムは、過去に計算された複合値を更新することにより、及び/又は永続メモリ58(図6)からの指定のデータにアクセスすることにより複合値を生成する。例えば、キー4(即ちSubID.イベントタイプ.日付キー)では、メモリ56(図6)がそのキーのためのエントリを既に記憶している場合がある。その記憶されたエントリは、次の通りであり得る:キー4:43054421.音声.4/3/2018、複合値4:最短0.9、最長8.09、2。この例では、レコード32aが受信されると、システム10は、自らが43054421.音声.4/3/2018というキーの複合値を既に記憶していることを特定する。そのため、システム10は、データレコード268a内で指定された音声イベントの長さ(即ち4.34分)に従って複合値を更新する。この更新に基づき、システムは、図4に示すように「最短1.2、最長8.09、3」の新たな複合値を決定する。
他の例では、システムがキー4の複合値を依然として特定しいない場合がある。この例では、システムは、データレコード32a内で参照される加入者(即ちSubID:43054421)のためのデータレコードにメモリ56(図6)及び/又は永続メモリ58(図6)からアクセスする。アクセスしたそれらのデータレコードから、システムは、何れのデータレコードが指定の日付、即ち4/3/2018に関する音声イベントを参照するかを決定する。指定の日付に関する音声イベントを参照するデータレコードから、システムは、指定の加入者について指定の日付に生じた(例えば、それぞれのレコードの「長さ」フィールドからの)音声イベントの最短時間、(例えば、それぞれのレコードの「長さ」フィールドからの)音声イベントの最長時間及び音声イベント数のカウントを決定する。決定したそれらの値から、システムは、複合値を決定し、それを「43054421.音声.4/3/2018」のキー、即ちキー4のハッシュ値に関連して(即ちハッシュテーブル268d内に)記憶する。
この例では、メモリ(不図示)がキー1〜7のそれぞれのハッシュされたキー値35a〜35gを有するハッシュテーブル33cを記憶する。この例では、システムは、複合キーにハッシングアルゴリズムを適用することにより、ハッシュされたキー値を生成する。ハッシュテーブル33cは、テーブル33c内の複合値1〜7にそれぞれ対応する複合値36a〜36gも記憶する。概して、対応する又は対応は、マッチすること又は同様の閾値を有することを指す。この例では、複合キー及び関連する複合値を記憶することによって各レコードが独立に記憶される。
これらの例では、システムがキーの様々な組み合わせについてデータ値を事前に計算している。例えば、「43054421.音声.4/3/2018」のキーでは、システムは、4/3/2018に生じた指定の加入者の音声イベントに関する最小値、最大値及びカウント値を事前に計算する。これらの値を事前に計算することにより、システムは、リアルタイムの集約及び他のリアルタイムの値を決定することに関して実行時のレイテンシを減らす(又はなくす)。例えば、実行時において、システムは、SubID 43054421によって表される加入者について4/3/2018に生じる音声イベント数を決定する必要がある。システムは、43054421の値を有するSubIDフィールドを含むデータレコードについて様々なデータリポジトリ及びウェアハウスをクエリすることにより、このリアルタイムの集約を決定することができる。次いで、全ての返却データレコードから、システムは、データレコードを構文解析して、イベントタイプフィールドについて「音声」の値を有し、日付フィールドについて「4/3/2018」の値を有するデータレコードの部分集合を決定することができる。次いで、システム10は、部分集合内で返されるレコードの数をカウントして、カウントを決定することができる。但し、このクエリ及び処理は、システムがクエリ及び構文解析を行うときに関連するレイテンシを引き起こす。このレイテンシを減らすか又はなくすために、システムは、集約(又は最小値及び最大値等の他の値)を事前に計算し、それらの集約を複合キーのハッシュ値に関連して記憶する。そのため、特定の日付に特定の加入者によって行われる音声通話回数のカウントを探索するために、システムは、SubID.音声.日付又は43054421.音声.4/3/2018という適切なキーを生成する。システムは、キーの値をハッシュし、且つハッシュされたキー値を使用してハッシュテーブル33c内で複合値にアクセスする。そうすることにより、システムは、集約をリアルタイムで計算しなければならないことに関連するレイテンシをなくすか又は減らす。
複合キーに関連して複合値を記憶する別の利点は、データレコードに新たなフィールドを追加する場合、その新たなフィールドのための値を有する新たな複合キーを生成し、関連する複合値内のカウント(又は別の集約)を追跡することにより、その新たなフィールド内の値の発生を容易に追跡できることである。例えば、「新規顧客」フィールドがデータレコード32aに追加される。この例では、顧客が過去6か月のうちに電話会社サービスに申し込んでいる場合、その顧客は、新規顧客である。この場合、新規顧客フィールドがイエスの値を有する。さもなければ、新規顧客フィールドは、ノーの値を有する。この例では、4/3/2018の指定の日付に音声通話を行った新規顧客の発生をシステムが追跡し、イエス.音声.4/3/2018の値を有する新規顧客.イベントタイプ.日付の新たなキーをシステムが生成する。この新たなキーの複合値は、「count」である。その後、新たなレコードが受信されると、システムは、4/3/2018に受信した新規顧客の音声イベントを参照するレコードの数に従って複合値を生成又は更新する。複合値を生成し、且つそれを複合キーに関連して記憶することの利点は、データレコードに新たなフィールドを追加するとき、それらの新たなフィールドの値を追跡するためにテーブルにカラムを追加する必要がないことである。むしろ、フィールドの新たな値は、新たなキーを生成することによって追跡することができ、新たなキーの生成は、新たなカラムを追加することによってテーブルの構造を変更するのではなく、テーブルに新たなローを追加することを単純に必要とする。
次に、図5Aを参照すると、実行システム14がデータソース12aにアクセスし、データソース12aはそのそれぞれが「ID:53054423、取引金額:$5550.32、日付:4/3/2018、カードの種類:Visa」及び「ID:53054423、顧客エンゲージメント:2カ月、日付:4/3/2018」のそれぞれのコンテンツを含む2つのレコード18a、18bを返す。返却レコード18a、18bは、(レコード18aのための複合キー25a及び(レコード18bのための複合キー25bを作成するために複合キーモジュール30に送信される。複合キー値25a、25bがデータストア12f内に記憶され、図5Bに示す表現をレンダリングするレンダリングモジュール20に対して複合キーモジュール30が複合キー値25a、25bを送信する。この例では、複合キー値25aは、「53054423.VISA」の複合キーと、現在の取引の合計購入金額、指定の日数(例えば、過去30日間)にわたる平均購入金額、指定の日数にわたる最低購入金額及び指定の日数にわたって行われた購入数のカウントを表す「5550.32,345.24,12.01,23」の複合値とを含む。複合キー値25bは、「53054423.顧客エンゲージメント」の複合キーと、IDフィールドによって表される特定のユーザが顧客である期間、ユーザが顧客になった日付、顧客の最低購入金額、顧客の最大購入金額及び顧客の平均購入金額をそれぞれ表す「2,1/1/2018,9.00,1045,104」の複合値とを含む。図5Bに関して以下でより詳細に説明するように、複合キー値25a、25bは、レンダリングモジュール20に送信されて、セグメント化テンプレートの一部として何れの集約を表示できるかをレンダリングモジュールが決定できるようにする。以下でより詳細に説明するように、この例では、何れのテーブルが選択されるか及びそれらのテーブルに何れの複合キー値が関連するか又は利用できるかに応じて、複合キー値25a、25bに含まれる集約(例えば、最小、カウント等)がセグメント化における定義で利用できるようになる。
レンダリングモジュール20は、(図5Bに示すグラフィカルユーザインタフェース内で指定される)セグメント化ロジック23cを受信し、セグメント化ロジック23cをセグメント化モジュール22に送信する。この例では、セグメント化ロジックは、次の通りである:「(IDによる結合(Count(Visa 取引金額>$5000)>2)及び(顧客エンゲージメント<6カ月且つ合計取引カウント>100))」。それに応答して、セグメント化モジュール22は、複合キークエリ23a(53054423.VISA)及び複合キークエリ23b(53054423.顧客エンゲージメント)を作成し、複合キークエリ23a、23bをデータリポジトリ12fに伝送する。それに応答して、データリポジトリ12fは、クエリ23a、23b内で指定された複合キーとマッチする複合キーを有する複合キー値を(例えば、テーブル内で)探索する。この例では、複合キークエリ23aが「53054423.VISA」の複合キーを含む。この複合キーに基づき、データリポジトリ12fは、「53054423.VISA」の複合キーを有し、従って複合キークエリ23a内で指定された複合キーとマッチする複合キー値25aを取得する。この例では、複合キークエリ23bが「53054423.顧客エンゲージメント」の複合キーを含む。この複合キーに基づき、データリポジトリ12fは、「53054423.顧客エンゲージメント」の複合キーを有し、従って複合キークエリ23b内で指定された複合キーとマッチする複合キー値25bを取得する。データリポジトリ12fは、返却レコード22cとして複合キー値25a、25bをセグメント化モジュール22に返す。それに応答し、セグメント化モジュール22は、返却レコード22cを更なる処理のために論理モジュール25に伝送する。この例では、論理モジュール25が(例えば、セグメント化モジュール22から)セグメント化ロジック23cも受信し、返却レコード22cを結合して集約又は結合されたレコード27を作成するための結合ロジックを実装する。
図5Bを参照すると、グラフィカルユーザインタフェース40は、グラフィカルユーザインタフェース21(図2)の改変形態である。この例では、グラフィカルユーザインタフェース40がコンポーネント40a〜40eを含む。この例では、コンポーネント40aは、6か月間よりも長く顧客である顧客のみを含めることによって顧客をセグメント化するために「顧客エンゲージメント」テーブルを使用することを指定する。この例では、特定の集約(例えば、カウント)が顧客エンゲージメントテーブルに関連する。一部の例では、各複合値が同じ種類の集約を含む。そのため、各テーブルは、同じ種類の集約に関連し得る。他の例では、テーブルが特定の種類の集約のみに関連し得る。この例では、複合キークエリがデータリポジトリに送信され、セグメント化に必要な集約を含まない複合キー値が返される場合、実行システムは、保持される複合キー値を単純に破棄する)。この例では、コンポーネント40eは、Visaカード購入テーブルをセグメント化に使用すること、更にコンポーネント40dによって指定されているように、3回以上のカード購入を行った顧客のみをセグメントに含めることを指定する。コンポーネント40cは、コンポーネント40a〜40b、40d及び40e内で指定されたロジックを実行することで返されるレコードを結合することを指定する。
規模を拡大したリアルタイム(又はほぼリアルタイム)の集約の生成
一部の例では、システム10によって大量のデータが受信されるとき、システム10が著しいレイテンシなしに集約を行うように、データの受信時にシステム10がフィールド内のデータをリアルタイム(又はほぼリアルタイム)で集約し、更に規模を拡大してデータを集約する。一部の例では、システムがセグメント化を行うときにアクセス又は取得されるデータを生成する際にこれらの集約が使用される。
次に、図6を参照すると、ネットワーク化されたシステム10(図1)は、リアルタイムの集約を生成するシステム50も含む。一部の例では、システム50は、図1における実行システム14である。この例では、システム50がデータソース12aからデータレコード52a〜52cを受信し、データソース12bからデータレコード52d〜52fを受信する。データレコード52a〜52fのそれぞれは、ユーザを一意に識別する値を有するキーフィールド(即ち加入者識別子(SubID)フィールド)等の1つ又は複数のフィールドを含む。データレコード52a〜52fのそれぞれは、通信の種類を識別する値(即ち音声、SMS又はデータ)を記憶するための通信タイプ(「通信タイプ」)フィールドも含み得る。
ネットワーク化されたシステム10は、更に実行システム14(図1)であり、且つメモリ56(例えば、共用メモリ、半導体メモリ、低永続メモリ等)及び永続メモリ58を含む記憶域を含む。メモリ56及び58は、図1のメモリ16を形成し得る。概して、メモリ56は、例えば、永続メモリ58からデータ又はデータレコードを取得する際のレイテンシと比較してレイテンシを低減しながらシステム50によってアクセス可能なメモリを含む。メモリ56は、ディスクメモリではない(例えば、メモリ56内に記憶するときデータレコードがディスクに記憶されない)ため、メモリ56のレイテンシは、低い。一部の例では、メモリ56は、キャッシュストア又はRAMキャッシュと呼ばれることもあるメモリキャッシュを含み、メモリキャッシュは、メインメモリ、例えば永続メモリ58に使用される遅いダイナミックRAM(DRAM)ではなく、高速のスタティックRAM(SRAM)で作られるメモリの一部分である。この例では、メモリ56が最近のデータ(又は最近のデータの発生のレコード)のみを記憶し、データは、閾値期間未満(例えば、14日間未満)に受信されている場合に「最近」である。この閾値期間よりもデータが古くなると、システム50又はメモリ56は、そのデータをより永続的に記憶するために永続メモリ58に伝送する。システム50は、より最近のデータに最も頻繁にアクセスするため、メモリ56上でのメモリキャッシングは、効果的である。即ち、メモリ56内に記憶されたデータは、システム50によって盛んに使用されるデータである。この情報を可能な限りSRAM又はメモリ56内に保つことにより、システム50は、遅いDRAM又は永続メモリ58へのアクセスを回避する。
この例では、システム50は、受信されたデータ又はデータレコード自体ではなく、イベントのレコードを記憶する。概して、イベントは、特定のフィールドでの特定の値の発生を含む。この例では、システム50は、「通信タイプ」フィールドのあり得るそれぞれの値(即ち音声、SMS又はデータ)がイベントであることを指定する。メモリ56は、個々の検出イベント(及びそのイベントに関する加入者ID)のレコードを保存するデータレコード60を記憶する。具体的には、データレコード60は、カラム60a〜60cを含む。カラム60aは、「音声イベント」の発生(「通信タイプ」フィールドでの「音声」値の検出)を示すデータを記憶する。カラム60bは、「データイベント」の発生(「通信タイプ」フィールドでの「データ」値の検出)を示すデータを記憶する。カラム60cは、「SMSイベント」の発生(「通信タイプ」フィールドでの「SMS」値の検出)を示すデータを記憶する。
具体的には、システム50は、データレコード52aを受信し、音声イベントの発生をデータレコード52a内で検出する。そのため、システム50は、データレコード60のカラム60a内に加入者IDの値を挿入する。システム50は、データレコード52bを受信し、SMSイベントの発生をデータレコード52b内で検出する。そのため、システム50は、データレコード52b内のSubIDフィールド内で指定された加入者IDをカラム60c内に挿入する。
システム50は、データレコード52cを受信し、音声イベントの発生をデータレコード52c内で検出する。そのため、システム50は、データレコード52c内のSubIDフィールド内で指定された加入者IDをカラム60a内に挿入する。システム50は、データレコード52dを受信し、音声イベントの発生をデータレコード52d内で検出する。そのため、システム50は、データレコード52d内のSubIDフィールド内で指定された加入者IDの値をカラム60a内に挿入する。システム50は、データレコード52eを受信し、音声イベントの発生をデータレコード52e内で検出する。そのため、システム50は、データレコード52e内のSubIDフィールド内で指定された「加入者IDの値をカラム60a内に挿入する。システム50は、データレコード52fを受信し、データイベントの発生をデータレコード52f内で検出する。そのため、システム50は、データレコード52f内のSubIDフィールド内で指定された加入者IDの値をカラム60b内に挿入する。
この例では、データレコード60は、柔軟性の増加を伴うデータレコードであり、それは、データレコード60に別のカラムを追加することによって他の種類のイベント(例えば、テレビ会議イベント)の発生も追跡するようにデータレコード60を修正することができるからである。そのため、新たなイベントの集約を追跡するようにデータレコード60が実行中に修正され得る。これは、受信したデータレコード自体を保存することを上回る柔軟性の改善をもたらし、それは、以下でより詳細に説明するように、新たなイベントの新たな複合キーを生成することによってそのイベントを追跡することができるからである。加えて、データレコード60を検索することは、個々のデータレコードに対してクエリを実行する際のレイテンシに比べ、クエリを実行する際のレイテンシの低下をもたらす。例えば、システム50は、音声通信に携わる加入者についてデータレコード60をクエリすることができる。この例では、システム50が「通信タイプ=音声」のクエリを生成する。このクエリに基づき、メモリ56は、カラム60a内に含まれる加入者IDの値を単純に探索するカラム60a内の値を返す。システム50は、このクエリの結果を(クエリを満たすデータレコードを識別するために個々のデータレコード52a〜fを検索するのに必要な速度と比較して)より高速に返し、なぜなら、システム50(又はメモリ56)は、クエリを満たす値を記憶するレコードを識別するためにデータレコードをくまなく検索する代わりに、クエリにマッチするか又はクエリを満たすカラムを識別するのみでよいからである。一部の例では、閾値時間の経過後、データレコード60内のデータが永続メモリ58に転送され、データレコード62a...62nの1つに記憶される。
一部の例では、カラム60a〜60cのそれぞれが特定の種類のイベントの集約を表すため、それらのカラム内に含まれるデータがメモリ内集約とそれぞれ呼ばれる。概して、メモリ内集約(例えば、カウント、平均等)は、メモリ56内に記憶されたデータの集約を含む。他の例では、システム50は、レコード60内に含まれるデータに対して操作を実行してメモリ内集約を生成し得る。例えば、システム50は、「通信タイプ=音声」且つ「SubID=53054423」であるレコードのカウントについてメモリ56をクエリすることができる。この例では、「SubID=53054423」を有する加入者が2回の音声通信を有したことをカラム60aが示すため、メモリ56が「2」の値を返すであろう。この例では、メモリ56がクエリに関するメモリ内集約を生成し、メモリ内集約は、2の値を有する。メモリ56(又はシステム50)は、メモリ内集約の値を共用変数内に記憶する。この例では、「通信タイプ=音声且つSubID=53054423のカウント」のクエリを受信すると、メモリ56は、「通信タイプ=音声且つSubID=53054423のカウント」の名前を有する共用変数を生成し、共用変数の値を「2」であるように設定する。この例では、共用変数がメモリ内集約の値を記憶する。先に記載したように、これらのメモリ内集約は、(これらのメモリ内集約を永続メモリ58から取得する速度又は個々のデータレコード52a〜fをくまなく検索することでこれらのメモリ内集約を構築することによって取得する速度と比較して)より高速にメモリ56から取得される。
データレコード60内のデータがディスクに移される(即ち永続メモリ58に移される)と、カラム60a〜60c内の値は、メモリ上に記憶されるのではなく、例えばディスク上に記憶される発生のレコードを含むディスク上集約である。一部の例では、閾値時間の経過後に共用変数の値も永続メモリ58に移される。
データレコード自体を記憶するのではなく、イベントの発生を記録することにより、システム50は、規模を拡大して集約を決定し、例えばデータレコード60内で表されるレコードの数が増加するときにレイテンシの増加がなく(又はレイテンシの増加が最小限のみであり)、なぜなら、システム50は、個々のレコード52a〜fをくまなく構文解析し、そのコンテンツを識別するのではなく、データレコード60内の関連フィールド(又はカラム内の関連セル)を識別するのみでよいからである。レコード内の発生数が増加してもフィールドの数が増加しないため、データレコード内の関連フィールドを識別することは、拡張性のあるプロセスである。そのため、これらのリアルタイムの集約を識別することは、拡張性があり、処理するデータレコードの数が増えてもレイテンシを生じさせない。
以下でより詳細に説明するように、改変形態では、メモリ56がハッシュテーブルを記憶し、ハッシュテーブル内に複合値に関連して複合キーのハッシュ値が記憶される。概して、複合キーは、複数の別個の値からアセンブルされる(又はかかる値を含む)キーを含む。概して、複合値は、複数の別個の値の連結又はアセンブリを含む。
図7を参照すると、システム10によって(例えば、図1のモジュール18によって)実行される選択及び修正機能が示されている。この例では、1つ又は複数のデータソースが選択され、より多くのデータ構造の1つが選択され、それらのデータ構造の1つ又は複数のフィールドが修正される様々なユーザインタフェースのレンダリングをシステムが引き起こす。この例では、データソース72a〜72d(そのうちのデータソース72a〜72cは、データソース12a〜12cにそれぞれ対応する)は、レンダリングモジュール(例えば、図1のレンダリングモジュール20)によってデータが提供される元となる候補データソースである。レンダリングモジュール20(図1)は、エンドユーザ(例えば、ビジネスユーザ)がデータのキュレートされた部分集合を閲覧し、かかる部分集合にアクセスする様々なグラフィカルユーザインタフェースを提供する。キュレートされた部分集合から、システムは、例えば、グラフィカルユーザインタフェースによって受信されるデータに基づいて様々な操作及びアクションを実行するための命令を生成する。データの部分集合は、データソース(例えば、データソース72a〜72d)にわたるデータの上位集合からセグメント化操作等の指定の操作のための部分集合にキュレートされる。レンダリングモジュールは、データをどのようにキュレートするかに関する指示を受信するためのグラフィカルユーザインタフェースも提供する。この例では、データソース72a〜72dは、部分集合の生成元、例えばキュレート元であるデータの上位集合である。システムは、様々なデータ構造(例えば、テーブル)を修正する元のデータソースとしてデータソース72b、72dを選択する。一部の例では、データソース14、18の選択に基づいてシステムがデータソース72a、72dのための参照を識別し、識別したそれらの参照に何れのテーブルが関連するかをメモリ16(図1)内で探索する。次いで、システムは、それらのテーブルをデータソース72b、72dから、又はメモリ16自体がテーブルを記憶する場合にはメモリ16から取得する。
この例では、データソース72aがテーブル73、74、75を含む。データソース72dは、テーブル78、79、80、81を含む。テーブル73、74、75から、システムは、レンダリングモジュール20(図1)によってテーブル26の視覚的表現をレンダリングすることで修正(例えば、キュレート)しようとするデータ構造としてテーブル26を選択する。テーブル78、79、80、81から、システムは、レンダリングモジュール20(図1)によってテーブル32の視覚的表現をレンダリングすることで修正(例えば、キュレート)しようとするデータ構造としてテーブル32を選択する。これらの選択は、例えば、テーブル26、32を選択するためにユーザインタフェースによって受信されるユーザ命令に従って行われる。即ち、テーブル73、74、75、78、79、80及び81の全てが修正及びキュレートされるわけではない。選択されたデータソースからの選択されたテーブルのみが修正され、レンダリングモジュール20によってユーザインタフェース24(図1)内で提供される。
テーブル75のビュー75aは、テーブル75のコンテンツを示す。限定なしに且つ便宜上、本明細書では、ビュー75a及びテーブル75をまとめて「テーブル75」と呼ぶ場合がある。テーブル75は、「プラン統計」のタイトルを指定するタイトル部分75gを含む。この例では、テーブル75がカラム75b、75c、75d(本明細書ではそれぞれ「フィールド75b、75c、75d」とも呼ぶ)を含む。フィールド75b、75c、75dの名前は、それぞれ「sub_id」、「min_usd」、prc_pln_id」である。テーブル75は、ロー75e、75fも含む。一例では、タイトル及び/又はフィールドを修正及び/又再命名できるようにするために、更に例えば様々なテーブルのフィールドを結合するときに使用されるキーであるようにフィールドの1つを指定できるようにするために、テーブル75(又はテーブル75の視覚的表現)がユーザインタフェース内でレンダリングされる。テーブル76は、テーブル75の修正版である。テーブル76は、実行システム14からのグラフィカルユーザインタフェースデータの受信に基づいてクライアント装置85a上でレンダリングされ、グラフィカルユーザインタフェースデータは、テーブル75のコンテンツを指定する。このテーブル75の修正版では、部分75g内で指定されていた元のタイトルは、部分76a内で指定されているように「プラン統計」のタイトルに修正されている。加えて、フィールド75b、75c、75dのそれぞれがより説明的な名前(例えば、ビジネスユーザにとってより有意味な名前)に再命名されている。フィールド76b内に示すように、この例では、フィールド75bの名前が「加入者ID」に再命名されている。概して、加入者は、システムのユーザを含み、加入者IDとも呼ばれるキーによって識別される。アイコン76cによって示すように、この例では、フィールド76bがキーとして選択されている。フィールド76eによって指定されるように、フィールド75cの名前が「使用分数」に再命名されている。フィールド76f内で指定されるように、フィールド75dの名前が「料金プラン名」に再命名されている。テーブル76は、ロー76g、76hも含み、そのそれぞれのコンテンツは、ロー75e、75fにそれぞれ対応する。この例では、テーブル76がシステムによってエンドユーザに提示される。データソース14から提供されるデータの閲覧及び/又は選択を可能にするために、この例では、テーブル76のみがエンドユーザに提示される(テーブル73、74、75は、提示されない)。テーブル76(又はテーブル76の視覚的表現(不図示))は、データソース14からのデータのキュレート版又はキュレート構成を表す。一部の例では、テーブル75のキュレート版(例えば、テーブル76)がテーブル75内のフィールドの部分集合のみを含む場合がある。例えば、フィールド75c又は75dは、テーブル76内で除去され、テーブル76内に含まれなくてもよい。別の例では、例えばそれらが特定の加入者IDに関する複数のローである場合、テーブル75(又はテーブル76)内のローをピボットローであるようにユーザが選択することができる。
テーブル81のビュー83は、テーブル81のコンテンツを示す。限定なしに且つ便宜上、本明細書では、ビュー83及びテーブル81をまとめて「テーブル81」と呼ぶ場合がある。テーブル81は、「Bndld_vc_data」のタイトルを指定するタイトル部分83aを含む。この例では、テーブル81がカラム81b、81c(本明細書ではそれぞれ「フィールド81b、81c」とも呼ぶ)を含む。フィールド81b、81cの名前は、それぞれ「sub_id」及び「sub_bndledvd」である。テーブル81は、ロー81d、81eも含む。一例では、タイトル及び/又はフィールドを修正及び/又は再命名できるようにするために、更に例えば様々なテーブルのフィールドを結合するときに使用されるキーであるようにフィールドの1つを指定できるようにするために、テーブル81がユーザインタフェース内でレンダリングされる。テーブル83は、テーブル81の修正版である。テーブル83は、実行システム14からのグラフィカルユーザインタフェースデータの受信に基づいてクライアント装置85b上でレンダリングされ、グラフィカルユーザインタフェースデータはテーブル81のコンテンツを指定する。この修正版では、部分81a内で指定されていた元のタイトルが部分83g内で指定されているように「音声及びデータバンドル」のタイトルに修正されている。加えて、フィールド81b、81cのそれぞれがより説明的な名前(例えば、ビジネスユーザにとってより有意味な名前)に再命名されている。フィールド83a内に示すように、この例では、フィールド81bの名前が「加入者ID」に再命名されている。アイコン83bによって示すように、この例では、フィールド83aがキーとして選択されている。
フィールド83cによって指定されるように、フィールド81cの名前が「音声及びデータバンドル」に再命名されている。テーブル83は、ロー83d、83eも含み、そのそれぞれのコンテンツは、ロー81d、81eにそれぞれ対応する。この例では、テーブル83がシステムによってエンドユーザに提示される。データソース72dから提供されるデータの閲覧及び/又は選択を可能にするために、この例では、テーブル83のみがエンドユーザに提示される(テーブル78、79、80、81は、提示されない)。テーブル83は、データソース72dからのデータのキュレート版又はキュレート構成を表す。
図8Aを参照すると、例えばそのデータを修正する1つ又は複数のデータソースの選択を可能にするために、グラフィカルユーザインタフェース90がシステムによってレンダリングされている。この例では、グラフィカルユーザインタフェース90は、レンダリングモジュール20(図1)によってレンダリングされるグラフィカルユーザインタフェースの1つである。グラフィカルユーザインタフェース90は、コントロール92aを有するメニュー部分92を含み、コントロール92aの選択は、利用可能なデータソースの視覚的表現93a〜93dをグラフィカルユーザインタフェース90の部分94においてグラフィカルユーザインタフェース90に表示させる。この例では、視覚的表現93a〜93dは、データソース72a〜72d(図7)をそれぞれ表す。視覚的表現93a及び93dのそれぞれと並んだ視覚的表現95a、95dによって示すように、修正するためのデータ構造の選択元のデータソースとして、ユーザは、データソース72a、72d(図7)又は12、14(図2)をグラフィカルユーザインタフェース90によって選択する。この例では、カラム96が選択可能なコントロール(不図示)を含み、かかるコントロールを選択することは、視覚的表現93a及び93dの1つ等の視覚的表現の表示を引き起こす。
図8Bを参照すると、修正しようとする(選択されたデータソースからの)1つ又は複数のデータ構造(例えば、テーブル)を選択できるようにするグラフィカルユーザインタフェース90の発展した状態が示されている。この例では、グラフィカルユーザインタフェース90は、コントロール92aを有する(例えば、図8Aのメニュー部分92に対応し得る)メニュー部分92を表示し、コントロール92aの選択は、選択されたデータソース72a、72d(図7)ごとに、そのデータソース内に含まれるデータ構造を部分94においてグラフィカルユーザインタフェース90に表示させる。例えば、部分94は、カラム95a〜95jを含むテーブル96を表示する。カラム95aは、例えば、図3又は図7において選択されるように、選択されたデータソースの名前を有する視覚的表現96a〜96gを表示する。視覚的表現96a〜96gは、例えば、キュレートのためにテーブルが選択されるデータソースとしてデータソース72dを指定する視覚的表現95d(図8A)に従って選択されたデータソース72dを表す。視覚的表現96a〜96gは、例えば、キュレートのためにテーブルが選択されるデータソースとしてデータソース72dを指定する視覚的表現58(図8A)に従ってデータソース72dを表す。カラム95bは、視覚的表現97a〜97gを表示し、そのそれぞれは、視覚的表現96a〜96gの対応するものにおいて表されるデータソース内のテーブルの名前をそれぞれ表す。カラム95cは、カラム95b内で表されるテーブルのそれぞれに関するデータタイプを表示する。カラム95dは、カラム95a内で表されるテーブルそれぞれの説明を入力するためのコントロールを提供する。カラム95eは、選択可能なコントロールを表示し、その選択は、修正のためにデータ及び/又はデータ構造が選択されるテーブルを(例えば、視覚的表現95e’、95e’’等の視覚的表現の表示によって)指定する。この例では、視覚的表現97c、97fのそれぞれによって表されるテーブルが修正のために選択されるテーブルであることを指定するために、視覚的表現95e’、95e’’がカラム95e内に表示されている。
テーブル96は、選択及び適用され得る特定の機能をそれぞれ指定するカラム95f〜95hも含む。テーブル96は、そのローによって表されるテーブルを、最後に更新したユーザ及び更新が行われたときを指定するデータをテーブル96内のローごとに表示する「最終更新」カラム95iを含む。テーブル96は、テーブル96内のローごとのコントロール(例えば、コントロール95j’、95j’’)を表す編集カラム95jも含む。そのローによって表されるテーブルが編集可能であることをカラム95eが指定する特定のローについて、そのローの編集カラム95j内に表示されているコントロールを選択することは、そのテーブルを編集及び修正することを可能にする。例えば、コントロール95j’を選択することは、視覚的表現97cによって表されるテーブルを修正できるようにする。この例では、視覚的表現97cがテーブル75(図7)を表し、先に記載したようにテーブル75が修正される。コントロール95j’’を選択することは、視覚的表現97fによって表されるテーブルを修正できるようにする。この例では、視覚的表現97fがテーブル81(図7)を表し、先に記載したようにテーブル81が修正される。
図8Cを参照すると、例えばセグメント化を行うための命令をユーザが生成できるようにすることにより、修正されたデータ構造からの命令のユーザによるアクセス、閲覧及び生成を可能にするためのグラフィカルユーザインタフェース150が(例えば、図1のレンダリングモジュール20によって)表示されている。グラフィカルユーザインタフェース150は、コントロールを含むメニュー部分152を含み、その選択は、様々な種類の命令を生成できるようにする。この例では、メニュー部分152がコントロール154を含み、その選択は、データレコードを選択する(及び/又はそれらのデータレコードに対して操作を行う)元となる選択されたデータ構造、例えば72a、72dの1つ又は複数のうちの1つ又は複数のフィールドを指定できるようにする。
グラフィカルユーザインタフェース150は、データのセグメント化及び例えばフィルタリング、結合等の他の様々な操作を指定するためのエディタインタフェース156を含む。コントロール154を選択すると、コンポーネント158がエディタインタフェース156内に表示される。概して、コンポーネントは、様々な操作を行うためのセグメント化ロジック等の実行可能ロジック(又は命令)を表す。コンポーネントは、選択データ又は他の入力データ等の入力を(エディタインタフェース156によって)受信し、実行可能ロジックを生成する際にシステムが受信された入力を使用する。一例では、システムは、実行可能ロジック及びコンポーネント間の予め構成されたマッピングを記憶する。次いで、入力に基づいて又はコンポーネントによって指定され、(そのコンポーネントのための)実行可能ロジックがその入力を含むように更新又は修正される。コンポーネント158は、97a〜97g等の特定のテーブル(例えば、キュレートされたテーブル)を選択するための命令を指定できるようにする。コンポーネント158は、アイコン160を含み、その選択は、特定のキュレートされたテーブルを選択できるようにする。
図8Dを参照すると、グラフィカルユーザインタフェース170が表示されている。グラフィカルユーザインタフェース170は、例えば、アイコン160の選択後に更新されるグラフィカルユーザインタフェース150(図8C)の更新版である。アイコン160が選択されると、オーバレイ部分172がグラフィカルユーザインタフェース170内にレンダリングされる。オーバレイ部分172は、(修正及びキュレートされているテーブル83(図2)、97f(図8B)の)視覚的表現172a及び(修正及びキュレートされているテーブル76(図7)の)視覚的表現172bを含む。この例では、視覚的表現172aが選択されている。
図8Eを参照すると、グラフィカルユーザインタフェース174が表示されている。グラフィカルユーザインタフェース174は、グラフィカルユーザインタフェース170(図8D)の更新版である。視覚的表現172aが選択されると、オーバレイ176が表示される。オーバレイ176は、テーブル38のコンテンツを表示し、選択可能部分176aを含み、その選択は、コンポーネント158によって表される実行可能ロジック内に含めるために選択可能部分176a内で表されるフィールド(即ち「音声及びデータバンドルフィールド」)をユーザが選択できるようにする。オーバレイ176は、加入者IDフィールドを表す部分176bも含む。この例では、適切な加入者に値を属させるために、選択可能部分176a内で表されるフィールド内の値を加入者IDに関連付ける必要があるため、選択可能部分176aの選択が部分176bの選択を自動で引き起こす。一部の例では、選択可能部分176aを選択することによって選択されるフィールドに従い、コンポーネント158によって表される実行可能ロジックが修正又は更新される。
図8Fを参照すると、グラフィカルユーザインタフェース180が表示されている。グラフィカルユーザインタフェース180は、グラフィカルユーザインタフェース174(図8E)の更新版である。この例では、コンポーネント158が部分158a、158bで更新されている。部分158aは、コンポーネント158のためのタイトルを指定し、タイトルは、図8E内の選択可能部分176a内で表されるフィールドの選択に基づく。部分158bは、「音声及びデータバンドル」フィールドの値が「1」に等しいデータレコードを、例えばシステムによって受信又は記憶されたデータレコードから選択するように(コンポーネント158によって表される)実行可能ロジックが構成されることを指定する。より一般的な表現では、部分158bは、受信されたデータレコードの何れのものが、選択された1つ又は複数の選択可能部分内で表される1つ又は複数のフィールドに対応する1つ又は複数のフィールドを有するかを識別することにより、受信又は記憶されたデータレコードのセグメント化を指定する。概して、セグメント化は、指定のグループにデータレコードを割り当てること、データレコードを分割すること及び/又は指定の集合からデータレコードを排除し、他の集合にデータレコードを含めることを含む。これは、ユーザがエディタインタフェースによってデータレコードのセグメント化を「実行中に」開始できるようにする。従って、エディタインタフェースによって表示される表現は、セグメント化プロセスのための条件を設定するためのグラフィカルショートカットを提供し、それは、例えば、条件のタイプ入力等によりそれらの条件を段階的に定めることと比較して入力データレコードのより効率的(時間及び資源)なセグメント化をもたらす。全体的に、入力データレコードのセグメント化のより直接的で誤りを起こしにくく且つより迅速な制御がユーザに与えられる。図8Fの例では、選択可能部分176a(図8E)が選択されると、部分158bが「音声及びデータバンドルの加入者=____」の文字列で自動的にデータ投入される。この例では、グラフィカルユーザインタフェース180は、前述の文字列内の空のフィールド「____」について「1」又は「0」の値を埋めるようユーザに促すプロンプト(不図示)を表示する。この例では、ユーザが「1」の値を選択する。この例では、前述の文字列内で参照される加入者は、部分176b(図7)内で表される加入者IDフィールドによって表される。
この例では、エディタインタフェース156にコンポーネント182を追加させるためにユーザがコントロール154も選択する。コンポーネント182は、別の特定のテーブル(例えば、キュレートされたテーブル)から1つ又は複数のフィールドを選択するための命令を指定することを可能にする。コンポーネント182は、アイコン182aを含み、その選択は、特定のキュレートされたテーブル及び/又は特定のキュレートされたテーブルからのフィールドの選択を可能にする。
図8Gを参照すると、グラフィカルユーザインタフェース184が表示されている。グラフィカルユーザインタフェース184は、例えば、アイコン182aの選択後に更新されるグラフィカルユーザインタフェース180(図8F)の更新版である。アイコン182aが選択されると、オーバレイ部分186がグラフィカルユーザインタフェース184内にレンダリングされる。オーバレイ部分186は、(修正及びキュレートされているテーブル83(図7)の)視覚的表現186a及び(修正及びキュレートされているテーブル76(図7)の)視覚的表現186bを含む。この例では、視覚的表現186bが選択されている。
図8Hを参照すると、グラフィカルユーザインタフェース188が表示されている。グラフィカルユーザインタフェース188は、グラフィカルユーザインタフェース184(図8G)の更新版である。視覚的表現186b(図8G)が選択されると、オーバレイ190が表示される。オーバレイ190は、テーブル76(図7)のコンテンツを表示し、選択可能部分190a、190b、190cを含み、その選択は、コンポーネント182によって表される実行可能ロジック内に含めるために加入者IDフィールド、使用分数フィールド及び料金プラン名フィールドをユーザがそれぞれ選択できるようにする。この例では、適切な加入者(例えば、ユーザ)に値を属させるために、選択可能部分190a、190b内で表されるフィールド内の値を加入者IDに関連付ける必要があるため、選択可能部分190b、190cの1つ又は複数の選択が選択可能部分190aの選択を自動で引き起こす。一部の例では、この例で選択されている選択可能部分190bを選択することによって選択されるフィールドに従い、コンポーネント182によって表される実行可能ロジックが修正又は更新される。
図8Iを参照すると、グラフィカルユーザインタフェース192が表示されている。グラフィカルユーザインタフェース192は、グラフィカルユーザインタフェース188(図8H)の更新版である。この例では、コンポーネント182が部分182b、182cで更新されている。部分182cは、コンポーネント182のためのタイトルを指定し、タイトルは、図8H内の選択可能部分190b内で表されるフィールドの選択に基づく。部分182bは、選択可能部分190b(図8H)内で指定される「使用分数」フィールドを含むデータレコードを、例えばシステムによって受信又は記憶されたデータレコードから選択するように(コンポーネント182によって表される)実行可能ロジックが構成されることを指定する。この例では、「使用分数」フィールドは、キュレートされたフィールドであり、実際のデータレコード内のフィールドの名前と実際にはマッチしない。そのため、システムは、(データレコード自体内のフィールドの実際の名前を含む)図7のテーブル75及び(フィールドのキュレートされた名前を含む)図7のテーブル76の複製並びにテーブル76内のフィールド名に対するテーブル75内のフィールド名のそれぞれの間のマッピングを記憶する。このマッピングに基づき、システムは、キュレートされたフィールド名に関する実際のフィールド名を探索する。例えば、システムは、このマッピングを使用して、部分182b内で参照される「使用分数」フィールドが実際にはデータレコード内の「min_used」フィールドであることを識別する。
図8Jを参照すると、グラフィカルユーザインタフェース194は、コントロール198の選択後にエディタインタフェースが結合コンポーネント200で更新されていることを示す。この例では、結合コンポーネント200が2つの別個のデータストリーム又はデータレコードの集合を結合するための実行可能ロジックを表す。この例では、結合コンポーネント200は、(「音声及びデータバンドル」フィールドの値が「1」に等しいデータレコードである)コンポーネント158の出力と、(「加入者による使用分数」フィールド内の値を有するデータレコードである)コンポーネント182の出力との結合を表す。改変形態では、コンポーネント158の出力は、値が「1」に等しい場合、「音声及びデータバンドル」フィールド(即ち図7のフィールド81c又はフィールド82c)の値及び「加入者ID」フィールド(即ち図7のフィールド83a又はフィールド81b)の関連する値である。この改変形態では、コンポーネント182の出力は、「使用分数」フィールド(図7のフィールド76c又はフィールド75c)の値及び「加入者ID」フィールド(即ち図7のフィールド76b又はフィールド75b)の関連する値である。結合コンポーネント200によって表される実行可能ロジックは、コンポーネント158、182の出力を加入者IDごとに結合する。この例では、コンポーネント158、182の出力を結合コンポーネント200内に入力してコンポーネント158、182の出力を結合することを指定するために、例えばコントロール197を選択することによってコネクタ201、203をメニュー部分152から選択することができる。
この例では、保存コントロール196を選択することによって(例えば、将来使用するために)保存することができる特定のセグメントの定義をエディタインタフェース156が表示し、保存コントロール196の選択は、セグメントを名前によって後で取得できるようにするためにセグメントの名前を入力するようユーザに促す。
図8Kを参照すると、事前定義データ集約(「エンティティ」とも呼ぶ)の作成を可能にするためのグラフィカルユーザインタフェース206が表示されている。具体的には、(例えば)ユーザインタフェース206によって受信される命令に基づき、システムは、異なるテーブルからのデータを結合してこれらのエンティティを生成し、生成されたエンティティは、セグメント化を発生させるときに(例えば、システム経由で)利用することができる。これらのエンティティは、様々なデータを指定のカテゴリにまとめる。
グラフィカルユーザインタフェース206は、加入者コントロール207aを有するメニュー部分207を含み、加入者コントロール207aの選択は、エンティティ部分208の表示を引き起こす。エンティティ部分208は、定められるエンティティを表示し、生成コントロール205を含み、生成コントロール205の選択は、ユーザが新たなエンティティを定めるための一連のプロンプト及びコントロールを表示する。この例では、エンティティ部分は、(例えば、加入者を表す)特定のキーに関連するハンドセット又は装置に関係するデータの集約を指定する過去に定められたエンティティの視覚的表現209を表示する。
図8Lを参照すると、例えば生成コントロール205(図8K)を選択したときのグラフィカルユーザインタフェース206(図8K)へのオーバレイとしてグラフィカルユーザインタフェース210が表示されている。グラフィカルユーザインタフェース210は、新たなエンティティを生成できるようにし、作成されているエンティティの名前を指定する情報を入力するための名前部分210a、生成されるエンティティの実用上の又はデータベースのフィールド名を指定するプレフィックスを入力するためのプレフィックス部分210b及び作成されているエンティティの説明を指定する情報を入力するための説明部分210cを含む。グラフィカルユーザインタフェース210は、グラフィカルユーザインタフェース210内で定められているエンティティ内に含まれるフィールド212a〜212jを指定するフィールド部分212も含む。この例では、フィールド212a〜212jは、様々なデータソース、例えば図1のデータソース12a〜12c内に含まれるテーブルから選択されたフィールドである。この例では、フィールド部分212がカラム212k内の(例えば、キュレートされていないテーブルからの)元のフィールド名及びカラム212l内の修正又はキュレートされたフィールド名の両方を表示する。この例では、フィールド212hは、図2のフィールド75dに対応し、フィールド212mは、フィールド212hの修正版又はキュレート版である。例えば、フィールド部分212がフィールドの元のフィールド名及びフィールドの修正されたフィールド名の両方によるフィールドの選択をどのように可能にするかを示すために、フィールド212mは、図7のフィールド76fに対応する。フィールド部分212は、検索クエリ又は1つ若しくは複数の検索語を入力するための検索コントロール212nも含む。システムは、検索コントロール212nの入力を使用して、検索基準にマッチ又は対応する(データソース内のテーブルからの)フィールド名を検索する。適切なフィールドが選択されると、それらのフィールドがフィールド部分212内に表示される。
図8Mを参照すると、グラフィカルユーザインタフェース213は、グラフィカルユーザインタフェース206(図8K)の修正版である。この例では、グラフィカルユーザインタフェース210(図8L)内で行われる指定及び選択に従って作成されるエンティティ(以下では「加入者エンリッチメントエンティティ」と呼ぶ)を表す視覚的表現214を表示するようにエンティティ部分208が更新されている。以下でより詳細に説明するように、この例では、セグメントを定義する際、ユーザに対して視覚的表現209、214内で表されるエンティティが提供される。
図8Nを参照すると、グラフィカルユーザインタフェース216が表示されており、グラフィカルユーザインタフェース216は、グラフィカルユーザインタフェース194(図8J)と同じグラフィカルユーザインタフェースである。例えば、エンティティ部分208(図15)内で表される事前定義エンティティにアクセスするために、メニュー部分152からコントロール218が選択される。
図8Oを参照すると、グラフィカルユーザインタフェース220が表示されており、グラフィカルユーザインタフェース220は、グラフィカルユーザインタフェース216(図8N)の修正版であり、エディタインタフェース156内にオーバレイ部分222がレンダリングされている。オーバレイ部分222は、(図8Lのグラフィカルユーザインタフェース210内で定められる加入者エンリッチメントエンティティの)視覚的表現222a及び(図8Kの視覚的表現209によって表されるハンドセットエンティティの)視覚的表現122bを含む。例えば、加入者エンリッチメントエンティティによって指定される一定の基準を満たす加入者をエディタインタフェース156内で定められているセグメントに追加するために、この例では、視覚的表現222aが選択されている。
図8Pを参照すると、グラフィカルユーザインタフェース224が表示されている。グラフィカルユーザインタフェース224は、グラフィカルユーザインタフェース220(図8O)の修正版であり、エディタインタフェース156にエンティティコンポーネント226が追加されている。この例では、指定のフィールド(例えば、図8Mのフィールド212k〜212j)を有するデータレコードを実行時に取得する実行可能ロジックをエンティティコンポーネント226が表す。改変形態では、フィールド212k〜212j(図8M)の値及びそれらのフィールドに関連するキーの値を実行時に取得する実行可能ロジックをエンティティコンポーネント226が表す。この例では、エンティティコンポーネント226からプロファイルデータが出力され、コネクタ228を介してコンポーネント158、182の出力と共に結合コンポーネント200に結合される。エディタインタフェース156にエンティティコンポーネント226を追加することにより、エンティティコンポーネント226によって指定される加入者、(コンポーネント158によって指定される)音声及びデータバンドルプランを有する加入者及び(コンポーネント183によって指定される)使用分数のある加入者のみを含むようにセグメント230が定められる。この例では、保存コントロール196を選択することによってセグメント230が(後で使用するために)保存される。この例では、保存コントロール196を選択することは、コンポーネント158、182、200、226によって且つコネクタ201、203、228によって表す実行可能ロジックを、例えば他のセグメントを更に定める際に後で取得するために(例えば、データ構造内に)保存することを引き起こす。この例では、例えばセグメント230によって指定される定義を満たすフィールド及び/又はフィールドの値を有するデータレコードのみを含むように、メモリ16(図1)内に記憶される複数のデータレコードをセグメント化するために、実行システム14(図1)がセグメント230を実行することができる。この例では、セグメントコンポーネントの選択を可能にするセグメントコントロール232によってセグメント230にアクセスすることができる。セグメントコンポーネントは、セグメントを構築するとき、データ選択のためのソースとして既に定められているセグメントを使用することを可能にする。
この例では、セグメント230が、セグメント化を行うために図1のセグメント化モジュール22(又は図9のセグメント化モジュール22)によって実行される実行可能データフローグラフである。概して、実行可能データフローグラフは、有向データフローグラフを含み、グラフ内の頂点は、コンポーネント(データファイル又はプロセス)を表し、グラフ内のリンク又は「辺」はコンポーネント間のデータフローを示す。かかるグラフベースの計算及びデータフローグラフを実行するためのシステムは、参照により本明細書に援用される「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」という名称の過去の米国特許第5,966,072号に記載されている。システム14(図1)上で実行されるデータフローグラフとしてセグメント化を行うことにより、システム14のシステム資源及びメモリ16(図1)が解放され、なぜなら、システムは、データ及びデータレコードのソート、フィルタリング、結合等の機能をメモリ16(図1)又は他のデータ記憶装置内で直接実行するのではなく、かかる機能を(データフローグラフを実行することによって)行うからである。即ち、セグメント化に必要な操作がメモリ16内で直接実行される場合のメモリ16の処理能力及び速度と比較して、(メモリ内のデータに対して直接操作することによってセグメント化機能を行うのではなく)データフローグラフを実行してセグメント化機能を行うことにより、メモリ16(図1)の処理能力及び速度が増加する。
一部の例では、本明細書に記載のシステムが様々なキャンペーンに関するセグメントを識別する。概して、キャンペーンとは、指定のユーザに対して例えば指定の時間に送信するための選択されたオファーの定義である。例えば、キャンペーンに割り当てられたセグメントに何れのオファーを送信するかを決定する方法をデータフローグラフの実行可能ロジックが指定する場合、データフローグラフは、キャンペーンを定めることができる。キャンペーンには、例えば、キャンペーンにおけるメンバシップを指定又は制限する命令を含む提供タイプが割り当てられる場合がある。例えば、「なし」タイプ、「グローバル」タイプ、「音声」タイプ、「データ」タイプ、「SMS」タイプ、「パッケージ」タイプ、「リロード」タイプ等を含む様々な提供タイプがある。なしの提供タイプを有するキャンペーンは、加入者に対する制限を設けない。グローバルの提供タイプを有するキャンペーンは、加入者がそのキャンペーンに含まれ得、他のキャンペーンに同時に含まれないことを指定する。音声の提供タイプを有するキャンペーンは、加入者が1回につき音声提供タイプの単一のキャンペーンのみに含まれなければならないことを指定する。データの提供タイプを有するキャンペーンは、加入者が1回につきデータ提供タイプの単一のキャンペーンのみに含まれなければならないことを指定する。SMSの提供タイプを有するキャンペーンは、加入者が1回につきSMS提供タイプの単一のキャンペーンのみに含まれなければならないことを指定する。パッケージの提供タイプを有するキャンペーンは、加入者が1回につきパッケージ提供タイプの単一のキャンペーンのみに含まれなければならないことを指定する。リロードの提供タイプを有するキャンペーンは、加入者が1回につきリロード提供タイプの単一のキャンペーンのみに含まれなければならないことを指定する。キャンペーンを構成するとき、キャンペーンのサイクルが終了したときにキャンペーン提供から加入者を解放するかどうかをユーザが選択することができる。
このシステムは、キャンペーンの目標を表すテーマ(例えば、テーマを表すデータを記憶するデータ構造)を各キャンペーンに割り当てもする。キャンペーンテーマは、優先順位を有する。以下で説明するように、システムは、接触ポリシと共にキャンペーンの調停中にこの優先順位を使用する。
任意の時点において、加入者は、1つ又は複数のキャンペーンの権利を得る場合がある。多過ぎるオファーで不所望の大量のメッセージを加入者に送信せず、加入者に対する最も重要なオファーに的を絞ることが重要であり、一部の事例では管理機関によって調整されている。接触ポリシは、キャンペーン中にシステムが加入者と通信することができる頻度を管理する。接触ポリシは、システムが伝送可能なアウトバウンドオファーの数に制限を設定する。加入者が複数のキャンペーンの権利を有する場合、優先順位が高いキャンペーンを得るようにオファーを拡張できるとき、優先順位が低いキャンペーンを得るようにオファーを拡張しないように、システムは、接触ポリシ及び実行中の様々なキャンペーンの相対的な優先順位に従ってそれらのオファーを拡張する必要がある。例えば、加入者は、優先順位が高いキャンペーンの特定のステージにあったが、低エンゲージメントセグメントに該当し始める場合がある。以下で説明するように、優先順位が高いオファーを加入者に割り当てるべき場合に優先順位が低いオファーが加入者に割り当てられないことを確実にするために、システムは、キャンペーン調停命令を実行する。
対象の顧客に送信可能なオファー数を接触ポリシが制限する場合、キャンペーンテーマ及び優先順位に基づいて最良のオファーを選択するために、システムは、キャンペーン調停命令を実行する。例えば、1日当たり2つのオファーのみを顧客に送信できることを接触ポリシが規定し、顧客が5つのオファーの権利を有する場合、システムは、キャンペーンテーマ及び優先順位に基づいて上位2つのオファーを選択する(例えば、システムは、他のキャンペーンの優先順位に対して上位2つの優先順位を有するキャンペーンの1つにそれぞれ関連する2つのオファーを選択する)。
例えば、数千ものキャンペーンを構成する場合、優先順位が高いキャンペーンに対してシステムが与えることを望む接触ポリシの限度を、1日のうちで先に実行されることが予定されているキャンペーンが費やす可能性がある。この問題を解決するために、システムは、キャンペーンテーマの優先順位を使用して、システム内に含まれる通信サブシステムを用いて加入者のための通信スロットを確保する。概して、システムは、加入者ごとにデータ構造又は待ち行列を記憶し、メッセージが加入者にいつ伝送されるかを表すデータを用いてデータ構造内のエントリにデータ投入し、及び/又は特定のキャンペーンのためにそのエントリを確保するデータを用いてデータ構造内のエントリにデータ投入する。メッセージを送信する時間になると、その日のうちに必要な接触ポリシの限度を、優先順位が低いキャンペーンが費やさないように、システムは、その加入者に関する接触ポリシ及びデータ構造を確認する。
図8Qを参照すると、グラフィカルユーザインタフェース210(図8L)内で定められる加入者エンリッチメントエンティティを修正できるようにするグラフィカルユーザインタフェース270が表示されている。この例では、例えば、加入者エンリッチメントエンティティの定義に1つ又は複数の追加のフィールドを加えるために作成コントロール272が選択されている。この例では、作成コントロール272が選択されると、1つ又は複数のメモリ内集約が加入者エンリッチメントエンティティに追加される。
図8Rを参照すると、例えばグラフィカルユーザインタフェース270(図8Q)へのオーバレイとしてオーバレイ274が表示されている。この例では、オーバレイ274は、加入者エンリッチメントエンティティ内に含めるために追加可能な様々な種類のメモリ内集約274a、274b、274c、274dを表示する。この例では、加入者エンリッチメントエンティティ内に含めるためにメモリ内集約274dの1つ(即ちメモリ内集約274d’)が選択されている。この例では、メモリ内集約274d’は、音声使用カウント(例えば、ユーザが行った音声通話の回数)を指定するメモリ内集約である。
図8Sを参照すると、グラフィカルユーザインタフェース276は、グラフィカルユーザインタフェース270(図8Q)の更新版であり、図21のメモリ内集約274d’の選択に従ってフィールド278を含むようにフィールド部分212が更新されている。フィールド278は、メモリ内集約274d’の値を記憶し、それにより加入者エンリッチメントエンティティにメモリ内集約274d’を追加するためのフィールドである。この例では、メモリ内集約274d’は、音声通話量のカウントをキーごとに提供する音声使用カウントのメモリ内集約である。
図8Tを参照すると、グラフィカルユーザインタフェース280は、グラフィカルユーザインタフェース224(図8N)の更新版であり、例えばフィルタコントロール284の選択後にフィルタコンポーネント282がエディタインタフェース156に追加される。フィルタコンポーネントは、指定の規則に従ってデータのフローに対してデータをフィルタするための実行可能ロジックを表す。コネクタ286によって指定されているように、エンティティコンポーネント226から出力されるプロファイルデータがフィルタコンポーネント内に入力される。この例では、エンティティコンポーネント226から出力されるプロファイルデータが音声使用カウントのメモリ内集約のための値を(例えば、キー値ごとに)含む。フィルタコンポーネント282は、出力されるプロファイルデータ内に含まれるデータレコードから、音声使用カウントのメモリ内集約の値が2の値以上であるデータレコードを除外するように構成される。この例では、加入者が2回未満の音声通話を行ったことを指定する受信されたデータレコードのみがフィルタコンポーネント282によって表されるロジックを通過し、なぜなら、それらのデータレコードは、加入者が2回未満の音声通話を行ったことを指定する唯一の受信されたデータレコードであるからである。フィルタコンポーネント282によって表される基準又はロジックを通過するデータレコードは、フィルタされたデータであり、それらは、コネクタ288によって指定するように結合コンポーネント200内に入力される。エディタインタフェース156のコンテンツは、新たなセグメント、即ちセグメント290を定める。
図9を参照すると、実行環境300は、(例えば、先に説明したようにフィールドがキュレート又は修正されるデータレコードを受信するための)データソース303、(処理されるデータレコードを受信するための)データソース302を使用し、収集−検出−動作(CDA)を実装するためのシステム314を含む。概して、CDAは、データレコードを収集し、それらのデータレコードを処理して、何れのデータレコードが指定の基準を満たす値を含むかを検出し、それらのデータレコードに関して1つ又は複数のアクションを実行するシステム314のプロセスを指す。この環境は、上記で論じたように(例えば、フィールド名を修正することによって)1つ又は複数のデータ構造を修正するために、データが提供される1つ又は複数のデータソースを選択し、それらの1つ又は複数の選択されたデータソース内の1つ又は複数のデータ構造を選択するためのデータ構造修正モジュール18(図1)を含む、(実行モジュール14と同様の)実行時前モジュール14’も含む。図1で論じたように、実行時前モジュール14’は、修正されたデータ構造の視覚的表現を(クライアント装置301上で表示される)ユーザインタフェース内でレンダリングするためのレンダリングモジュール20(図1)も含む。
図10を参照すると、システム314は、データレコード(例えば、データソース302から受信されるデータレコード302a〜c及び他のデータ)を収集し、データレコード302a〜302c内のデータを変換されたデータ306に変換し、その変換されたデータ306を例えばセグメント化モジュール326、検出モジュール318及び動作モジュール320を含む下流のアプリケーションに分配するための収集モジュール316を含む。データレコード302aのコンテンツは、「ID:34213、イベントタイプ:音声、日付:4/3/2018」を含む。データレコード302bのコンテンツは、「ID:34214、イベントタイプ:SMS、日付:4/3/2018」である。データレコード302cのコンテンツは、「ID:34215、プランタイプ:バンドルプラン、日付:4/3/2018」である。この例では、動作モジュール320がサードパーティシステム及び/又は外部システムへのインタフェースを含む。具体的には、収集モジュール316は、例えば、データソース302等の様々なソース又は様々な位置にあり、ネットワークによって相互接続される様々なサーバからのバッチ又はリアルタイムのデータ及びリアルタイムデータストリーム、例えば様々な位置にあり、ネットワークによって相互接続される様々なサーバから到来するリアルタイムデータを集める。データソース302を提供する記憶装置は、システム314にとってローカルであり得、例えばシステム314を実行するコンピュータに接続される記憶媒体(例えば、ハードドライブ)上に記憶されるか、又はシステム314にとってリモートであり得、例えばローカルエリアデータネットワーク又は広域データネットワーク上でシステム314と通信する遠隔システム上にホストされる。
収集モジュール316は、受信されたデータレコード内で生じる各イベントのレコードをメモリ322内に記録する。先に説明したように、収集モジュール316は、これらの発生をデータレコード内に又はテーブル内に記録する。この例では、収集モジュール316は、受信イベントの発生をメモリ322内のハッシュテーブル内に記録する。収集モジュール316は、受信レコードごとに、(i)複合キーを生成することによる複合キー値であって、後にハッシュされて、カラム346a内に示すようにハッシュされた複合キーが生成される、複合キー値と、(ii)カラム346b内に示すように複合値とを生成する。この例では、集約(例えば、カウント、最小値、平均値、最大値等)を表す、受信されたデータレコード内のフィールド内に含まれるデータ及び/又は過去に記憶された(例えば、メモリ322又はメモリ324内に記憶された)データから複合値が生成される。この例では、ハッシュテーブル346内のエントリ346cが受信レコード302aから生成される。エントリ346cを生成するために、収集モジュール316がレコード302a内のIDフィールドの値(「34213」)をハッシュして「0111」のハッシュ値を生成し、このハッシュ値は、エントリ346cのカラム346a内に記憶される。この例では、収集モジュール316は、エントリ346cの複合値カラム346b内にレコード302a内のイベントフィールドの「音声」の値を含める。収集モジュール316は、34213のIDについて、エントリ346cの複合値カラム346b内に(例えば、メモリ322又は永続メモリ324から取得される)他の集約も含める。この例では、指定の期間(例えば、過去30日間)にわたって使用されたSMSメッセージ数のカウント(「4」)を、取得された集約データが表す。この例では、ハッシュテーブル346は、カラム346a及び346b内の図示の値を有するエントリ346d、346eも含む。この例では、エントリ346dが「バンドルプラン、平均23分」の複合値を含み、この複合値は、ハッシュ値「0010」を有するIDについて、そのIDがバンドルプラン(その値は、受信されたデータレコードのフィールドから取得されている)に関連し、そのIDを有する加入者の平均分数が23分(その値はメモリ322又は永続メモリ324から取得される集約である)であることを表す。エントリ346eは、「50分、平均2340分」の複合値を含み、この複合値は、ハッシュ値「1101」を有するIDについて、そのIDが50分の長さ(その値は、受信されたデータレコードのフィールドから取得されている)の現在のイベント(例えば、通話)を有し、そのIDを有する加入者の平均分数が2340分(その値は、メモリ322又は永続メモリ324から取得される集約である)であることを表す。以下でより詳細に説明するように、データレコードの何れのものが、メモリ322内に記憶される1つ又は複数のセグメント定義の様々な基準を満たすフィールドの値を含むかを識別することにより、セグメント化モジュール326がデータレコードをセグメント化する。この例では、セグメント化モジュール326がセグメント化ロジック326aを含む。
次に、図10も参照すると、この例では、検出モジュール318は、例えば図1のセグメント化モジュール22と同じであり得るセグメント化モジュール326内に記憶されるか又は含まれるセグメント化ロジック326aを実行する。本明細書に記載の技法を使用して、セグメント化モジュール326は、1つ又は複数のセグメント定義を実行して、1つ又は複数のセグメント定義、例えばセグメント化ロジック326a内に含まれる様々な基準を満たす加入者(キー又は加入者IDによって識別される)を識別する。例えば、セグメント化モジュール326は、セグメント定義の様々な基準を満たすデータレコードの部分集合を識別するために、例えばメモリ322又は永続メモリ324内に記憶されたデータレコードの1つ又は複数の集合に対してセグメント定義を実行する。概して、セグメント定義は、セグメントの定義を表すデータを記憶するデータ構造を含む。この例では、メモリ322が14日間にわたるイベント発生のレコードを記憶する。14日間よりも古いイベント発生のレコードは、永続メモリ324内に記憶される。
一部の例では、セグメント定義は、過去14日間のうちに発生したイベントのリアルタイムの集約(又はほぼリアルタイム(例えば、ライブタイム)の集約)を必要とする。この例では、セグメント化モジュール326が(セグメント定義に関する)適切なクエリ344a〜344cを生成し、そのクエリをメモリ322に送ることによってリアルタイムの集約を生成する。それに応答して、メモリ322は、クエリ344a〜344cの適切なものをハッシュテーブル346に対して実行する。この例では、ハッシュテーブル346内のそれぞれのハッシュされたキー値のそれぞれに関する複合値のそれぞれは、クエリ344a〜344cに対して返される結果である。この例では、メモリがクエリ結果347を返し、以下でより詳細に説明するように、クエリ結果347は、返却エントリ347a〜347cを含む。
この例では、セグメント化モジュール326がレコード302aのコンテンツから(及び/又はレコード302aのコンテンツを表す変換されたデータ306内に含まれるデータから)クエリ344aを生成する。この例では、レコード302aがイベントタイプフィールドについて音声の値を含むことをセグメント化モジュール326が検出する。このフィールドに基づき、セグメント化モジュール326は、データレコード302a内のIDフィールド及びイベントタイプフィールドの値の連結である「34213.音声」の複合キーを含むクエリ344aを生成する。複合キーの最初の部分は、IDの値を表すため、クエリ344aを受信すると、メモリ322は、複合キーの最初の部分をハッシュするように構成される。この例では、「34213」のハッシュ値は、「0111」であり、メモリ322は、返却エントリ347aとしてエントリ346cをセグメント化モジュール326に返す。この例では、エントリ346cの値を返すとき、メモリ322は、ハッシュされたキー値をアンハッシュし、そのため、返却エントリ347aは、「34213」のID値を含む。
セグメント化モジュール326は、レコード302bのコンテンツから(及び/又はレコード302bのコンテンツを表す変換されたデータ306内に含まれるデータから)クエリ344bを生成する。この例では、レコード302bがイベントフィールドについてSMSの値を含むことをセグメント化モジュール326が検出する。このフィールドに基づき、セグメント化モジュール326は、データレコード302b内のIDフィールド及びイベントタイプフィールドの値の連結である「34214.SMS」の複合キーを含むクエリ344bを生成する。複合キーの最初の部分は、IDの値を表すため、クエリ344bを受信すると、メモリ322は、複合キーの最初の部分をハッシュするように構成される。この例では、「34214」のハッシュ値は、「0010」であり、メモリ322は、返却エントリ347bとしてエントリ346dをセグメント化モジュール326に返す。この例では、エントリ346dの値を返すとき、メモリ322は、ハッシュされたキー値をアンハッシュし、そのため、返却エントリ347bは、「34214」のID値を含む。
セグメント化モジュール326は、レコード302cのコンテンツから(及び/又はレコード302cのコンテンツを表す変換されたデータ306内に含まれるデータから)クエリ344cを生成する。この例では、レコード302cがイベントフィールドについてバンドルプランの値を含むことをセグメント化モジュール326が検出する。このフィールドに基づき、セグメント化モジュール326は、データレコード302c内のIDフィールド及びイベントタイプフィールドの値の連結である「34215.バンドルプラン」の複合キーを含むクエリ344cを生成する。複合キーの最初の部分は、IDの値を表すため、クエリ344cを受信すると、メモリ322は、複合キーの最初の部分をハッシュするように構成される。この例では、「34215」のハッシュ値は、「1101」であり、メモリ322は、返却エントリ347cとしてエントリ346eをセグメント化モジュール326に返す。この例では、エントリ346eの値を返すとき、メモリ322は、ハッシュされたキー値をアンハッシュし、そのため、返却エントリ347cは、「34215」のID値を含む。
クエリ結果347を受信すると、セグメント化モジュール326は、セグメント化ロジック326aに対して返却エントリ347a〜347cのそれぞれを実行する。この例では、返却エントリ347aがフィルタ1を通過し、従って返却エントリ347a内のIDによって表されるユーザがセグメント内に含まれる。この例では、返却エントリ347bがフィルタ2を通過し、従って返却エントリ347b内のIDによって表されるユーザがセグメント内に含まれる。この例では、返却エントリ347cがフィルタ3を通過し、従って返却エントリ347c内のIDによって表されるユーザがセグメント内に含まれる。エントリ347a〜347cのそれぞれが、セグメント化ロジック326a内に含まれるフィルタの少なくとも1つを通過することに基づき、セグメント化モジュール326は、(セグメント化ロジック326a内で指定される)「結合:フィルタ1の出力、フィルタ2の出力、フィルタ3の出力」のロジックを実行し、セグメント化ロジック326aによって定められるセグメント内に含まれるデータレコードのIDフィールドの値を指定する結合データレコード327を生成する。以下でより詳細に説明するように、セグメント化モジュール326は、結合データレコード327を更なる処理のために論理モジュール328に伝送する。
一部の例では、要求されたリアルタイムの集約を表す共用変数をセグメント化モジュール326が記憶する。セグメント化モジュール326は、メモリ322から返される値又はエントリを共用変数内に記憶し、それらは、共用変数を要求する様々なセグメント定義によってアクセス可能になる。この例では、システム314がディスク(例えば、永続メモリ324)からデータを取得する必要がないため、(例えば、ハッシュテーブル346からの返却エントリ内に含まれる複合値の例えば1つ又は複数の項目として)メモリ322から返される集約は、リアルタイムの集約(又はほぼリアルタイムの集約)である。むしろ、集約は、オンシステムメモリ(例えば、メモリ322)から取得され得る。加えて、システム314は、レコード自体を記憶するのではなく、例えばイベントの発生を記録することによって集約を事前に計算する。イベントの発生を記録することにより、システム314は、要求されたデータの種類にマッチする(又は対応する)名前を有するカラムを単純に識別することにより、クエリをより迅速に実行することができる。次いで、要求された集約がカウントである場合、例えば、システム314は、識別したカラム内の発生数をカウントすることができ、この処理は、データレコード及びデータレコード内のフィールドをくまなく構文解析してセグメントの指定の基準を満たす値を有するデータレコードを識別するのにかかる処理時間よりも短い処理時間を有する。
別の例では、セグメント化モジュール326は、過去20日間のうちに生じたデータレコードに関するリアルタイムの集約を要求する。そのため、システム314は、リアルタイムの集約を得るためにメモリ322及び永続メモリ324の両方をクエリする必要がある。この例では、システム314は、上記で説明したようにメモリ322をクエリする。システム314は、リアルタイムの集約に必要な基準を満たすデータを得るために(及び/又はデータの発生を得るために)永続メモリ324もクエリする。要求される基準に基づき、永続メモリ324は、データレコード内の適切な及び/又は関連するデータを(例えば、古いレコード、例えば指定の日付よりも前に受信されたレコードのコンテンツをハッシュするハッシュテーブル324aから)取得し、その取得データを(ディスク上データとして)検出モジュール318に伝送する。
この例では、永続メモリ324からのデータは、イベントの発生を指定するデータを含み、それらの発生は、14日間よりも前に生じている。この例では、要求されたリアルタイムの集約(例えば、複合キー値の複合値部分に含まれる集約)を生成するために、セグメント化モジュール326は、永続メモリ324からのデータを、メモリ322から取得されるデータと集約する。具体的には、セグメント化モジュール326によって実装されるセグメント定義は、過去20日間のうちに音声通話を4回以上行ったユーザのみがセグメントに含まれることを指定する。この例では、論理モジュール328によって実装される実行可能ロジックは、セグメント内のユーザのデータレコード(例えば、セグメント内のユーザを表すキーを含むデータレコード)に対して実行される。この例では、システム314は、特定の加入者IDに関連する音声通話のカウントについてメモリ322をクエリする。
この例では、特定の加入者IDによって表されるユーザについて2回の音声通話が行われているカウントをメモリ322が返す。次いで、システム314は、(過去6日間のうちに行われた)音声通話のカウント及び関連する指定の加入者IDについて永続メモリ324をクエリする。(例えば、ハッシュテーブル324aをクエリすることに基づいて)永続メモリ324から返されるデータは、特定の加入者IDに関連するユーザについて1回の音声通話が行われていることを指定する。そのため、ディスク上データは、特定の加入者IDによって表されるユーザについて1回の音声通話が行われているカウントを指定する。検出モジュール318がディスク上データを受信し、特定の加入者IDに関する(ディスク上データ内に含まれる)カウントを、メモリ322から取得される特定の加入者IDに関するカウントと集約して、特定の加入者IDに関連するユーザが過去20日間のうちに通話を3回行っており、従ってセグメント定義の基準を満たし、セグメント内に含まれることを識別する。
この例では、1つ又は複数のセグメント定義の基準を満たす加入者の加入者IDを指定するデータ項目をセグメント化モジュール326が論理モジュール328に伝送する。この例では、データ項目のそれぞれは、システム314によって使用される全ての複合値を含むワイドレコードである。即ち、ワイドレコードは、システムによって使用される全てのイベント又は複合キーのワイドレコードである。この例では、先に説明したように、システムは、全ての複合キー及び関連する複合値を記憶する。しかし、システムは、システム314によって(例えば、セグメント化モジュール326、論理モジュール328又は動作モジュール320によって)実際に使用されている複合キーのみをワイドレコード内に含める。この例では、システムの性能を最適化し、データ処理に関してレイテンシの増加がないことを保証するために、システムは、何れの複合キーが使用及び/又はアクセスされているかを事前に識別し、それらのアクセスされる複合キー(及び関連する複合値)のみをワイドレコードに追加する。
先に説明したように、論理モジュール328は、データフローグラフとして表される実行可能ロジックを記憶及び実行する。この例では、論理モジュール328は、セグメント化モジュール326内で識別される加入者の特定のセグメントに対してデータフローグラフを実行する。データフローグラフは、例えば、セグメント内に含まれる加入者の属性に基づいて様々な加入者に関して実行すべき様々なアクションを識別する。
アクションを実行するための様々な基準を満たす(セグメント内に含まれる)加入者を検出すると、検出モジュール318は、トリガ332(例えば、命令又はメッセージ)を待ち行列に発行し、そのコンテンツは、動作モジュール320によって受信され処理される。概して、トリガ332は、1つ又は複数のアクションを実行するための1つ又は複数の命令を指定する。
動作モジュール320は、テキストメッセージ又は電子メールを送信すること、案件管理システムにおけるワークオーダのチケットをオープンすること、サービスを直ちに切断すること、標的となるシステム又は装置にウェブサービスを提供すること、パケット化データを1つ又は複数の通知と共に伝送すること等、トリガされているアクションを実行する。別の例では、動作モジュール320が命令及び/又はメッセージのコンテンツを生成し、それらの命令(及び/又はコンテンツ)をサードパーティシステムに送信し、それを受けて、サードパーティシステムは、命令に基づいてアクション、例えばテキストメッセージの伝送、ウェブサービスの提供等を行う。一例では、動作モジュール320が様々な受信者のためのカスタマイズされたコンテンツを生成するように構成される。この例では、何れのカスタマイズされたコンテンツが何れの受信者に送信又は伝送されるかを指定する規則又は命令を用いて動作モジュール320が構成される。
次に、図11を参照すると、データ構造の属性を修正するためにデータ構造を処理するためのプロセス350が示されている。この処理は、エディタインタフェース内で表される複数のデータソースの1つ又は複数を選択し(352)、複数のデータソース内に含まれるデータの部分集合を生成し(354)、選択されたデータソースから1つ又は複数のデータ構造を選択し(356)、各データ構造は、選択されたデータ構造内の1つ又は複数のフィールドの1つ又は複数の属性を修正すること(358)によって修正される1つ又は複数のフィールドを含む。修正されたデータ構造をメモリ(例えば、図1のメモリ16、又は図6のメモリ56、又は図6のメモリ58)内に記憶し(360)、選択されたデータ構造は、部分集合内に含まれる。エディタインタフェース内に表示されるのは、記憶されたデータ構造の表現である。このプロセスは、1つ又は複数の選択可能部分の選択を指定する選択データを、エディタインタフェースを通して受信し(364)、プロセス350は、受信されたデータレコードの何れのものが、選択された1つ又は複数の選択可能部分内で表される1つ又は複数のフィールドに対応する1つ又は複数のフィールドを有するかを識別することにより、複数の受信されたデータレコードをセグメント化する(366)。次に、図12を参照すると、データレコードを集約するためのプロセス380が示されている。プロセス380は、1つ又は複数のデータソース、例えば72a〜72d(図7)からデータレコードを断続的に受信し(382)、1つ又は複数のデータソースからの所与のデータレコード内の少なくとも第1のフィールド及び第2のフィールドを識別する(384)。プロセス380は、所与のレコードの第1のフィールド内の第1の値及び第2のフィールド内の第2の値の存在を検出する(386)。プロセス380は、上記で説明したように複合キー値を生成する(388)。このプロセスは、所与のレコードの少なくとも第1のフィールド又は第2のフィールドに関係する集約データにメモリ322(図7)からアクセスし(390)、複合キー値を生成し(392)、所与のデータレコードの発生を記録する(394)。
次に、図13を参照すると、プロセス400が実行され、データ構造修正モジュール18、レンダリングモジュール20、セグメント化モジュール22、及び複合キーモジュール30、及び論理モジュール25のそれぞれによって実行される機能モジュールが示されている。データ構造修正モジュール18がデータ構造を受信し(402)、データ構造の視覚化のレンダリングを引き起こし(404)、実行システムは、データ構造修正モジュール18内でデータ構造を修正することで生じる修正されたデータ構造418を受信する(406)。
レンダリングモジュール20は、データ構造修正モジュール18から、修正されたデータ構造を受信し、修正されたデータ構造と共にセグメント化テンプレートのレンダリングを引き起こす(410)。レンダリングモジュールは、更に、セグメント化ロジックを受信し(412)、セグメント化ロジックをセグメント化モジュール22に伝送する(414)。
セグメント化モジュール22は、セグメント化ロジックを受信し(420)、複合キーモジュール30に伝送される(424)複合キークエリを生成する(422)。
複合キーモジュール30は、(例えば、図1のリポジトリ12aから)データレコードを受信し(430)、そのデータレコードから複合キー値を生成する(434)ことによって複合キーが生成される。複合キーモジュール30は、(例えば、図3のデータリポジトリ12e内に)複合キー値を記憶する(436)。
次に、図14を参照すると、セグメント化モジュール22、及び複合キーモジュール30、及び論理モジュール25のそれぞれによって実行される機能モジュールを示すプロセス450が示されている。複合キーモジュール30が複合キークエリを受信し(438)、指定の基準を満たす複合キーを有するレコードを取得し(440)、取得したレコードをセグメント化モジュール22に伝送する。セグメント化モジュール22は、取得されたクエリされたレコードを複合キーモジュール30から受信し(426)、取得されたレコードを論理モジュール25に伝送する(428)。
論理モジュール25は、セグメント化モジュール22からの伝送レコードを受信し(450)、コンポーネント158によって表す実行可能ロジック等のセグメント化ロジックによって指定されるロジックを適用し(452)、その後、処理から生じたデータセットを出力する(454)。
上記の技法は、コンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えば、ソフトウェアは、(分散、クライアント/サーバ、グリッド等の様々なアーキテクチャのものであり得る)1つ又は複数のプログラムされた又はプログラム可能なコンピュータシステム上で実行される1つ又は複数のコンピュータプログラムによって手続きを形成し、かかるコンピュータシステムは、少なくとも1つのプロセッサ、少なくとも1つのデータ記憶システム(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)、少なくとも1つの入力装置又はポート及び少なくとも1つの出力装置又はポートをそれぞれ含む。ソフトウェアは、例えば、チャート及びフローチャートの設計及び構成に関係する他のサービスを提供するより大きいプログラムの1つ又は複数のモジュールを形成し得る。チャートのノード、リンク及び要素は、コンピュータ可読媒体内に記憶されるデータ構造又はデータリポジトリ内に記憶されるデータモデルに準拠する他の編成されたデータとして実装することができる。
本明細書に記載した技法は、デジタル電子回路又はコンピュータハードウェア、ファームウェア、ソフトウェア若しくはその組合せによって実装することができる。機器は、プログラム可能なプロセッサによって実行するために機械可読記憶装置(例えば、非一時的機械可読記憶装置、機械可読ハードウェア記憶装置等)内に有形に具体化されるか又は記憶されるコンピュータプログラム製品によって実装することができ、方法のアクションは、入力データに作用して出力を生成することにより、機能を実行するために命令のプログラムを実行するプログラム可能なプロセッサによって実行され得る。本明細書に記載した実施形態及び特許請求の範囲に記載の他の実施形態並びに本明細書に記載した技法は、データ及び命令をデータ記憶システムとの間でやり取りするために結合される少なくとも1つのプログラム可能なプロセッサと、少なくとも1つの入力装置と、少なくとも1つの出力装置とを含むプログラム可能なシステム上で実行可能な1つ又は複数のコンピュータプログラムによって有利に実装することができる。各コンピュータプログラムは、高水準手続き型プログラミング言語若しくはオブジェクト指向プログラミング言語又は必要に応じてアセンブリ言語若しくは機械言語によって実装することができ、何れにしても、言語は、コンパイラ型言語又はインタープリタ型言語であり得る。
コンピュータプログラムを実行するのに適したプロセッサは、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方並びに任意の種類のデジタルコンピュータの1つ又は複数の任意のプロセッサを例として含む。概して、プロセッサは、読取専用メモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信する。コンピュータの必須要素は、命令を実行するためのプロセッサ並びに命令及びデータを記憶するための1つ又は複数のメモリ装置である。概して、コンピュータは、データを記憶するための1つ又は複数の大容量記憶装置、例えば磁気ディスク、光磁気ディスク、光ディスクも含むか、又はそれからデータを受信するために、それにデータを転送するために若しくはその両方を行うためにそれらに動作可能に結合される。コンピュータプログラム命令及びデータを具体化するためのコンピュータ可読媒体は、半導体メモリ装置、例えばEPROM、EEPROM、フラッシュメモリ装置、磁気ディスク、例えば内蔵ハードディスク又はリムーバブルディスク、光磁気ディスク並びにCD ROMディスク及びDVD−ROMディスクを例として含むあらゆる形式の不揮発性メモリを含む。プロセッサ及びメモリは、専用論理回路によって補うことができるか、又は専用論理回路に組み込むことができる。上記のものの何れもASIC(特定用途向け集積回路)によって補うことができるか、又はASICに組み込むことができる。
利用者との対話を可能にするために、利用者に情報を表示するためのディスプレイ装置、例えばLCD(液晶ディスプレイ)モニタ並びに利用者がそれによりコンピュータに入力を与えることができるキーボード及びポインティング装置、例えばマウス又はトラックボールを有するコンピュータ上で実施形態を実装することができる。利用者との対話を可能にするために他の種類の装置も使用することができ、例えば、利用者に与えられるフィードバックは、任意の形式の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバック、触覚フィードバックであり得、利用者からの入力は、音響入力、音声入力又は触覚入力を含む任意の形式で受信され得る。
実施形態は、例えば、データサーバとしてバックエンドコンポーネントを含む計算システムにより、ミドルウェアコンポーネント、例えばアプリケーションサーバを含む計算システムにより、フロントエンドコンポーネント、例えば利用者がそれにより実施形態の実装と対話することができるグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータを含む計算システムにより、又はかかるバックエンドコンポーネント、ミドルウェアコンポーネント若しくはフロントエンドコンポーネントの任意の組合せを含む計算システムにより実装することができる。システムのコンポーネントは、デジタルデータ通信の任意の形式又は媒体、例えば通信ネットワークによって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(LAN)及び広域ネットワーク(WAN)、例えばインターネットを含む。
システム及び方法又はその一部は、ハイパーテキスト転送プロトコル(HTTP)を利用するインターネット上のサーバの集合である「ワールドワイドウェブ」(ウェブ又はWWW)を使用し得る。HTTPは、テキスト、グラフィックス、画像、音声、ビデオ、ハイパーテキストマーク付け言語(HTML)、プログラム等の様々な形式の情報であり得る資源へのアクセスを利用者に提供する既知のアプリケーションプロトコルである。利用者によってリンクが指定されると、クライアントコンピュータがウェブサーバにTCP/IPリクエストを行い、HTMLに従ってフォーマットされた別のウェブページであり得る情報を受信する。利用者は、画面上の指示に従うことにより、特定のデータを入力することにより、又は選択されたアイコンをクリックすることにより、同じサーバ又は他のサーバ上の他のページにアクセスすることもできる。所与のコンポーネントに関する選択肢を利用者が選択できるようにするために、ウェブページを使用する実施形態には、チェックボックス及びドロップダウンボックス等、当業者に知られている任意の種類の選択デバイスを使用できることにも留意すべきである。UNIXマシンを含むサーバは、様々なプラットフォーム上で実行されるが、Windows 2000/2003、Windows NT、Sun、Linux、Macintosh等の他のプラットフォームも使用され得る。コンピュータの利用者は、Firefox、Netscape Navigator、Microsoft Internet Explorer、Mosaicブラウザ等のブラウジングソフトウェアを使用することにより、ウェブ上のサーバ又はネットワーク上で入手可能な情報を閲覧することができる。計算システムは、クライアント及びサーバを含み得る。クライアントとサーバとは、概して、互いに離れており、典型的には通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント−サーバ間の関係を有するコンピュータプログラムによって生じる。
他の実施形態も本明細書及び特許請求の範囲の範囲及び趣旨に含まれる。例えば、ソフトウェアの性質により、上記の機能は、ソフトウェア、ハードウェア、ファームウェア、ハードワイヤリング又はそれらのものの何れかの組合せを使用して実装することができる。機能の一部が様々な物理的位置に実装されるように、機能を実装する特徴は、分散させることを含めて様々な位置に物理的に配置することもできる。本明細書及び本願の全体を通して、「1つの(a)」という語を使用することは、限定的な意味で使用するのではなく、従って「1つの(a)」という語について複数の意味又は「1つ又は複数」の意味を排除することを意図しない。加えて、仮特許出願に対して優先権が主張される限り、仮特許出願は、限定的ではなく、本明細書に記載した技法をどのように実装し得るかについての例を含むことを理解すべきである。
本発明の幾つかの実施形態を説明してきた。それでもなお、特許請求の範囲及び本明細書に記載した技法の趣旨及び範囲から逸脱することなしに様々な修正形態がなされ得ることを当業者は理解するであろう。