Làm cách nào để nhận thông báo theo thời gian thực, khi cơ sở dữ liệu thay đổi (chèn, cập nhật, xóa) xảy ra?


12

Tôi đang tạo một bảng điều khiển sẽ theo dõi bảng cơ sở dữ liệu. Tôi chỉ có quyền truy cập cơ sở dữ liệu (không có lớp ứng dụng). Bảng khá lớn (10 triệu hàng), tuy nhiên không thay đổi nhanh chóng (100 lần chèn / cập nhật mỗi phút)

Làm thế nào tôi có thể tìm hiểu xem bảng thay đổi? Tôi sẽ cố gắng truy cập cơ sở dữ liệu mỗi giây, nhưng đây có vẻ là một cách tiếp cận vũ phu ...

Cơ sở dữ liệu: MySQL / Postgres


Điều này có thể hữu ích . Chúng tôi đang sử dụng điều này để theo dõi trang trại máy chủ của chúng tôi. Tôi khá chắc chắn rằng điều này sẽ có tính năng theo dõi sự thay đổi bảng trong DB. Thật không may, chúng tôi đã không cấu hình đến mức bảng. Vì vậy, tôi không biết cấu hình đến mức bảng.
Jude Niroshan

Cảm ơn các bình luận. Nhưng làm thế nào nagios có thể giúp đỡ? Tôi chỉ có quyền truy cập cơ sở dữ liệu. Tôi không thể cài đặt bất cứ thứ gì trên các máy từ xa.
Kiril

3
Bạn có thực sự muốn được thông báo - trong thời gian thực - mỗi khi một hàng được chèn hoặc cập nhật không? Nghĩ lại.
Tulains Córdova

Có bất kỳ lý do hợp lệ tại sao bạn không có một lớp ứng dụng? Nó dường như là cách tốt nhất để làm mọi thứ, tức là có một lớp ứng dụng xử lý việc giám sát. Ví dụ, gửi e-mail từ máy chủ cơ sở dữ liệu không giống như một kiến ​​trúc sạch.
juhist

Tôi có một plugin mysql nhỏ thực hiện việc này: github.com/Cyclonecode/mysql-notification
Cyclonecode

Câu trả lời:


9

Bạn có thể sử dụng kích hoạt.

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

Tôi không chắc điều này sẽ tốt hơn so với việc nhấn cơ sở dữ liệu mỗi giây hoặc bạn sẽ gửi toàn bộ thay đổi trong thư và để phần mềm bảng điều khiển phân tích email?
Kiril

1
Bạn có thể nhận các giá trị thay đổi cụ thể bằng cách chọn từ các bảng 'được chèn', 'đã cập nhật' và 'đã xóa' và bạn có thể thêm id vào phần thân.
stechray

2
Thay vì gửi email, bạn cũng có thể gọi một thủ tục được lưu trữ kết nối với một api web mà bảng điều khiển hỗ trợ. Xem tại đây để biết chi tiết: forum.asp.net/t/ Từ
stechray

3
Hoặc có các trình kích hoạt đặt dữ liệu vào một bảng bổ sung mà sau đó bạn truy vấn (và trống) theo các khoảng thời gian bạn mong muốn. Không phải kỹ thuật "thời gian thực", nhưng có thể được thực hiện để trông giống như nó.
Jan Doggen

1
Có trình kích hoạt đẩy thông tin cập nhật lên hàng đợi (hoặc chủ đề) trên một nhà môi giới nhắn tin. Điều này luôn luôn là phương pháp yêu thích của tôi. Bằng cách này, bạn không có bất kỳ logic phức tạp nào trong trình kích hoạt và bạn có rất nhiều sự linh hoạt với những gì bạn làm với thông báo khi bạn nhận được nó. Và nếu bạn chuyển sang một chủ đề quán rượu / phụ, bạn thậm chí có thể có nhiều người tiêu dùng nhận được nó và làm những việc khác nhau với nó.
trí

3

Đối với PostgreSQL tôi biết một cách để nhận thông báo từ cơ sở dữ liệu khi một hàng thay đổi.

  1. sử dụng kích hoạt khi xảy ra chèn / cập nhật / xóa.
  2. khi sự kiện xảy ra, gửi thông báo đến ổ cắm máy khách.
  3. hãy chắc chắn rằng ứng dụng của bạn có một máy khách đến máy chủ.
  4. sau đó ứng dụng của bạn sẽ nhận được thông báo.

Bạn có thể xem mã của tôi hoặc tài liệu của PostgreQuery .

Có vẻ như thông báo không phải là một thông báo đáng tin cậy, nhưng ít nhất nó cũng hoạt động với tôi.


Cách tiếp cận tốt đẹp. Đây cơ bản là một kích hoạt tùy chỉnh?
Kiril
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.