পারফরম্যান্ট সত্তা সিরিয়ালাইজেশন: BSON বনাম মেসেজপ্যাক (বনাম জেএসএন)


137

সম্প্রতি আমি পেয়েছি MessagePack , একটি বিকল্প বাইনারি গুগলের কাছে ধারাবাহিকতাতে বিন্যাস প্রোটোকল বাফার এবং তাদেরকে JSON যা উভয় outperforms।

এছাড়াও বিএসওএন সিরিয়ালাইজেশন ফর্ম্যাট রয়েছে যা মন্টোডিবি ডেটা সংরক্ষণের জন্য ব্যবহার করে।

কেউ কি BSON বনাম মেসেজপ্যাকের পার্থক্য এবং ডিস-/ সুবিধাগুলি বিস্তারিতভাবে বর্ণনা করতে পারে ?


কেবল পারফরম্যান্ট বাইনারি সিরিয়ালাইজেশন ফর্ম্যাটগুলির তালিকা সম্পূর্ণ করার জন্য: গুবস রয়েছে যা গুগলের প্রোটোকল বাফারদের উত্তরসূরি হতে চলেছে । তবে অন্যান্য বর্ণিত সমস্ত ফর্ম্যাটগুলির বিপরীতে এগুলি ভাষা- অজ্ঞাত্ত্বিক নয় এবং গো -এর অন্তর্নির্মিত প্রতিচ্ছবিতে নির্ভর করে সেখানে কমপক্ষে গো ব্যতীত অন্য ভাষার জন্য গাবস গ্রন্থাগারও রয়েছে।


3
বেশিরভাগ মার্কেটিং হাইপের বোঝার মতো মনে হয়। একটি ["সংকলিত"] সিরিয়ালাইজেশন ফর্ম্যাটটির কার্যকারিতা ব্যবহৃত বাস্তবায়নের কারণে। কিছু ফর্ম্যাটের সহজাত আরও বেশি ওভারহেড রয়েছে (যেমন জেএসএন এটি সমস্ত গতিশীলভাবে প্রক্রিয়াজাত করা হয়), তবে ফর্ম্যাটগুলিতে তাদের "গতি থাকে না"। পৃষ্ঠাটি তারপরে কীভাবে নিজেকে তুলনা করে "বেছে নিন এবং চয়ন করুন" এ চলে যায় ... এটি একটি অত্যন্ত নিরপেক্ষ ফ্যাশন। আমার চায়ের কাপ নয়।

6
সংশোধন: গাবগুলি প্রোটোকল বাফারগুলি প্রতিস্থাপনের উদ্দেশ্যে নয় এবং সম্ভবত কখনই হবে না। এছাড়াও, গোবস ভাষা অজ্ঞানী (এগুলি যে কোনও ভাষায় পড়তে / লিখতে পারে, কোড. google.com/p/libgob দেখুন ), তবে তারা কীভাবে গো ডেটা নিয়ে কাজ করে তা মিলিয়ে দেখার জন্য সংজ্ঞায়িত করা হয়, তাই তারা Go এর সাথে সেরা কাজ করে।
কাইল সি

6
ইমপ্যাক প্যাকের পারফরম্যান্সের মানদণ্ডগুলি ভেঙে গেছে ( msgpack.org/index/speedtest.png )।
আলিয়াক্সেই রামানউ

উত্তর:


197

// দয়া করে নোট করুন যে আমি মেসেজপ্যাকের লেখক। এই উত্তর পক্ষপাতদুষ্ট হতে পারে।

ফর্ম্যাট ডিজাইন

  1. JSON এর সাথে সামঞ্জস্যতা

    নাম সত্ত্বেও, মেসেজপ্যাকের সাথে তুলনামূলকভাবে জেএসএন-এর সাথে বিএসওএসের সামঞ্জস্যতা এতটা ভাল নয়।

    বিএসওনের বিশেষ ধরণের "অবজেক্টআইডি", "মিন কী", "ইউইউডি" বা "এমডি 5" রয়েছে (আমার মনে হয় এই ধরণেরগুলি মঙ্গোডিবি দ্বারা প্রয়োজনীয়)। এই ধরনেরগুলি JSON এর সাথে সামঞ্জস্যপূর্ণ নয়। তার অর্থ আপনি যখন BSON থেকে JSON তে কোনও বিষয়বস্তু রূপান্তর করেন তখন কিছু প্রকারের তথ্য হারাতে পারে তবে অবশ্যই যখন এই বিশেষ প্রকারগুলি BSON উত্সে থাকে। একক পরিষেবাতে JSON এবং BSON উভয়ই ব্যবহার করা অসুবিধা হতে পারে।

    বার্তাপ্যাকটি JSON থেকে / থেকে স্বচ্ছভাবে রূপান্তরিত করার জন্য ডিজাইন করা হয়েছে।

  2. মেসেজপ্যাকটি BSON এর চেয়ে ছোট

    মেসেজপ্যাকের ফর্ম্যাটটি বিএসএনের চেয়ে কম ভার্বোস। ফলস্বরূপ, মেসেজপ্যাক BSON এর চেয়ে ছোট অবজেক্টগুলিকে সিরিয়ালাইজ করতে পারে।

    উদাহরণস্বরূপ, একটি সাধারণ মানচিত্র {"এ": 1, "বি": 2} ম্যাসেজপ্যাক দিয়ে 7 বাইটে সিরিয়ালযুক্ত করা হয়েছে, যখন বিএসওএন 19 বাইট ব্যবহার করে।

  3. BSON ইন-প্লেস আপডেট করা সমর্থন করে

    BSON এর সাহায্যে আপনি সামগ্রীর পুরোপুরি পুনরায় সিরিয়াল না করে স্টোরেজ অবজেক্টের কিছু অংশ পরিবর্তন করতে পারেন। ধরা যাক একটি মানচিত্র {"a": 1, "b": 2 a কোনও ফাইলে সঞ্চিত আছে এবং আপনি "a" এর মান 1 থেকে 2000 অবধি আপডেট করতে চান।

    মেসেজপ্যাক সহ, 1 টি কেবল 1 বাইট ব্যবহার করে তবে 2000 টি 3 বাইট ব্যবহার করে। সুতরাং "খ" অবশ্যই 2 বাইট দ্বারা পিছনে সরানো উচিত, যখন "বি" সংশোধন করা হয়নি।

    BSON সহ, 1 এবং 2000 উভয়ই 5 বাইট ব্যবহার করে। এই শব্দভাণ্ডারের কারণে আপনাকে "বি" স্থানান্তর করতে হবে না।

  4. মেসেজপ্যাকের আরপিসি রয়েছে

    মেসেজপ্যাক, প্রোটোকল বাফারস, থ্রিফ্ট এবং অভ্র সমর্থন আরপিসি। কিন্তু বিএসওন তা দেয় না।

এই পার্থক্যগুলি বোঝায় যে মেসেজপ্যাকটি মূলত নেটওয়ার্ক যোগাযোগের জন্য ডিজাইন করা হয়েছে যখন বিএসএন স্টোরগুলির জন্য ডিজাইন করা হয়েছে।

বাস্তবায়ন এবং এপিআই নকশা

  1. মেসেজপ্যাকের টাইপ-চেকিং এপিআই রয়েছে (জাভা, সি ++ এবং ডি)

    মেসেজপ্যাক স্ট্যাটিক-টাইপিং সমর্থন করে।

    JSON বা BSON এর সাথে ব্যবহৃত ডায়নামিক-টাইপিং রুবি, পাইথন বা জাভাস্ক্রিপ্টের মতো গতিশীল ভাষার জন্য দরকারী। স্থির ভাষাগুলির জন্য তবে সমস্যাজনক ome আপনাকে অবশ্যই বিরক্তিকর টাইপ-চেকিং কোডগুলি লিখতে হবে।

    মেসেজপ্যাক টাইপ-চেকিং এপিআই সরবরাহ করে। এটি গতিশীল-টাইপযুক্ত অবজেক্টগুলিকে স্ট্যাটিকালি-টাইপড অবজেক্টে রূপান্তরিত করে। এখানে একটি সাধারণ উদাহরণ (সি ++):

    #include <msgpack.hpp>

    class myclass {
    private:
        std::string str;
        std::vector<int> vec;
    public:
        // This macro enables this class to be serialized/deserialized
        MSGPACK_DEFINE(str, vec);
    };

    int main(void) {
        // serialize
        myclass m1 = ...;

        msgpack::sbuffer buffer;
        msgpack::pack(&buffer, m1);

        // deserialize
        msgpack::unpacked result;
        msgpack::unpack(&result, buffer.data(), buffer.size());

        // you get dynamically-typed object
        msgpack::object obj = result.get();

        // convert it to statically-typed object
        myclass m2 = obj.as<myclass>();
    }
  1. মেসেজপ্যাকের আইডিএল রয়েছে

    এটি টাইপ-চেকিং এপিআই সম্পর্কিত, মেসেজপ্যাক আইডিএল সমর্থন করে। (স্পেসিফিকেশন থেকে পাওয়া যায়: http://wiki.msgpack.org/display/MSGPACK/Design+of+IDL )

    প্রোটোকল বাফারস এবং থ্রিফ্টের জন্য আইডিএল প্রয়োজন (ডায়নামিক-টাইপিং সমর্থন করে না) এবং আরও পরিপক্ক আইডিএল বাস্তবায়ন সরবরাহ করে।

  2. মেসেজপ্যাকের স্ট্রিমিং এপিআই রয়েছে (রুবি, পাইথন, জাভা, সি ++, ...)

    মেসেজপ্যাক স্ট্রিমিং ডিজিজারাইজার সমর্থন করে। এই বৈশিষ্ট্যটি নেটওয়ার্ক যোগাযোগের জন্য দরকারী। এখানে একটি উদাহরণ (রুবি):

    require 'msgpack'

    # write objects to stdout
    $stdout.write [1,2,3].to_msgpack
    $stdout.write [1,2,3].to_msgpack

    # read objects from stdin using streaming deserializer
    unpacker = MessagePack::Unpacker.new($stdin)
    # use iterator
    unpacker.each {|obj|
      p obj
    }

33
বার্তাপ্যাক কীভাবে গুগল প্রোটোবুফসের সাথে ডেটার আকারের এবং তার ফলস্বরূপ, বায়ু সম্পাদনের তুলনায় তুলনা করে?
এলিস

4
প্রথম পয়েন্টটি মেসেজপ্যাকের কাঁচা বাইটস ক্ষমতা রয়েছে যা জেএসএনে প্রতিনিধিত্ব করতে পারে না তা নিয়ে সমালোচনা করে। সুতরাং এটি বিএসএন এর ঠিক একই ক্ষেত্রে ...

4
@lttlrck সাধারণত, কাঁচা বাইটগুলি স্ট্রিং হিসাবে ধরে নেওয়া হয় (সাধারণত utf-8), অন্যথায় যদি চ্যানেলের উভয় পক্ষেই প্রত্যাশিত এবং সম্মত না হয়। পিকপ্যাকটি স্ট্রিম / সিরিয়ালাইজেশন ফর্ম্যাট হিসাবে ব্যবহৃত হয় ... এবং সেই জেসন কম ভার্বোস .. যদিও কম মানুষের পাঠযোগ্য।
ট্র্যাকার 1

4
"মেসেজপ্যাকের টাইপ-চেকিং এপিআই রয়েছে BS বিএসন এটি দেয় না" " সম্পূর্ণ সঠিক নয়। এটি স্ট্যাটিকালি টাইপ করা ভাষায় BSON বাস্তবায়নের ক্ষেত্রেও সত্য।
ব্র্যান্ডন ব্ল্যাক

1
মেসেজপ্যাকের এখন একটি বিনারি ডেটা টাইপ রয়েছে তাই জেএসএনে 1-1 ডি-সিরিয়ালাইজেশনের সামঞ্জস্যের যুক্তি পুরোপুরি সত্য নয়।
জিম্ব্যাটম

16

আমি জানি যে এই প্রশ্নটি এই মুহুর্তে কিছুটা তারিখের ... আমি মনে করি এটি উল্লেখ করা খুব গুরুত্বপূর্ণ যে এটি আপনার ক্লায়েন্ট / সার্ভারের পরিবেশের চেহারা কেমন তার উপর নির্ভর করে।

আপনি যদি পরিদর্শন ছাড়াই একাধিকবার বাইটগুলি পার করছেন, যেমন কোনও বার্তা সারি সিস্টেম সহ বা ডিস্কে লগ এন্ট্রিগুলি প্রবাহিত করে, তবে আপনি কমপ্যাক্ট আকারকে জোর দেওয়ার জন্য বাইনারি এনকোডিংকে ভালভাবে পছন্দ করতে পারেন। অন্যথায় এটি বিভিন্ন পরিবেশের সাথে কেস ইস্যু দ্বারা কেস।

কিছু পরিবেশে খুব দ্রুত সিরিয়ালাইজেশন এবং ডিজিটালাইজেশন হতে পারে / থেকে @ পিপ্যাক / প্রোটোবুফের, অন্যরা এতটা না। সাধারণভাবে, ভাষা / পরিবেশ তত নিচু স্তরের বাইনারি সিরিয়ালাইজেশন আরও ভাল কাজ করবে। উচ্চ স্তরের ভাষাগুলিতে (নোড.জেএস, নেট, জেভিএম) আপনি প্রায়শই দেখতে পাবেন যে জেএসএন সিরিয়ালাইজেশন আসলে দ্রুততর। তাহলে প্রশ্নটি হয়ে ওঠে আপনার নেটওয়ার্কটি কি আপনার স্মৃতি / সিপিইউর চেয়ে বেশি বা কম সীমাবদ্ধ?

প্রিমোকল বাফার্স বনাম @ পিপ্যাক বনাম প্রোটোকল বাফার্সের সাথে ... চিত্রপ্যাকটি হ'ল গ্রুপের সর্বনিম্ন বাইট, প্রোটোকল বাফারগুলি প্রায় একই। BSON অন্যান্য দুটি তুলনায় আরও বিস্তৃত নেটিভ প্রকারগুলি সংজ্ঞায়িত করে এবং এটি আপনার অবজেক্ট মোডের সাথে আরও ভাল মিল হতে পারে, তবে এটি এটিকে আরও ভার্বোজ করে। প্রোটোকল বাফারদের স্ট্রিম ডিজাইন করার সুবিধা রয়েছে ... যা এটি বাইনারি স্থানান্তর / স্টোরেজ বিন্যাসের জন্য আরও প্রাকৃতিক বিন্যাসে পরিণত করে।

ব্যক্তিগতভাবে, আমি জেএসএন সরাসরি স্বচ্ছতার দিকে ঝুঁকতে চাই, যদি না হালকা ট্র্যাফিকের স্পষ্ট প্রয়োজন হয়। জিজেপিড ডেটা সহ এইচটিটিপি-র মাধ্যমে, নেটওয়ার্ক ওভারহেডের পার্থক্য ফর্ম্যাটগুলির মধ্যে কোনও ইস্যু কম less


6
নেটিভ এমএসজিপ্যাক কেবলমাত্র প্রোটোকল বাফারগুলির সাথে আকার অনুসারে দক্ষ কারণ কীগুলির দৈর্ঘ্য (যা সর্বদা উপস্থিত পাঠ্য হয়) "এ" বা "বি" এর মতো সংক্ষিপ্ত - বা অন্যথায় পুরো পেওডের একটি তুচ্ছ অংশ । প্রোটোকলবাফারগুলিতে এগুলি সর্বদা সংক্ষিপ্ত থাকে যা ফিল্ড বর্ণনাকারীদের আইডিতে মানচিত্রের জন্য একটি আইডিএল / সংকলন ব্যবহার করে। এটিই এমসজিপ্যাকটিকে "গতিশীল" করে তোলে, যা প্রোটোকলবাফারগুলি অবশ্যই না ..
ব্যবহারকারী 2864740

2
শেষ বিন্দু ভাল যদিও: gzip, / চুপসে হয় সত্যিই ভাল ক্ষেত্রেই কী যেখানে যেমন চাবি রয়েছে "আর কিন্তু দর্শন পুনরাবৃত্তি" এর অতিরেক হ্যান্ডলিং করা হয় (MsgPack, তাদেরকে JSON / BSON, এবং XML ইত্যাদি উপর অনেক রেকর্ড) কিন্তু সাহায্য করবে না এখানে প্রোটোকলবাফারস .. অভ্র আলাদাভাবে স্কিমা স্থানান্তরিত করে ম্যানুয়ালি কী অপ্রয়োজনীয় নির্মূলকরণ করে does
ব্যবহারকারী 2864740

4

কুইক টেস্ট দেখায় মিনফাইড জেএসওএন বাইনারি মেসেজপ্যাকের চেয়ে দ্রুত ডিসেরায়ালাইজড। পরীক্ষাগুলিতে আর্টিকেল.জসনটি 550 কিলোবাইট জিনসোন, আর্টিকেল.প্যাকটি এর 420 কেবি এমপি সংস্করণ। অবশ্যই একটি বাস্তবায়ন সমস্যা হতে পারে।

MessagePack:

//test_mp.js
var msg = require('msgpack');
var fs = require('fs');

var article = fs.readFileSync('Article.mpack');

for (var i = 0; i < 10000; i++) {
    msg.unpack(article);    
}

তাদেরকে JSON:

// test_json.js
var msg = require('msgpack');
var fs = require('fs');

var article = fs.readFileSync('Article.json', 'utf-8');

for (var i = 0; i < 10000; i++) {
    JSON.parse(article);
}

তাই সময়গুলি:

Anarki:Downloads oleksii$ time node test_mp.js 

real    2m45.042s
user    2m44.662s
sys     0m2.034s

Anarki:Downloads oleksii$ time node test_json.js 

real    2m15.497s
user    2m15.458s
sys     0m0.824s

তাই স্থান বাঁচানো হয়, তবে দ্রুত? না।

পরীক্ষিত সংস্করণ:

Anarki:Downloads oleksii$ node --version
v0.8.12
Anarki:Downloads oleksii$ npm list msgpack
/Users/oleksii
└── msgpack@0.1.7  

7
অবশ্যই বাস্তবায়ন উপর নির্ভর করে। পাইথন ২.7.৩ এর সাথে আমার পরীক্ষাগুলি একটি 489 কে পরীক্ষা.জসন (409 কে সমমানের টেস্ট.এমএসপিপ্যাক) আনপ্যাক করে দেখায় যে 10,000 পুনরাবৃত্তির জন্য simplejson2.6.2 66 66..7 সেকেন্ড msgpackসময় নেয় এবং ০.২.২ লাগে মাত্র ২৮.৮।
দিন

2
এই আর্টিকেল.জসন কোথা থেকে এসেছে?
Ant6n

ভাবেন, পরীক্ষার কোডটি আমার উপরোক্ত মন্তব্যে রয়েছে, আপনি আর কী কী প্রত্যাশা করেছিলেন, আর্টিকেল.জসনটি আমাদের প্রকল্প থেকে জেসন-সিরিয়ালযুক্ত বস্তু। এবং এখনই সেই ফলাফলগুলি যাইহোক অপ্রাসঙ্গিক হতে পারে
ওলেকসী খিলকভিচ

14
এটি ন্যায্য পারফরম্যান্স তুলনা নয়, কারণ জেএসএস সিএস ++ এ মূলত প্রয়োগ করেছে, যখন জেএসে প্যাক প্যাক p
অ্যালেক্স পঞ্চেঙ্কো

2
আপনি মেসেজপ্যাক টককে লাতিন রোমানদের থেকে আরও ভাল করার চেষ্টা করছেন। জাভাস্ক্রিপ্টে জেএসএন স্থানীয় (সি ++) হয় যখন ম্যাসেজপ্যাক জাভাস্ক্রিপ্টে লেখা হয়, যা ব্যাখ্যা করা হয়। এটি মূলত দুটি কোড স্নিপেটের সাথে তুলনা করছে, একটি জাভাস্ক্রিপ্টে লিখিত এবং অন্যটি সি ++ এ লেখা।
রমজান পোলাট

0

এখনও উল্লেখ করা হয়নি এমন একটি মূল পার্থক্য হ'ল বিএসওন পুরো ডকুমেন্টের জন্য বাইটে আকারের তথ্য এবং আরও নেস্টেড সাব-ডকুমেন্টগুলি ধারণ করে।

document    ::=     int32 e_list

সীমাবদ্ধ পরিবেশের জন্য এটির দুটি প্রধান সুবিধা রয়েছে (যেমন এম্বেড করা) যেখানে আকার এবং কার্য সম্পাদন গুরুত্বপূর্ণ।

  1. আপনি যে তথ্যটি বিশ্লেষণ করতে যাচ্ছেন তা কোনও সম্পূর্ণ নথির প্রতিনিধিত্ব করে বা যদি আপনাকে কোনও পর্যায়ে আরও কিছু অনুরোধ করতে হবে (তা কোনও সংযোগ বা সঞ্চয়স্থান হতে পারে) তা অবিলম্বে পরীক্ষা করতে পারেন। যেহেতু এটি সম্ভবত একটি অ্যাসিনক্রোনাস অপারেশন তাই আপনি পার্সিংয়ের আগেই একটি নতুন অনুরোধ ইতিমধ্যে প্রেরণ করতে পারেন।
  2. আপনার ডেটাতে আপনার জন্য অপ্রাসঙ্গিক তথ্য সহ পুরো সাব-ডকুমেন্ট থাকতে পারে। বিএসওন আপনাকে সাব-ডকুমেন্টের এড়িয়ে যাওয়ার জন্য আকারের তথ্য ব্যবহার করে সাব ডকুমেন্টের অতীতের পরবর্তী অবজেক্টে সহজেই প্রবেশের অনুমতি দেয়। অন্যদিকে ইমপ্যাকের মধ্যে ম্যাপকে কী বলা হয় তার ভিতরে থাকা উপাদানগুলির সংখ্যা রয়েছে (বিএসওনের সাব-ডকুমেন্টগুলির অনুরূপ)। যদিও এটি নিঃসন্দেহে দরকারী তথ্য এটি পার্সারকে সহায়তা করে না। আপনাকে এখনও মানচিত্রের অভ্যন্তরে প্রতিটি একক বস্তুর বিশ্লেষণ করতে হবে এবং কেবল এটি এড়িয়ে যেতে পারবেন না। আপনার ডেটার কাঠামোর উপর নির্ভর করে এটি পারফরম্যান্সে বিশাল প্রভাব ফেলতে পারে।

0

BSON বনাম মেসেজপ্যাকের এনকোডিং এবং ডিকোডিং গতির তুলনা করার জন্য আমি দ্রুত বেঞ্চমার্ক তৈরি করেছি। আপনার বড় বাইনারি অ্যারে থাকলে BSON কমপক্ষে দ্রুততর:

BSON writer: 2296 ms (243487 bytes)
BSON reader: 435 ms
MESSAGEPACK writer: 5472 ms (243510 bytes)
MESSAGEPACK reader: 1364 ms

নিউ নিউক দ্বারা সি # নিউটনসফট.জসন এবং মেসেজপ্যাক ব্যবহার করা:

    public class TestData
    {
        public byte[] buffer;
        public bool foobar;
        public int x, y, w, h;
    }

    static void Main(string[] args)
    {
        try
        {
            int loop = 10000;

            var buffer = new TestData();
            TestData data2;
            byte[] data = null;
            int val = 0, val2 = 0, val3 = 0;

            buffer.buffer = new byte[243432];

            var sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < loop; i++)
            {
                data = SerializeBson(buffer);
                val2 = data.Length;
            }

            var rc1 = sw.ElapsedMilliseconds;

            sw.Restart();
            for (int i = 0; i < loop; i++)
            {
                data2 = DeserializeBson(data);
                val += data2.buffer[0];
            }
            var rc2 = sw.ElapsedMilliseconds;

            sw.Restart();
            for (int i = 0; i < loop; i++)
            {
                data = SerializeMP(buffer);
                val3 = data.Length;
                val += data[0];
            }

            var rc3 = sw.ElapsedMilliseconds;

            sw.Restart();
            for (int i = 0; i < loop; i++)
            {
                data2 = DeserializeMP(data);
                val += data2.buffer[0];
            }
            var rc4 = sw.ElapsedMilliseconds;

            Console.WriteLine("Results:", val);
            Console.WriteLine("BSON writer: {0} ms ({1} bytes)", rc1, val2);
            Console.WriteLine("BSON reader: {0} ms", rc2);
            Console.WriteLine("MESSAGEPACK writer: {0} ms ({1} bytes)", rc3, val3);
            Console.WriteLine("MESSAGEPACK reader: {0} ms", rc4);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadLine();
    }

    static private byte[] SerializeBson(TestData data)
    {
        var ms = new MemoryStream();

        using (var writer = new Newtonsoft.Json.Bson.BsonWriter(ms))
        {
            var s = new Newtonsoft.Json.JsonSerializer();
            s.Serialize(writer, data);
            return ms.ToArray();
        }
    }

    static private TestData DeserializeBson(byte[] data)
    {
        var ms = new MemoryStream(data);

        using (var reader = new Newtonsoft.Json.Bson.BsonReader(ms))
        {
            var s = new Newtonsoft.Json.JsonSerializer();
            return s.Deserialize<TestData>(reader);
        }
    }

    static private byte[] SerializeMP(TestData data)
    {
        return MessagePackSerializer.Typeless.Serialize(data);
    }

    static private TestData DeserializeMP(byte[] data)
    {
        return (TestData)MessagePackSerializer.Typeless.Deserialize(data);
    }

0

ঠিক আছে - যেমনটি লেখক বলেছেন , মেসেজপ্যাকটি মূলত নেটওয়ার্ক যোগাযোগের জন্য ডিজাইন করা হয়েছে যখন বিএসওএন স্টোরের জন্য ডিজাইন করা হয়েছে।

ম্যাসেজপ্যাকটি কমপ্যাক্ট রয়েছে যখন বিএসএন ভার্জোজ। ম্যাসেজপ্যাকটি বোঝানো হচ্ছে স্থান-দক্ষ এবং বিএসন সিআরডি (সময়-দক্ষ) জন্য ডিজাইন করা হয়েছে।

সর্বাধিক গুরুত্বপূর্ণ, মেসেজপ্যাকের টাইপ সিস্টেম (উপসর্গ) হাফম্যান এনকোডিং অনুসরণ করে, আমি এখানে মেসেজপ্যাকের একটি হাফম্যান গাছ আঁকলাম (চিত্র দেখতে লিঙ্কে ক্লিক করুন) :

মেসেজপ্যাকের হাফম্যান ট্রি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.