PlusMagi's Blog By Pitt Phunsanit Database ทำความรู้จัก JSON และ JSONB ในโลกของ Database

ทำความรู้จัก JSON และ JSONB ในโลกของ Database

ในโลกของการพัฒนาซอฟต์แวร์ยุคใหม่ ข้อมูลไม่ได้มาในรูปแบบตารางที่ตายตัวเสมอไป การจัดการข้อมูลที่มีโครงสร้างไม่แน่นอน (Schema-less) จึงเป็นเรื่องที่หลีกเลี่ยงไม่ได้ PostgreSQL จึงเป็นระบบฐานข้อมูลที่โดดเด่นอย่างยิ่งในการรองรับข้อมูลประเภทนี้ โดยการนำเสนอคอลัมน์ข้อมูลสองรูปแบบหลักคือ JSON และ JSONB

แม้ทั้งสองจะเก็บข้อมูลในรูปแบบ JSON แต่กลไกการจัดเก็บและการใช้งานนั้นแตกต่างกันอย่างสิ้นเชิง การทำความเข้าใจความแตกต่างนี้จึงเป็นสิ่งสำคัญสำหรับ Senior Developer ทุกคน

🔬 JSON (Plain JSON): การจัดเก็บแบบข้อความดิบ

เมื่อคุณใช้ประเภทข้อมูล JSON ใน PostgreSQL ข้อมูลจะถูกเก็บในฐานข้อมูลในรูปแบบ Text (ข้อความ) ตรงตามที่คุณป้อนเข้าไปทุกประการ

✅ ข้อดีและข้อเสียของ JSON

  • การเก็บข้อมูล: รักษาโครงสร้างเดิมทั้งหมด รวมถึงช่องว่าง (Whitespace) และลำดับของ Key ที่คุณส่งมา
  • ความเร็วในการบันทึก (Write): เร็วมาก เพราะระบบเพียงแค่บันทึกข้อความลงดิสก์โดยไม่ต้องประมวลผลใดๆ
  • ความเร็วในการเรียกใช้ (Read): ช้ากว่า เพราะทุกครั้งที่ Query ระบบจะต้องทำการ Parse (แปลง) ข้อความทั้งหมดให้เป็นโครงสร้างข้อมูลก่อนจึงจะสามารถค้นหาข้อมูลภายในได้

SQL

SQL

-- ตัวอย่างการสร้างตารางและบันทึกข้อมูล JSON</code>
CREATE TABLE products_json (
    id SERIAL PRIMARY KEY,
    data JSON
);

INSERT INTO products_json (data) VALUES
('{"name": "apple", "price": 10, "tags": ["fruit", "red"]}');

🚀 JSONB (JSON Binary): การจัดเก็บแบบไบนารีที่เหนือกว่า

JSONB คือการนำข้อมูล JSON มาแปลงให้อยู่ในรูปแบบ Binary ก่อนที่จะบันทึกลงฐานข้อมูล ซึ่งเป็นหัวใจสำคัญที่ทำให้มันมีประสิทธิภาพสูงกว่า JSON มาก

✅ ข้อดีและข้อเสียของ JSONB

  • การเก็บข้อมูล: ข้อมูลจะถูกถอดรหัสและจัดเรียงใหม่ (Normalized) โดย PostgreSQL จะตัดช่องว่างที่เกินจำเป็นออก และไม่รับประกันลำดับของ Key (แต่ยังคงรักษาโครงสร้างข้อมูลไว้)
  • ความเร็วในการบันทึก (Write): เร็ว แต่ช้ากว่า JSON เล็กน้อย เพราะต้องใช้เวลาในการ Parse และจัดโครงสร้างข้อมูลให้เป็น Binary
  • ความเร็วในการเรียกใช้ (Read): เร็วที่สุด เพราะข้อมูลถูกจัดเก็บในรูปแบบไบนารีที่พร้อมสำหรับการเข้าถึงและสามารถสร้าง Index ได้อย่างมีประสิทธิภาพ

SQL

SQL

-- ตัวอย่างการสร้างตารางและบันทึกข้อมูล JSONB</code>
CREATE TABLE products_jsonb (
    id SERIAL PRIMARY KEY,
    data JSONB
);

INSERT INTO products_jsonb (data) VALUES
('{"name": "apple", "price": 10, "tags": ["fruit", "red"]}');

-- การ Query ข้อมูล (ใช้ตัวดำเนินการ ->> เพื่อดึงค่าเป็น Text)
SELECT data->>'name' FROM products_jsonb WHERE (data->>'price')::int > 5;

💡 สรุป: เมื่อไหร่ควรใช้ JSON vs JSONB?

การตัดสินใจเลือกระหว่าง JSON และ JSONB ขึ้นอยู่กับรูปแบบการใช้งานหลักของแอปพลิเคชันคุณ:

  • เลือก JSON เมื่อ: คุณต้องการความแม่นยำของข้อมูลดิบ (Raw Data) สูงสุด และการเขียนข้อมูล (Write Operation) มีความสำคัญกว่าความเร็วในการอ่าน (Read Operation) เช่น การเก็บ Log หรือข้อมูลที่ต้องแสดงผลตามโครงสร้างต้นฉบับเป๊ะๆ
  • เลือก JSONB เมื่อ: นี่คือกรณีส่วนใหญ่ (The Golden Rule) หากแอปพลิเคชันของคุณมีการ Query ข้อมูลภายในบ่อยครั้ง (Read-Heavy) หรือคุณต้องการประสิทธิภาพสูงสุดในการค้นหาและการทำ Indexing (เช่น การค้นหาตามคุณสมบัติของสินค้า) **JSONB คือตัวเลือกที่ดีที่สุดและแนะนำให้ใช้เสมอ**

✨ บทสรุปสำหรับสถาปนิกระบบ

ในฐานะ System Architect ที่ต้องออกแบบระบบให้มีประสิทธิภาพสูงสุด การเลือกใช้ JSONB ใน PostgreSQL ไม่เพียงแต่ช่วยให้คุณจัดการกับข้อมูล Schema-less ได้อย่างยืดหยุ่นเท่านั้น แต่ยังช่วยให้คุณสามารถใช้ประโยชน์จากคุณสมบัติขั้นสูงของ PostgreSQL เช่น GIN Indexing เพื่อเร่งความเร็วในการค้นหาข้อมูลที่ซับซ้อนได้อย่างน่าทึ่ง ทำให้ระบบของคุณรองรับการขยายตัวของข้อมูลในอนาคตได้อย่างมั่นคงและรวดเร็ว