วิธีรับการแจ้งเตือนแบบเรียลไทม์เมื่อมีการเปลี่ยนแปลงฐานข้อมูล (แทรกอัปเดตลบ)?


13

ฉันกำลังสร้างแดชบอร์ดซึ่งควรตรวจสอบตารางฐานข้อมูล ฉันมีการเข้าถึงฐานข้อมูลเท่านั้น (ไม่มีเลเยอร์แอปพลิเคชัน) ตารางมีขนาดค่อนข้างใหญ่ (10 ล้านแถว) แต่ไม่เปลี่ยนแปลงอย่างรวดเร็ว (100 เม็ด / อัปเดตต่อนาที)

ฉันจะทราบได้อย่างไรว่าตารางมีการเปลี่ยนแปลงอย่างไร ฉันจะพยายามที่จะตีฐานข้อมูลทุกวินาที แต่ดูเหมือนว่าวิธีการดุร้ายกำลัง ...

ฐานข้อมูล: MySQL / Postgres


นี้อาจจะเป็นประโยชน์ เราใช้สิ่งนี้เพื่อตรวจสอบเซิร์ฟเวอร์ฟาร์มของเรา ฉันค่อนข้างแน่ใจว่านี่จะมีคุณสมบัติในการติดตามการเปลี่ยนแปลงตารางใน DB น่าเสียดายที่เรายังไม่ได้กำหนดค่าถึงระดับตาราง ดังนั้นฉันจึงไม่ทราบถึงการกำหนดค่าระดับตาราง
Jude Niroshan

ขอบคุณสำหรับความคิดเห็น แต่ nagios จะช่วยได้อย่างไร ฉันมีสิทธิ์เข้าถึงฐานข้อมูลเท่านั้น ฉันไม่สามารถติดตั้งอะไรบนเครื่องระยะไกล
คิริล

3
คุณต้องการรับการแจ้งเตือนแบบเรียลไทม์ทุกครั้งที่มีการแทรกหรือปรับปรุงแถวหรือไม่ คิดดูอีกครั้ง.
Tulains Córdova

มีเหตุผลที่ถูกต้องหรือไม่ทำไมคุณไม่มีเลเยอร์แอปพลิเคชัน? สำหรับฉันแล้วมันเป็นวิธีที่ดีที่สุดในการทำสิ่งต่าง ๆ เช่นมีเลเยอร์แอปพลิเคชันที่จัดการการตรวจสอบ เช่นการส่งอีเมลจากเซิร์ฟเวอร์ฐานข้อมูลดูไม่เหมือนสถาปัตยกรรมที่สะอาด
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
คุณสามารถรับค่าการเปลี่ยนแปลงที่ระบุได้โดยเลือกจากตาราง 'แทรก', 'อัพเดต' และ 'ลบ' และคุณสามารถเพิ่มรหัสลงในเนื้อความได้
stechray

2
แทนที่จะส่งอีเมลคุณสามารถเรียกขั้นตอนที่เก็บไว้ซึ่งเชื่อมต่อกับเว็บ API ที่แดชบอร์ดสนับสนุน ดูรายละเอียดได้ที่นี่: forums.asp.net/t/…
stechray

3
หรือให้ทริกเกอร์ใส่ข้อมูลในตารางเพิ่มเติมที่คุณจะทำการสอบถาม (และว่างเปล่า) ตามช่วงเวลาที่คุณต้องการ ไม่ใช่ทางเทคนิค 'เวลาจริง' แต่สามารถทำให้ดูเหมือน
Jan Doggen

1
ให้ทริกเกอร์พุชข้อมูลการอัปเดตลงในคิว (หรือหัวข้อ) บนนายหน้าการส่งข้อความ นี่เป็นวิธีการโปรดของฉันเสมอ วิธีนี้คุณไม่มีตรรกะที่ซับซ้อนในทริกเกอร์และคุณมีความยืดหยุ่นอย่างมากกับสิ่งที่คุณทำกับข้อความเมื่อคุณได้รับ และหากคุณผลักดันหัวข้อ pub / sub คุณสามารถมีผู้บริโภคจำนวนมากที่รับมันและทำสิ่งที่แตกต่างกับมัน
mindcrime

3

สำหรับ PostgreSQL ฉันรู้วิธีรับการแจ้งเตือนจากฐานข้อมูลเมื่อแถวเปลี่ยนไป

  1. ใช้ทริกเกอร์เมื่อมีการแทรก / อัพเดต / ลบ
  2. เมื่อเกิดเหตุการณ์ส่งการแจ้งเตือนไปยังซ็อกเก็ตลูกค้า
  3. ต้องแน่ใจว่าแอปของคุณมีไคลเอ็นต์ไปยังเซิร์ฟเวอร์
  4. แอพของคุณจะได้รับการแจ้งเตือน

คุณสามารถดูรหัสของฉันหรือเอกสารของ PostgreSQL

ดูเหมือนว่าการแจ้งเตือนไม่ใช่การแจ้งเตือนที่เชื่อถือได้ แต่อย่างน้อยก็ใช้ได้สำหรับฉัน


วิธีการที่ดี นี่เป็นทริกเกอร์ที่กำหนดเองใช่ไหม
คิริล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.