クエリ通知使ってみよう

6,948 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,948
On SlideShare
0
From Embeds
0
Number of Embeds
1,748
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

クエリ通知使ってみよう

  1. 1. 2011/04/16<br />お だ<br />クエリ通知を使ってみよう<br />
  2. 2. アジェンダ<br /><ul><li>自己紹介
  3. 3. クエリ通知ってなに?
  4. 4. 使ってみた
  5. 5. どこで使う?
  6. 6. まとめ</li></li></ul><li>自己紹介<br /><ul><li>織田 信亮
  7. 7. 大阪で 開発者 してます。
  8. 8. 個人的に興味のある技術等を blog で取り上げてます。http:/d.hatena.ne.jp/odashinsuke/
  9. 9. SQL World/わんくま同盟/JGGUGの勉強会に参加してます。</li></li></ul><li>クエリ通知ってなに?<br />
  10. 10. <ul><li>クエリ通知とは
  11. 11. SQL Server 2005 から導入された、クエリの結果が変化したときに、SQL Server から通知されるようにアプリケーションが要求できる機能。</li></li></ul><li><ul><li>どんなことが出来る?
  12. 12. データが変更された時に、アプリケーションのイベントハンドラが SQL Server からの通知を受信し、再度データを取得する。</li></ul>データ取得<br />変更通知のサブスクライブ<br />変更通知の送信<br />
  13. 13. <ul><li>Service Broker を利用している
  14. 14. インデックス付きビューで使用されている、変更検出のメカニズムに基づいている
  15. 15. ORACLE の「Materialized View」(マテリアライズドビュー) と似た感じ。</li></li></ul><li>使ってみた<br />
  16. 16. <ul><li>注意事項
  17. 17. SQL Server のサービス アカウント
  18. 18. 通知の受信
  19. 19. クエリ通知およびトランザクション
  20. 20. 迅速な更新とクエリ通知
  21. 21. SET オプションの設定</li></ul>http://msdn.microsoft.com/ja-jp/library/aewzkxxh(VS.90).aspx<br />
  22. 22. <ul><li>SQL Server のサービス アカウント</li></ul>ローカルシステムアカウント を使わないこと<br />
  23. 23. <ul><li>通知の受信</li></ul>Windws 95/98 では、通知を受信出来ません!<br />※Windows 98 では、.NET Framework 2.0 はサポートされています。<br />http://msdn.microsoft.com/ja-jp/netframework/cc807061<br />
  24. 24. <ul><li>クエリ通知およびトランザクション</li></ul>1トランザクション内で、複数回変更されたとしても、通知は1回です。<br />
  25. 25. <ul><li>迅速な更新とクエリ通知</li></ul>更新が頻繁にある場合、通知も次々と飛んでくる!<br />
  26. 26. <ul><li>SET オプションの設定</li></ul>ANSI_NULLS ON<br />ANSI_PADDING ON<br />ANSI_WARNINGS ON<br />CONCAT_NULL_YIELDS_NULL ON<br />QUOTED_IDENTIFIER ON<br />NUMERIC_ROUNDABORT OFF<br />ARITHABORT ON<br />
  27. 27. <ul><li>SELECT ステートメントが対象
  28. 28. EXECUTE ステートメント経由も可
  29. 29. インデックス付きビューを作成するために使用できる任意のクエリに対して通知を要求できます。</li></li></ul><li><ul><li>サポートされているクエリ
  30. 30. テーブル名は、2つの部分から構成される名前で指定する</li></ul>スキーマ から指定する。<br /><ul><li>* を使用して列の指定は出来ない
  31. 31. 名前の無い列や列の重複は出来ない
  32. 32. 利用出来ない集計関数がある
  33. 33. 計算列があるテーブルは参照出来ない</li></li></ul><li><ul><li>非決定的関数は使えない
  34. 34. 外部結合や自己結合、サブクエリも使えない
  35. 35. UNION, INTERSECT, EXCEPT も使えない
  36. 36. TOP 句も使えない</li></ul>..etc他にも制約があります<br />http://msdn.microsoft.com/ja-jp/library/ms181122.aspx<br />http://msdn.microsoft.com/ja-jp/library/aewzkxxh(VS.90).aspx<br />
  37. 37. <ul><li>通知のサブスクライブ
  38. 38. T-SQL では無理!
  39. 39. SqlClient(ADO.NET) から登録
  40. 40. SOAPを利用する</li></ul>SQL Server って SOAP の Web サービスとして公開出来る!<br />->将来的に削除される機能だから、使うなよ!<br />http://technet.microsoft.com/ja-jp/library/ms186386.aspx<br />
  41. 41. <ul><li>通知が発生するタイミング
  42. 42. クエリ結果に含まれている行が変更された
  43. 43. サブスクリプションの有効期限が切れた
  44. 44. サーバーが再起動された
  45. 45. クエリ通知サブスクリプションを作成できなかった (SELECT ステートメントが準拠していない等)
  46. 46. サーバーの負荷が高い
  47. 47. サブスクリプションが依存しているオブジェクトが削除または変更された</li></ul>http://msdn.microsoft.com/ja-jp/library/ms188323.aspx<br />
  48. 48. <ul><li>ADO.NET での利用
  49. 49. SqlNotificationRequest</li></ul>下位レベル Interface<br />高度な制御が可能<br /><ul><li>SqlDependency</li></ul>上位レベル Interface<br />お手軽に使える<br />
  50. 50. <ul><li>SqlDependencyを使ってみる
  51. 51. クエリ通知の有効化
  52. 52. セキュリティの設定</li></ul>.NET アプリが部分信頼で実行されるなら SqlClientPermissionの設定が必要<br />ALTER DATABASE [databaseName] SET ENABLE_BROKER;<br />GO<br />CREATE QUEUE ContactChangeMessages;<br />CREATE SERVICE ContactChangeNotifications <br /> ON QUEUE ContactChangeMessages ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);<br />
  53. 53. デモ<br />Windows Form アプリ<br />Silverlight アプリ<br />
  54. 54. <ul><li>実装時の注意点
  55. 55. テーブルはスキーマから指定すること
  56. 56. 準拠していないクエリを指定するとエライ事になる
  57. 57. 通知イベントがひたすら呼ばれる
  58. 58. 通知イベントは UI スレッドとは違うスレッドで実行される場合がある。
  59. 59. UI コントロールにアクセスするには、Invoke or Dispatcher 経由で</li></li></ul><li>どこで使う?<br />
  60. 60. <ul><li>キャッシュ用途として…
  61. 61. マスタデータ(頻繁に更新されない)
  62. 62. 商品カタログとか…
  63. 63. システムデータ
  64. 64. テンプレートエンジンに利用しているデータとか…
  65. 65. ログイン時/画面生成時に取得する制御用データとか…
  66. 66. 楽観排他 のユーザービリティ向上</li></li></ul><li>まとめ<br />
  67. 67. <ul><li>変更を通知してくれる機能があるよ!
  68. 68. 制約は インデックス付きビューと似てるよ!
  69. 69. ADO.NET からの利用が一般的だよ!
  70. 70. 通知イベントは別スレッドで実行されるよ!</li>

×