13 điểm bởi xguru 2025-01-20 | 4 bình luận | Chia sẻ qua WhatsApp
  • Định dạng Binary Serialization hiệu quả
  • Có thể trao đổi dữ liệu giữa nhiều ngôn ngữ giống như JSON
  • Số nguyên nhỏ được mã hóa bằng một byte duy nhất, chuỗi ngắn chỉ cần thêm một byte ngoài chính chuỗi
  • Được hỗ trợ trong hơn 50 ngôn ngữ lập trình và môi trường
  • Trường hợp sử dụng:
    • Redis: thêm phần mở rộng MessagePack C cho Lua để dùng cho việc tuần tự hóa dữ liệu
    • Fluentd: sử dụng MessagePack cho biểu diễn dữ liệu nội bộ, cho phép xử lý tốc độ cao
    • Treasure Data: xây dựng cơ sở dữ liệu đa tenant được tối ưu cho các truy vấn phân tích
    • Pinterest: dùng MessagePack và Memcache để nén cache feed và xử lý nhanh

Hai khái niệm: "Type System" và "Format"

  • Hệ thống kiểu
    • Integer: số nguyên
    • Nil: giá trị null
    • Boolean: true hoặc false
    • Float: số thực dấu phẩy động IEEE 754
    • Raw: chuỗi hoặc mảng byte
    • Array: mảng đối tượng
    • Map: cặp khóa-giá trị
    • Extension: kiểu do người dùng định nghĩa
      • Timestamp: thông tin thời gian
  • Định dạng
    • 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
    • Ví dụ về định dạng
      • fixint: số nguyên 7 bit (số dương là 0x00–0x7F, số âm là 0xE0–0xFF)
      • fixstr: chuỗi tối đa 31 byte
      • array 16: mảng có tối đa (2^16)-1 phần tử
      • map 16: tối đa (2^16)-1 cặp khóa-giá trị

Ưu điểm của MessagePack

  • Tối thiểu hóa kích thước dữ liệu và tối ưu tốc độ
  • Có thể thay thế và cải thiện các ứng dụng hiện có dựa trên JSON
  • Triển khai đơn giản, có thể linh hoạt sử dụng trong nhiều môi trường khác nhau

4 bình luận

 
wedding 2025-01-21

Tôi định áp dụng MessagePack khi giao tiếp với server game, nhưng không linh hoạt được tốt trong nhiều môi trường như mô tả. Vì vậy tôi đã dùng protobuf.

 
ifmkl 2025-01-20

Có thể là do tôi chưa hiểu rõ, nhưng nếu định tuần tự hóa sang hex thay vì JSON để tối ưu kích thước và tốc độ thì... rốt cuộc nó khác gì so với thời trước cứ dùng tuần tự hóa nhị phân vậy?

 
cichol 2025-01-20

Nếu chỉ xuất thẳng ra dạng nhị phân thì thường chỉ có hiệu lực trong ngôn ngữ và runtime đã tạo ra nó, còn những định dạng như vậy nhìn chung được tạo ra với giả định là sẽ trao đổi qua lại giữa các ngôn ngữ và các môi trường khác nhau.

 
ifmkl 2025-01-21

À, ra là vậy. Cảm ơn bạn đã trả lời.