- Verimli bir ikili serileştirme formatı
- JSON gibi farklı diller arasında veri alışverişi yapılmasını sağlar
- Küçük tamsayılar tek bayt olarak kodlanır, kısa dizeler ise dizenin kendisine ek olarak yalnızca bir bayt daha gerektirir
- 50'den fazla programlama dili ve ortamında desteklenir
- Kullanım örnekleri:
- Redis: Lua için MessagePack C eklentisi ekleyerek veri serileştirmede kullanır
- Fluentd: Dahili veri gösteriminde MessagePack kullanır, böylece yüksek hızlı işleme mümkündür
- Treasure Data: Analitik sorgular için optimize edilmiş çok kiracılı bir veritabanı oluşturdu
- Pinterest: MessagePack ve Memcache ile feed cache sıkıştırma ve hızlı işleme sağlar
İki konsept: "Type System" ve "Format"
- Tip sistemi
- Integer: tamsayı
- Nil:
null değeri
- Boolean:
true veya false
- Float: IEEE 754 kayan nokta
- Raw: dize veya bayt dizisi
- Array: nesne dizisi
- Map: anahtar-değer çifti
- Extension: kullanıcı tanımlı tip
- Format
- 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
- Format örnekleri
fixint: 7 bit tamsayı (pozitif için 0x00–0x7F, negatif için 0xE0–0xFF)
fixstr: en fazla 31 baytlık dize
array 16: en fazla (2^16)-1 öğe içeren dizi
map 16: en fazla (2^16)-1 anahtar-değer çifti
MessagePack'in avantajları
- Veri boyutunu en aza indirir ve hızı optimize eder
- Mevcut JSON tabanlı uygulamaların yerine geçebilir ve onları iyileştirebilir
- Basit uygulaması sayesinde farklı ortamlarda esnek biçimde kullanılabilir
4 yorum
Oyun sunucusuyla iletişim kurarken MessagePack uygulamaya çalıştım ama... anlatıldığı gibi çeşitli ortamlarda esneklik sağlamak pek iyi olmadı. Bu yüzden protobuf kullandım.
Ben pek iyi bilmiyor olabilirim ama... boyut ve hız için JSON yerine hex olarak serileştirecekseniz... bunun eskiden doğrudan ikili serileştirme kullanıldığındaki durumdan farkı tam olarak ne?
Sadece binary olarak çıkarırsanız bu, onu üreten dil ve runtime içinde ancak geçerli olur; ama bu tür formatlar genelde farklı diller ve farklı ortamlar arasında alışveriş yapılacağı varsayımıyla tasarlanır.
Anladım. Öyleymiş. Cevabınız için teşekkürler.