JSON या BSON बनाम प्रोटोकॉल बफर [बंद]


90

क्या किसी को प्रोटोकॉल बफ़र्स बनाम BSON (बाइनरी JSON) या सामान्य रूप से JSON के प्रदर्शन विशेषताओं पर कोई जानकारी है?

  • तार का आकार
  • क्रमिक गति
  • देशीकरण की गति

ये HTTP पर उपयोग के लिए अच्छे बाइनरी प्रोटोकॉल की तरह प्रतीत होते हैं। मैं सिर्फ सोच रहा हूं कि सी # पर्यावरण के लिए लंबे समय में बेहतर क्या होगा।

यहाँ कुछ जानकारी है जो मैं BSON और प्रोटोकॉल बफ़र्स पर पढ़ रहा था ।


कुछ तर्क देते हैं (मुझे लगता है कि इसमें एक पूर्व प्रोटॉब लेखक शामिल है) कि प्रारूप को क्रमबद्ध करने के लिए एक बड़े लेकिन सस्ते का उपयोग करना और फिर एक तेज मानक कंप्रेसर के साथ आउटपुट को संपीड़ित करना बेहतर विचार है।
कोडइन्चोस


मुझे नहीं लगता कि यह तब तक फिर से खोल दिया जाना चाहिए जब तक कि एक निश्चित तुलना पद्धति स्वयं प्रश्न में प्रस्तावित नहीं की जाती है (अन्यथा यह इस पर विचार-विमर्श / बहुत व्यापक होने के लिए है)
याकोवैल

जवाबों:


64

थ्रिफ्ट एक और प्रोटोकॉल बफ़र्स जैसा विकल्प है।

सीरियलाइज़ेशन / इन तकनीकों के तारांकन और वायर आकार पर जावा समुदाय से अच्छे बेंचमार्क हैं: https://github.com/eishay/jvm-serializers/wiki

सामान्य तौर पर, JSON में थोड़ा बड़ा तार का आकार और थोड़ा बदतर DeSer होता है, लेकिन सर्वव्यापीता और स्रोत IDL के बिना इसे आसानी से व्याख्या करने की क्षमता में जीतता है। अंतिम बिंदु कुछ ऐसा है अपाचे एवरो हल करने की कोशिश कर रहा है, और यह प्रदर्शन के मामले में दोनों को हराता है।

Microsoft ने C # NuGet पैकेज Microsoft.Hadoop.Avro जारी किया है ।


1
छोटे संदेश का आकार स्वचालित रूप से तेज़ गति से अनुवाद नहीं करता है, इस लेख को देखें soa.sys-con.com/node/250512
vtd-xml-author

1
अच्छा लिंक; केवल एक चीज जो मुझे यकीन नहीं है कि एवरो के बारे में टिप्पणी है - जबकि यह इसके मुख्य उपयोग के मामलों (समान डेटा प्रविष्टियों के टन) के लिए अधिक कुशलता से काम कर सकता है, यह इस बेंचमार्क में बहुत तेजी से प्रदर्शन नहीं करता है (जो एक परीक्षण से निपटने का काम करता है) एकल अनुरोध)
StaxMan

CoDec, MoDem .... मुझे "SeDes" बेहतर पसंद है :)
nawfal

75

यह पोस्ट .NET में क्रमबद्ध गति और आकारों की तुलना करता है, जिसमें JSON, BSON और XML शामिल हैं।

वैकल्पिक शब्द

वैकल्पिक शब्द

http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx


9
इस उत्तर में प्रोटोकॉल बफ़र्स के बारे में कोई जानकारी नहीं है।
विक्टर यारमा

52

यहां हाल ही में कुछ लोकप्रिय बेंचमार्क दिखाए गए हैं जो लोकप्रिय .NET सीरियल के प्रदर्शन को दर्शाते हैं।

जलन भिक्षु मानक एक सरल POCO serializing का प्रदर्शन दिखाने जबकि व्यापक नॉर्थविंड मानक माइक्रोसॉफ्ट के नॉर्थविंड डाटासेट के हर तालिका में एक पंक्ति serializing के संयुक्त परिणाम दिखाते हैं।

यहां छवि विवरण दर्ज करें

मूल रूप से प्रोटोकॉल बफ़र्स ( प्रोटोबॉफ़-नेट ) .NET (XML DataContractSerializer) में सबसे तेज़ बेस क्लास लाइब्रेरी सीरियल की तुलना में लगभग 7x तेज है। यह भी प्रतियोगिता से छोटा है क्योंकि यह भी 2.2x है माइक्रोसॉफ़्ट सबसे कॉम्पैक्ट सीरियलाइज़ेशन प्रारूप (JsonDataContractSerializer) की तुलना में छोटा है।

ServiceStack के टेक्स्ट सीरीज़ बाइनरी प्रोटोबुफ़-नेट के प्रदर्शन से मेल खाने के सबसे नज़दीक हैं, जहाँ इसका Json Serializer प्रोटोबॉफ़ -नेट की तुलना में केवल 2.58x धीमा है।


1
महान पोस्ट - लेकिन यदि संभव हो तो आपको औसत दिखाते समय हमेशा अपने बार चार्ट पर त्रुटि सलाखों को रखना चाहिए।
जेट्रोम्स

JIL परीक्षणों में शामिल क्यों नहीं है? (क्या आपके पास कोई विचार है?)
रॉय नमिर

22

प्रोटोकॉल बफ़र्स को तार के लिए डिज़ाइन किया गया है:

  1. बहुत छोटा संदेश आकार - एक पहलू बहुत कुशल चर आकार पूर्णांक प्रतिनिधित्व है।
  2. बहुत तेजी से डिकोडिंग - यह एक बाइनरी प्रोटोकॉल है।
  3. प्रोटोबॉफ़ संदेशों को एन्कोडिंग और डिकोड करने के लिए सुपर कुशल C ++ उत्पन्न करता है - संकेत: यदि आप सभी var-पूर्णांकों या स्थिर आकार की वस्तुओं को इनकोड करते हैं तो यह नियतात्मक गति से सांकेतिक शब्दों में बदलना और डिकोड करेगा।
  4. यह एक बहुत अमीर डेटा मॉडल प्रदान करता है - कुशलतापूर्वक बहुत जटिल डेटा संरचनाओं को एन्कोडिंग।

JSON सिर्फ टेक्स्ट है और इसे पार्स करने की आवश्यकता है । संकेत: इसमें एक "बिलियन" इंट को एन्कोडिंग करने के लिए बहुत सारे वर्ण होंगे: Billion = 12 char's (लॉन्ग स्केल), बाइनरी में यह एक uint32_t में फिट बैठता है। अब एक डबल एन्कोड करने की कोशिश के बारे में क्या? कि एफएआर एफएआर बदतर होगा।


4
हालांकि, यह विरासत को संभालने के लिए नहीं होने के बजाय दुर्भाग्यपूर्ण नकारात्मक पहलू है और जबकि रचना एक वैध विकल्प है, मैं विरासत के बजाय संरचना का उपयोग करने के लिए अपने डेटा ट्रांसफर ऑब्जेक्ट द्वारा मजबूर नहीं होना पसंद करता हूं।
मार्क ग्रीन

4
मेरा मानना ​​है कि एक्सटेंशन्स का इस्तेमाल विरासत के समान ही किया जा सकता है ... Developers.google.com/protocol-buffers/docs/reference/…
kralyk

1
हां, एक्सटेंशन बहुत अच्छा बिंदु है। मैं हर दिन काम में इसका इस्तेमाल करता हूं।
यंगवे स्नेन लिंडल सेप

"प्रोटोकॉल बफ़र्स को तार के लिए डिज़ाइन किया गया है" क्या "तार" है?
मार्कोस परेरा

@marcospgp का the wireमतलब सिर्फ नेटवर्क है। अब जब हम इतने सारे वायरलेस नेटवर्क का उपयोग करते हैं तो यह अजीब लग सकता है।
विक्टर यारमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.