PlusMagi's Blog By Pitt Phunsanit Backend Laravel: manual Asset Cache data with JSON

Laravel: manual Asset Cache data with JSON

ในระบบเว็บแอปพลิเคชันสมัยใหม่ที่ใช้ Framework อย่าง Laravel ร่วมกับ Frontend Framework เช่น Vue.js หรือ React การจัดการข้อมูลตัวเลือก (Options) สำหรับ Select Box ที่มีการเปลี่ยนแปลงบ้างเป็นเรื่องที่ท้าทาย การใช้การแคชไฟล์แบบเดิมอาจไม่ยืดหยุ่นพอเมื่อระบบขยายตัว ดังนั้น การใช้ PostgreSQL ร่วมกับประเภทข้อมูล JSONB จึงเป็นทางออกที่ทรงพลังและเป็นมาตรฐานระดับ Senior Architect

บทความนี้จะนำเสนอวิธีการสร้างระบบ Asset Cache แบบ Manual โดยการเก็บข้อมูลตัวเลือกที่ใช้ร่วมกัน (Shared Options) ลงในคอลัมน์ JSONB ของ PostgreSQL แทนการสร้างไฟล์ JSON แยกต่างหากใน Public Directory ซึ่งช่วยเพิ่มความเสถียร ความรวดเร็วในการเข้าถึง และทำให้การจัดการข้อมูลทั้งหมดอยู่ภายใต้การควบคุมของฐานข้อมูลอย่างสมบูรณ์

💡 หลักการทำงาน: JSONB Caching ใน PostgreSQL

แทนที่จะให้ Controller เขียนไฟล์ JSON ลงในระบบไฟล์ (File System) เราจะกำหนดตารางเฉพาะเพื่อเก็บข้อมูลแคช โดยใช้คอลัมน์ประเภท JSONB (JSON Binary) ซึ่งเป็นคุณสมบัติที่ยอดเยี่ยมของ PostgreSQL เพราะไม่เพียงแต่เก็บข้อมูล JSON ได้เท่านั้น แต่ยังสามารถทำ Indexing และ Query ข้อมูลภายใน JSON ได้ด้วยความเร็วสูง

ขั้นตอนการออกแบบฐานข้อมูล (Schema Design)

เราจะสร้างตารางชื่อ asset_cache เพื่อเก็บ Key, ชื่อ Model ที่เกี่ยวข้อง, และข้อมูลตัวเลือกในรูปแบบ JSONB

SQL

-- สร้างตารางสำหรับเก็บ Asset Cache Options<br>CREATE TABLE asset_cache ( <br>    cache_key VARCHAR(100) PRIMARY KEY, <br>    model_name VARCHAR(100) NOT NULL, <br>    options_data JSONB NOT NULL, <br>    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP <br>);

การบันทึกข้อมูลแคช (Caching Data)

เมื่อมีการอัปเดตข้อมูลตัวเลือกในระบบ (เช่น ข้อมูลประเภท ‘Status’ หรือ ‘Country’) เราจะใช้คำสั่ง SQL เพื่อบันทึกข้อมูลลงในตารางนี้ โดยใช้ JSONB เพื่อจัดเก็บโครงสร้างข้อมูลที่ JavaScript สามารถอ่านได้ทันที

SQL

-- ตัวอย่างการบันทึกข้อมูลตัวเลือก 'Status' สำหรับ Model 'User'<br>INSERT INTO asset_cache (cache_key, model_name, options_data) <br>VALUES ( <br>    'user_status_options', <br>    'App\Models\User', <br>    '{"1": "Active", "2": "Inactive", "3": "Pending"}'::jsonb <br>) <br>ON CONFLICT (cache_key) DO UPDATE SET <br>    options_data = EXCLUDED.options_data, <br>    last_updated = CURRENT_TIMESTAMP;

การดึงข้อมูลแคช (Retrieving Data)

เมื่อ Frontend ต้องการข้อมูลตัวเลือก ข้อมูลจะถูกดึงจาก PostgreSQL โดยตรงผ่าน Query ที่ระบุ cache_key ทำให้มั่นใจได้ว่าข้อมูลที่ส่งไปให้ JavaScript เป็นข้อมูลล่าสุดและมีประสิทธิภาพสูง

SQL

-- ดึงข้อมูลตัวเลือกทั้งหมดสำหรับ Key ที่ระบุ<br>SELECT options_data FROM asset_cache <br>WHERE cache_key = 'user_status_options';

🚀 การผสานรวมกับ Laravel (Laravel Integration)

ในฝั่ง Laravel Controller เราจะเขียน Logic เพื่อรับผิดชอบการอ่าน/เขียนข้อมูลนี้ โดยใช้ Model หรือ Repository Layer เพื่อเรียกใช้คำสั่ง SQL ข้างต้น การทำเช่นนี้ทำให้โค้ดของเรามีความสะอาด (Clean Code) และแยก Business Logic ออกจาก Data Access Logic ได้อย่างสมบูรณ์

✨ บทสรุป (Conclusion)

การใช้ PostgreSQL JSONB ในการจัดการ Asset Cache Options เป็นการยกระดับสถาปัตยกรรมระบบให้มีความเป็นมืออาชีพมากขึ้นอย่างเห็นได้ชัด มันช่วยให้เราหลีกเลี่ยงปัญหาการจัดการไฟล์ภายนอก (File System Dependency) และทำให้การแคชข้อมูลที่ใช้ร่วมกัน (Shared Data) มีความรวดเร็ว ปลอดภัย และสามารถ Query ได้ด้วยพลังของฐานข้อมูล ทำให้ระบบของเรามีความยืดหยุ่นและพร้อมสำหรับการขยายตัวในอนาคตได้อย่างไม่มีข้อจำกัด