- Đị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
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.
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?
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.
À, ra là vậy. Cảm ơn bạn đã trả lời.