데이터베이스 변경 (삽입, 업데이트, 삭제)이 발생할 때 실시간 알림을받는 방법은 무엇입니까?


13

데이터베이스 테이블을 모니터링 해야하는 대시 보드를 만들고 있습니다. 데이터베이스 액세스 권한 만 있습니다 (응용 프로그램 계층 없음). 테이블이 다소 크지 만 (1 천만 행) 빠르게 변경되지 않음 (분당 100 개의 삽입 / 업데이트)

테이블이 변경되었는지 어떻게 알 수 있습니까? 나는 매 초마다 데이터베이스를 공격하려고 시도하지만 이것은 무차별 대입 방식처럼 보입니다 ...

데이터베이스 : MySQL / Postgres


도움이 될 수 있습니다 . 이를 사용하여 서버 팜을 모니터링하고 있습니다. 이것이 DB의 테이블 변경을 추적하는 기능을 가지고 있다고 확신합니다. 불행히도 우리는 테이블 수준까지 구성하지 않았습니다. 따라서 테이블 수준까지 구성하는 것을 알지 못합니다.
Jude Niroshan

의견 주셔서 감사합니다. 그러나 나 지오가 어떻게 도울 수 있습니까? 데이터베이스 액세스 권한 만 있습니다. 원격 컴퓨터에 아무것도 설치할 수 없습니다.
Kiril

3
행을 삽입하거나 업데이트 할 때마다 실시간으로 알림을 받으시겠습니까? 다시 생각 해봐.
Tulains Córdova

응용 프로그램 계층이없는 유효한 이유가 있습니까? 작업을 수행하는 가장 좋은 방법, 즉 모니터링을 처리하는 응용 프로그램 계층이있는 것 같습니다. 예를 들어 데이터베이스 서버에서 전자 메일을 보내는 것은 깔끔한 아키텍처처럼 보이지 않습니다.
juhist

나는 이것을하는 작은 mysql 플러그인을 가지고있다 : github.com/Cyclonecode/mysql-notification
Cyclonecode 5

답변:


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

매 초마다 데이터베이스를 누르는 것보다 이것이 더 좋을지 확실하지 않거나 메일의 전체 변경 사항을 보내고 대시 보드 소프트웨어가 전자 메일을 구문 분석하도록 하시겠습니까?
Kiril

1
'inserted', 'updated'및 'deleted'테이블에서 선택하여 특정 변경된 값을 얻을 수 있으며 본문에 ID를 추가 할 수 있습니다.
stechray

2
이메일을 보내는 대신 대시 보드가 지원하는 웹 API에 연결하는 저장 프로 시저를 호출 할 수도 있습니다. 자세한 내용은 여기를 참조하십시오 : forums.asp.net/t/…
stechray

3
또는 트리거가 추가 테이블에 데이터를 넣은 다음 원하는 간격으로 쿼리하고 비 웁니다. 기술적으로는 '실시간'이 아니라 보이도록 만들 수 있습니다.
Jan Doggen

1
트리거가 업데이트 정보를 메시징 브로커의 큐 (또는 주제)로 푸시하도록하십시오. 이것은 항상 내가 가장 좋아하는 접근법이었습니다. 이렇게하면 트리거에 복잡한 논리가 없으며 메시지를받을 때 수행하는 작업에 많은 유연성이 있습니다. 또한 펍 / 서브 주제로 넘어 가면 여러 소비자가이를 수신하여 다른 작업을 수행 할 수도 있습니다.
mindcrime

3

PostgreSQL의 경우 행이 변경 될 때 데이터베이스에서 알림을받는 방법을 알고 있습니다.

  1. 삽입 / 업데이트 / 삭제가 발생할 때 트리거를 사용하십시오.
  2. 이벤트가 발생하면 클라이언트 소켓에 알림을 보냅니다.
  3. 앱에 서버에 대한 클라이언트가 있는지 확인하십시오.
  4. 그러면 앱에 알림이 수신됩니다.

내 코드 또는 PostgreSQL의 설명서를 볼 수 있습니다 .

알림이 신뢰할 수있는 알림은 아니지만 적어도 나를 위해 작동합니다.


좋은 접근법. 이것은 기본적으로 사용자 정의 트리거입니까?
Kiril
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.