ในฐานะ System Specialist และ Senior Architect การจัดการข้อมูลวิดีโอที่มีโครงสร้างซับซ้อนและหลากหลายองค์ประกอบ (Blocks) จากแพลตฟอร์มอย่าง XIAOHONGSHU นั้น ไม่ใช่แค่การจัดเก็บข้อมูลธรรมดา แต่คือการออกแบบระบบฐานข้อมูลที่ยืดหยุ่นและรองรับการขยายตัวในอนาคต องค์ประกอบของวิดีโอแต่ละตัวประกอบด้วยข้อมูลหลายประเภท เช่น ข้อความ, แฮชแท็ก, และข้อมูลตำแหน่ง ซึ่งเรียกว่า ‘Blocks’ การเลือกใช้ PostgreSQL ด้วยคุณสมบัติขั้นสูงอย่าง JSONB และ Array Data Types จึงเป็นแนวทางปฏิบัติที่ดีที่สุดในการจัดการชุดข้อมูลเหล่านี้อย่างมีประสิทธิภาพสูงสุด
หลักการออกแบบ Schema สำหรับ Blocks ข้อมูลวิดีโอ
การจัดการข้อมูลวิดีโอที่ประกอบด้วย Blocks หลายส่วน ควรใช้หลักการออกแบบแบบ Normalization โดยการแยกข้อมูลหลัก (Video Metadata) ออกจากส่วนข้อมูลย่อยที่มีความยืดหยุ่นสูง (Blocks) เพื่อให้ง่ายต่อการบำรุงรักษาและ Query ข้อมูลเฉพาะส่วนที่ต้องการได้อย่างรวดเร็ว เราจะใช้ตารางหลักสำหรับข้อมูลวิดีโอ และใช้ JSONB สำหรับการจัดเก็บ Blocks ที่มีโครงสร้างหลากหลายและอาจมีการเปลี่ยนแปลงบ่อยครั้ง
การใช้ PostgreSQL JSONB สำหรับการจัดเก็บ Blocks
เราจะกำหนดตารางหลักชื่อ video_metadata เพื่อเก็บข้อมูลพื้นฐานของวิดีโอ และใช้คอลัมน์ประเภท JSONB ในตาราง video_blocks เพื่อเก็บรายละเอียดของ Blocks ต่างๆ ซึ่งช่วยให้เราสามารถจัดเก็บโครงสร้างข้อมูลที่ซับซ้อนได้อย่างเป็นระเบียบ และยังสามารถ Query ข้อมูลภายใน JSON ได้โดยใช้ตัวดำเนินการที่ทรงพลังอย่าง ->>
ตัวอย่างการสร้าง Schema และการแทรกข้อมูล:
SQL
-- 1. สร้างตาราง Metadata หลักของวิดีโอ
CREATE TABLE video_metadata (
video_id SERIAL PRIMARY KEY,
xiaohongshu_url VARCHAR(255) UNIQUE NOT NULL,
upload_date TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- 2. สร้างตารางสำหรับเก็บ Blocks (ใช้ JSONB เพื่อความยืดหยุ่น)
CREATE TABLE video_blocks (
block_id SERIAL PRIMARY KEY,
video_id INTEGER REFERENCES video_metadata(video_id),
block_type VARCHAR(50) NOT NULL,
block_data JSONB
);
-- 3. ตัวอย่างการแทรกข้อมูล (ใช้ข้อมูลตัวอย่างที่สั้นและกระชับ)
INSERT INTO video_metadata (xiaohongshu_url) VALUES ('http://example.com/video1');
-- แทรก Block 1: ข้อความ (Text Block)
INSERT INTO video_blocks (video_id, block_type, block_data) VALUES (
(1, 'text', '{"content": "สวัสดีครับ", "is_main": true}'),
(1, 'hashtag', '{"tags": ["tech", "pg", "data"]}')
);
-- 4. ตัวอย่างการ Query ข้อมูลเฉพาะแฮชแท็กจาก JSONB
SELECT
v.xiaohongshu_url,
(b.block_data -> 'tags') AS extracted_tags
FROM
video_metadata v
JOIN
video_blocks b ON v.video_id = b.video_id
WHERE
b.block_type = 'hashtag';
การเพิ่มประสิทธิภาพและการขยายตัวด้วย PostgreSQL
การใช้ PostgreSQL ในลักษณะนี้ทำให้เราได้ระบบที่สามารถรองรับการขยายตัวได้สูง (Scalability) หากในอนาคตมีการเพิ่ม Block Type ใหม่ๆ เช่น ‘Video Clip Embed’ หรือ ‘User Mention’ เราเพียงแค่เพิ่มโครงสร้าง JSONB ใหม่เข้าไปในคอลัมน์ block_data โดยไม่จำเป็นต้องแก้ไข Schema ของตารางหลักเลย นี่คือจุดแข็งที่ทำให้ PostgreSQL เหนือกว่าระบบฐานข้อมูลแบบ Schema-rigid สำหรับการจัดการข้อมูลที่มีโครงสร้างซับซ้อนอย่างข้อมูล Blocks จาก XIAOHONGSHU
บทสรุป
การผสานรวมความสามารถของ JSONB และความเสถียรของ Relational Model ของ PostgreSQL เข้าด้วยกัน ทำให้เราสามารถสร้างระบบจัดการข้อมูลวิดีโอได้อย่างสมบูรณ์แบบ ตั้งแต่การจัดเก็บ Metadata ไปจนถึงการจัดการ Blocks ที่มีความหลากหลายและซับซ้อน การออกแบบนี้ไม่เพียงแต่มีประสิทธิภาพในการ Query แต่ยังมั่นใจได้ถึงความยืดหยุ่นสูงสุดในการรองรับการเปลี่ยนแปลงของแพลตฟอร์มในอนาคต