ในโลกของระบบ IoT และ Smart Home การแจ้งเตือนที่แม่นยำและเชื่อถือได้เป็นหัวใจสำคัญ โดยเฉพาะอย่างยิ่งสำหรับบริการที่ต้องทำงานตามเวลาที่กำหนด เช่น Bedside Wake-up Service ซึ่งต้องการความแม่นยำระดับวินาทีในการส่งสัญญาณปลุก ระบบฐานข้อมูลแบบดั้งเดิมอาจไม่เพียงพอ บทความนี้จะเจาะลึกวิธีการใช้พลังของ PostgreSQL ในการสร้างระบบแจ้งเตือนที่ซับซ้อนและเชื่อถือได้
การออกแบบสถาปัตยกรรมด้วย PostgreSQL สำหรับระบบ Wake-up
การสร้างบริการปลุกอัจฉริยะด้วย PostgreSQL ไม่ได้หมายถึงการใช้แค่ตารางข้อมูลเท่านั้น แต่เป็นการใช้ความสามารถในการจัดตารางเวลา (Scheduling) และการจัดการเหตุการณ์ (Event Handling) ของระบบฐานข้อมูลเอง โดยเราจะใช้ส่วนขยาย (Extension) เช่น pg_cron เพื่อจัดการงานที่ต้องเกิดขึ้น ณ เวลาที่กำหนด
ขั้นตอนที่ 1: การจัดเก็บข้อมูลการตั้งค่าการปลุก
เราต้องมีตารางเพื่อเก็บข้อมูลการตั้งค่าการปลุกของแต่ละผู้ใช้ ซึ่งประกอบด้วย User ID, วันที่, และเวลาที่ต้องการปลุก
SQL
SQL
CREATE TABLE wakeup_schedule (\n user_id SERIAL PRIMARY KEY,\n wake_up_date DATE NOT NULL,\n wake_up_time TIME NOT NULL,\n is_active BOOLEAN DEFAULT TRUE\n);
ขั้นตอนที่ 2: การสร้าง Job ด้วย pg_cron
เมื่อข้อมูลถูกบันทึกแล้ว เราจะใช้ pg_cron เพื่อตั้งเวลาให้ฐานข้อมูลรันฟังก์ชัน (Function) ที่ทำหน้าที่ส่งการแจ้งเตือนไปยังอุปกรณ์ปลายทาง (เช่น API Gateway หรือ Message Queue) โดยกำหนดให้รันตามเวลาที่ระบุในตาราง
SQL
SQL
-- ตัวอย่างการสร้าง Job ให้รันทุกวันเวลา 07:00:00 น. สำหรับ User ID 1\nSELECT cron.schedule( \n 'daily-wakeup-job', \n '0 7 * * *', \n 'SELECT send_notification(1, ''Good morning!'');' \n);
ขั้นตอนที่ 3: ฟังก์ชันการแจ้งเตือน (The Core Logic)
หัวใจสำคัญคือฟังก์ชันที่รับผิดชอบการส่งข้อความปลุกจริง ฟังก์ชันนี้ควรมีการตรวจสอบสถานะผู้ใช้และรายละเอียดการปลุกก่อนดำเนินการ
SQL
SQL
CREATE OR REPLACE FUNCTION send_notification(p_user_id INT, p_message TEXT) \nRETURNS VOID AS \n$$ \nBEGIN \n -- Logic for connecting to external notification service (e.g., MQTT, Kafka)\n INSERT INTO notification_log (user_id, message, sent_at) \n VALUES (p_user_id, p_message, NOW()); \nEND; \n$$ LANGUAGE plpgsql;
สรุป: ความน่าเชื่อถือของ PostgreSQL ในงานเวลาจริง
การใช้ PostgreSQL ในการจัดการ Bedside Wake-up Service ทำให้ระบบมีความน่าเชื่อถือสูง เนื่องจาก PostgreSQL สามารถรับประกันการทำงานตามเวลาที่กำหนด (Scheduled Tasks) ได้อย่างแม่นยำกว่าการใช้ Cron Job ภายนอกเพียงอย่างเดียว นอกจากนี้ การใช้ JSONB ในการเก็บ Payload ของการแจ้งเตือนยังช่วยให้ระบบมีความยืดหยุ่นในการขยายฟีเจอร์ในอนาคต เช่น การเพิ่มเสียงปลุก หรือการสั่นสะเทือนได้ง่ายดาย
ด้วยการผสานรวมความสามารถด้าน Time-Series Data และ Scheduled Job ของ PostgreSQL ทำให้เราสามารถสร้างระบบแจ้งเตือนที่ซับซ้อนและมีประสิทธิภาพสูงได้อย่างสมบูรณ์