2012-06-29 12 views
14

背景:SQLでパターンをパブリッシュ/サブスクライブ

私たちは一日(平均300K日々変化)を通じて頻繁に更新される項目の大(15+百万)テーブルを持っています。保留中の変更はステージング表に保管され、ジョブは1日を通して実行され、この表からの変更を読み取り、更新を行い、変更を処理済としてマークします。

他の多くのアプリケーションでは、項目表のデータを使用してさまざまなタスクを実行します。多くの場合、これらのタスクは、実行中のデータと古いスナップショットを比較し、それに応じて他のシステムを更新するため、スケジュールされ、集中的です。たとえば、eBayのアイテムをリストし、ライブアイテムデータを既存のリストと比較して、新しいeBayリストを挿入したり、販売したアイテムを削除したり、数量を更新したりする必要があるかどうかを確認します。これらのアプリケーションはあまり頻繁に実行されず、時間をずらして使い果たしてしまいます。

私の質問:

私たちは、サービスブローカを使用して、パブリッシャ/サブスクライバパターンを実装を検討しています。目標はアイテムが変更されたときにメッセージを公開することで、さまざまな他のシステム(eBayアプリケーションのような)が購読することができます。これにより、変更されたものだけでなく、すべてのデータを照会する大規模で頻度の低い更新ではなく、より細かい更新をリアルタイムに近づけることができます。しかし、Googleを使用した後、これは共通のデータベースパターンではないように見え、それは赤い旗を浮かべます。これはService Brokerの有効な使用ではありません(Pub/Subの実行時にPro Sql Server 2008 Service Broker)。この問題はどのようにして通常解決されますか?よくある問題のようです。

TL; DR:

目標:単一の項目が変更動的な、疎結合の方法で種々のシステムを更新します。

質問:Service Brokerでパブ/サブスタイルのソリューションが実装されていますか?

+0

2つの質問:なぜ、これらのアプリケーションは、ステージングテーブルで保留中の変更を処理するのではなく、メインアイテムテーブルのデータを使用するのですか? 2番目:アイテムを保持して公開するにはSQL Serverが絶対必要ですか? –

+1

組み込みのSQLレプリケーションを見てください。幅広いシナリオに対応するのに十分な柔軟性があります。 – alexm

+0

@KubaWyrostekが私たちの最初の考えであり、何がメッセージベースのアプローチを検討するようになったのか。そのテーブルから頻繁に読むのではなく、それを「Item Changed」メッセージのソースとして使用してみましょう。不要な抽象化レイヤーである可能性がありますが、ステージングテーブルが定期的に処理された更新情報で抹消されるため、最も安全で柔軟性の高いものはSQLから項目を移動するService Broker – Bort

答えて

0

これは一般的なデータベースパターンではありません。ほとんどのリレーショナルデータベースは、すぐに使用できるように悲惨な機能を備えているためです。 Sql ServerにはService Brokerがない場合もあります。

のService Brokerの開発者の一talks about how Service Broker handles the challenges that most companies turn to NoSQL solutions for.

これは、サービスブローカが、あなたが探している正確に何を意図しているというのが私の理解です。 External Activationrun custom applications when the data has changedを使用することもできます。

+0

直観的に言えば、Service Brokerは、タイムスタンプ付きのクラスタ化された変更のインデックスに対する単純なクエリと比較して、この比較的単純な問題のオーバーヘッドを多くします。一方向レプリケーション(alexmが示唆したように)でさえ、より良い解決策に見えます。より普遍的なツール、大きなパフォーマンスペナルティIMHO。 –

2

非常に共通のインテグレーションパターンです。

私はSQL Server Service Brokerに精通していませんが、TIBCO、Oracle、webMethods、Mule、Informaticaなどの統合ミドルウェアスタックを見れば、それらはすべて自分が記述し​​たタスクを実行する「データベースアダプタ」を提供します。

一般的なパターンは、データベースの更新がメッセージの公開をトリガーすることです。これは、データベーステーブルのトリガーを介して、またはアダプターを介して新しい更新のためのテーブルを「ポーリング」することによって行われます。いずれの方法にも長所と短所があります。

このパターンの主な利点は、(あなたが疑うように)他のシステムへのより頻繁で時宜を得たアップデート - より「リアルタイム」なビジネス方法です。さらに、正規のメッセージフォーマットへの変換を実行すると、システム間の結合が緩くなり、システムを変更/更新する必要があるときに痛みが少なくなります。

0

通常、これらの種類の問題は、データベースに焦点を当てたpub/sub実装が提供できるものよりも(スコープ内で)大きくなります。

nServiceBus(つまり、過去かなり安い、一定の大きさまで無料)

あなたは固体パブ/サブフレームワークを得るが、に簡単に:私は、勧告を行う本格的なサービス・バスの使用を検討することができた場合そこでは、顧客、記事、およびサンプルのユーザーベースが大きくなります。

関連する問題