13 คะแนน โดย xguru 2025-01-20 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • ฟอร์แมต Binary Serialization ที่มีประสิทธิภาพ
  • แลกเปลี่ยนข้อมูลข้ามหลายภาษาได้เหมือน JSON
  • จำนวนเต็มขนาดเล็กเข้ารหัสได้ด้วยไบต์เดียว ส่วนสตริงสั้นต้องการไบต์เพิ่มจากตัวสตริงเองเพียง 1 ไบต์
  • รองรับในภาษาโปรแกรมและสภาพแวดล้อมมากกว่า 50 แบบ
  • กรณีการใช้งาน:
    • Redis: เพิ่มส่วนขยาย MessagePack C สำหรับ Lua เพื่อนำไปใช้ในการซีเรียลไลซ์ข้อมูล
    • Fluentd: ใช้ MessagePack เป็นรูปแบบข้อมูลภายใน ทำให้ประมวลผลความเร็วสูงได้
    • Treasure Data: สร้างฐานข้อมูลแบบหลายผู้เช่าที่ปรับแต่งมาสำหรับคิวรีวิเคราะห์
    • Pinterest: ใช้ MessagePack และ Memcache เพื่อบีบอัดฟีดแคชและประมวลผลได้อย่างรวดเร็ว

สองคอนเซปต์: "Type System" และ "Format"

  • ระบบชนิดข้อมูล
    • Integer: จำนวนเต็ม
    • Nil: ค่า null
    • Boolean: true หรือ false
    • Float: เลขทศนิยมแบบ IEEE 754
    • Raw: สตริงหรืออาร์เรย์ไบต์
    • Array: อาร์เรย์ของอ็อบเจ็กต์
    • Map: คู่คีย์-ค่า
    • Extension: ชนิดข้อมูลที่ผู้ใช้กำหนดเอง
      • Timestamp: ข้อมูลเวลา
  • ฟอร์แมต
    • positive fixint, negative fixint, fixmap, fixarray
    • nil, false, true
    • bin 8/16/32, ext 8/16/32, float 32/64
    • uint 8/16/32/64, int 8/16/32/64, fixext 1/2/4/8/16, str 8/16/32
    • array 16/32, map 16/32
    • ตัวอย่างฟอร์แมต
      • fixint: จำนวนเต็ม 7 บิต (ค่าบวกคือ 0x00–0x7F, ค่าลบคือ 0xE0–0xFF)
      • fixstr: สตริงสูงสุด 31 ไบต์
      • array 16: อาร์เรย์ที่มีองค์ประกอบได้สูงสุด (2^16)-1 รายการ
      • map 16: คู่คีย์-ค่าสูงสุด (2^16)-1 คู่

ข้อดีของ MessagePack

  • ลดขนาดข้อมูลและเพิ่มประสิทธิภาพความเร็ว
  • ใช้ทดแทนและปรับปรุงแอปพลิเคชันที่อิงกับ JSON เดิมได้
  • ใช้งานได้อย่างยืดหยุ่นในสภาพแวดล้อมที่หลากหลายด้วยการติดตั้งใช้งานที่เรียบง่าย

4 ความคิดเห็น

 
wedding 2025-01-21

ตอนที่พยายามจะใช้ MessagePack สำหรับสื่อสารกับเกมเซิร์ฟเวอร์.. กลับทำให้ยืดหยุ่นได้ดีในสภาพแวดล้อมที่หลากหลายตามคำอธิบายไม่ค่อยได้เท่าไร สุดท้ายเลยใช้ protobuf ครับ

 
ifmkl 2025-01-20

ผมอาจจะไม่ค่อยเข้าใจเองก็ได้ แต่ถ้าจะซีเรียลไลซ์เป็น hex แทน json เพื่อเรื่องขนาดกับความเร็ว... มันต่างจากสมัยที่ใช้ binary serialization ตรงไหนเหรอครับ?

 
cichol 2025-01-20

ถ้าแค่ดึงออกมาเป็นไบนารีตรง ๆ มันก็จะใช้ได้เฉพาะกับภาษาและรันไทม์ที่สร้างมันขึ้นมาเท่านั้น แต่ฟอร์แมตแบบนั้นโดยทั่วไปถูกออกแบบมาโดยสมมติว่าจะต้องใช้รับส่งข้อมูลกันระหว่างภาษาที่ต่างกันและสภาพแวดล้อมที่ต่างกัน

 
ifmkl 2025-01-21

อ๋อ เข้าใจแล้วครับ ขอบคุณสำหรับคำตอบครับ