ป้ายกำกับ: Scheduled Task

Bedside Wake-up ServiceBedside Wake-up Service

ในโลกของระบบ 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 ทำให้เราสามารถสร้างระบบแจ้งเตือนที่ซับซ้อนและมีประสิทธิภาพสูงได้อย่างสมบูรณ์