イベント データの最高値を使用して通知の重複を防止する例
以下の例では、イベント記録テーブルと指定した時間内のイベント データの最高値を使用して、通知の重複を防ぐ方法を示しています。この例では、選択した株式の価格が定義済みのしきい値を超えると、株価通知アプリケーションによって通知が行われます。
シナリオ
このアプリケーションは、株式の新しいイベント データを 20 秒ごとに Web サービスから取得します。朝のデータを次の表に示します。
時刻 | 銘柄 | 株価 (US ドル) |
---|---|---|
09:00 GMT |
AWKS |
69.98 |
09:20 GMT |
AWKS |
70.35 |
09:40 GMT |
AWKS |
70.87 |
10:00 GMT |
AWKS |
71.55 |
10:20 GMT |
AWKS |
72.00 |
ユーザー独自のイベント ドリブン サブスクリプションは、AWKS の株価が $71.00 (US ドル) 以上になったときに通知するためのものです。このため、10:00 GMT のデータに基づいて通知が受信されます。イベント バッチが処理され、通知が生成されると、このアプリケーションに対して定義されているイベント記録ルールによって、当日その時点までの高値 ($71.55) がイベント記録テーブルに入力されるかまたは更新されます。
サブスクリプション ルール
10:20 GMT のイベント データが到着し、処理されます。サブスクリプション ルールで定義されている通知生成アクションは、イベント記録テーブルを使用して、通知が重複することを防ぎます。これは、いったんトリガ価格を超えたら、新しい高値に達しない限り、重複する通知を排除することによって行われます。
-- Generate notifications
SELECT dbo.StockNotificationNotify(S.SubscriberId,
S.SubscriberDeviceName, S.SubscriberLocale,
E.StockSymbol, E.StockPrice)
FROM dbo.StockSubscriptions S
JOIN dbo.StockEvents E
ON S.StockSymbol = E.StockSymbol
JOIN dbo.StockEventChron C
ON S.StockSymbol = C.StockSymbol
WHERE S.StockTriggerPrice <= E.StockPrice
AND S.StockTriggerPrice > C.StockHighPrice
-- Insert new events into event chronicle
INSERT dbo.StockEventChron(StockSymbol, StockHighPrice)
SELECT E.StockSymbol, E.StockPrice
FROM dbo.StockEvents E
WHERE E.StockSymbol
NOT IN (SELECT StockSymbol FROM dbo.StockEventChron)
-- Update existing events in event chronicle
UPDATE dbo.StockEventChron
SET C.StockHighPrice = E.StockPrice
FROM dbo.StockEvents E JOIN dbo.StockEventChron C
ON E.StockSymbol = C.StockSymbol
WHERE E.StockPrice > C.StockHighPrice
重要 : |
---|
アプリケーションを XML ファイルで定義している場合は、">" などの予約 XML 文字をエンティティ参照に置き換える必要があります。詳細については、「XML の予約文字」を参照してください。 |
結果
トリガ価格が $71.55 以下のサブスクリプションは、既に通知を受信しており、別の通知を受信することはありません。保管されている高値 $71.55 より高く、新しい高値 $72.00 以下のトリガ価格を持つサブスクリプションは、通知を受信します。通知が生成されると、イベント記録ルールによって、イベント記録テーブルが最新のデータで再度更新されます。
参照
概念
イベント クラスの記録の定義
イベント記録テーブルの定義
サブスクリプション ルールの定義
定期的なサブスクリプションでのイベント記録の使用例
イベント データの比較による通知の重複防止の例