0

あなたのヒントで多くの問題を解決したとしても、私は Stackoverflow の初心者です。今、解決策が見つからない問題があります。WSO2 CEP と GCM を使用してプッシュ サービスを開発しています。CEP は、サブスクライブ/サブスクライブ解除要求とプッシュ イベントを処理します。サブスクリプション キーは、MySQL を使用して他の情報と共に自分のサーバーに保存されます。私の問題は、サブスクライブのステップに伴います。このステップでは、新しいサブスクリプション (挿入) と既存のサブスクリプション (更新) のいずれかを処理する必要があります。操作を簡単にするために、レコードを削除して挿入することで 2 つの操作を正規化することにしました (レコードが既に DB にある場合でも)。これを処理するために、Siddhi を使用して実行計画を作成しました。このプランでは、イベント ストリームと MySQL テーブルにリンクされたテーブル ストリームの 2 つのストリームを定義します。実行計画では、最初に、イベントから取得したキーを使用して削除が行われ、その後、イベントに含まれる情報を使用して新しいレコードが挿入されます。しかし、操作 (削除と挿入) の順序が異なるようで、サーバー上に同じ GCM キーを持つレコードが 2 つ以上ある場合がありました。テーブルに一意の制約を追加することで回避策を適用しましたが、シッディ操作で決定論的な順序を修正する方法があるかどうかを知りたいです。

よろしく

ミケーレ・デ・ローザ

4

1 に答える 1

0

テーブルへの更新と挿入に同じストリームを使用しているため、削除クエリが以前に実行されるという保証はありません。同じストリームから受信するすべてのクエリは並行して実行され、順序を制御することはできません。順序を強制できる唯一の方法は、クエリ パイプラインを導入するか、パターン クエリを使用してイベントを遅延させることです。

ただし、必要に応じて、イベント テーブルで新しく追加された挿入上書き機能を使用できます。これにより、存在する場合は更新し、そうでない場合は挿入するという要件が自動的に処理されます。

お役に立てれば!!

ありがとうティシャン

于 2016-03-07T11:40:41.517 に答える