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


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.