2013-01-07 49 views
20

アプリケーションの開発の冒頭で、新しいアプリケーションを取得するように通知するまでSQLDependencyを使用してdb結果をキャッシュしていました。SQLDependencyとテーブルの定期的なポーリングの比較(パフォーマンスへの影響)

テスト中に、sqldependency通知サービスによってSQL Serverのパフォーマンスが低下していることがわかりました。 sqldependencyを使用していたテーブルの数を減らし、パフォーマンスが大幅に向上したことに気付きました。だから、私たちはちょうどそれを使用していたと思って、私たちは移動しました。私たちはいくつかのテーブルにしかなりません。

その後、依存関係を確立するユーザー名のセキュリティアクセスレベルを縮小できないことがわかりました。私たちは複数のdbとdbミラーリングを使用して複数の接続文字列を持つことができますが、これは苦痛です(SQL DB管理の視点とアプリケーション開発から)

この時点で、私たちは次のロジックに基づいて完全に離れSQLDependencyから移動を考えている:

  1. 私たちは、データが変更された「インスタント」の通知を必要としません。私たちが1秒​​以内に知っていれば、それは十分に速いでしょう。
  2. リファクタリングをいくらか変更するだけで、1つのテーブルだけを取得し、そのテーブルを1秒に1回ポーリングできます。

誰もこのロジックに欠陥がありますか?

1秒に1つのテーブルをポーリングすると、SQLDependencyよりもデータベースの負荷が増えますか?

誰もSQLDependencyで同様のパフォーマンスの問題がありましたか?

+0

あなたのポーリングは、変化があったことをどのように検出しますか?トリガー? –

+0

はい - トリガー。 – SLoret

+0

サイドバーとして。私はこの技術を一度も使用したことはありませんが、それは役に立ちます:http://msdn.microsoft.com/en-us/library/ms130764(v=sql.105).aspx – MarkD

答えて

9

私はあなたの質問に答えてみてください。しかし、私はあなたが望んでいた答えを得ることを確信していません...

私は、BorlandがデータベースのInterbaseでコールバックを提供するこの 'callbacks'デルファイ)は、データベースが「アクティブ」になる可能性があると約束された非常に気の利いた新しい技術を介して「通知」を受け取りました。

これは後で 'waste of time theory'と呼ばれました。

これは、DBMSのコンセプトが非常に有望視されていたのは間違いないでしょう。データベースは、スケールアップするだけで水平にすることができない層の1つです。

したがって、レスキューにプログラミング言語。サービス指向アーキテクチャー(SOA)の考え方。多くの人がSOAを「ウェブサービス」と混同していますが、これは実際にこの新しいコンセプトの誇大宣伝でした。

Fiefdom/Emissaryのデザインパターン(またはMaster/Agentパターンの名前を変更してよりクールでプロフェッショナルなものにする)をチェックすると、その主なアイデアはそのリソース(データベースの読み取り)すべてのコールが単一のデータアダプタ経由でファンドネットされていることを確認します。

明らかに、このようなデザインは、トリガーやコールバックフレームワークではまったく機能しません。

しかし、あなたはデザイン全体を再考すべきだと思います。すべてのアクションとすべてのコールを単一の 'DataLayer'(おそらくEntity Frameworkを使用)で、そしておそらくキャッシュメカニズムの上に置くと、メッセージをフードチェーンにバックアップするためにデータベースに依存する必要はありません。

「データベース中心」になると奇妙なことが起こることを示すために、ここでは長い時間前に書かれた電子メールを送信しない方法についての極端な実例があります。感銘を受けた人:

事実1:Sql Serverは電子メールを送信できます。

事実2:これはVBScriptで行うことができるかどうか、どのようにASP3コーダは知りません。

ASP3:、テキストボックスの電子メール・アドレスを読み、COM +層に送信

コム+:電子メールアドレスを取得し、datalayer

Datalayerに転送:電子メールアドレスを取得し、ストアドプロシージャ

に転送SPROC:電子メールアドレスを取得し、SQL関数に

機能を転送:その電子メールアドレスが@を持ってチェックするために奇妙な部分文字列のことを行います。その中に。 trueまたはfalseを返します。

SPROC:そのままテーブルを返す:つの列と1又は0

Datalayerを含む1行のレコードセットを返します。

COM +:最初の列を変換し、真または偽

ASP3に値1または0を持つ行:+

COM + COMに電子メールの件名および電子メールテキストを電子メールアドレスを送信し、真の場合:送信datalayer

Datalayerへの正確な情報:SPROC

...ストアドプロシージャを呼び出します。

府... SQL関数を呼び出しますnction:あなたがここまで読めば、私のアドバイスは、SQL Serverは、テーブル、リレーション、インデックスおよびトランザクションを管理できるようにするためにある電子メールに

を送信するためにSQL Serverのメールエージェントを使用しています。それは非常に良いです。これらのタスクを超えて、ストアドプロシージャにカーソルを含めると、適切なコードを使用して処理する方が効果的です。

+2

あなたはもっと具体的になることができますか? –

関連する問題