データベースの変更(挿入、更新、削除)が発生したときに、リアルタイムの通知を取得する方法は?


12

データベーステーブルを監視するダッシュボードを作成しています。データベースアクセスのみがあります(アプリケーション層はありません)。テーブルはかなり大きい(1000万行)が、急速には変化しない(1分間に100回の挿入/更新)

テーブルが変更されたかどうかを確認するにはどうすればよいですか?私は毎秒データベースにアクセスしようとしますが、これは総当たり的なアプローチのようです...

データベース:MySQL / Postgres


これは役に立つかもしれません。これを使用して、サーバーファームを監視しています。これには、DBのテーブルの変更を追跡する機能があると確信しています。残念ながら、テーブルレベルまで設定していません。だから、私はテーブルレベルまでの設定を知らない。
ジュードニロシャン

コメントありがとうございます。しかし、nagiosはどのように役立ちますか?データベースへのアクセスしかありません。リモートマシンに何もインストールできません。
キリル

3
行が挿入または更新されるたびに、リアルタイムで通知を受けたいですか?もう一度考えて。
Tulainsコルドバ

アプリケーション層がない正当な理由はありますか?物事を行うための最良の方法、つまり、監視を処理するアプリケーション層を持つことが私には思えます。たとえば、データベースサーバーから電子メールを送信することは、クリーンなアーキテクチャのようには見えません。
-juhist

これを行う小さなmysqlプラグインがあります:github.com/Cyclonecode/mysql-notification
Cyclonecode

回答:


9

トリガーを使用できます。

CREATE TRIGGER notifyMe
ON table1
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DB AutoMailer',
        @recipients = 'user@example.com',
        @body = 'The DB has changed',
        @subject = 'DB Change';
GO

毎秒データベースにアクセスするよりも、これが良いかどうかわかりません。または、メールですべての変更を送信し、ダッシュボードソフトウェアにメールを解析させますか?
キリル

1
「挿入済み」、「更新済み」、および「削除済み」の表から選択することにより、特定の変更された値を取得でき、IDを本文に追加できます。
stechray

2
電子メールを送信する代わりに、ダッシュボードがサポートするWeb APIに接続するストアドプロシージャを呼び出すこともできます。詳細はこちらをご覧ください:forums.asp.net/t/...
stechray

3
または、トリガーで追加のテーブルにデータを配置し、必要な間隔でクエリ(および空)を実行します。技術的には「リアルタイム」ではありませんが、そのように見せることができます。
ヤンドッグゲン

1
トリガーを使用して、更新情報をメッセージングブローカーのキュー(またはトピック)にプッシュします。これは常に私のお気に入りのアプローチです。この方法では、トリガーに複雑なロジックがなく、メッセージを受け取ったときに何をするかについて非常に柔軟です。また、pub / subトピックにプッシュすると、複数のコンシューマーがそれを受け取り、それを使ってさまざまなことを行うことさえできます。
マインドクライム

3

PostgreSQLの場合、行が変更されたときにデータベースから通知を受け取る方法を知っています。

  1. 挿入/更新/削除が発生したときにトリガーを使用します。
  2. イベントが発生すると、クライアントソケットに通知を送信します。
  3. アプリにサーバーへのクライアントがあることを確認してください。
  4. アプリは通知を受け取ります。

あなたは私のコードまたはPostgreSQLのドキュメントを見ることができます

通知は信頼できる通知ではないようですが、少なくとも私には有効です。


いいアプローチ。これは基本的にカスタムトリガーですか?
キリル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.