PlusMagi's Blog By Pitt Phunsanit Backend,Database โครงสร้างข้อมูลและอัลกอริทึม (Data Structures, Big O Notation, Sorting, Searching)

โครงสร้างข้อมูลและอัลกอริทึม (Data Structures, Big O Notation, Sorting, Searching)

ในโลกของการประมวลผลข้อมูลขนาดใหญ่ (Big Data) ประสิทธิภาพของระบบฐานข้อมูลไม่ได้วัดแค่ที่ความถูกต้องของคำตอบเท่านั้น แต่ยังรวมถึงความเร็วและความสามารถในการขยายตัวเมื่อปริมาณข้อมูลเพิ่มขึ้น การเป็น System Architect ที่แท้จริงจึงต้องเข้าใจหลักการพื้นฐานทางวิทยาการคอมพิวเตอร์ ไม่ว่าจะเป็นโครงสร้างข้อมูล (Data Structures) และการวิเคราะห์ประสิทธิภาพด้วย Big O Notation

💡 Data Structures ในมุมมองของ PostgreSQL

สำหรับนักพัฒนาที่ใช้ PostgreSQL การทำความเข้าใจว่า Postgres จัดเก็บและเข้าถึงข้อมูลอย่างไร คือกุญแจสำคัญในการเขียน Query ที่มีประสิทธิภาพสูงสุด โครงสร้างพื้นฐานอย่างตาราง (Tables) ไม่ได้เป็นเพียงแค่ชุดของคอลัมน์ แต่ถูกจัดระเบียบด้วย Index ต่างๆ เช่น B-Tree ซึ่งเป็นโครงสร้างที่ช่วยให้การค้นหา (Searching) ข้อมูลทำได้อย่างรวดเร็วในระดับ $O( ext{log } n)$

นอกจากนี้ การใช้ประเภทข้อมูลขั้นสูงอย่าง JSONB ก็ถือเป็นการนำ Data Structure เข้ามาประยุกต์ใช้เพื่อจัดการกับ Semi-structured data ได้อย่างมีประสิทธิภาพ ทำให้เราสามารถขยาย Schema ของแอปพลิเคชันได้โดยไม่ต้องแก้ไขโครงสร้างฐานข้อมูลหลัก (Schema Migration) บ่อยครั้ง

⏱️ Big O Notation: การวัดความซับซ้อนของ Query

Big O Notation คือเครื่องมือทางทฤษฎีที่ช่วยให้เราวิเคราะห์ว่าเวลาในการประมวลผล (Time Complexity) หรือหน่วยความจำ (Space Complexity) ของโค้ดหรือ Query จะเติบโตอย่างไร เมื่อขนาดข้อมูล ($N$) เพิ่มขึ้น การเข้าใจสิ่งนี้จะช่วยให้เราหลีกเลี่ยงปัญหาคอขวด (Bottleneck) ได้ก่อนที่มันจะเกิดขึ้นจริง

ตัวอย่างเช่น:

  • Full Table Scan: หาก Query ต้องอ่านทุกแถวในตารางโดยไม่มี Index ที่เหมาะสม จะมีความซับซ้อนสูงถึง $O(N)$ ซึ่งหมายความว่าถ้าข้อมูลเพิ่มขึ้น 10 เท่า เวลาในการค้นหาก็จะเพิ่มขึ้นเกือบ 10 เท่า
  • Indexed Lookup (B-Tree): การใช้ Index ที่ถูกต้องทำให้การค้นหาลดเหลือเพียง $O( ext{log } n)$ ซึ่งมีประสิทธิภาพสูงกว่ามากเมื่อข้อมูลมีขนาดใหญ่ระดับล้านแถว

🔗 การประยุกต์ใช้อัลกอริทึมขั้นสูงใน PostgreSQL

อัลกอริทึมที่ซับซ้อน เช่น การค้นหาความสัมพันธ์แบบเครือข่าย (Graph Traversal) หรือการเรียงลำดับข้อมูลขนาดใหญ่ สามารถจำลองและใช้งานได้โดยใช้ฟีเจอร์เฉพาะของ Postgres:

  1. Recursive CTEs: ใช้สำหรับจัดการกับโครงสร้างแบบ Tree หรือ Graph เช่น การหาผู้ติดต่อทั้งหมดที่เชื่อมโยงกันในเครือข่ายสังคม (Social Network) ซึ่งเป็นตัวอย่างของการนำอัลกอริทึมกราฟมาใช้
  2. Window Functions: ช่วยให้เราสามารถคำนวณค่ารวมหรือค่าเฉลี่ยของชุดข้อมูลย่อยๆ โดยไม่ต้องทำการ Group By ที่ซับซ้อน ทำให้การประมวลผลมีประสิทธิภาพสูงกว่าการ Join หลายครั้ง

นี่คือตัวอย่างการใช้ Recursive CTE เพื่อจำลองการค้นหาความสัมพันธ์แบบลำดับชั้น (Hierarchy):

SQL

WITH RECURSIVE employee_hierarchy AS ( 
    -- Anchor Member: เริ่มต้นที่ผู้บริหารระดับสูงสุด
    SELECT id, name, manager_id, 0 AS level 
    FROM employees WHERE manager_id IS NULL 

    UNION ALL

    -- Recursive Member: ค้นหาลูกน้องของพนักงานในรอบก่อนหน้า
    SELECT e.id, e.name, e.manager_id, h.level + 1 
    FROM employees e 
    JOIN employee_hierarchy h ON e.manager_id = h.id 
) 
SELECT * FROM employee_hierarchy ORDER BY level, id;

✅ บทสรุป: จาก Coder สู่ Architect

การเป็นผู้เชี่ยวชาญด้าน PostgreSQL ที่แท้จริง ไม่ใช่แค่การรู้ Syntax ของภาษา SQL แต่คือความสามารถในการคิดแบบสถาปนิก (Architectural Thinking) การเข้าใจว่าโครงสร้างข้อมูลใดเหมาะสมกับงานประเภทไหน และการคำนวณ Big O Notation อย่างแม่นยำ จะช่วยให้คุณออกแบบระบบที่ทนทานต่อการเติบโตของข้อมูล (Scalability) ได้อย่างแท้จริง ทำให้แอปพลิเคชันของคุณทำงานได้อย่างรวดเร็วและเสถียรแม้ในสภาวะโหลดสูงสุด

Exit mobile version