問題タブ [complex-event-processing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
expert-system - CEPエンジンとエキスパートシステム
複合イベント処理エンジンとエキスパートシステムエンジンの主な違いは何ですか?
いつ使用する必要がありますか?
esper - NesperパターンでのEPLエラー
Nesper(Esperの.NETバージョン)を試していると、理解できないいくつかの問題が発生しました。次の単純なEPL(チュートリアルをモデルにしたもの)はエラーで失敗します:
私が得るエラーは次のとおりです。
私の最初の疑いは、Observationクラスから派生したSeenEventクラスでIDが正しく公開されていない可能性があることでした。しかし、ObservationクラスでプロパティIDがPublicとして定義されていることを確認しました。
これはEPLの既知の問題ですか?NesperはEsper(Javaのいとこ)とは異なりますか?
java - 永続的で長時間実行されるイベントに対する Drools Fusion のサポート
Drools Fusionを使用して、次の模範的なルールを実装することを検討していました。
- 顧客が 1 年以内に同じ製品を 2 つ購入した場合、3 つ目は無料
- 最大 3 回の連続した取引で 200 米ドル以上を使用した場合、顧客は割引を受けます
- 顧客が 1 年以上アクティブでない場合、リマインダーが生成されます
- 過去 6 か月以内に 1 回の注文が平均注文額を上回った場合、スーパーバイザーに通知されます。
- ...など、これらは私の頭の上からの単なる例です
これらすべてのルールは、Drools Fusion を使用して簡単に表現できます。ただし、プロトタイプを作成してドキュメントを確認したところ、この製品は短期間の一時的なイベント (株式市場、リアルタイムの意思決定) に適しているようです。
問題は、すべてのイベントをメモリに保存する必要があるかどうかです。(おそらく何百万もの非常に古い購入)。さらに、Drools Fusion はサーバーの再起動に耐えられるようにイベントを保存できますか? (理想的にはデータベース内)。
Drools Fusion イベントはDrools Expertのファクトにすぎないことはわかっているので、質問を次のように拡張することもできます: Drools Expert はファクトを保持して遅延ロードできますか?
java - esperエンジンに関するサンプルコード
ESPERエンジンの学習を始めたかったのですが、エステルネイティブの例は少し複雑であることがわかりました。
esperの使用に関する簡単なJavaコードの例を持っている人はいますか?
c# - Nesper (C# .NET) から Oracle 11g スキーマへのアクセスを構成する方法
Nesper (C#) から Oracle インスタンスへのアクセスを構成しようとしています。
ドキュメントでは、Java でプログラムと XML 構成ファイルの両方を使用してこれを行う方法について詳しく説明していますが、これらは接続を実行するために使用される JDBC ドライバーを参照する傾向があるため、.NET の同等物が何であるかはわかりません。
ConfigurationDBRef::SetDatabaseDriver() メソッドを使用して、.NET でプログラムによってアクセスを構成するにはどうすればよいですか? 次のコードでエラーが発生します。
Yields: EPException "Unable to resolve type for driver 'Oracle.DataAccess.Client'" - プロジェクト内で Oracle クライアントが参照されているにもかかわらず。
.NET の例に関するドキュメントは非常に乏しいので、この質問への回答が他の人にとって良いリソースになることを願っています。
amazon-ec2 - esperでスケールアウトするには?
私はストリーム処理のために Esper (および Storm) を見てきました.Esper はまさに私が望むことをしているようです..つまり、ローリング手段、中央値、複雑なクエリなど...しかし、1 つのことが疑問に思っています。
Esper を使用して複数のインスタンスにスケールアウトするにはどうすればよいですか?
私の知る限り、Storm は分散処理を処理しますが、Esper では自分で処理します。
近い将来、私はそれを行う必要はありませんが、私たちが成長するにつれて、データ量も同様にスケールアウトする必要があります. ほとんどの場合、Amazon EC2 にデプロイされます。
Esper アプリケーションにデータを送信する前に、複数のサーバーとシャード データを実行する必要がありますか?
それを処理するより優雅な方法はありますか?
-サジャル
java - シーケンスを一致させるための効率的なアルゴリズム
データの[大きな]リストでパターン/シーケンスを照合するための効率的なアルゴリズムを探しています。いくつかのタイプを考えると:
以下のようなシチュエーションに合わせたいと思います。
この種のパターンに一致するように、非常に基本的なステート マシンを実装しました。これは非常にうまく機能し、許容できるスループットを備えています。ただし、追加の時間制約を追加する場合、たとえば、2 番目のパターンは最初の X 秒後に発生する必要があります
ステート マシンの概念は、評価 (および既に一致した条件を再評価) してメモリに保存し、それらを関連付ける必要があるため、もはや適切ではないようです。システムには、このタイプの約 1000 の「ルール」があります。
** 編集 **
明確にするために、次のようなシーケンスを一致させようとしていた場合:
入力データが与えられた場合:
これは t=7 で最終状態に達すると予想されます。しかし、これを行う唯一の方法は、他のすべての状態遷移を保存することですか?
**編集終了**
私は以前、CEP をサポートするルール エンジンを使用して、この種の条件に一致させました。これはかなりうまく機能しますが、必要な大量のデータ (1 秒あたり数十万イベント) を処理することはできません。
この問題を解決する効率的な方法はありますか? 私はJavaを使用しています。
ありがとう
database - 急速に変化するコンテンツ リストを処理できるページネーション スキームはどれですか?
コンテンツのランキングがすぐに変わる可能性がある場合、ページネーションは難しく、ランキングがユーザーごとに異なる場合はさらに難しくなります。(無限スクロールは、リンクが見えないページネーションの一種として扱いましょう。) 2 つの難しい問題があります。新しく追加されたコンテンツが上部に表示されることと、コンテンツが再ランク付けされることです。
新しく追加されたコンテンツのことは忘れて、それを表示するにはページ 1 を更新する必要があることを受け入れましょう。また、 pure を行っているふりをしましょうORDER BY position
。他のもので注文している場合は、ウィンドウ関数を使用する必要がある場合があります。私たちのページには、1 ページあたり 4 行の動物があります。彼らは始めます:
ページ 1 をフェッチした後、ページ 2 をフェッチする前に、多くのアイテムが移動します。DBは次のとおりです。
次の 3 つの一般的なアプローチがあります。
オフセット/リミットアプローチ
これは典型的な素朴なアプローチです。Railsでは、will_paginateとKaminariがどのように機能するかです. ページ 2 をフェッチする場合は、
行5〜8を取得します。私は象を見ることはないだろうし、牛は二度見るだろう.
最終確認 ID アプローチ
Reddit は別のアプローチを採用しています。ページ サイズに基づいて最初の行を計算する代わりに、クライアントは、ブックマークのように、最後に表示したアイテムの ID を追跡します。「次へ」を押すと、そのブックマークから探し始めます。
場合によっては、これはページ/オフセットよりもうまく機能します。しかし、私たちの場合、最後に表示された投稿である Dogs がすぐに 1 位になりました。したがって、クライアントは を送信し?last_seen_id=4
、私のページ 2 はコウモリ、アルパカ、ゾウ、キツネです。見逃した動物はいませんが、コウモリとアルパカは 2 回見ました。
サーバー側の状態
HackerNews (および現在の私たちのサイト) は、サーバー側の継続によってこれを解決します。それらは結果セット全体を (または少なくとも数ページ前に)保存し、"More" リンクはその続きを参照します。ページ 2 をフェッチするときは、「元のクエリのページ 2」を要求します。同じオフセット/制限計算を使用していますが、元のクエリに反しているため、物事が移動したことは気にしません。ゾウ、キツネ、キリン、ウマが見えます。重複も見逃されたアイテムもありません。
欠点は、サーバーに多くの状態を保存する必要があることです。HN では、それは RAM に保存されます。実際には、これらの継続は、[詳細] ボタンを押す前に期限切れになることが多く、有効なリンクを見つけるためにページ 1 に戻る必要があります。ほとんどのアプリケーションでは、それを memcached に格納することも、データベース自体に格納することもできます (独自のテーブルを使用するか、保持可能なカーソルを使用して Oracle または PostgreSQL に格納します)。アプリケーションによっては、パフォーマンスが低下する場合があります。少なくとも PostgreSQL では、適切なデータベース接続を再度ヒットする方法を見つける必要があります。これには、多くのスティッキー状態または巧妙なバックエンド ルーティングが必要です。
考えられるアプローチはこれら 3 つだけですか? そうでない場合、これについて読むための Google ジュースを提供してくれるコンピューター サイエンスの概念はありますか? 結果セット全体を保存せずに継続アプローチを近似する方法はありますか? 長期的には、複雑なイベント ストリーミング/ポイント イン タイム システムがあり、「ページ 1 を取得した時点での結果セット」は永久に導出可能です。それどころか…?
events - Drools Fusion で遅延イベントを処理する方法
イベント A の次にイベント B。A の 5 分後にイベント B がない場合は、ルールをトリガーします。
正常に機能するリアルタイムイベントの場合、実際には遅延してイベントが発生します。インターフェイスから。
例: イベント A の時刻: 01:00 (mm:ss) ですが、02:00 に受信されました 上記のルールは 07:00 にトリガーされますが、ビジネス ロジックでは 06:00 にトリガーされる必要があります。
この種の要件をどのように処理すればよいですか?
c# - 2 つのストリームを順序付けてからタイムスタンプでグループ化するにはどうすればよいですか?
それぞれ値を持つオブジェクトの 2 つのストリームがありTimestamp
ます。両方のストリームが順番に並べられているため、たとえば、タイムスタンプは、一方のストリームでは T a = 、もう1,3,6,6,7
一方のストリームでは T b =1,2,5,5,6,8
である可能性があります。両方のストリームのオブジェクトは同じ型です。
私ができるようにしたいのは、これらの各イベントをタイムスタンプの順にバスに配置することです。つまり、A 1、次に B 1、B 2、A 3などを配置します。さらに、一部のストリームには同じタイムスタンプを持つ複数の (連続した) 要素があるため、これらの要素をグループ化して、新しい各イベントが配列になるようにします。したがって、[A 3 ] をバスに配置し、その後に [A 1 5 ,A 2 5 ] などを配置します。
これを実装しようとしました。2 つのConcurrentQueue
構造を作成し、各イベントをキューの後ろに置き、次にキューの各前を見て、最初に前のイベントを選択してから、このタイムスタンプを持つすべてのイベントが存在するようにキューをトラバースします。 .
ただし、次の 2 つの問題が発生しました。
- これらのキューを無制限のままにしておくと、イベントを受け取るハンドラーよりも読み取り操作の方がはるかに高速であるため、メモリがすぐに不足します。(数ギガバイトのデータがあります)。
- A 2 5が到着する前に、A 1 5などのイベントを処理する状況になることがあります。どうにかしてこれを防ぐ必要があります。
私は Rx がこの点で役立つと考えていますが、これを可能にする明白なコンビネータは見当たりません。したがって、アドバイスは大歓迎です。