2010-01-04 17 views
85

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

  • वायर आकार
  • क्रमबद्धता गति
  • Deserialization गति

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

यहां कुछ जानकारी दी गई है कि मैं BSON और Protocol Buffers पर पढ़ रहा था।

+0

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

+0

http://devblog.corditestudios.com/blog/2012/10/29/bson-vs-yaml-vs-protobuf/ – laike9m

उत्तर

63

Thrift एक और प्रोटोकॉल बफर-जैसे विकल्प भी है।

क्रमबद्धता/अक्रमांकन और इन प्रौद्योगिकियों के तार आकार पर जावा समुदाय से अच्छा मानक होते हैं: http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

सामान्य में, JSON थोड़ा बड़ा तार आकार और थोड़ा बदतर Deser है, लेकिन करने के लिए हर जगह पर होना और क्षमता में जीत जाता है स्रोत आईडीएल के बिना आसानी से इसकी व्याख्या करें। अंतिम बिंदु कुछ ऐसा है जो Apache Avro हल करने का प्रयास कर रहा है, और यह प्रदर्शन के संदर्भ में दोनों को धड़कता है।

माइक्रोसॉफ्ट ने एक सी # NuGet पैकेज Microsoft.Hadoop.Avro जारी किया है।

+1

छोटे संदेश का आकार स्वचालित रूप से तेज़ छिद्रण में अनुवाद नहीं करता है, यह आलेख देखें http://soa.sys-con.com/node/250512 –

+1

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

+0

कोडेक, मोडेम .... मुझे "सेड्स" बेहतर पसंद है :) – nawfal

21

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

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

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

+3

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

+4

मेरा मानना ​​है कि एक्सटेंशन का उपयोग विरासत के समान ही किया जा सकता है ... https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#extension – kralyk

+1

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

74
51

यहाँ some recent benchmarks लोकप्रिय नेट serializers के प्रदर्शन दिखा रहे हैं।

Burning Monks benchmarks व्यापक पीओसीओ को क्रमबद्ध करने का प्रदर्शन दिखाता है जबकि व्यापक Northwind benchmarks माइक्रोसॉफ्ट के नॉर्थविंड डेटासेट की प्रत्येक तालिका में एक पंक्ति क्रमबद्ध करने के संयुक्त परिणाम दिखाता है।

enter image description here

मूल रूप से प्रोटोकॉल बफ़र्स (protobuf-net) .NET (एक्सएमएल DataContractSerializer) में सबसे तेजी से बेस कक्षा लाइब्रेरी Serializer से जल्दी चारों ओर 7x है। यह प्रतिस्पर्धा से भी छोटा है क्योंकि यह 2.2x माइक्रोस्कोफ्ट से सबसे अधिक कॉम्पैक्ट सीरियलाइजेशन प्रारूप (जेसनडाटाकंट्रैक्टसेरियलाइज़र) से छोटा है।

ServiceStack की पाठ serializers द्विआधारी Protobuf शुद्ध के प्रदर्शन मिलान जहां इसकी Json Serializer Protobuf शुद्ध से केवल 2.58x धीमी है के सबसे करीब हैं।

+1

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

+0

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

संबंधित मुद्दे