ป้ายกำกับ: ลดพื้นที่ผิวของการโจมตี

Shell Script: ดัดแปลงให้ส่งพารามิเตอร์รันแบบขนาน (Parallel Execution)Shell Script: ดัดแปลงให้ส่งพารามิเตอร์รันแบบขนาน (Parallel Execution)

ในโลกของการบริหารจัดการฐานข้อมูลขนาดใหญ่ (Database Administration) และ DevOps การรันสคริปต์ที่ต้องประมวลผลข้อมูลจำนวนมากมักเผชิญกับข้อจำกัดด้านเวลา เนื่องจากธรรมชาติของการประมวลผลแบบตามลำดับขั้นตอน (Sequential Execution) หากเราต้องการให้กระบวนการเหล่านั้นเสร็จสิ้นอย่างรวดเร็วที่สุด เราจำเป็นต้องเปลี่ยนแนวคิดจากการสั่งงานทีละคำสั่งไปสู่การดำเนินการพร้อมกัน หรือที่เรียกว่า Parallel Execution

สำหรับผู้ที่ทำงานกับ PostgreSQL การทำ Parallel Execution มักจะถูกจัดการโดยการใช้ Shell Script (เช่น Bash) เป็นตัวควบคุม (Orchestrator) เพื่อเรียกใช้งานคำสั่ง SQL หลายชุดพร้อมกัน โดยที่ตัว PostgreSQL เองจะรับผิดชอบการประมวลผลข้อมูลที่หนักหน่วง

หลักการทำงาน: การควบคุมแบบขนานด้วย Bash และ PostgreSQL

หัวใจสำคัญของการทำ Parallelism ในบริบทนี้คือการใช้ Shell Script เพื่อสร้างลูปที่เรียกใช้งานคำสั่ง `psql` หลายครั้งในพื้นหลัง (Background Jobs) โดยที่แต่ละคำสั่งจะรับผิดชอบการประมวลผลชุดข้อมูล (Batch) ที่แตกต่างกันไป การทำเช่นนี้ช่วยลดเวลารอคอยรวม (Total Wait Time) ได้อย่างมาก โดยไม่ทำให้ทรัพยากรของเซิร์ฟเวอร์เกิดภาวะเกินภาระ (Overload) หากมีการจัดการที่เหมาะสม

การเตรียมฟังก์ชัน PostgreSQL สำหรับ Batch Processing

ก่อนที่เราจะรันแบบขนาน เราต้องมั่นใจว่า PostgreSQL มีฟังก์ชันที่พร้อมรับพารามิเตอร์หลายชุด (Batch Parameters) เพื่อให้แต่ละงานที่รันแบบขนานสามารถประมวลผลได้อย่างมีประสิทธิภาพ ตัวอย่างเช่น การสร้างฟังก์ชันที่รับรายการ ID ที่คั่นด้วยเครื่องหมายคอมม่า:

SQL

-- สร้างฟังก์ชันที่รับรายการพารามิเตอร์ (เช่น ID) เป็นข้อความ และทำการประมวลผลเป็นชุด (Batch) ของแถวข้อมูล<br>CREATE OR REPLACE FUNCTION process_batch_data(p_params text[])<br>RETURNS VOID AS $$
BEGIN
    -- สมมติว่าเราต้องการอัปเดตสถานะของข้อมูลตาม ID ที่ได้รับมา
    UPDATE target_table
    SET status = 'PROCESSED'
    WHERE id = ANY(p_params);
END;
$$ LANGUAGE plpgsql;<br>

การเรียกใช้งานแบบขนานด้วย Shell Script (Bash)

ในส่วนของ Shell Script เราจะใช้ลูปเพื่อวนรอบชุดข้อมูลหลายชุด (เช่น Batch 1, Batch 2, Batch 3) และส่งคำสั่ง `psql` ไปเรียกใช้ฟังก์ชันที่สร้างไว้ในพื้นหลัง (`&`) เพื่อให้ทำงานพร้อมกัน:

BASH / Shell

#!/bin/bash

# รายการ Batch Parameters ที่ต้องการประมวลผล
PARAMETERS="'1,2,3' '4,5,6' '7,8,9'" 

for batch in $PARAMETERS;
  # เรียกใช้ psql และส่งคำสั่ง SQL เข้าไปทำงานในพื้นหลัง (&)
  psql -c "SELECT process_batch_data(ARRAY['${batch}']::text[]);" & 
done

# รอให้งานทั้งหมดในพื้นหลังเสร็จสิ้น
wait

echo "Parallel processing completed successfully.";

บทสรุป

การทำ Parallel Execution ในการจัดการฐานข้อมูลด้วย PostgreSQL ไม่ได้แปลว่าเราต้องเขียนโค้ด SQL ที่ซับซ้อนขึ้นเสมอไป แต่เป็นการปรับปรุงกระบวนการทำงานโดยการใช้ Shell Script เป็นตัวจัดการงาน (Job Manager) เพื่อกระจายภาระงานการประมวลผลไปยังงานย่อยๆ ที่ทำงานพร้อมกัน การทำความเข้าใจการทำงานร่วมกันระหว่าง Bash และ PostgreSQL จะช่วยให้ระบบของคุณสามารถจัดการกับข้อมูลขนาดใหญ่ได้อย่างรวดเร็วและมีประสิทธิภาพสูงสุด