Bagaimana cara mendapatkan notifikasi waktu nyata, ketika terjadi perubahan basis data (masukkan, perbarui, hapus)?

13

Saya membuat dasbor yang harus memonitor tabel basis data. Saya hanya memiliki akses basis data (tanpa lapisan aplikasi). Tabelnya agak besar (10 juta baris), namun tidak berubah dengan cepat (100 sisipan / pembaruan per menit)

Bagaimana saya bisa mengetahui apakah tabelnya berubah? Saya akan mencoba untuk mencapai database setiap detik, tetapi ini sepertinya pendekatan brute-force ...

Database: MySQL / Postgres

Kiril
sumber
Ini mungkin bermanfaat . Kami menggunakan ini untuk memantau server pertanian kami. Saya cukup yakin ini akan memiliki fitur untuk melacak perubahan tabel dalam DB. Sayangnya kami belum mengonfigurasi hingga level tabel. Jadi, saya tidak sadar mengonfigurasi hingga tingkat tabel.
Jude Niroshan
Terima kasih atas komentarnya. Tapi bagaimana nagio bisa membantu? Saya hanya memiliki akses basis data. Saya tidak dapat menginstal apa pun di mesin jarak jauh.
Kiril
3
Apakah Anda benar-benar ingin diberitahu - secara waktu nyata - setiap kali baris dimasukkan atau diperbarui? Pikirkan lagi.
Tulains Córdova
Apakah ada alasan yang sah mengapa Anda tidak memiliki lapisan aplikasi? Menurut saya cara terbaik untuk melakukan sesuatu, yaitu memiliki lapisan aplikasi yang menangani pemantauan. Misalnya mengirim email dari server database tidak terlihat seperti arsitektur yang bersih.
juhist
Saya memiliki plugin mysql kecil yang melakukan ini: github.com/Cyclonecode/mysql-notification
Cyclonecode

Jawaban:

9

Anda dapat menggunakan pemicu.

CREATE TRIGGER notifyMe
ON table1
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DB AutoMailer',
        @recipients = '[email protected]',
        @body = 'The DB has changed',
        @subject = 'DB Change';
GO
stechray
sumber
Saya tidak yakin ini akan lebih baik, daripada memukul database setiap detik, atau Anda akan mengirim seluruh perubahan melalui pos, dan biarkan perangkat lunak dasbor mengurai email?
Kiril
1
Anda bisa mendapatkan nilai yang diubah spesifik dengan memilih dari tabel 'dimasukkan', 'diperbarui', dan 'dihapus', dan Anda dapat menambahkan id ke tubuh.
stechray
2
Alih-alih mengirim email, Anda juga dapat memanggil prosedur tersimpan yang menghubungkan ke api web yang didukung dasbor. Lihat di sini untuk perincian: forums.asp.net/t/…
stechray
3
Atau minta pemicu memasukkan data dalam tabel tambahan yang kemudian Anda kueri (dan kosongkan) pada interval yang Anda inginkan. Bukan secara teknis 'waktu nyata', tetapi dapat dibuat agar terlihat seperti itu.
Jan Doggen
1
Minta pemicunya mendorong info pembaruan ke antrian (atau topik) pada broker perpesanan. Ini selalu menjadi pendekatan favorit saya. Dengan cara ini Anda tidak memiliki logika kompleks di pemicu, dan Anda memiliki banyak fleksibilitas dengan apa yang Anda lakukan dengan pesan saat Anda menerimanya. Dan jika Anda mendorong ke topik pub / sub, Anda bahkan dapat memiliki beberapa konsumen yang menerimanya dan melakukan hal-hal yang berbeda dengannya.
mindcrime
3

Untuk PostgreSQL saya tahu cara untuk mendapatkan notifikasi dari database ketika suatu baris berubah.

  1. gunakan pemicu saat memasukkan / memperbarui / menghapus terjadi.
  2. ketika acara terjadi, kirim pemberitahuan ke soket klien.
  3. pastikan aplikasi Anda memiliki klien ke server.
  4. maka aplikasi Anda akan menerima notifikasi.

Anda dapat melihat kode saya atau dokumentasi PostgreSQL .

Tampaknya notifikasi itu bukan notifikasi yang dapat diandalkan, tetapi setidaknya itu berfungsi untuk saya.

pengguna275831
sumber
Pendekatan yang bagus. Ini pada dasarnya pemicu khusus?
Kiril