JP2019523470A - データを処理するための方法及び装置 - Google Patents
データを処理するための方法及び装置 Download PDFInfo
- Publication number
- JP2019523470A JP2019523470A JP2018557833A JP2018557833A JP2019523470A JP 2019523470 A JP2019523470 A JP 2019523470A JP 2018557833 A JP2018557833 A JP 2018557833A JP 2018557833 A JP2018557833 A JP 2018557833A JP 2019523470 A JP2019523470 A JP 2019523470A
- Authority
- JP
- Japan
- Prior art keywords
- event
- information
- data
- data sets
- stream
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
- A63F13/61—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor using advertising information
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/75—Enforcing rules, e.g. detecting foul play or generating lists of cheating players
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/02—Marketing; Price estimation or determination; Fundraising
- G06Q30/0201—Market modelling; Market analysis; Collecting market data
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Strategic Management (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Accounting & Taxation (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Entrepreneurship & Innovation (AREA)
- General Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Game Theory and Decision Science (AREA)
- Economics (AREA)
- Marketing (AREA)
- Computational Linguistics (AREA)
- Information Transfer Between Computers (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
コンピュータデバイスはイベントデータのストリームを受信し、そのイベントデータはイベント自体に関するデータとデバイス又はユーザの識別子とを有する。1つ又は複数のイベントが、様々な識別子について記憶され、状態として使用される。2つ以上の異なるスクリプトが実行され、少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって共有される。【選択図】 図2
Description
本発明はデータを処理するための方法及び装置に関する。
多くの組織は、大量のデータを継続的に収集しており、これらのデータはその後分析可能である。この分析(analysis)は、リアルタイムアナリティクス(analytics)を伴う場合や履歴データの分析を伴う場合がある。収集されているデータは時間の経過と共に変化し得る。
データがある企業の1つ以上のゲームに関するものである場合の例について検討する。分析は、単一のゲームに関連するか又はいくつかの異なるゲームについて収集されたデータに関連し得る。更に、2つ以上のプラットフォームに様々なゲームが提供される可能性がある。
いくつかのコンピュータで実行されるゲームは非常に多数のプレーヤを有する場合があり、各プレーヤは、アイデンティティ(identity)(ユーザ名)、電子メール、スコア、プレー時間、ユーザによって提供され得る他の関連データであって、例えば、ソーシャルネットワークアカウント及びこれに関連する友人などの関連データを有する。
ゲーム分析は、ゲームに関連するデータを分析するのに使用される。ゲーム分析データは、ユーザの振る舞いを理解すること、ゲームを強化すること、異常検出などのいくつかの異なる目的のために使用することができる。データ分析のために非常に大量のデータを管理することは難しいことである。
一側面によると、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行することを含む方法が提供される。
この方法は、複数の第2のデータセットの第2のストリームを出力することを含んでもよく、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、上記少なくとも2つの異なるイベントが上記第1のストリームにおける様々な第1のデータセットで受信されたものである。
この方法は、少なくとも1つの更なるスクリプトを、その後、複数の異なるスクリプトが実行されている間に受信して、上記複数の異なるスクリプトに加えて前記少なくとも1つの更なるスクリプトを実行することを含んでもよい。
この方法は、前記少なくとも1つの更なるスクリプトについて、前記複数のスクリプトの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの更なるスクリプトが使用するか否か、又は、前記少なくとも1つの更なるスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定し、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶することを含んでもよい。
複数の第1のデータセットの第1のストリームは第1のエンティティにて受信されてもよく、複数の第2のデータセットの第2のストリームは第2のエンティティに出力されてもよく、前記方法は、複数の第3のデータセットの第3のストリームを第3のエンティティにて受信することであって、第3のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第3のデータセットが様々な識別子に関連付けられるものであると共に様々な第3のデータセットが様々なイベントに関する情報を有するものである、前記複数の第3のデータセットの第3のストリームを第3のエンティティにて受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用されるものである、前記複数の異なるスクリプトを実行すること、及び、第3のエンティティから第2のエンティティに複数の第4のデータセットの第4のストリームを出力することを更に含んでもよく、少なくとも1つの第4のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第3のストリームにおける様々なデータセットで受信されたものである。
この方法は、第2のストリーム及び第4のストリームのデータにデータを集約することを含んでもよい。
少なくとも1つのイベントに関する情報を記憶することは、少なくとも1つの他のイベントにとって有効となり得る1つ以上のイベントに関する情報を記憶することであってもよい。
この方法は、前記イベントに関する情報を処理して、当該処理された情報を前記イベントに関する情報としてストアに記憶することを含んでもよい。
この方法は、各識別子に関連する少なくとも1つの記憶されたイベントに関する更新された情報を受信して、前記更新された情報を記憶することを含んでもよく、前記更新された情報が前記複数のスクリプトの1つ以上のスクリプトによって使用される。
この方法は、各識別子に関連する少なくとも1つのイベントに関する更新された情報を受信し、前記更新された情報を使用してイベントに関する更新された情報を決定し、当該更新された情報を記憶することを含んでもよく、前記更新された情報が前記複数のスクリプトの1つ以上のスクリプトによって使用される。
この方法は、各識別子に関連する更新情報を受信し、各識別子に関連する少なくとも1つのイベントに関する記憶された情報を読み出し、記憶された情報及び受信した更新情報を使用して更新された情報を決定し、前記識別子のそれぞれについて、前記複数のスクリプトの1つ以上のスクリプトによる使用のために前記更新された情報を記憶することを含んでもよい。
この方法は、複数の異なるデバイスから前記第1のストリームのデータセットを受信することを含んでもよい。
識別子は、前記第1のストリームにおける各データセットを提供する各デバイスに関連するユーザを識別するものであってもよい。
識別子は、前記第1のストリームにおける各データセットを提供するデバイスを識別するものであってもよい。
第1のストリームにおける複数の第1のデータセットは、コンピュータで実行されるゲームのプレー中に生成されたイベントに関する情報を含むものであってもよい。
他の側面によると、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、少なくとも1つの第1のスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも1つのスクリプトによって使用される、前記少なくとも1つの第1のスクリプトを実行すること、及び、少なくとも1つの第2のスクリプトを、その後、少なくとも1つの第1のスクリプトが実行されている間に受信して、前記少なくとも1つの第1のスクリプトに加えて前記少なくとも1つの第2のスクリプトを実行することを含む方法が提供される。
この方法は、複数の第2のデータセットの第2のストリームを出力することを含んでもよく、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第1のストリームにおける様々な第1のデータセットで受信されたものである。
この方法は、前記少なくとも1つの第2のスクリプトについて、上記第1のスクリプトのうちの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの第2のスクリプトが使用するか否か、又は、前記少なくとも1つの第2のスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定して、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶することを含んでもよい。
他の側面によると、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、前記様々なイベントのうちの所与のイベントを受信したことに応答して、前記イベントの少なくとも1つに関する記憶された情報を含む出力を提供することを含む方法が提供される。
前記出力は前記様々なイベントのうちの所与のイベントに関する情報を更に含むものであってもよい。
一側面の特徴と他の側面による任意の特徴とを組み合わせることができることが認識されるべきである。
この方法は、コンピュータやサーバなどの任意の適切なデバイスにおいて実現することができる。コンピュータ又はサーバなどには、1つ以上のコンピュータ実行可能命令(コンピュータプログラム)を実行するように構成された少なくとも1つのプロセッサが設けられ得る。少なくとも1つのメモリが、データ及びコンピュータプログラムコード又は命令を記憶するために設けられてもよい。
一側面によると、少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含むコンピュータ装置であって、少なくとも1つのメモリ及びコンピュータコードが少なくとも1つのプロセッサと共に、少なくとも、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行することを前記コンピュータ装置に実行させるように構成される、コンピュータ装置が提供される。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、複数の第2のデータセットの第2のストリームを出力することを実行させるように構成されていてもよく、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第1のストリームにおける様々な第1のデータセットで受信されたものである。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、少なくとも1つの更なるスクリプトを、その後、複数の異なるスクリプトが実行されている間に受信して、前記複数の異なるスクリプトに加えて前記少なくとも1つの更なるスクリプトを実行させるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、前記少なくとも1つの更なるスクリプトについて、前記複数のスクリプトの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの更なるスクリプトが使用するか否か、又は、前記少なくとも1つの更なるスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定して、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶させるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、少なくとも1つの他のイベントにとって有効となり得る少なくとも1つのイベントに関する情報を記憶させるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、前記イベントに関する前記情報を処理し、当該処理された情報を前記イベントに関する情報として記憶させるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、各識別子に関連する少なくとも1つの記憶されたイベントに関する更新された情報を受信し、当該更新された情報を記憶して、前記更新された情報が前記複数のスクリプトの1つ以上のスクリプトによって使用されるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、各識別子に関連する少なくとも1つのイベントに関する更新された情報を受信し、当該更新された情報を使用してイベントに関する更新された情報を決定し、当該更新された情報を記憶して、前記更新された情報が前記複数のスクリプトの1つ以上のスクリプトによって使用されるように構成されていてもよい。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、各識別子に関連する更新情報を受信し、各識別子に関連する少なくとも1つのイベントに関する記憶された情報を読み出し、当該記憶された情報及び受信した更新情報を使用して更新された情報を決定し、前記複数のスクリプトの1つ以上のスクリプトによる使用のために前記識別子のそれぞれについて前記更新された情報を記憶するように構成されていてもよい。
この装置は、複数の異なるデバイスから前記第1のストリームのデータセットを受信してもよい。
前記識別子は、前記第1のストリームにおける各データセットを提供する各デバイスに関連するユーザを識別するものであってもよい。
前記識別子は、前記第1のストリームにおける各データセットを提供するデバイスを識別するものであってもよい。
イベントは、イベント識別子と共に識別されたイベントの値又は特性などを定義するデータを含むものであってもよい。
第1のストリームにおける第1のデータセットは、コンピュータで実行されるゲームのプレー中に生成されたイベントに関する情報を含むものであってもよい。
複数の第1のデータセットの第1のストリームは前記コンピュータ装置にて受信されてもよく、前記コンピュータ装置は第1のエンティティであり、複数の第2のデータセットの第2のストリームは第2のエンティティに出力されてもよい。第3のエンティティである更なる装置が設けられてもよい。この第3のエンティティは、少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含んでもよく、少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、少なくとも、複数の第3のデータセットの第3のストリームを受信することであって、第3のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第3のデータセットが様々な識別子に関連付けられるものであると共に様々な第3のデータセットが様々なイベントに関する情報を有するものである、前記複数の第3のデータセットの第3のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行すること、及び、前記第2のエンティティに複数の第4のデータセットの第4のストリームを出力することを第3のエンティティに実行させるように構成されている。
1つのシステムには第1、第2及び第3のエンティティが設けられてもよい。第2のエンティティは、少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含んでもよく、少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、少なくとも、前記第2のストリーム及び前記第4のストリームのデータにデータを集約することを第2のエンティティに実行させるように構成されている。
一側面によると、少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含むコンピュータ装置であって、少なくとも1つのメモリ及びコンピュータコードが少なくとも1つのプロセッサと共に、少なくとも、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、少なくとも1つの第1のスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも1つのスクリプトによって使用される、前記少なくとも1つの第1のスクリプトを実行すること、及び、少なくとも1つの第2のスクリプトを、その後、少なくとも1つの第1のスクリプトが実行されている間に受信して、前記少なくとも1つの第1のスクリプトに加えて前記少なくとも1つの第2のスクリプトを実行することを前記コンピュータ装置に実行させるように構成されている、コンピュータ装置が提供される。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、複数の第2のデータセットの第2のストリームを出力することを実行させるように構成されてもよく、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第1のストリームにおける様々な第1のデータセットで受信されたものである。
少なくとも1つのメモリ及びコンピュータコードは少なくとも1つのプロセッサと共に、前記少なくとも1つの第2のスクリプトについて、前記第1のスクリプトの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの第2のスクリプトが使用するか否か、又は、前記少なくとも1つの第2のスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定して、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶するように構成されていてもよい。
一側面によると、少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含むコンピュータ装置であって、少なくとも1つのメモリ及びコンピュータコードが少なくとも1つのプロセッサと共に、少なくとも、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記第1のデータセットの第1のストリームを受信すること、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、前記様々なイベントのうちの所与のイベントを受信したことに応答して、前記イベントの少なくとも1つに関する記憶された情報を含む出力を提供することを前記コンピュータ装置に実行させるように構成されている、コンピュータ装置が提供される。
前記出力は前記様々なイベントのうちの所与のイベントに関する情報を更に含むものであってもよい。
一側面の特徴と他の側面による任意の特徴とを組み合わせることができることが認識されるべきである。
他の側面によると、コンピュータ装置を制御するための命令をコード化した非一過性(non-transitory)のコンピュータ可読媒体であって、命令がプロセッサ上で実行されたとき、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信するステップと、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶するステップと、複数の異なるスクリプトを実行するステップであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行するステップと、をプロセッサに実行させる、非一過性のコンピュータ可読媒体が提供される。
他の側面によると、コンピュータ装置を制御するための命令をコード化した非一過性のコンピュータ可読媒体であって、前記命令がプロセッサ上で実行されたとき、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信するステップと、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶するステップと、少なくとも1つの第1のスクリプトを実行するステップであって、前記少なくとも1つのイベントに関する情報が少なくとも1つのスクリプトによって使用される、前記少なくとも1つの第1のスクリプトを実行するステップと、少なくとも1つの第2のスクリプトを、その後、少なくとも1つの第1のスクリプトが実行されている間に受信して、前記少なくとも1つの第1のスクリプトに加えて前記少なくとも1つの第2のスクリプトを実行するステップと、をプロセッサに実行させる、非一過性のコンピュータ可読媒体が提供される。
他の側面によると、コンピュータ装置を制御するための命令をコード化した非一過性のコンピュータ可読媒体であって、前記命令がプロセッサ上で実行されたとき、複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信するステップと、識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶するステップと、前記様々なイベントのうちの所与のイベントを受信したことに応答して、前記イベントの少なくとも1つに関する記憶された情報を含む出力を提供するステップと、をプロセッサに実行させる、非一過性のコンピュータ可読媒体が提供される。
前記出力は、前記様々なイベントのうちの所与のイベントに関する情報を更に含むものであってもよい。
一側面によると、1つ以上のイベントストリームを受信することを含む、コンピュータで実行される方法が提供される。
イベントストリームは、1人以上のユーザからのゲームデータを含むものであってもよい。
この方法は、前記1つ以上のイベントストリームに応じて少なくとも1つの出力を計算するための少なくとも1つのスクリプト又はメソッド(method)を実行することを含んでもよい。
前記出力は、少なくとも1つのウィンドウ集計(windowed aggregate)を含むものであってもよい。
少なくとも1つの出力又は少なくとも1つのウィンドウ集計の前記計算において状態情報(state information)が使用されてもよい。
この方法は、1つ以上の様々なフォーマットで出力を提供することを含んでもよい。
この方法は、状態情報を更新することを含んでもよい。この状態情報は、前記イベントストリームにおける情報に応じて更新されるものであってもよい。
ウィンドウ集計は、定義された時間ウィンドウにおいてイベントストリームに関連する値を集計するものであってもよい。
ある実施形態では、出力は、複数の異なるフォーマットに提供されてもよいし、並列に提供されてもよい。
ある実施形態は抽象化(abstraction)を提供する。抽象化はフィールドであってもよい。抽象化はユーザが定義した抽象化であってもよい。抽象化は前記状態情報を定義するものであってもよい。これは、システムにとってトランスペアレントな手法で実行され得る。
抽象化は1つ以上の属性(attributes)を有することができる。属性は、フィールド名、更新機能、イニシャライザ(initializer)という属性の1つ以上を含んでもよい。フィールド名は、例えば、前記状態情報としての関連する値にアクセスするためのストリング参照などの参照であってもよい。更新機能は、前記イベントストリームにおける1つ以上のイベントに応答して前記抽象化がどのように更新されるかを定義するものであってもよい。イニシャライザは、デフォルト値、初期値又はイニシャライザ機能を定義するものであってもよい。
ある実施形態では、前記イベントストリームにおけるイベントを受信したことに応答して、前記イベントに関連するユーザに関連する状態が前記抽象化からアクセスされる。状態情報はイベントストリームの処理に使用される。
新たな抽象化を、スクリプトのイニシャライズメソッドにおいてレジスタスクリプトに渡すことによって登録することができる。
更なる実施形態では、受信したイベントストリームは実質的にライブデータのストリームを含むものであってもよく、上述した処理は実質的にリアルタイムアナリティクスを提供する。
他の側面では、コンピュータプログラムプロダクトは、実行されたときに上述した方法のいずれかを提供するように構成されたコンピュータ実行可能コードを含む。
また、上述した方法を実行するように適合されたプログラムコード手段を含むコンピュータプログラムが提供され得る。コンピュータプログラムは、キャリア媒体を用いることによって、記憶すること及び/又は具体化することができる。
以上では、多くの異なる実施形態が記載されている。以上説明した実施形態のうちの任意の2つ以上の組み合わせにより更なる実施形態を提供できることが認識されるべきである。
また、以下の詳細な説明及び添付の特許請求の範囲には、様々なその他の側面及び更なる実施形態が記載されている。
ここで、添付した図面を単なる例示として参照する。
ここで、ビッグデータの取り扱いに関して、ある実施形態について説明する。ある実施形態を、ゲームデータの取り扱いというコンテキストで説明する。この実施形態は任意のタイプのビッグデータを取り扱うのに用いられるが、本発明はゲームデータの取り扱いに限定されるものではないことを認識されたい。例えば、ある実施形態は、1つ以上のウェブサイト又はソーシャルメディアプラットフォームとのユーザインタラクションがトラッキングされるシナリオに適用されてもよい。他の実施形態は、多数のトランザクション又はイベントが発生する環境で適用されてもよい。例えば、ある実施形態はトランザクションを共有するのに適用されてもよい。ある実施形態は車両交通シナリオ又は気象監視アプリケーションに適用されてもよい。
図1は、ある実施形態のシステム300を示す概略図である。システム300は、ゲームプレーヤの詳細、プロファイル及びハイスコアなどのデータベースを記憶可能なサーバ320を含む。実際には、1つ以上のデータベースが提供され得る。2つ以上のサーバが提供される場合、データベースは、1つのデータベースとして提供される場合もあれば、2つ以上のサーバ320にわたって提供される場合もある。2つ以上のサーバが提供される場合、異なるサーバを他のサーバに対して異なる位置に提供することができる。
サーバ320は、また、ゲームデータ機能を有することができる。サーバ320は、コンピュータゲームプログラムを記憶するためのメモリと、このゲームプログラムを実行するためのプロセッサと、を含むことができる。
ある実施形態では、データベース機能は、ゲーム又は他のサポートされた機能を提供するものに対して様々なエンティティによって提供されてもよい。
サーバは、例えばインターネット310を介して1つ以上のユーザデバイス305と通信することができ、Facebook(登録商標)などのソーシャルネットワーク330への接続を更に提供することができる。任意の他のネットワークが、代替的に又は追加的に、インターネットの代わりに又はインターネットに加えて他のネットワークによって使用可能であることを認識されたい。
実施形態は様々なゲームシステムアーキテクチャにデプロイできることを認識されたい。例えば、コンピュータゲームは、ユーザデバイス200のメモリ内に記憶されると共にユーザデバイス200のプロセッサ上で実行されるコンピュータゲームとして実現することができる。但し、ある実施形態では、サーバ320はゲームのいくつかの要素を取り扱うことができる。単なる例示として、ゲームアプレットはユーザデバイス200に提供されてもよく、ローカルで実行中のアプレットは、例えば、ユーザデバイス200上でそのゲームプレーに関するグラフィックス、サウンド及びユーザインタラクションを生成することになる。サーバ320にフィードバックされるデータが存在する場合があり、これにより、他のユーザデバイス305とのインタラクションが可能になる。データがフィードバックされることは、スコアリング及び/又はクロスプラットフォーム同期も可能にし得る。
ある実施形態では、ゲームは、例えば、サーバ320などのシステムのメモリに記憶されるコンピュータプログラムであって、ゲームサーバのプロセッサ上で実行されるコンピュータプログラムとして実現することができる。データストリーム又は更新がユーザデバイス200に供給されて、ユーザデバイス200がユーザデバイス200のブラウザ内にグラフィックス及びサウンドを提供し表示することが可能となる。このようなアプローチは、ウェブサービスアプローチと呼ばれることがある。しかしながら、このようなアプローチは必ずしもインターネットの使用を必要とするものではないことを認識されたい。
他の実施形態では、サーバは、システムによってサポートされるアプリケーション次第で、様々なノンゲーム(non-game)機能を有することができることを認識されたい。
データパイプラインを示す概略図である図2を参照する。この図には、例えば、データウェアハウスにゲームイベントを記憶できる構成が示されている。データウェアハウスに記憶されているデータを分析することができる。パイプラインは、ゲームサーバ510、TSV(タブ分離値)ログファイル520、ログサーバ530及びデータウェアハウス540を含む。データウェアハウスでは、データはローデータから次元モデルに処理され、その次元モデルはレポートを提供するのに使用され得る(又はデータ科学者に直接提供され得る)。抽出、変換、挿入というETLプロセスを、ローデータを次元モデルに変換するのに使用することができる。レポートはローデータ及び/又は次元モデルから提供され得る。
ここで、バックエンドアーキテクチャを示す図3を参照する。このアーキテクチャも、例えば、データウェアハウスにゲームイベントを記憶できる構成を有する。データウェアハウスに記憶されているデータを、分析ツール350を使用して分析することができる。図1に関連して説明したものなどのユーザデバイス200が提供されている。ユーザデバイス200は、インターネット310又は他の適切なネットワークを介してゲームサーバ340と通信する。ゲームサーバ340は任意の適切なサーバであってもよい。ゲームサーバはゲームサービスを提供する。ゲームサーバは、ユーザデバイス上のクライアントからの要求又はトラッキングコール(tracking call)を聴取することができる。
1つ以上のゲームデータサーバ342は、プレーヤの現在の進捗状況及び他の関連する状態を記憶するように構成されている。サーバを、共有データベースサーバ又は1つ以上の任意の他の適切なサーバにすることができる。ある実施形態では、これらの1つ以上のサーバは、リレーショナルデータベース管理システムであってもよい。ある実施形態では、ゲームデータサーバ内のデータは、実際のゲームで使用されるだけのデータを含んでもよい。ゲームデータフォーマットは、ある実施形態では、関連するゲームに依存するものであってもよい。他の実施形態では、データフォーマットは2つ以上のゲームにわたって同じものであってもよい。
着信イベント(incoming events)は、データベースクラスタ344に記憶され、また、着信イベントを、データウェアハウス及びビジネスインフラストラクチャ346内のファイルに書き込むことができる。データウェアハウス及びビジネスインフラストラクチャを分散ファイルシステムにすることができる。各イベント又は少なくともいくつかのイベントはテーブルにマッピングされる。テーブルを、データキューブ348で提供することができる。テーブルの使用により、データに関する集計(aggregates)の計算及び/又はより複雑なバッチ分析の実行をより単純化することを可能にする。
ある実施形態はルールベースのイベントアグリゲータRBEAに関する。ある実施形態では、RBEAはスケーラブルリアルタイムアナリティクスプラットフォームを提供する。このプラットフォームはストリームアナリティクスに使用することができる。このプラットフォームは、1つ以上のプロセッサ上で実行されるコンピュータ実行可能コードによって実現することができる。1つ以上のプロセッサは、1つ以上のサーバ及び/又は1つ以上のコンピューティングデバイスに設けることができる。これは、例えば、ゲームサーバによって生成されるデータについて実行することができる。当然、他の実施形態では、生成又は提供されるデータは、サポートされる機能に依存することになる。この分析は、データハウスに記憶されているデータについて分析が実行される図2又は図3に関連して述べた例とは異なり、「リアルタイム」のものである。
ストリームアナリティクスは、代替的にデータレコード又はデータと呼ばれるイベントを使用することができる。
これらのイベントは、リアルタイムに又はこれらが受信された後に分析することができる。イベントは1つ以上のストリームで提供することができる。単一のストリームからのデータ又は2つ以上のストリームからのデータを使用することができる。
ある実施形態では、このアナリティクスは、2つ以上のストリーム同士を比較するものであってもよいし、1つ以上のストリームと履歴値及び/又はモデルとを比較するものであってもよい。
このアナリティクス次第で、特定の状況が発生した場合に、異常を検出することができるか又はアラートを発動することができる。この状況はエラー状況又は任意の他の適切な状況であってもよい。ある実施形態では、アナリティクスを異常検出に用いてもよいことを認識されたい。但し、これは例示であり、例えば、データの収集及び集計、トレンドの識別及び/又は任意のその他の解析のサポートを可能にする他のタイプの機能を代替的に又は追加的にサポートすることができる。
ある実施形態は、出力として集計データを提供することができる。
出力をユーザに提供することができる。
この出力は、例えば、ダッシュボード上に表示されてもよい。
この出力は、1つ以上のプロセッサによってサポートされる更なる計算プロセスへの入力として提供されてもよい。プロセッサは、例えば、1つ以上のコンピュータ又はサーバ内にあってもよい。
ある実施形態は、分散型ビッグデータアナリティクスのためのフレームワークを使用することができる。このフレームワークは、分散型ストリーミングデータフローエンジンを使用することができる。このフレームワークは、データ並列のパイプライン化方式でデータフロープログラムを実行することができる。このフレームワークは、パイプライン化ランタイムシステムを有することができ、このパイプライン化ランタイムシステムは、バルク/バッチ及び/又はストリーム処理プログラムの実行を可能にし得る。反復アルゴリズムの実行はネイティブサポートされ得る。プログラムは、データベースクラスタ環境で実行可能なデータフロープログラムにコンパイルすることができる。中央データ記憶システム又は分散型データ記憶システムを使用することができる。データは待ち行列から又は任意の他の適切な手法で提供することができる。
ビッグデータの問題に対して何らかのコンテキストを提供するために、本出願人は、3億9千万を超える月極固有ユーザと、種々のゲーム及びシステムから毎日受信した300億を超えるイベントを有する。これらの数字は、例示であり、実施形態では、これらの数字例よりも多いか又はこれらの数字例未満のイベントを使用できることを認識されたい。実施形態は、かなり小さいデータセットに適用可能であると共にビッグデータのコンテキストにおいて適用可能であることを認識されたい。
ビッグデータを用いることで、あらゆるストリームアナリティクスユースケースが現実の技術的難題になる。データアナリストのためのコンピュータで実行されるツールであって、これらの適用のためのフレキシビリティを維持しながらこれら大量のデータストリームを扱うことができる、前記データアナリストのためのコンピュータで実行されるツールを有することは望ましいことである。一般に、複雑なデータストリームアナリティクスは専門家の知識を必要としていた。ある実施形態で提供されるアプローチは複雑なデータストリームアナリティクスを単純化して専門家の知識の必要性が少なくなる。
ある実施形態は、代替的に比較的小さいデータストリームで使用できることを認識されたい。
ある実施形態では、分析及び/又はコアゲームの外部の他のデータニーズのためにイベントデータが使用される。ある実施形態の例について説明するために、イベントデータの一例はゲームデータである。しかしながら、サポートされる機能次第では、そのデータが任意の他の適切なデータであってもよいことを認識されたい。
ある実施形態では、イベントデータは、ゲーム内で何が起きたかを定義する固定スキーマ(タブ区切りテキスト)を備えた簡単なテキストログにすることができる。サポートされる機能次第では、そのデータが任意の他の適切なフォーマットであってもよいことを認識されたい。
ゲームスタートを記述するイベントの一例は以下の通りである。
第1のフィールドはイベント番号を提供する。第2のフィールドは発生したイベントを記述する。第3のフィールドはユーザアイデンティティを規定する。第4のフィールドはエピソードを記述し、このエピソードにおいてイベントが発生している。第5のフィールドはレベルを記述し、このレベルにおいてイベントが発生している。第6のフィールドはゲームラウンドを記述し、このゲームラウンドにおいてゲームイベントが発生している。あるゲームは、1つ以上のエピソード又はチャプタを有してもよく、1つ以上のエピソード又はチャプタのそれぞれが1つ以上のレベルを含む。あるゲームはレベルのみを有してもよい。
受信したローイベントデータの一例は以下の通りである。
20131017T113040.393+0200 17 10005 1006627249 7 12 1382002240393
20131017T113040.393+0200 17 10005 1006627249 7 12 1382002240393
他の実施形態では任意の他の適切なフォーマットがイベントデータに使用されてもよいことを認識されたい。
データのサブセットをデータベースクラスタにロードすることができる。これにより、より高速のアドホッククエリをサポートすること及び/又は複雑なデータベースクエリをより良好にサポートすることができる。
ある実施形態では、全てのストリームからのデータをデータベース/データベースクラスタに集約することにより、リアルタイム集計をイベントについて計算することができ、リリース監視及び/又はリアルタイムダッシュボードのためのデータソースを提供する。
データウェアハウスエンジニア及びデータ科学者は、通常、リレーショナルデータ及びこれに関連するツールを用いて作業する。イベントストリームデータは、複雑な分析になると、比較的異なる性質を有する。基本的な集計及び/又は何らかの単純化を使用して数ある難題に対処することができる。典型的には、問い合わせ言語を使用することができる。但し、少なくともいくつかのイベントは、例えば発生した時間及び/又はコンテキストによって他のイベントに関係付けられてもよい。
しかしながら、ゲームスタート前にユーザが何を行ったか又はゲーム内をどのように移動したか(ファネル、セッションなど)などの問い合わせの場合、基本的なデータベース問い合わせ言語は限定される。
これらの問題に対処して異なるイベント同士を関係付けるために現在提案されているオプションは以下の通りである。
1.置換(replacement)及びリレーショナルキーなど、ゲーム内で求められるコンテキストを追加することをゲーム開発者に要求すること。しかしながら、これは、開発作業を複雑にし得る。また、これは、どのデータが必要になり得るかを前もって理解することをゲーム開発者に要求するものである。
2.関心があるものをイベントテーブルから選択し、プレーヤ/時間についてイベントをソートし、カスタムレジューサなど、データを関連付けるコードであって、コンピュータで実行されるコードによってそれを実行すること。これは、毎日(daily)の処理において比較的非効率的となり得る。イベントは、イベントあたり1つのテーブルを用いて記憶され、異なるイベント配列とともに発生した順序に戻す複数の異なるクエリで直ちにフォローアップされる。そのデータは日常のバッチが実行されたときにのみ見ることができる。
3.例えば、基本的なデータベース言語で実行可能な単純化されたモデルを作成すること。これは常に可能であるわけではない。
1.置換(replacement)及びリレーショナルキーなど、ゲーム内で求められるコンテキストを追加することをゲーム開発者に要求すること。しかしながら、これは、開発作業を複雑にし得る。また、これは、どのデータが必要になり得るかを前もって理解することをゲーム開発者に要求するものである。
2.関心があるものをイベントテーブルから選択し、プレーヤ/時間についてイベントをソートし、カスタムレジューサなど、データを関連付けるコードであって、コンピュータで実行されるコードによってそれを実行すること。これは、毎日(daily)の処理において比較的非効率的となり得る。イベントは、イベントあたり1つのテーブルを用いて記憶され、異なるイベント配列とともに発生した順序に戻す複数の異なるクエリで直ちにフォローアップされる。そのデータは日常のバッチが実行されたときにのみ見ることができる。
3.例えば、基本的なデータベース言語で実行可能な単純化されたモデルを作成すること。これは常に可能であるわけではない。
従って、ある実施形態は、リアルタイムに分析を実行することが可能になるようなRBEAを提供することを目的とする。従って、RBEAは、ライブストリームから直接的に結果を提供しながら、イベント又はデータを時間で接続すること及び/又はイベント又はデータに関するコンテキスト情報をスケーラブルな手法で記憶することをサポートすることができる。RBEAは、使いやすいウェブインターフェースを用いて幅広くアクセス可能にすることができる。
ある実施形態では、RBEAは、大規模で複雑なストリーミングアナリティクスをユーザのためにアクセス可能とするように設計されたプラットフォームである。RBEAは、オブジェクト指向プログラミング言語のスクリプトを簡単にデプロイできるようなものであってもよい。このオブジェクト指向プログラミング言語は任意の適切なオブジェクト指向プログラミング言語にすることができる。表示されるインターフェースは、ウェブインターフェース又は任意のその他の適切なインターフェースにすることができる。スクリプトは、いくつかの「クリック」又はユーザインターフェースとの任意の他の適切なユーザ対話を用いてデプロイすることができる。ある実施形態では、スクリプトは、1つ以上の他のスクリプトを実行しながらデプロイされてもよい。RBEAは、ユーザがデプロイメントの詳細を有する必要なしに瞬時に結果を提供するように構成することができる。このアーキテクチャにより、大型のストリーミングクラスタ及びデプロイメントを管理する負担からデータアナリスト又は他のユーザを解放することができる。
RBEAスクリプトは、ハードウェアクラスタ上で実行することができ、ライブイベントストリームから実質的にリアルタイムに結果を生み出すことができる。ある実施形態では、このスクリプトは、代替的に又は追加的に、記憶されているデータを用いて実行され得る。RBEAを使用すると、ユーザ状態を定義して更新するために、1つ又は複数の異なる出力フォーマットに出力を書き込むために、及び/又は、すべてのユーザ又はユーザのサブセットにわたるグローバルアグリゲータを作成するために1つ以上のストリームアナリティクスツールに対して容易にアクセスすることが可能になる。
RBEAのAPI(アプリケーションプログラムインターフェース)は、スケールにおいて依然として良好なパフォーマンスを達成しながら、基礎となるストリーミングエンジンの知識を必要とせずにストリームアナリティクスタスクが容易に作成可能となるように構成される。
次に、簡単なRBEAスクリプトの一例を提供する。スクリプトは、RBEAによって実行されるユーザ定義のプログラムである。
以下のスクリプトは、理解しやすくするために注釈が付けられており、テキストファイルにゲームエンドイベントを書き込みながら、1分間(1-minute windows)の終了ゲームの全てをカウントするものである。
//所与の時間でゲームを終了させた人の数をカウント。
//ライブイベントを受信するメソッドを定義。
def processEvent(event, context){
//"context"から出力データを収集しメモリ内の変数に割り当てる。"output"
def output = context.getOutput()
//"context"からアグリゲータ変数(aggregator variables)を収集しメモリ内の変数に割り当てる。//"agg"
def agg = context.getAggregators()
//60秒までカウントするエンプティカウンタ(empty counter)を作成。
//ウィンドウサイズが1分のカウンタを作成。
def gameEndCounter = agg.getCounter("GameEnds", 60000)
//この関数に渡されたイベントがゲームエンドイベントであるか否かを判定。
if(isGameEnd(event)){
//ゲームエンドであればカウンタの値を1増やす。
gameEndCounter.increment()
//イベント/結果をストレージに書き込む。
output.writeToFile("GameEndEvents", event)
}
}
//所与の時間でゲームを終了させた人の数をカウント。
//ライブイベントを受信するメソッドを定義。
def processEvent(event, context){
//"context"から出力データを収集しメモリ内の変数に割り当てる。"output"
def output = context.getOutput()
//"context"からアグリゲータ変数(aggregator variables)を収集しメモリ内の変数に割り当てる。//"agg"
def agg = context.getAggregators()
//60秒までカウントするエンプティカウンタ(empty counter)を作成。
//ウィンドウサイズが1分のカウンタを作成。
def gameEndCounter = agg.getCounter("GameEnds", 60000)
//この関数に渡されたイベントがゲームエンドイベントであるか否かを判定。
if(isGameEnd(event)){
//ゲームエンドであればカウンタの値を1増やす。
gameEndCounter.increment()
//イベント/結果をストレージに書き込む。
output.writeToFile("GameEndEvents", event)
}
}
ライブイベント(live events)を1つずつ受信するプロセスイベント(processEvent)メソッドが定義される。出力オブジェクトはコンテキスト(context)から得られる。ウィンドウサイズが1分(即ち、60,000ミリ秒)のGameEndsと呼ばれるカウンタが作成される。すべての着信イベントについて、これがゲームエンドであるか否かがチェックされ、ゲームエンドである場合、カウンタの値を1増やし(incremented)、GameEndEventsという名前のテキストファイルにイベントが書き込まれる。このスクリプトはFinishedGamesとして保存することができる。
ウェブインターフェースを示す図4を参照する。スクリプトをデプロイ(deploy)するため、スクリプトを編集(edit)するため、又は、スクリプトを削除(delete)するためのオプションとともに、保存スクリプト(saved scripts)のリストが示されている。デプロイオプションが選択された場合、インターフェースはどのスクリプトが実行されているかを示すことになる。スクリプトの出力は、表示オプションを使用して表示することができる。
この例では、RBEAは、表示ボタンを選択して即時のデータ探索を提供することにより簡単にアクセス可能なアグリゲータ出力に関するテーブルを作成した。この点に関しては、データを表示可能な2つのフォーマットを示す概略図である図5を参照する。テキストファイルに書き込まれたゲームエンドイベントは、また、予定通りにアクセスされ、サーバからの要求でダウンロードされてもよい。特に、図5に示す例では、5つの1分周期で記録されたイベントは、テーブル形式で示され、また、グラフを使用して表現される。データが収集されると、そのデータは任意の適切なフォーマットで提示又は出力できることを認識されたい。ある実施形態では、当然、データは更に操作され得る。
いくつかのリアルワールドアプリケーションでは、アナリストは、現行セッション又は現行ゲームなど、ユーザに関して計算している状態を用いて作業し得る。数百万人のユーザのうちの数百人についての状態を計算することはアナリティクスアプリケーションにおける難題である。従来の解決策は、リアルタイムアプリケーションが、アプリケーションの要件に適合しなくなることの多い古いユーザ状態(例えば、バッチジョブによって予め計算されたもの)にアクセスだけができるようなものであった。
RBEAでは、開発者はユーザ状態をリアルタイムに作成及び更新することができる。これには、状態処理機能をサポートするハードウェア及び/又はコンピュータソフトウェアが使用される。RBEAは、システムにとってトランスペアレントな手法でユーザが任意のユーザ状態を定義可能にするフィールドと呼ばれる簡単な抽象化を提供する。
新たなフィールドを、スクリプトのイニシャライズメソッドにおけるレジストリのregisterField(フィールド)メソッドに渡すことによって登録することができる。
フィールドは、以下の属性の1つ以上を指定することによって定義される。
1.フィールド名:これは状態データStateDataからの値にアクセスするためのストリング参照である。
2.更新機能:着信イベントのそれぞれについてフィールドがどのように更新されるかを定義する。更新機能は、(State, Event)→Stateと、(Context, Event)→Stateという2つのタイプで現れる。
3.イニシャライザ:デフォルトでは、状態はヌル(null)に初期設定されるが、イニシャライザ機能(UserID→State)又は初期状態値を定義することが可能である。
1.フィールド名:これは状態データStateDataからの値にアクセスするためのストリング参照である。
2.更新機能:着信イベントのそれぞれについてフィールドがどのように更新されるかを定義する。更新機能は、(State, Event)→Stateと、(Context, Event)→Stateという2つのタイプで現れる。
3.イニシャライザ:デフォルトでは、状態はヌル(null)に初期設定されるが、イニシャライザ機能(UserID→State)又は初期状態値を定義することが可能である。
フィールドの可用性は、ステートフルストリーミングプログラムに関するクリーンパターンに適している。
1.アプリケーションによってイニシャライズメソッドにおけるフィールドとして使用される任意の状態を定義すること。
2.受信したイベント又はデータのそれぞれについて、状態データから現行ユーザ、現行ユーザデバイス又は他の識別子に関する状態にアクセスすること。
3.現行入力を拡充し、処理を実行すること。
1.アプリケーションによってイニシャライズメソッドにおけるフィールドとして使用される任意の状態を定義すること。
2.受信したイベント又はデータのそれぞれについて、状態データから現行ユーザ、現行ユーザデバイス又は他の識別子に関する状態にアクセスすること。
3.現行入力を拡充し、処理を実行すること。
ある実施形態は、レベルあたりの全トランザクションの計算を可能にする。換言すれば、ある実施形態は、特定の状態に関連する多数のイベントの決定を可能にする。30分ごとに、ゲームにおけるレベルあたりの全収益を計算することが望ましい場合の例について検討する。プロセスイベントメソッドの観点から、トランザクションが発生するたびに、現行レベルに関するアグリゲータにその金額を追加することが望ましいであろう。問題は、トランザクションイベントが現行レベルに関する情報を含まないことである。プレーヤが新たなゲームをスタートするときは、レベル情報を含むゲームスタートイベントが発生し、その後のトランザクションはそのレベルに属するべきである。ある実施形態のフレームワークにおいてこのユースケースを解決するために、プレーヤのそれぞれに関する現行レベルを状態としてトラッキングし続けることが望ましい。これは、フィールドを使用できるタイプのステートフルアプリケーションである。
//所与のゲームにおいて30分ごとにレベルあたりの全収益を計算。
//メソッドを定義。
def processEvent(event,ctx){
//"ctx-context"からアグリゲータ変数を収集しメモリ内の変数に割り当てる。//"agg"
def agg = ctx.getAggregators()
//"ctx"から状態データ(state data)を収集しメモリ内の変数に割り当てる。"state"
def state = ctx.getStateData()
//30分のウィンドウサイズで合計アグリゲータ(sum aggregator)を定義。
def amountPerLevel = agg.getSumAggregator("Amount", 30*60*1000)
//集計値(aggregated values)(レベルあたりの量(amountPerLevel))をリレーショナルデータベース管理システムの代わりにテキストファイルに書き込む。
amountPerLevel.writeTo(OutputType.FILE)
//この関数に渡されたイベントがトランザクションであるか否かを判定。
if(isTransaction(event)){
//状態データから現行レベルを読み出す。
Integer currentLevel = state.get("CURRENT_LEVEL")
//現行レベルについてカウンタの値を1増やす、各レベルは固有のカウンタを有する。
amountPerLevel.setDimensions(currentLevel).add(getAmount(event))
}
}
//ユーザがプレーしている現行レベルを登録する新たなメソッド。
def initialize(registry){
//現行レベル状態を定義し、ヌル値(−1)に初期設定する。
def currentLevel = Field.create("CURRENT_LEVEL", {
//新たなゲームスタートのそれぞれについてレベルを更新。
Integer prevLevel, Event e -> isGameStart(e) ? getLevel(e):prevLevel
}).initializedTo(-1)
//このジョブについて状態が登録され(現行レベル)、自動的に計算される。
registry.registerField(currentLevel)
}
//所与のゲームにおいて30分ごとにレベルあたりの全収益を計算。
//メソッドを定義。
def processEvent(event,ctx){
//"ctx-context"からアグリゲータ変数を収集しメモリ内の変数に割り当てる。//"agg"
def agg = ctx.getAggregators()
//"ctx"から状態データ(state data)を収集しメモリ内の変数に割り当てる。"state"
def state = ctx.getStateData()
//30分のウィンドウサイズで合計アグリゲータ(sum aggregator)を定義。
def amountPerLevel = agg.getSumAggregator("Amount", 30*60*1000)
//集計値(aggregated values)(レベルあたりの量(amountPerLevel))をリレーショナルデータベース管理システムの代わりにテキストファイルに書き込む。
amountPerLevel.writeTo(OutputType.FILE)
//この関数に渡されたイベントがトランザクションであるか否かを判定。
if(isTransaction(event)){
//状態データから現行レベルを読み出す。
Integer currentLevel = state.get("CURRENT_LEVEL")
//現行レベルについてカウンタの値を1増やす、各レベルは固有のカウンタを有する。
amountPerLevel.setDimensions(currentLevel).add(getAmount(event))
}
}
//ユーザがプレーしている現行レベルを登録する新たなメソッド。
def initialize(registry){
//現行レベル状態を定義し、ヌル値(−1)に初期設定する。
def currentLevel = Field.create("CURRENT_LEVEL", {
//新たなゲームスタートのそれぞれについてレベルを更新。
Integer prevLevel, Event e -> isGameStart(e) ? getLevel(e):prevLevel
}).initializedTo(-1)
//このジョブについて状態が登録され(現行レベル)、自動的に計算される。
registry.registerField(currentLevel)
}
現行レベルフィールドは、ユーザのそれぞれが現在どのレベルでプレーしているかを自動的にトラッキングし続ける。この情報は、プロセスイベントメソッドで見られる状態データから(イベントに基づいて)現行プレーヤが容易にアクセス可能なものである。この状態データを1つ以上の様々なスクリプトで使用することができる
この例では、状態はレベルであることを認識されたい。状態を、任意の他の適切なパラメータにすることができる。ある実施形態では、パラメータは1つのイベントデータセットで提供されてもよいが、そのパラメータを含まない異なるイベントデータとともに要求される。
ある実施形態は、2つ以上の状態条件を要求してスクリプト又はメソッドの一部とすることができる。
ある実施形態では、状態情報として使用される情報は、単に、受信したイベントによって提供されてもよい。
ある実施形態では、状態情報を更新することはいくつかの処理を必要とする場合がある。例えば、現在記憶されている状態情報を、受信した情報によって変更することができる。例えば、ストリーム内の受信した情報は増分量又は減分量を示すことができる。当然、任意の他の処理を実行することもできる。
ある実施形態では、状態情報は受信した情報から決定される必要がある場合がある。この決定は、1つ以上の他のデータ及び/又は以前のデータを任意選択的に用いて、受信したデータの処理を必要とする可能性がある。
ある実施形態では、記憶されている状態を、新たなイベントに関する情報と、以前記憶した情報であって、あるイベントに関する情報とを用いて更新して、記憶される新たな状態値を作成することができる。
例えば、レベル完了イベントを受信したことに応答して、レベルを変更することができる。従って、現行レベルは現行状態であり、新たなイベントはレベル完了になり、新たな現行レベルはそれから決定され得る。
他の例は、成功したゲームエンドイベントをトラッキングすることにより、ユーザが100個の赤いキャンディをクラッシュしたか否かをトラッキングすることができる。例えば、20個の赤いキャンディがクラッシュされたという情報を含む成功したゲームエンドに関するイベントが受信される。これに続いて、10個の赤いキャンディがクラッシュされたことを示すイベントを受信すると、合計30個の赤いキャンディ、即ち、現在記憶されている20個のキャンディと新しい10個のキャンディが記憶されることになる。
ゲームイベントは単なる例示であり、問題となるイベントは実施形態がデプロイされるコンテキストに依存することになる。
アプリケーションがデプロイされたときに表示される画像を示す図6を参照する。アプリケーションはRBEAバックエンドジョブによって実行される。バックエンドはRBEAシステムのインスタンシエーションである。ストリーム処理ジョブは、RBEA用のバックエンドとして機能する適切なフレームワーク上で実行される。テキストファイルは、GUI(グラフィカルユーザインターフェース)を介してアクセスできる、レベルあたりの総額(aggregated amount)を含む。表示オプションを選択することにより、レベルあたりの総額が示される。ある実施形態では、任意の他の適切なユーザインターフェースを、代替的に又は追加的に提供できることを認識されたい。ある実施形態では、総額の情報は、他のコンピュータで実現されるプロセスの代替として又はこれに加えて提供することができる。
RBEAインターフェースを、ユーザからのストリーム処理内容の少なくとも一部又は全てを抽象化するように構成することができる。例えば、以下の1つ以上をユーザから抽象化することができる。
イベントストリームを読み込み。
スクリプトの実行を並列化。
グローバルウィンドウアグリゲータの作成。
ユーザ状態の作成及び更新。
1つ以上のターゲットフォーマットへの出力の書き込み。
フォールトトレランス及び一貫性。
イベントストリームを読み込み。
スクリプトの実行を並列化。
グローバルウィンドウアグリゲータの作成。
ユーザ状態の作成及び更新。
1つ以上のターゲットフォーマットへの出力の書き込み。
フォールトトレランス及び一貫性。
数十億のイベント及び数百万のユーザについて、多くの並列RBEAジョブをスケーリングする手法でこれらの抽象化を実行すると、以下の特性の1つ以上を備えたストリーミングデータフローエンジンが必要になる場合がある。
非常にスケーラブルな状態抽象化。
カスタムウィンドウイングロジックのサポート。
巡回データフローのサポート。
正確に1回の処理する保証。
非常にスケーラブルな状態抽象化。
カスタムウィンドウイングロジックのサポート。
巡回データフローのサポート。
正確に1回の処理する保証。
イベント及び/又はユーザのスケールが異なると、異なる基準が適切なデータフローエンジン又はプラットフォームを選択するのに使用され得ることを認識されたい。
デプロイされ連続的に実行されている1つのジョブのみが全ての実行されているRBEAスクリプトのためのバックエンドとして機能することができる。但し、他の実施形態では、この機能を2つ以上のスクリプトによって提供することができる。スクリプトは、効率的な手法でクラスタリソースを共有するオペレータ(後述する)において実行されている場合がある。ウェブフロントエンド上にデプロイされたスクリプトは既に実行されているジョブに送られ、RBEAスクリプトのライフサイクル管理(スクリプトの追加/除去、障害への対処など)はオペレータ自体によって扱われる。
様々なRBEAオペレーション(アグリゲータの増分、出力の書き込み)はオペレータのために様々な出力に変換される。
次に、図9を参照する。単なる例示として、ユースケースについて検討する。このユースケースの例では、特定のレベルに関連する収益の金額が監視される。これを監視可能とするために、現行レベルに関する情報及びそのレベルでプレーしている間に行われた購入に関する情報が必要となる。この例では、クライアントデバイスから提供されるイベントは、購入情報及び同じイベントにおけるゲームレベルを有していない。むしろ、ゲームレベルは、1つのタイプのイベントにおいてユーザアイデンティティとともに提供される。購入に関する情報は、ユーザアイデンティティを有する様々なイベントにおいて提供される。
図9では、904は第1のユーザからのイベントストリームを表し、906は第2のユーザからのイベントストリームを表している。
例えば、イベント900は、第1のユーザに関するゲームスタートイベントを表すことができ、第1のユーザのユーザアイデンティティ、ゲームがスタートされたという指標及びゲームレベルを有することになる。イベント902は、第1のユーザに関するゲーム購入イベントを表すことができ、第1のユーザのユーザアイデンティティ、ゲームアイテムが購入されたという指標及び購入価格を有することになる。
イベント908は、第2のユーザに関するゲームスタートイベントを表すことができ、第2のユーザのユーザアイデンティティ、ゲームがスタートされたという指標及びゲームレベルを有することになる。イベント910は、第2のユーザに関するゲーム購入イベントを表すことができ、第2のユーザのユーザアイデンティティ、ゲームアイテムが購入されたという指標及び購入価格を有することになる。
ある実施形態は、このようなクエリをデータストリームについて実行可能とするアプローチを提供するものである。特に、実施形態はクエリについて必要なイベントを作成させる。クエリは、状態の読み込み及び/又は変更、データの集計、出力の作成、RBEAによってサポートされる他の機能の1つ以上を実行可能なRBEA APIを使用して作成される。クエリが特定のレベルに関連する収益の金額である場合、作成されるイベントは現行ゲームレベル及び購入価格を有することになる。
図9では、各ユーザについて区分915が設けられる。区分は同じキーに属する全てのイベントとして定義される(この例ではキーはユーザIDである)。図9に示す例では、第1の区分915aは第1のユーザのそれぞれに関連付けられており、第2の区分915bは第2のユーザのそれぞれに関連付けられている。従って、実施形態は、イベントをユーザアイデンティティごとに区分することができる。他の実施形態では、様々な基準を用いてイベントを区分できることを認識されたい。
クエリのそれぞれについて実行されているスクリプトは、各ユーザに関する区分にデプロイされる。示されている例では、第1のユーザのデータに関連してデプロイされるスクリプトS1〜S4は参照符号922aである。第2のユーザのデータに関連してデプロイされるスクリプトS1〜S4は参照符号922bである。現実では、例えば、1台の物理的マシンは数百万のユーザ区分を含むことができる。ある実施形態では、すべての物理的マシン上に複数のスクリプトが1回記憶されて、複数の区分がスクリプトを共有するようになる。但し、他の実施形態では、所与の物理的マシン上に1つのスクリプトの2つ以上のコピーが提供されてもよい。
スクリプトがデプロイされると、どの状態がクエリに必要であるかが決定される。例えば、このクエリの例の場合、状態は現行ゲームレベルとなり得る。この状態は、そのユーザについてのデータストア920に記憶される。第1のユーザに関する状態データストアは参照符号920aであり、第2のユーザに関するデータストアは参照符号920bである。この状態はどのクエリでも使用可能である。例えば、他のクエリは特定のレベルを完了するための試行回数にすることができる。レベル状態は、その後者のクエリと同様に状態あたりの収益の金額を伴うクエリにおいて使用することができる。
ある状態に関する特定の値が変化すると、その状態データストア内の値が更新されることを認識されたい。
スクリプトは、デプロイされると、関連するクエリについての必要なイベント930を出力することになる。これらのイベントは、そのイベントの適切なコンシューマに通知される。ある実施形態では、全てのイベントは所与のコンシューマに渡され、そのコンシューマは不要なイベント、即ち、そのイベントのコンシューマに関連しないイベントを廃棄し得る。他の実施形態では、イベントのコンシューマが必要とするイベントのみがそのコンシューマに提供され得る。
図9では、イベントのコンシューマのいくつかの例は、アグリゲータ934、出力932及び/又は任意の他の適切な機能を含む。イベントのコンシューマは、その後、必要な出力を提供するためにスクリプトを実行することになる。例えば、アグリゲータの場合、受信したイベントからのデータを合計することができる。
更なるクエリをサポートするスクリプト925は、ユーザ区分915のそれぞれによってブロードキャスト及び受信され、それによりデプロイされ得る。これらのスクリプトは、既存の状態情報を使用することができるか又は受信した情報から必要な状態情報を記憶させることができる。
このようにして、実施形態によりアナリティクススクリプトがライブストリーム上で実行可能となる。従来のアプローチでは、所与の時間間隔でデータが記憶され、その後、いくつかのスクリプトが、記憶されているデータに対して実行されて単一のクエリが達成されるというウィンドウアプローチが必要となる場合がある。これは、特に、多くの異なるクエリが実行されている場合、リソース集中型になるおそれがある。
ある実施形態の利点の1つは、イベントが1回だけ読み込まれ、様々なスクリプトがユーザ区分に送られることである。従って、イベントは、1回読み込まれるが、2つ以上のスクリプトによって使用される。これは、デプロイされたアプリケーション(スクリプト)のそれぞれについて独立にデータを読み込むことができる他のリアルタイプ手法とは異なるものである。
実行され得るクエリの他の例はテストモードに関する。テストモードにはテストモード識別子を割り振ることができる。そのテストモード識別子を状態情報として記憶することができ、1つ以上の様々なタイプのイベントをそのテストモード識別子とともに出力することができる。
従って、ある実施形態により、実行されている様々なクエリ又はスクリプト間で状態を共有することが可能となる。
着信イベントはタイムスタンプを含むことができる。代替的に又は追加的に、出力イベントがタイムスタンプを含んでもよい。RBEAスクリプトがエンジン上でどのようにデプロイ/実行されるかについての詳細を示す概略図である図7を参照する。ユーザ状態は、状態更新部700により定義された更新機能及び新たに受信したイベントに基づいて更新される。ユーザ状態が変化した場合、(ユーザスクリプトがこのような状態変化に対するリスナとして登録されている場合は)コールバックトリガ部702によって1回以上のコールバックをトリガすることができる。状態を更新して可能なコールバックをトリガした後、プロセスイベントメソッドは実行プロセッサ704によって実行される。フィールド更新部、コールバックトリガ部及び実行プロセッサは、図9の区分915の機能に対応している。ウェブフロントエンド部710は、スクリプトを作成してデプロイすることを可能にするように構成される。集計計算部706は、結果の集計を提供するように構成され、図9の集計機能934に対応している。
ある実施形態では、状態更新部は、定義された更新機能に応じて、集計計算部706への入力を提供することができる。状態更新部700、コールバックトリガ部702、集計計算部706及び実行プロセッサ部704の1つ以上は、出力書き込み部への出力を提供するように構成される。出力書き込み部708は、ウェブインターフェース部(web interface part)710の出力部への出力、及び/又は、例えば、メッセージブローカ出力、リレーショナルデータベース管理システム出力及び/又はファイル出力などの1つ以上の出力を提供するように構成される。この出力書き込み部及び集計計算部は、図9の出力932、アグリゲータ934及び他の機能936に対応するものであってもよい。
ある実施形態では、以下の4つの主な計算段階が存在し得る。
1.イベントストリームを読み込み新たにデプロイされたスクリプトを受信すること。
2.ユーザ状態を更新し、ユーザ定義のコールバックをトリガして、デプロイされたスクリプトのプロセスイベントメソッド(processEvent methods)を実行すること。
3.スクリプトによって生成されたウィンドウ集計を計算すること。
4.選択された1つ以上のフォーマットに出力を書き込むこと。
1.イベントストリームを読み込み新たにデプロイされたスクリプトを受信すること。
2.ユーザ状態を更新し、ユーザ定義のコールバックをトリガして、デプロイされたスクリプトのプロセスイベントメソッド(processEvent methods)を実行すること。
3.スクリプトによって生成されたウィンドウ集計を計算すること。
4.選択された1つ以上のフォーマットに出力を書き込むこと。
次に、これらの段階のそれぞれについてより詳細に述べる。
イベント及びスクリプトを読み込むこと。ライブイベントストリームは、イベントに当該イベントが発生したカテゴリ又はフィード名をタグ付けするコンシューマによって読み取られる。これにより、ユーザは、そのスクリプトを実行しているときにどのカテゴリ又はフィード名を聴取したいかを自由に決定することが可能となる。ユーザアイデンティティによってキーが付けられたイベントストリームからキー付きストリームを作成することができる。
スクリプトを、ウェブフロントエンドから、単純なイベントとして、メッセージブローカを介してテキストフォーマットで受信することができ、スクリプトは適切なEventoProcessorインターフェースに構文解析される。新たなスクリプトを、すでに実行中のジョブ内でホットデプロイすることができる。特に、スクリプトは、システムが他のスクリプトを実行している間に、ユーザ区分によって受信され、デプロイされ得る。スクリプトが受信されると、スクリプトが既存の記憶された状態のいずれかを使用するか否か又はスクリプトが何らかの他の状態を必要とするか否かを確認するためのチェックが実行される。新たなスクリプトが記憶されていない状態を必要とする場合、システムは、この新たな状態が、受信したイベントから決定され、上記データストアに記憶されるように構成される。新たなスクリプトをスクリプトストリームで受信することができる。これは、一般に、イベントストリームとは異なるものである。但し、ある実施形態では、イベントがスクリプトと同じストリーム内にある可能性がある。
実施形態は、第1のユーザセット用のマシン、第2のユーザセット用の更なるマシンなどを設けることができるという点で、スケーラブルであってもよい。実施形態では、同じマシンの区分のそれぞれに同じスクリプトがデプロイされる。ある実施形態では、様々なマシンに同じスクリプトがデプロイされる。
スクリプトは、様々なマシンにブロードキャストされ、そのマシン上でローカルにコンパイルされてもよい。
ある実施形態では、1つ以上のステートレススクリプトは1つ以上の状態ベースのスクリプトと並行して実行可能である。これらのスクリプトは同じマシン及び/又は区分上で並行して実行可能である。他の実施形態では、ステートレススクリプトは状態スクリプトとは別個に実行可能である。
ある実施形態では、同じスクリプトをリアルタイムデータだけでなく記憶済みデータについても実行することができる。これらのスクリプトは同時に実行することができ、リアルタイム処理とデータの処理の結果同士を比較することができる。
ある実施形態では、1つ以上のスクリプトの実行に関連する複数のランタイムメトリクスを決定することができる。これらのメトリクスは、スクリプトを実行するのに要する時間、どの状態がアクセスされているか、いずれかの状態がアクセスされているか否か、及び、任意の他の適切なメトリクスの1つ以上を含むことができる。これらのランタイムメトリクスを、スクリプトがどのようにデプロイされるか及び/又はそのスクリプトをデプロイしているマシンによってサポートされるユーザの数を制御するのに使用することができる。ランタイムメトリクスは、特定のスクリプト及び/又はあるスクリプトセットに関するものであってもよい。
状態を計算してスクリプトを実行すること。ユーザ状態は、スクリプトが実行される同じオペレータ内で計算されて、キー値状態抽象化とともにデータ局所性が活用される。このため、イベントストリーム及びユーザスクリプトの両方をイベントとして受信するオペレータが使用される。ユーザスクリプトはブロードキャストされてもよい。
新たなイベントの場合、すでにデプロイされているRBEAスクリプトのprocessEventメソッドが呼び出される。新たなスクリプトの場合、これらは、オペレータの内部でホットデプロイすることができ、その後のイベントについて実行されることになる。
このオペレータはマップオペレータであってもよい。以下のクラスは、実行ロジックを単純化した実施を示している。
//新たなクラス"RBEAProcessor"(メソッド及び変数)を定義。
class RBEAProcessor
//このクラスは標準メソッド"RichCoFlatMapFunction"を拡張する。
//Flatmapフラットマップは、1つの入力を受信し、0又は1以上の出力を生成可能なオペレータである。コフラットマップ(CoFlatMap)は、2つのストリームからのイベントを処理し、様々なメソッド(フラットマップ1/2)をイベントがどのストリームから来たかに基づいてトリガすることを意味する。
//フラット化により複数のリストのリストをリストに変換する。
//例えば、リスト(リスト(1,2,3), リスト(2,6,8))は1回のフラット化でリスト(1,2,3,2,6,8)になる。
extends RichCoFlatMapFunction<Event, Deploymentinfo, BEA>{
//現行ユーザについて計算されたフィールド(情報)。
ValueState<Map<String, Object>> = userStates;
//詳細については省略。
//タプルは順序付けられたリストであり、フラットマップ1はイベントデータを取得し、現行ユーザに関する情報を更新。
public void flatMap1(Event event, Collector<BEA> out){
//現行ユーザについて状態を更新。
Map<String, Tuple2<?, ?>>updatedFields = updateFields(event, out);
//ユーザ状態が変化した場合、情報を送り、チェーン(chain)にバックアップ(back up)。
//どのフィールドが変化した場合でもそれに基づいて更新コールバックをトリガ。
triggerUpdateCallbacks(updatedFields, out);
//ユーザスクリプトを実行。
//ユーザスクリプトのprocessEventメソッドを呼び出す。
executeScripts(event, out);
}
//フラットマップ2と名付けられた新たなメソッド。
public void flatMap2(DeploymentInfo info, Collector<BEA>out){
//"proc"と名付けられたイベントプロセッサをメモリ内に作成(イベントプロセッサのインスタンスを生成)。
EventProcessor proc = info.createProcessor();
//プロセッサをプロセッサのリストに追加。
addProcessor(proc);
//プロセッサを開始(プロセッサの初期化メソッドを呼び出し)。
initializeProcessor(proc);
}
}
//新たなクラス"RBEAProcessor"(メソッド及び変数)を定義。
class RBEAProcessor
//このクラスは標準メソッド"RichCoFlatMapFunction"を拡張する。
//Flatmapフラットマップは、1つの入力を受信し、0又は1以上の出力を生成可能なオペレータである。コフラットマップ(CoFlatMap)は、2つのストリームからのイベントを処理し、様々なメソッド(フラットマップ1/2)をイベントがどのストリームから来たかに基づいてトリガすることを意味する。
//フラット化により複数のリストのリストをリストに変換する。
//例えば、リスト(リスト(1,2,3), リスト(2,6,8))は1回のフラット化でリスト(1,2,3,2,6,8)になる。
extends RichCoFlatMapFunction<Event, Deploymentinfo, BEA>{
//現行ユーザについて計算されたフィールド(情報)。
ValueState<Map<String, Object>> = userStates;
//詳細については省略。
//タプルは順序付けられたリストであり、フラットマップ1はイベントデータを取得し、現行ユーザに関する情報を更新。
public void flatMap1(Event event, Collector<BEA> out){
//現行ユーザについて状態を更新。
Map<String, Tuple2<?, ?>>updatedFields = updateFields(event, out);
//ユーザ状態が変化した場合、情報を送り、チェーン(chain)にバックアップ(back up)。
//どのフィールドが変化した場合でもそれに基づいて更新コールバックをトリガ。
triggerUpdateCallbacks(updatedFields, out);
//ユーザスクリプトを実行。
//ユーザスクリプトのprocessEventメソッドを呼び出す。
executeScripts(event, out);
}
//フラットマップ2と名付けられた新たなメソッド。
public void flatMap2(DeploymentInfo info, Collector<BEA>out){
//"proc"と名付けられたイベントプロセッサをメモリ内に作成(イベントプロセッサのインスタンスを生成)。
EventProcessor proc = info.createProcessor();
//プロセッサをプロセッサのリストに追加。
addProcessor(proc);
//プロセッサを開始(プロセッサの初期化メソッドを呼び出し)。
initializeProcessor(proc);
}
}
オペレータは、新たなイベントを受信すると、状態バックエンドから現行ユーザ状態を読み出し、状態を更新し、その後、現行カテゴリなどを聴取する全てのスクリプトを実行する。状態バックエンドは状態を維持(persist)するのに使用され、好ましくはスケーラブルである。バックエンドは埋め込み可能なパーシステント(persistent)キー値ストアであってもよい。
スクリプトの実行中、APIメソッドに対するコールの多くは、出力コレクタ上に収集される出力エレメントに直接変換される。例えば、ユーザがそのスクリプトにおいてoutput.writeToFile(fileName, myData)を呼び出すと、オペレータは、シンクがユーザデータを適切な出力フォーマットに書き込む必要があり得るという必要な情報をコード化する出力を提供する。
様々なタイプのAPIコール(アグリゲータ、リレーショナルデータベース管理システム出力、メッセージブローカ出力など)は、当然、結果的に様々な出力情報をもたらすことになるが、一般に、ダウンストリームオペレータがそれらの取り扱い方を知るのに十分な情報を含んでいる。
オペレータは、障害に関する通知など、現在デプロイされているプロセッサに関する何らかの情報を生成することができる。これは、すべてのサブタスクから障害のあるスクリプトを除去するのに使用される。これは、代替的に又は追加的に、ユーザが自分のスクリプトを修正できるようにフロントエンドにエラーを報告するのに使用されてもよい。
コフラット(co-flat)マップオペレータは、終了時に、データ出力、集計及びジョブ情報という主な3つのタイプの出力を生成する。このフラットマップオペレータは、チャネルによって放出された各項目に1つの機能を適用し、そのように入手した項目を新しいチャネルとして返す。マッピング機能が項目のリストを返す場合はいつでも、このリストは、単一の項目のそれぞれが自動的に放出されるようにフラット化される。コオペレータ(cooperator)により、ユーザは異なるタイプの2つのデータストリームを共同で変換することができ、共有状態を有するストリームを共同で操作するための簡単な手法が提供される。これは、データタイプが異なるためにユニオンが適切ではない場合又はユーザが個々のエレメントの起点の明示的なトラッキングを必要とする場合に、共同ストリームの変換をサポートするように設計されている。
ウィンドウ集計を計算すること。ウィンドウイング機能は、メイン処理オペレータから出てくるアグリゲータ出力について実際の集計を実行するのに使用される。
受信した情報は、(job_id, aggregator_name, output_format, window_size, value)という形式となる。これは単なる例示であり、ある実施形態では、情報内の1つ以上のデータを省略可能であることを認識されたい。ある実施形態では、代替的に又は追加的に、1つ以上の他のデータが提供されてもよい。
RBEAは、合計アグリゲータ、カウンタ及び/又はカスタムアグリゲータをサポートすることができる。
ある実施形態では、ウィンドウ集計の計算が提供される。このウィンドウは、イベントから抽出されたイベント時間に基づいて処理され得る。ある実施形態では、キーあたりの様々なウィドウサイズがデータフローで提供される。他の実施形態では、固定されたサイズのウィンドウを使用することができる。
ある実施形態では、適切な振る舞いのために消費されたデータに対して直接作用する着信イベントストリームについて、タイムスタンプエクストラクタ(timestamp extractor)が定義される。
様々なウィンドウサイズをオンザフライ(on the fly)で作成するために、フレキシブルなウィンドウメカニズムを、ウィンドウアサイナ(window assigner)を定義するのに使用することができる。ウィンドウアサイナは、ユーザ定義のアグリゲータウィンドウに基づいて、各要素を適切なバケットに置くものである。
これを実行するために、タンブリングイベント時間ウィンドウアサイナが拡張される。
//"TumblingEventTimeWindows"を拡張する"AggregtionWindowAssigner"と名付けられた新たなクラスを作成。
class AggregtionWindowAssigner extends TumblingEventTimeWindows{
//(他のクラスによって容易にアクセス可能な)公用メソッド"AggregtionWindowAssigner"が関数"super"を呼び出す。
public AggregtionWindowAssigner(){
super(0);
}
//標準的な振る舞いを修正。
@Override
//公用メソッド"assignWindows"が"Collection<TimeWindow>"を返す。
public Collection<TimeWindow>assignWindows(Object in, long timestamp){
//BEAデータフォーマットにおいてアグリゲート入力オブジェクト"in"を取得。
BEA aggregateInput = (BEA) in;
//アグリゲート入力のウィンドウサイズを取得。
long size = aggregateInput.getWindowSize();
//タイムウィンドウの開始時間及び終了時間を計算。
long start = timestamp - (timestamp % size);
long end = start + size;
//ウィンドウの開始時間及び終了時間を返す。
return Collections.singletonList(new TimeWindow(start, end));
}
}
//"TumblingEventTimeWindows"を拡張する"AggregtionWindowAssigner"と名付けられた新たなクラスを作成。
class AggregtionWindowAssigner extends TumblingEventTimeWindows{
//(他のクラスによって容易にアクセス可能な)公用メソッド"AggregtionWindowAssigner"が関数"super"を呼び出す。
public AggregtionWindowAssigner(){
super(0);
}
//標準的な振る舞いを修正。
@Override
//公用メソッド"assignWindows"が"Collection<TimeWindow>"を返す。
public Collection<TimeWindow>assignWindows(Object in, long timestamp){
//BEAデータフォーマットにおいてアグリゲート入力オブジェクト"in"を取得。
BEA aggregateInput = (BEA) in;
//アグリゲート入力のウィンドウサイズを取得。
long size = aggregateInput.getWindowSize();
//タイムウィンドウの開始時間及び終了時間を計算。
long start = timestamp - (timestamp % size);
long end = start + size;
//ウィンドウの開始時間及び終了時間を返す。
return Collections.singletonList(new TimeWindow(start, end));
}
}
これが実行されると、ウィンドウ低減動作が実行され、各ウィンドウ内のアグリゲータ値を合計し、それを適切な出力に送ることができる。
出力を書き込むこと。ユーザは、1つの出力フォーマット又は複数の異なる出力フォーマットへの出力を、それらの処理スクリプトにおいて行うことができる。出力APIメソッドの1つを呼び出すことによって生成された出力レコードのそれぞれは、選択された出力フォーマットに関するいくつかのメタデータを保持することになる。例えば、以下のものがある。
ファイル出力:ファイル名
テーブル出力:テーブル名
メッセージブローカ:カテゴリ名
ファイル出力:ファイル名
テーブル出力:テーブル名
メッセージブローカ:カテゴリ名
受信したイベントをこれらに付加されたメタデータを使用して書き込むことになる各出力フォーマットについて1つのオペレータが存在し得る。
これらのオペレータは、生成された出力をユーザに対して示すことが可能となるように、ウェブフロントエンドに関する何らかの情報を生成することができる。例えば、新たな出力ファイルに対して第1のレコードが受信されると、実行中のスクリプトに関してそのユーザにこのファイルを表示できるように、ウェブフロントエンドに関する何らかのメタ情報を出力する。
データ処理パイプラインを示す図8A、図8Bを参照する。データ処理パイプラインの特徴のうちのいくつかは、ウェブフロントエンドと通信可能なように及び/又はスクリプト障害をロバスト方式で取り扱うように構成される。
図8A、図8Bはデータ処理パイプラインを記述している。データ処理パイプラインは、いくつかのデータソース及び機能オペレータを含むことができる。データ処理パイプラインを通って遷移するデータは、イベント情報、ユーザ情報、アグリゲータ情報、及び反復子情報の少なくとも1つを含むことができる。
以下のものは一般に図9のイベント及びスクリプトストリームに対応させることができる。データソースID=3は、ジョブデプロイメントに基づくソースを備え、オペレータID=4にデータを提供することができる。オペレータID=4はタイムスタンプ及びウォーターマークの少なくとも1つを取り扱う。オペレータID=4はオペレータID=5にデータを出力することができる。オペレータID=5はオペレータID=4からデータを受信することができる。オペレータID=5は読み込みプロセッサを取り扱う。データソースID=1は、イベントデータに基づくソースを備え、オペレータID=2にデータを出力することができる。オペレータID=2はイベントをラップする。データソースID=−1は、例えば、カウント目的に使用可能な反復ソースを提供する。
オペレータID=9はイベントプロセッサを実行する。これは図9のブロック915に対応させることができる。オペレータID=9は、オペレータID=2、オペレータID=5及びデータソースID=−1の少なくとも1つからデータを受信することができる。オペレータID=9は、データソースID=1、データソースID=3及びデータソースID=−1の少なくとも1つから生じたデータとのインターフェースをとることができる。オペレータID=9はデータ出力を提供することができる。オペレータID=9は、オペレータID=10及びオペレータID=11の少なくとも一方にデータを渡すことができる。
オペレータID=10はプロセッサ情報をフィルタリングすることができる。即ち、オペレータID=10は、フィルタ条件に基づいて選択的に、データ処理パイプラインにおいて順方向に情報を送ることができる。オペレータID=10のフィルタ条件は予め定められた機能であってもよい。オペレータID=10はオペレータID=34及びオペレータID=43の少なくとも一方にデータを提供することができる。オペレータID=34は障害をフィルタリングすることができる。より詳細には、オペレータID=34は、データ処理パイプラインにおけるデータの処理中にエラーが発生したか否かを判定するのに使用され得る。オペレータID=34はデータ出力を提供することができる。オペレータID=39はオペレータID=34及びオペレータID=37の少なくとも一方からデータを受信することができる。オペレータID=39はデプロイメント情報について操作することができる。オペレータID=39は出力を提供することができる。データシンクID=−2は反復シンクを提供することができる。データシンクID=−2はオペレータID=39からデータを受信することができる。オペレータID=11はオペレータID=9からデータを受信することができる。オペレータID=11は、データをフィルタリングすることができ、例えば、BEAデータをフィルタリングすることができる。オペレータID=11は、オペレータID=15、オペレータID=28、オペレータID=32及びデータシンクID=26の少なくとも1つにデータを提供することができる。オペレータID=15は集計を提供することができる。より詳細には、オペレータID=15はバケットアグリゲータを提供することができる。オペレータID=28はファイル出力を提供することができる。オペレータID=28はオペレータID=43にファイル出力を提供することができ、ファイル出力データは、トランザクションデータなどのイベントデータを少なくとも含むことができる。オペレータID=32は出力を提供することができる。データシンクID=26は出力を提供することができる。オペレータID=15はオペレータID=36にデータを提供することができる。オペレータID=36は1秒あたりの集計を提供することができる。オペレータID=15はオペレータID=31にデータを提供することができる。オペレータID=31はアグリゲータ出力を提供することができる。オペレータID=15はオペレータID=28にデータを提供することができる。オペレータID=15はオペレータID=32にデータを提供することができる。オペレータID=15はデータシンクID=26にデータを提供することができる。オペレータID=36はオペレータID=37にデータを提供することができる。オペレータID=37は、1秒あたりの集計(AggregatesPerSec)の値が大きすぎる場合にインジケータを提供することができる。オペレータID=37は、1秒あたりの集計の数が大きすぎる場合に障害を起こし得る。オペレータID=43は、オペレータID=37、オペレータID=31、オペレータID=28及びオペレータID=32の少なくとも1つからデータを受信することができる。オペレータID=43はジョブ情報を作成することができる。データシンクID=44はフロントエンドにプッシュすることができる。より詳細には、データシンクID=44は、シンク:フロントエンドへのプッシュを提供することができる。データシンクID=44はオペレータID=43からデータを受信することができる。メイン処理オペレータ(EventProcessorの実行)は、スクリプトによって生成された実際の処理イベントと、デプロイメント/障害などに関するジョブ情報という2つのタイプのイベントを出力するように構成されている。
スクリプト内のエラーに関する情報を、より容易なデバッグ用にウェブフロントエンド上に示すことができる。
出力ハンドリングは、新たに作成されたファイル/テーブル/情報をウェブフロントエンドに転送するフラットマップオペレータで行われ得る。
反復ストリームを、あるサブタスクから他のサブタスクにジョブ障害を伝搬するのに使用することができる。
各スクリプトが出力に送るイベントの数が監視される。生成するイベントが多すぎるスクリプトは、システムのクラッシュを回避するのに役に立たない。
ウェブインターフェースとジョブとの間で通信プロトコルを使用して、2つのシステムを切り離すことができる。この通信プロトコルは、任意の適切な通信プロトコル又はメッセージブローカ通信プロトコルであってもよい。
RBEAは、動作の詳細に関する知識を持つ必要なしにライブストリームについて複雑なイベント処理を容易に実行するのに使用可能なツールを提供する。
RBEAスクリプトは、ランタイムアプローチで管理され実行されてもよい。ランタイムアプローチでは、処理(スクリプト実行)とデプロイされたスクリプトのライフサイクル管理との両方を担当する単一のストリーム処理ジョブによってイベント及びスクリプトデプロイメントが扱われる。
ある実施形態では、ユーザデバイス上でプレーされているゲームであって、コンピュータで実行されるゲームについてイベントデータを収集することができる。イベントデータは、レベルがクリアされたこと、プレーヤがゲームのプレーを開始したこと、特定のブースタが使用されたことなどの発生した何か(イベント)に関するデータを含むことができる。イベントデータは、また、ユーザアイデンティティ、デバイスエンティティ、ユーザの位置、プレーされているゲーム及び/又は同様のものなどの関連情報を含むことができる。イベントデータは、イベントが発生したときにプレーヤがどのくらいのライフを残しているかなどのイベント発生時点におけるゲームに関するコンテキスト情報を含むことができる。収集したイベントデータは、上記のデータ及び/又は他のあらゆる適切なデータの任意の1つ以上を含むことができる。
ある実施形態は結合機能(join function)を実行可能なようにすることができる。一般に、結合機能は、データベース内の2つのエントリが共通結合(common join)又はキー値を共有する場合にそれら2つのエントリを「結合」することを可能にする。典型的に、各イベントはデータベースに記憶され得る。これは、また、そのイベントに関連するタイムスタンプを含むことができる。
例えば、データベースエントリの1行目がユーザの国とともにユーザIDを有する簡単な例について検討する。これは1つのイベントで提供された可能性がある。データベースの他の行(同じテーブル内又は異なるテーブル内)はユーザID及びデバイス情報を含むエントリを有する可能性がある。特定のユーザについての国及びデバイスを知ることが望ましい場合、結合機能を、ユーザID値という共通キーを使用して2つのエントリを結合するのに使用することができる。
与えられたこの例は、国及びデバイスという属性(次元と呼ばれることもある)の値が変化するのが遅いという点で比較的簡単な例である。従って、これらのイベントは次元又は属性であるとみなすことができる。上記の例はゆっくり変化する次元である。しかしながら、次元又は属性が急速に変化する場合、これはより複雑なものになる。これは、次元又は属性値が変更されるたびに余分なエントリがデータベースに追加されるからである。
結合クエリは、従来のデータベース上で実行される場合、時間的な考慮事項を考慮に入れる必要があるときに非常に複雑なものになる。例えば、ユーザがいつインゲームアイテムを購入したか、ゲーム内で前に何が起きていたか、即ち、その購入を行う前に1つ以上の属性の値が何であるかを判断する必要がある場合がある。従来のデータベースアプローチを使用することは、各エントリに関連するタイムスタンプの使用及び現行エントリのタイムスタンプとの比較を必要とするであろう。このようなアプローチはデータベースのサイズに依存してより複雑なものになる。特に、1つ以上の属性が頻繁に変化する場合、データベースのサイズは比較的大きなものとなり得る。
上述したRBEAの構成の少なくともいくつかを使用すると、結合機能を使用してデータベースを問い合わせる(querying)ことよりも簡単に結合コンセプトを実現することが可能になる。結合タイプのクエリはライブデータについて実行できることを認識されたい。代替的に、データベースに記憶されているデータは、RBEA装置に入力可能なイベントの1つ以上のストリームに変換することができる。
従って、ある実施形態では、以上で説明したものなどのイベントストリームがRBEA装置で受信される。このストリームは、イベントのライブストリームになるか又はデータベース内の記憶済みデータから再現されたイベントのストリームとなり得る。
受信したイベントは、属性の値とともに共通キー又は結合キーを含むことができる。この共通キーは、例えば、ユーザIDであってもよい。但し、これは例示であり、イベントを結合するための任意の他の適切な共通キーが使用可能であることが認識される。
あるタイプのイベントは、「事実」ストリームとみなされてもよく、1つ以上の他のタイプのイベントは、変化し得る属性又は次元のストリームである。「事実」ストリームとみなされるイベントを、実行されているスクリプトのそれぞれによって決定することができる。1つのイベントは、1つのスクリプトによって事実とみなされ、他のスクリプトによって変化する属性又は次元とみなされる場合がある。
受信した各イベントは記憶される。この点に関しては、各イベント属性は上述した状態に類似しているとみなすことができる。各属性又は各次元の現行値が記憶される。受信したイベントの全てを記憶することができる。例えば、ゲームレベルが変化するたびに、そのゲームレベルの次元又は属性が記憶され得る。これにより、そのユーザについて記憶されている前のゲームレベル値が上書きされ得る。同様に、ゲームスタートイベント、ゲーム完了イベント又は任意の他の適切なイベントが発生した場合、関連データが記憶される。事実イベントを受信すると、1つ以上の他の属性又は次元の値がキャプチャされる。キャプチャされたイベントは集計された出力として出力され得る。これは、ユーザID(又は他の共通キー)及び/又は事実イベントを更に含むことができる。属性及び/又は事実イベントの現行値の1つ以上をリセットすることができる。他の実施形態では、属性及び/又は事実イベントの現行値は、更新された現行の属性値の受信に応答して更新されるだけであってもよい。
ある実施形態では、使用可能な属性の全てが出力される。
「事実」が、例えば、特定のインゲームアイテムの購入であってもよい例について検討する。1つ以上の他のイベントの値が、キャプチャされ、上述した機能のいずれかによって使用可能な出力を提供するのに使用される。キャプチャされた出力は共通キー値及び/又は「事実」の値を含むことができる。他のイベントは、ゲームレベル、ゲームスタート、使用したゲームブースタなどの任意の他の適切なゲームイベントにすることができる。
図9に関して記載した構成のコンテキストでは、1つ以上の属性からなる1つのセットに関する属性値がデータベースに記憶される(これらの属性値の1つ以上を1つ以上の他のスクリプトに関する状態とみなすことができる。)。ある実施形態では、単一のスクリプトを実行して、この結合機能を提供することができる。
従って、RBEA機能を、アグリゲータ又は任意の他の適切な出力に出力される豊富なイベントを作成するのに使用可能であることが分かる。
ある実施形態では、状態を維持することに加えて又はその代替として、イベントタイプ/次元のそれぞれ又は少なくとも1つに関する最新データが記憶される。
ある実施形態は、効率的な方式でストリーム結合の作成を可能にする。
一例では、購入、ゲームスタート及びデバイス情報イベントを含むストリームの場合、購入をゲームスタート及びデバイス情報と組み合わせて、レベル及びデバイスモデルごとの購入を含む集計出力を得ること、及び/又は、様々なイベントからの属性を有する「より豊富な/幅広い」イベントを提供する出力を得ることができる。それから、同じセマンティクスを、例えば、購入と為替レートとを結合するのに使用することができる。
コードは、実行されると、入力データに基づいて必要なクエリのための出力を提供することになる。コードを、1つ以上のメモリと協働する1つ以上のプロセッサ上で実行することができる。コードは、その処理を提供する同じ少なくとも1つの装置上で及び/又は少なくとも1つの様々な装置上で実行することができる。装置は少なくとも1つのサーバなどであってもよい。
以上では、方法及びデバイスの様々な実施形態が記載されている。このような実施形態は、任意の適切な回路で実現されている装置において実現可能であることを認識されたい。ある実施形態は、少なくとも1つのメモリと少なくとも1つのプロセッサによって実現することができる。メモリはメモリ回路によって提供することができ、プロセッサはプロセッサ回路によって提供することができる。ある実施形態は、少なくとも1つのプロセッサ上で実行されるコンピュータプログラムによって提供され得る。コンピュータプログラムは、少なくとも1つのメモリに記憶されると共に少なくとも1つのプロセッサ上で実行可能な、コンピュータで実行される命令を含むことができる。
一般に、様々な実施形態は、ハードウェア若しくは専用回路、ソフトウェア、ロジック、又は、これらの任意の組み合わせによって実現することができる。本発明のいくつかの態様はハードウェアで実現することができ、他の態様は、コントローラ、マイクロプロセッサ、又は、その他のコンピューティングデバイスによって実行可能なファームウェア又はソフトウェアで実現することができるが、本発明はこれらに限定されるものではない。本発明の様々な態様はブロック図、フローチャートとして又は何らかのその他の図表現を使用して例示され記載されてもよいが、本明細書に記載されているこれらのブロック、装置、システム、技法又は方法は、限定されない例として、ハードウェア、ソフトウェア、ファームウェア、専用回路若しくはロジック、汎用ハードウェア若しくはコントローラ、その他のコンピューティングデバイス、又は、これらの何らかの組み合わせで実現できることは十分理解される。ソフトウェアは、メモリチップ又はプロセッサ内に実現されるメモリブロックなどの物理的媒体上、ハードディスク又はフロッピーディスクなどの磁気媒体上、並びに、例えば、DVD及びそのデータ変形例及び/又はCDなどの光学媒体上に記憶することができる。
上記の説明は、模範的かつ限定されない例として、本発明の模範的な実施形態の完全かつ有益な説明を提供している。しかしながら、様々な変更例及び適応例は、添付図面及び特許請求の範囲とともに読んだ時に上記の説明を考慮すれば当業者には明らかとなり得る。しかしながら、本発明の教示のこのような変更例及び同様の変更例はいずれも、依然として特許請求の範囲に定義されている本発明の範囲内に入るであろう。実際に、前述の他の実施形態のいずれかのうちの1つ以上の組み合わせを含む更なる実施形態が存在する。
Claims (21)
- 複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、
複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行すること、を含む方法。 - 複数の第2のデータセットの第2のストリームを出力することを含み、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第1のストリームにおける様々な第1のデータセットで受信されたものである、請求項1に記載の方法。
- 少なくとも1つの更なるスクリプトを、その後、前記複数の異なるスクリプトが実行されている間に受信して、前記複数の異なるスクリプトに加えて前記少なくとも1つの更なるスクリプトを実行することを含む、請求項1又は請求項2に記載の方法。
- 前記少なくとも1つの更なるスクリプトについて、前記複数のスクリプトの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの更なるスクリプトが使用するか否か、又は、前記少なくとも1つの更なるスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定し、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶することを含む、請求項3に記載の方法。
- 前記複数の第1のデータセットの第1のストリームが第1のエンティティにて受信されるものであり、複数の第2のデータセットの第2のストリームが第2のエンティティに出力されるものである場合に、前記方法が、
複数の第3のデータセットの第3のストリームを第3のエンティティにて受信することであって、第3のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第3のデータセットが様々な識別子に関連付けられるものであると共に様々な第3のデータセットが様々なイベントに関する情報を有するものである、前記複数の第3のデータセットの第3のストリームを第3のエンティティにて受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、
複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行すること、及び、
前記第3のエンティティから前記第2のエンティティに複数の第4のデータセットの第4のストリームを出力すること、を更に含み、
少なくとも1つの第4のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第3のストリームにおける様々なデータセットで受信されたものである、請求項2に記載の、請求項3が請求項2を引用する場合の請求項3に記載の、又は、請求項4が、請求項3が請求項2を引用する場合の請求項3を引用する場合の請求項4に記載の方法。 - 前記第2のストリーム及び前記第4のストリームのデータにデータを集約することを含む、請求項5に記載の方法。
- 前記少なくとも1つのイベントに関する情報を記憶することが、少なくとも1つの他のイベントにとって有効となり得る1つ以上のイベントに関する情報を記憶するものである、請求項1〜請求項6のいずれか1つに記載の方法。
- 前記イベントに関する前記情報を処理して、当該処理された情報を前記イベントに関する前記情報としてストアに記憶することを含む、請求項1〜請求項7のいずれか1つに記載の方法。
- 各識別子に関連する少なくとも1つの記憶されたイベントに関する更新された情報を受信して、前記更新された情報を記憶することを含み、前記更新された情報が前記複数のスクリプトの1つ以上のスクリプトによって使用される、請求項1〜請求項8のいずれか1つに記載の方法。
- 各識別子に関連する更新情報を受信し、前記各識別子に関連する前記少なくとも1つのイベントに関する前記記憶された情報を読み出し、前記記憶された情報及び前記受信した更新情報を使用して更新された情報を決定し、前記識別子のそれぞれについて、前記複数のスクリプトの1つ以上のスクリプトによる使用のために前記更新された情報を記憶すること、を含む、請求項1〜請求項9のいずれか1つに記載の方法。
- 複数の異なるデバイスから前記第1のストリームのデータセットを受信することを含む、請求項1〜請求項10のいずれか1つに記載の方法。
- 前記識別子が、前記第1のストリームにおける前記各データセットを提供する各デバイスに関連するユーザ、及び前記第1のストリームにおける前記各データセットを提供するデバイスの少なくとも一方を識別するものである、請求項1〜請求項11のいずれか1つに記載の方法。
- 前記第1のストリームにおける前記複数の第1のデータセットが、コンピュータで実行されるゲームのプレー中に生成されたイベントに関する情報を含むものである、請求項1〜請求項12のいずれか1つに記載の方法。
- 複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、
少なくとも1つの第1のスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも1つのスクリプトによって使用される、前記少なくとも1つの第1のスクリプトを実行すること、及び、
少なくとも1つの第2のスクリプトを、その後、前記少なくとも1つの第1のスクリプトが実行されている間に受信して、前記少なくとも1つの第1のスクリプトに加えて前記少なくとも1つの第2のスクリプトを実行すること、を含む方法。 - 複数の第2のデータセットの第2のストリームを出力することを含み、少なくとも1つの第2のデータセットが少なくとも2つの異なるイベントに関する情報を含むものであり、前記少なくとも2つの異なるイベントが前記第1のストリームにおける様々な第1のデータセットで受信されたものである、請求項14に記載の方法。
- 前記少なくとも1つの第2のスクリプトについて、前記第1のスクリプトの少なくとも1つについて記憶されている少なくとも1つのイベントに関する情報を前記少なくとも1つの第2のスクリプトが使用するか否か、又は、前記少なくとも1つの第2のスクリプトについて少なくとも1つの更なるイベントに関する情報を記憶すべきか否かを判定し、前記使用すると判定した場合又は前記記憶すべきと判定した場合に、識別子のそれぞれについて前記少なくとも1つの更なるイベントに関する情報を記憶することを含む、請求項14又は請求項15に記載の方法。
- 複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記第1のデータセットの第1のストリームを受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、
前記様々なイベントのうちの所与のイベントを受信したことに応答して、それ以前に受信したイベントに関連する記憶された情報を含む出力を提供すること、
を含む方法。 - 前記出力が、前記所与のイベントに関する情報を更に含むものである、請求項17に記載の方法。
- 少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリと、を含むコンピュータ装置であって、前記少なくとも1つのメモリ及び前記コンピュータコードが前記少なくとも1つのプロセッサと共に、少なくとも、
複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、及び、
複数の異なるスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも2つの異なるスクリプトによって使用される、前記複数の異なるスクリプトを実行すること、を前記コンピュータ装置に実行させるように構成されている、コンピュータ装置。 - 少なくとも1つのプロセッサと、1つ以上のプログラムに関するコンピュータコードを有する少なくとも1つのメモリとを含むコンピュータ装置であって、前記少なくとも1つのメモリ及び前記コンピュータコードが前記少なくとも1つのプロセッサと共に、少なくとも、
複数の第1のデータセットの第1のストリームを受信することであって、第1のデータセットのそれぞれが識別子と少なくとも1つのイベントに関する情報とを含むものであり、様々な第1のデータセットが様々な識別子に関連付けられるものであると共に様々な第1のデータセットが様々なイベントに関する情報を有するものである、前記複数の第1のデータセットの第1のストリームを受信すること、
識別子のそれぞれについて少なくとも1つのイベントに関する情報を記憶すること、
少なくとも1つの第1のスクリプトを実行することであって、前記少なくとも1つのイベントに関する情報が少なくとも1つのスクリプトによって使用される、前記少なくとも1つの第1のスクリプトを実行すること、及び、
少なくとも1つの第2のスクリプトを、その後、前記少なくとも1つの第1のスクリプトが実行されている間に受信して、前記少なくとも1つの第1のスクリプトに加えて前記少なくとも1つの第2のスクリプトを実行すること、を前記コンピュータ装置に実行させるように構成されている、コンピュータ装置。 - 実行されたときに請求項1〜請求項18のいずれか1つに記載の方法を実行させるコンピュータ実行可能コードを含むコンピュータプログラム。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1607825.5 | 2016-05-04 | ||
GBGB1607825.5A GB201607825D0 (en) | 2016-05-04 | 2016-05-04 | A method and apparatus for processing data |
US15/475,913 | 2017-03-31 | ||
US15/475,913 US11860887B2 (en) | 2016-05-04 | 2017-03-31 | Scalable real-time analytics |
PCT/EP2017/060728 WO2017191295A1 (en) | 2016-05-04 | 2017-05-04 | A method and apparatus for processing data |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019523470A true JP2019523470A (ja) | 2019-08-22 |
Family
ID=56234399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018557833A Pending JP2019523470A (ja) | 2016-05-04 | 2017-05-04 | データを処理するための方法及び装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11860887B2 (ja) |
EP (1) | EP3452188A1 (ja) |
JP (1) | JP2019523470A (ja) |
CN (1) | CN109414616A (ja) |
GB (1) | GB201607825D0 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10873501B2 (en) * | 2016-12-09 | 2020-12-22 | Vmware, Inc. | Methods, systems and apparatus to propagate node configuration changes to services in a distributed environment |
SG10201705700RA (en) * | 2017-07-11 | 2019-02-27 | Custodio Tech Pte Ltd | Digital asset tracking system and method |
US20200034406A1 (en) * | 2018-07-26 | 2020-01-30 | Alejandro Abdelnur | Real-time data aggregation |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009024972A2 (en) * | 2007-08-20 | 2009-02-26 | Srour, Mark | A continuously height adjustable baby mattress support and apparatus therefor |
US8380648B2 (en) * | 2007-12-05 | 2013-02-19 | Sybase, Inc. | Analytic model and systems for business activity monitoring |
US20100069155A1 (en) * | 2008-09-17 | 2010-03-18 | LPP Enterprises, LLC | Interactive gaming system via a global network and methods thereof |
US8671155B2 (en) | 2009-10-19 | 2014-03-11 | Ios Health Systems, Inc. | System and method of employing a client side device to access local and remote data during communication distruptions |
US8661014B2 (en) * | 2010-09-23 | 2014-02-25 | Hewlett-Packard Development Company, L.P. | Stream processing by a query engine |
CA2829597C (en) | 2011-03-07 | 2015-05-26 | Kba2, Inc. | Systems and methods for analytic data gathering from image providers at an event or geographic location |
US9015337B2 (en) * | 2011-07-13 | 2015-04-21 | Hewlett-Packard Development Company, L.P. | Systems, methods, and apparatus for stream client emulators |
US9443258B2 (en) | 2011-08-26 | 2016-09-13 | Apple Inc. | Mass ingestion of content related metadata to an online content portal |
US20140073420A1 (en) | 2012-09-07 | 2014-03-13 | Downing Matthew | System and method for optimizing user value in an online environment |
US9170834B2 (en) | 2012-10-31 | 2015-10-27 | Google Inc. | Metadata-based virtual machine configuration |
GB201306037D0 (en) | 2013-04-03 | 2013-05-22 | King Com Ltd | Meta data constant |
US20160001187A1 (en) * | 2014-07-04 | 2016-01-07 | Trendy Entertainment | Multi-platform system and methods |
US8997081B1 (en) * | 2014-09-18 | 2015-03-31 | Ensighten, Inc. | Analytics for mobile applications |
-
2016
- 2016-05-04 GB GBGB1607825.5A patent/GB201607825D0/en not_active Ceased
-
2017
- 2017-03-31 US US15/475,913 patent/US11860887B2/en active Active
- 2017-05-04 CN CN201780036581.6A patent/CN109414616A/zh active Pending
- 2017-05-04 EP EP17726547.7A patent/EP3452188A1/en active Pending
- 2017-05-04 JP JP2018557833A patent/JP2019523470A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3452188A1 (en) | 2019-03-13 |
US20170322986A1 (en) | 2017-11-09 |
CN109414616A (zh) | 2019-03-01 |
GB201607825D0 (en) | 2016-06-15 |
US11860887B2 (en) | 2024-01-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11430196B2 (en) | Precise manipulation of virtual object position in an extended reality environment | |
US11983639B2 (en) | Systems and methods for identifying process flows from log files and visualizing the flow | |
CN110928772B (zh) | 一种测试方法及装置 | |
US10310969B2 (en) | Systems and methods for test prediction in continuous integration environments | |
US9864672B2 (en) | Module specific tracing in a shared module environment | |
US20180349254A1 (en) | Systems and methods for end-to-end testing of applications using dynamically simulated data | |
US9298588B2 (en) | Tracing system for application and module tracing | |
JP2020140717A (ja) | イベント処理のための動的に型付けされたビッグデータによるイベントの充実化 | |
US10909772B2 (en) | Precise scaling of virtual objects in an extended reality environment | |
US20180232425A1 (en) | Systems and methods for distributed log data querying using virtual fields defined in query strings | |
US9311213B2 (en) | Module database with tracing options | |
US11036608B2 (en) | Identifying differences in resource usage across different versions of a software application | |
US10891792B1 (en) | Precise plane detection and placement of virtual objects in an augmented reality environment | |
JP2016103299A (ja) | フロー分析計装 | |
JP7009643B2 (ja) | 実行可能論理を用いて構造化データアイテムを処理するためのキーベースのロギング | |
JP6423803B2 (ja) | キュー監視及び視覚化 | |
JP6518649B2 (ja) | ゲームデータの収集のための方法及びシステム | |
US20120222009A1 (en) | Defective code warning resolution analysis | |
JP2019523470A (ja) | データを処理するための方法及び装置 | |
US9424083B2 (en) | Managing metadata for a distributed processing system with manager agents and worker agents | |
US9164746B2 (en) | Automatic topology extraction and plotting with correlation to real time analytic data | |
US20220044144A1 (en) | Real time model cascades and derived feature hierarchy | |
US11676345B1 (en) | Automated adaptive workflows in an extended reality environment | |
WO2017191295A1 (en) | A method and apparatus for processing data | |
US11861767B1 (en) | Streaming data visualizations |