हमने सिर्फ धारावाहिकों पर एक आंतरिक अध्ययन किया, यहां कुछ परिणाम हैं (मेरे भविष्य के संदर्भ के लिए भी!)
थ्रिफ्ट = क्रमांकन + आरपीसी स्टैक
सबसे बड़ा अंतर यह है कि थ्रिफ्ट केवल एक क्रमिक प्रोटोकॉल नहीं है, यह एक पूर्ण विकसित आरपीसी स्टैक है जो आधुनिक दिन SOAP स्टैक की तरह है। तो क्रमबद्धता के बाद, वस्तुओं सकता है (लेकिन अनिवार्य) मशीनों के बीच टीसीपी / आईपी पर भेजा जाए। SOAP में, आपने एक WSDL दस्तावेज़ के साथ शुरुआत की, जो उपलब्ध सेवाओं (दूरस्थ तरीकों) और अपेक्षित तर्कों / वस्तुओं का पूरी तरह से वर्णन करता है। उन वस्तुओं को XML के माध्यम से भेजा गया था। थ्रिफ़्ट में, .thrift फ़ाइल पूरी तरह से उपलब्ध तरीकों, अपेक्षित पैरामीटर ऑब्जेक्ट्स का वर्णन करती है और वस्तुओं को उपलब्ध सीरियलाइज़र ( Compact Protocol
एक कुशल बाइनरी प्रोटोकॉल, उत्पादन में सबसे लोकप्रिय होने के साथ) के माध्यम से क्रमबद्ध किया जाता है ।
ASN.1 = ग्रैंड डैडी
ASN.1 को 80 के दशक में टेलीकॉम लोगों द्वारा डिजाइन किया गया था और हाल ही में धारावाहिकों की तुलना में सीमित पुस्तकालय समर्थन के कारण इसका उपयोग करने के लिए अजीब है जो कि CompSci लोगों से उभरा। दो वेरिएंट हैं, डीईआर (बाइनरी) एन्कोडिंग और पीईएम (एससीआईआई) एन्कोडिंग। दोनों तेज हैं, लेकिन डीईआर तेज और दो के आकार का अधिक कुशल है। वास्तव में ASN.1 डीईआर आसानी से (और कभी-कभी हरा) धारावाहिकों को रख सकता है जो 30 साल डिजाइन किए गए थेखुद के बाद, यह करने के लिए एक वसीयतनामा अच्छी तरह से इंजीनियर डिजाइन है। यह बहुत कॉम्पैक्ट है, प्रोटोकॉल बफ़र्स और थ्रिफ्ट से छोटा है, केवल एवरो द्वारा पीटा गया है। इस मुद्दे का समर्थन करने के लिए महान पुस्तकालय हैं और अभी बाउंसी कैसल सी # / जावा के लिए सबसे अच्छा लगता है। ASN.1 सुरक्षा और क्रिप्टो सिस्टम में राजा है और वह दूर नहीं जा रहा है, इसलिए 'भविष्य के प्रमाण' के बारे में चिंतित न हों। बस एक अच्छा पुस्तकालय प्राप्त करें ...
संदेशपैक = पैक के बीच में
यह बुरा नहीं है, लेकिन यह न तो सबसे तेज़ है, न ही सबसे छोटा और न ही सबसे अच्छा समर्थित है। इसे चुनने का कोई उत्पादन कारण नहीं।
सामान्य
इसके अलावा, वे काफी हद तक समान हैं। अधिकांश मूल TLV: Type-Length-Value
सिद्धांत के भिन्न रूप हैं।
प्रोटोकॉल बफ़र्स (Google उत्पन्न), एवरो (Apado आधारित, Hadoop में प्रयुक्त), थ्रिफ़्ट (फेसबुक की उत्पत्ति, अब Apache प्रोजेक्ट) और ASN.1 (टेलीकॉम की उत्पत्ति) सभी कोड पीढ़ी के कुछ स्तर को शामिल करते हैं जहाँ आप पहली बार किसी धारावाहिक में अपना डेटा व्यक्त करते हैं - विशिष्ट प्रारूप, फिर धारावाहिक "कंपाइलर" code-gen
चरण के माध्यम से आपकी भाषा के लिए स्रोत कोड उत्पन्न करेगा । आपका एप्लिकेशन स्रोत तब code-gen
IO के लिए इन कक्षाओं का उपयोग करता है । ध्यान दें कि कुछ कार्यान्वयन (जैसे: Microsoft की एवो लाइब्रेरी या मार्क गेल के प्रोटोब्यूफ़नेट) आपको सीधे अपने ऐप स्तर POCO / POJO ऑब्जेक्ट को सजाने देते हैं और फिर लाइब्रेरी सीधे किसी भी कोड-जीन की कक्षाओं के बजाय उन सजाए गए वर्गों का उपयोग करती है। हमने इस प्रस्ताव को बढ़ावा देने वाला प्रदर्शन देखा है क्योंकि यह ऑब्जेक्ट कॉपी स्टेज (एप्लिकेशन स्तर POCO / POJO फ़ील्ड से कोड-जीन फ़ील्ड तक) को समाप्त करता है।
कुछ परिणाम और एक जीवित परियोजना के साथ खेलने के लिए
यह प्रोजेक्ट ( https://github.com/sidshetye/SerializersCompare ) C # दुनिया में महत्वपूर्ण धारावाहिकों की तुलना करता है। जावा लोगों के पास पहले से ही कुछ समान है ।
1000 iterations per serializer, average times listed
Sorting result by size
Name Bytes Time (ms)
------------------------------------
Avro (cheating) 133 0.0142
Avro 133 0.0568
Avro MSFT 141 0.0051
Thrift (cheating) 148 0.0069
Thrift 148 0.1470
ProtoBuf 155 0.0077
MessagePack 230 0.0296
ServiceStackJSV 258 0.0159
Json.NET BSON 286 0.0381
ServiceStackJson 290 0.0164
Json.NET 290 0.0333
XmlSerializer 571 0.1025
Binary Formatter 748 0.0344
Options: (T)est, (R)esults, s(O)rt order, (S)erializer output, (D)eserializer output (in JSON form), (E)xit
Serialized via ASN.1 DER encoding to 148 bytes in 0.0674ms (hacked experiment!)