ป้ายกำกับ: Database Backup

Tarball: เป็น version control ?Tarball: เป็น version control ?

ในโลกของการพัฒนาซอฟต์แวร์และระบบข้อมูล การจัดการโค้ดหรือไฟล์ข้อมูลในแต่ละช่วงเวลาถือเป็นสิ่งสำคัญอย่างยิ่ง คำถามที่พบบ่อยคือ “Tarball เป็น Version Control ได้หรือไม่?” ในฐานะ System Specialist เราต้องเข้าใจว่า แม้ว่า Tarball จะช่วยให้เราสามารถเก็บสำเนาข้อมูล ณ จุดเวลาใดเวลาหนึ่งได้ แต่ในทางเทคนิคแล้วมันไม่ใช่ Version Control System (VCS) ครับ

เพื่อให้เห็นภาพที่ชัดเจนและลึกซึ้งในมุมมองของสถาปัตยกรรมระบบ เรามาเจาะลึกถึงความแตกต่างเชิงหลักการระหว่างการทำ Snapshot (Tarball) กับการบันทึกประวัติการเปลี่ยนแปลง (Version Control) โดยเฉพาะในบริบทของระบบฐานข้อมูลอย่าง PostgreSQL

🧐 Tarball คืออะไร? (The Snapshot)

Tarball คือการบีบอัด (Archive) ไฟล์ทั้งหมดที่อยู่ในชุดข้อมูล ณ ช่วงเวลาใดเวลาหนึ่งให้เป็นก้อนเดียว (Single Package) หน้าที่หลักของมันคือการทำให้การเก็บสำรองหรือการย้ายไฟล์ทำได้ง่ายและสะดวก

ในเชิงระบบ: Tarball เปรียบเสมือนการรันคำสั่ง `COPY` หรือ `pg_dump` เพื่อดึงข้อมูลทั้งหมดของตารางออกมา ณ วินาทีนั้น ๆ โดยไม่สนใจว่าข้อมูลเหล่านั้นมีการเปลี่ยนแปลงอะไรมาบ้างตั้งแต่ครั้งที่แล้ว มันคือการถ่ายภาพนิ่ง (Static Image) ของสถานะปัจจุบันเท่านั้น

📚 Version Control คืออะไร? (The History Tracker)

Version Control System (VCS) เช่น Git หรือระบบ Audit Log ใน PostgreSQL ไม่ได้สนใจแค่ว่าข้อมูลหน้าตาเป็นอย่างไร แต่สนใจว่า “ใคร แก้ไขอะไร เมื่อไหร่ และทำไม” มันคือการบันทึกประวัติการเปลี่ยนแปลง (Change History) ในระดับของแต่ละบรรทัด (Line-by-line) หรือแต่ละฟิลด์ (Field-by-field) อย่างเป็นระบบ

📊 ตารางเปรียบเทียบเชิงสถาปัตยกรรม

คุณสมบัติ Tarball (Snapshot) Version Control (History)
สิ่งที่บันทึก สถานะทั้งหมด ณ เวลา T (All data) เฉพาะส่วนที่เปลี่ยนแปลง (Delta)
การกู้คืน กู้คืนทั้งชุดข้อมูล (Rollback to a point) ย้อนดูการเปลี่ยนแปลงทีละขั้นตอน (Audit Trail)
ประสิทธิภาพ ขนาดใหญ่, เก็บข้อมูลซ้ำ มีประสิทธิภาพสูง, เก็บเฉพาะส่วนที่ต่าง

💡 ตัวอย่างใน PostgreSQL: การจำลอง Version Control

หากเราต้องการให้ PostgreSQL มีคุณสมบัติคล้าย Version Control เราจะไม่ใช้ Tarball แต่เราจะใช้เทคนิคที่เรียกว่า Auditing หรือการใช้ Trigger เพื่อบันทึกการเปลี่ยนแปลงลงในตาราง History แยกต่างหาก

สมมติว่าเรามีตาราง `products` และต้องการบันทึกประวัติการเปลี่ยนราคา (Price) เราต้องสร้างตาราง `product_history` และใช้ Trigger เพื่อจัดการการบันทึกอัตโนมัติ:

SQL

SQL

-- 1. ตารางหลัก (Current State) --
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    price NUMERIC
);

-- 2. ตารางประวัติ (Version Control Log) --
CREATE TABLE product_history (
    id INT,
    old_price NUMERIC,
    new_price NUMERIC,
    changed_by VARCHAR(50),
    change_timestamp TIMESTAMP DEFAULT NOW()
);

-- 3. ตัวอย่างการบันทึกการเปลี่ยนแปลง (The VC Action) --
INSERT INTO products (id, name, price) VALUES (1, 'apple', 1.00);
-- เมื่อมีการ UPDATE ข้อมูล จะถูกบันทึกใน product_history โดยอัตโนมัติ
-- (สมมติว่ามี Trigger ทำงาน)
-- UPDATE products SET price = 1.20 WHERE id = 1;

-- การ Query เพื่อดูประวัติ (The VC Query)
SELECT * FROM product_history WHERE id = 1;

ข้อสังเกต: การทำเช่นนี้คือการจำลองการทำงานของ VCS โดยการบันทึก ‘ส่วนที่เปลี่ยนแปลง’ (Delta) ไม่ใช่การ Dump ข้อมูลทั้งหมดใหม่ทุกครั้ง

✅ บทสรุป: ความแตกต่างที่ต้องจำให้ขึ้นใจ

สรุปได้ว่า Tarball คือเครื่องมือในการเก็บสำเนา (Backup/Snapshot) ส่วน Version Control คือกลไกในการบันทึกประวัติ (Audit/History) การเข้าใจความแตกต่างนี้มีความสำคัญอย่างยิ่งในการออกแบบสถาปัตยกรรมระบบที่ต้องการความสามารถในการตรวจสอบย้อนหลัง (Traceability) และความสมบูรณ์ของข้อมูลในระดับสูง