私たちは一日(平均300K日々変化)を通じて頻繁に更新される項目の大(15+百万)テーブルを持っています。保留中の変更はステージング表に保管され、ジョブは1日を通して実行され、この表からの変更を読み取り、更新を行い、変更を処理済としてマークします。
他の多くのアプリケーションでは、項目表のデータを使用してさまざまなタスクを実行します。多くの場合、これらのタスクは、実行中のデータと古いスナップショットを比較し、それに応じて他のシステムを更新するため、スケジュールされ、集中的です。たとえば、eBayのアイテムをリストし、ライブアイテムデータを既存のリストと比較して、新しいeBayリストを挿入したり、販売したアイテムを削除したり、数量を更新したりする必要があるかどうかを確認します。これらのアプリケーションはあまり頻繁に実行されず、時間をずらして使い果たしてしまいます。
私の質問:
私たちは、サービスブローカを使用して、パブリッシャ/サブスクライバパターンを実装を検討しています。目標はアイテムが変更されたときにメッセージを公開することで、さまざまな他のシステム(eBayアプリケーションのような)が購読することができます。これにより、変更されたものだけでなく、すべてのデータを照会する大規模で頻度の低い更新ではなく、より細かい更新をリアルタイムに近づけることができます。しかし、Googleを使用した後、これは共通のデータベースパターンではないように見え、それは赤い旗を浮かべます。これはService Brokerの有効な使用ではありません(Pub/Subの実行時にPro Sql Server 2008 Service Broker)。この問題はどのようにして通常解決されますか?よくある問題のようです。
TL; DR:
目標:単一の項目が変更動的な、疎結合の方法で種々のシステムを更新します。
質問:Service Brokerでパブ/サブスタイルのソリューションが実装されていますか?
2つの質問:なぜ、これらのアプリケーションは、ステージングテーブルで保留中の変更を処理するのではなく、メインアイテムテーブルのデータを使用するのですか? 2番目:アイテムを保持して公開するにはSQL Serverが絶対必要ですか? –
組み込みのSQLレプリケーションを見てください。幅広いシナリオに対応するのに十分な柔軟性があります。 – alexm
@KubaWyrostekが私たちの最初の考えであり、何がメッセージベースのアプローチを検討するようになったのか。そのテーブルから頻繁に読むのではなく、それを「Item Changed」メッセージのソースとして使用してみましょう。不要な抽象化レイヤーである可能性がありますが、ステージングテーブルが定期的に処理された更新情報で抹消されるため、最も安全で柔軟性の高いものはSQLから項目を移動するService Broker – Bort