ป้ายกำกับ: Sql Optimization

pure.jspure.js

ในฐานะ System Architect ที่ดูแลระบบฐานข้อมูลขนาดใหญ่ การจัดการกับ ‘Side Effects’ หรือผลกระทบข้างเคียงที่ไม่คาดคิดถือเป็นความท้าทายหลักอย่างยิ่ง แนวคิดของ Pure Function ซึ่งเดิมมาจากโลกของ JavaScript (pure.js) กำลังได้รับความสำคัญอย่างมากในการออกแบบ Query และ Stored Procedure ของ PostgreSQL เพื่อให้มั่นใจว่าการประมวลผลข้อมูลของเรามีความเที่ยงตรง (Deterministic) และสามารถคาดเดาผลลัพธ์ได้เสมอ

หลักการของ Pure Functions ใน PostgreSQL

Pure Function ในบริบทของฐานข้อมูล ไม่ได้หมายถึงการใช้ไลบรารี JavaScript แต่หมายถึงการเขียน Query หรือ Function ที่ผลลัพธ์ที่ได้จะขึ้นอยู่กับ Input (ข้อมูลที่ป้อน) เพียงอย่างเดียวเท่านั้น และที่สำคัญที่สุดคือ จะต้องไม่มีการเปลี่ยนแปลงสถานะของข้อมูลภายนอก (No Side Effects) เช่น การทำ INSERT, UPDATE, หรือ DELETE บนตารางต้นฉบับโดยตรง

การใช้ Pure Functions ใน PostgreSQL ช่วยให้เราสามารถแยกส่วนของการคำนวณ (Computation) ออกจากการดำเนินการเปลี่ยนแปลงข้อมูล (Mutation) ทำให้โค้ดของเราง่ายต่อการทดสอบ (Testability) และลดโอกาสเกิด Race Condition ในระบบที่มีผู้ใช้งานพร้อมกันจำนวนมาก

การประยุกต์ใช้ Pure Logic ด้วย CTEs และ Functions

เครื่องมือหลักที่ช่วยให้เราสร้าง Pure Logic ใน PostgreSQL คือ Common Table Expressions (CTEs) และการเขียน Functions ที่รับค่าเป็น Input และคืนค่าเป็น Output โดยไม่แตะต้องตารางหลัก

สมมติว่าเรามีตาราง products และต้องการคำนวณยอดรวมของสินค้าที่อยู่ในหมวดหมู่ ‘apple’ โดยไม่ให้ Query นี้ไปเปลี่ยนแปลงข้อมูลใด ๆ ในตาราง products เลย เราสามารถใช้ CTE เพื่อสร้างมุมมองข้อมูลชั่วคราวสำหรับการคำนวณเท่านั้น:

SQL

-- ตัวอย่างการใช้ CTE เพื่อคำนวณยอดรวมโดยไม่มี Side Effect (Pure Query) 
WITH filtered_products AS (
    SELECT
        product_id,
        product_name,
        price
    FROM products
    WHERE category_name = 'apple'
)
SELECT
    COUNT(product_id) AS total_apple_count,
    SUM(price) AS total_apple_revenue
FROM filtered_products;

ในตัวอย่างนี้ filtered_products เป็นเพียงการกรองข้อมูลเพื่อการคำนวณเท่านั้น ไม่มีการใช้คำสั่ง UPDATE หรือ INSERT ใด ๆ ทำให้ Query นี้เป็น Pure Query อย่างแท้จริง

ประโยชน์ต่อสถาปัตยกรรมระบบ (Architectural Benefits)

การยึดหลัก Pure Functions ในการออกแบบ PostgreSQL ไม่เพียงแต่ช่วยเรื่องความเสถียรเท่านั้น แต่ยังส่งผลดีต่อประสิทธิภาพ (Performance) ด้วย เพราะ Optimizer ของ PostgreSQL สามารถจัดการกับ Query ที่เป็น Pure Logic ได้อย่างมีประสิทธิภาพสูงสุด ทำให้การทำ Query ซับซ้อน (Complex Joins) หรือการคำนวณทางสถิติขนาดใหญ่ทำได้อย่างรวดเร็วและแม่นยำ

บทสรุป

การนำแนวคิดของ Pure Functions มาปรับใช้กับ PostgreSQL คือการยกระดับมาตรฐานการเขียนโค้ดฐานข้อมูลให้เป็นระดับ Senior Architect การทำเช่นนี้ช่วยให้ระบบของเรามีความทนทาน (Resilient) สามารถตรวจสอบย้อนกลับ (Auditable) และบำรุงรักษาได้ง่ายขึ้นอย่างมาก ดังนั้น การให้ความสำคัญกับการแยกส่วนการคำนวณออกจากส่วนการเปลี่ยนแปลงข้อมูลจึงเป็นหัวใจสำคัญของการออกแบบระบบฐานข้อมูลที่ทันสมัยและมีประสิทธิภาพสูง