- ฟอร์แมต 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: ชนิดข้อมูลที่ผู้ใช้กำหนดเอง
- ฟอร์แมต
- 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 ความคิดเห็น
ตอนที่พยายามจะใช้ MessagePack สำหรับสื่อสารกับเกมเซิร์ฟเวอร์.. กลับทำให้ยืดหยุ่นได้ดีในสภาพแวดล้อมที่หลากหลายตามคำอธิบายไม่ค่อยได้เท่าไร สุดท้ายเลยใช้ protobuf ครับ
ผมอาจจะไม่ค่อยเข้าใจเองก็ได้ แต่ถ้าจะซีเรียลไลซ์เป็น hex แทน json เพื่อเรื่องขนาดกับความเร็ว... มันต่างจากสมัยที่ใช้ binary serialization ตรงไหนเหรอครับ?
ถ้าแค่ดึงออกมาเป็นไบนารีตรง ๆ มันก็จะใช้ได้เฉพาะกับภาษาและรันไทม์ที่สร้างมันขึ้นมาเท่านั้น แต่ฟอร์แมตแบบนั้นโดยทั่วไปถูกออกแบบมาโดยสมมติว่าจะต้องใช้รับส่งข้อมูลกันระหว่างภาษาที่ต่างกันและสภาพแวดล้อมที่ต่างกัน
อ๋อ เข้าใจแล้วครับ ขอบคุณสำหรับคำตอบครับ