2013-01-10 14 views
5

मैं इस अपाचे एवरो (क्रमबद्धता फ्रेमवर्क) में नया हूं। मुझे पता है कि क्रमबद्धता है, लेकिन क्यों अलग व्यवस्थाएं lik एवरो, बचत, प्रोटोकॉल बफ़र्स कर रहे हैं औरडेटा क्रमबद्धता फ्रेमवर्क

  1. क्यों नहीं कर सकते उपयोग हम जावा क्रमांकन एपीआई इन अलग व्यवस्थाएं करने के बजाय, वहाँ जावा serializatio एपीआई में किसी खामी है।

  2. नीचे दिए गए वाक्यांश का अर्थ "एरो या किसी अन्य धारावाहिक ढांचे में" स्कीमा परिवर्तन करते समय कोड-जनरेशन प्रोग्राम चलाने की आवश्यकता नहीं है "का अर्थ क्या है।

कृपया इन सभी को समझने में मेरी मदद करें !!

उत्तर

3

हम इन अलग-अलग ढांचे के बजाय जावा सीरियलाइजेशन एपीआई का उपयोग क्यों नहीं कर सकते हैं, क्या जावा सीरियलज़ेटियो एपीआई में कोई दोष है।

मुझे लगता है कि आप जावा सीरियलाइजेशन का उपयोग तब तक कर सकते हैं जब तक आप अन्यथा नहीं जानते।

मुख्य कारणों में उपयोग करने के लिए नहीं यह

  • क्या आप जानते हैं कि वहाँ एक प्रदर्शन समस्या है कर रहे हैं।
  • आपको भाषाओं में डेटा का आदान-प्रदान करने की आवश्यकता है। जावा सीरियलाइजेशन केवल जावा के लिए है।

एक कोड पीढ़ी के कार्यक्रम चलाने जब एक स्कीमा में परिवर्तन

मैं अनुमान लगा रहा हूँ इसका मतलब है उसे पुन: उत्पन्न करने के लिए बिना किसी पुराने या नए मॉडल के साथ धारावाहिक डेटा पढ़ सकते हैं और कर सकते हैं की आवश्यकता नहीं है कोड संकलित करें। यानी यह मॉडल में बदलावों का सहिष्णु है।

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

संक्षेप में, जब तक कि आप नहीं जानते कि आप नहीं कर सकते हैं, पहले जावा सीरियलाइजेशन को आजमाएं।

तुलना मैं अलग Serialization Methods

+1

जब आपने कहा था तो मैं आपको वापस लेता हूं: पहले जावा क्रमिकरण का प्रयास करें। अगर यह मुट्ठी, तो महान! आपको कुछ भी करने की ज़रूरत नहीं है। हालांकि यह सोचने के लिए कुछ मिनट दें कि धारावाहिकरण को कौन सा उपयोग करने जा रहे हैं। क्या आपको तेज़ी से होने की ज़रूरत है? एक छोटा सा उत्पादन करने के लिए? सरल होना है? आउटपुट को स्वयं वर्णनात्मक होने की आवश्यकता है? आपको धारावाहिकता की पूरी वस्तु के बजाय जानकारी के डेल्टा को धक्का देने में सक्षम होना चाहिए? क्या आपको वास्तव में बाइनरी चाहिए? और इतने पर ... – Claudio

3

1. जावा क्रमांकन के साथ समस्या पर किया था कि यह आपके कोड के नास्तिक नहीं है। मतलब है कि आप कक्षाओं की संरचना के साथ कसकर मिलकर है। अन्य धारावाहिक ढांचे आपको कुछ लचीलापन/नियंत्रण प्रदान करते हैं जो इस तरह की परिस्थितियों को बाईपास करना उपयोगी है। यद्यपि जावा मानक तंत्र में लिखने के माध्यम से serialization को नियंत्रित करने के लिए एक तरीका है ऑब्जेक्ट readObject विधियों के माध्यम से, यह एक समस्या है कि अन्य fwks एक और सुरुचिपूर्ण तरीके से संबोधित किया है।

दूसरा, आप अन्य जावा प्लेटफार्मों के साथ अपने जावा क्रमबद्धता के आउटपुट को पूर्ण रूप से परिवर्तित नहीं कर सकते हैं।

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

2. अपने दूसरे प्रश्न के बारे में मुझे लगता है कि क्या इसका मतलब है कि आप किसी भी precompile काम उस मामले में कोड उत्पन्न करता है चलाने के लिए की आवश्यकता नहीं है कि है कि अपने धारावाहिक वर्गों परिवर्तन की संरचना। मैं व्यक्तिगत रूप से ढांचे से नफरत करता हूं जो कुछ प्रकार की संकलन-समय कोड पीढ़ी को मजबूर करता है। मुझे जेनरेट कोड को देखने की परेशानी से नफरत है, लेकिन यह सिर्फ मुझे और मेरा ओसीडी है।

+1

+1 जावा सीरियलाइजेशन का प्रदर्शन बहुत खराब हो सकता है भले ही बैंडविड्थ कोई मुद्दा न हो। –

+0

पूरी तरह से सहमत हैं, इस बेंचमार्क की जांच करें, यह उपयोगी हो सकता है http://www.eishay.com/2009/03/more-on-benchmarking-java-serialization.html – Claudio

+0

हां, और एक मैंने रीसाइक्लिंग ऑब्जेक्ट्स के साथ बाइटबफर सहित किया था। http://vanillajava.blogspot.co.uk/2011/10/serialization-using-bytebuffer-and.html –

1

दो सिद्धांत चीजें एवरो अच्छी तरह से करती हैं: हैडोप का मैपराइड और संचार प्रोटोकॉल संरचनाएं। मैं इसे मैड्रिडस के लिए उपयोग करता हूं जहां मैंने एक ही फाइल में कई डेटा इंस्टेंस लगाए हैं जो सभी एक विशेष स्कीमा के अनुरूप हैं; प्रत्येक रिकॉर्ड बहुत कुशलता से संग्रहीत किया जाता है और मार्कर प्रत्येक व्यक्तिगत रिकॉर्ड को चित्रित करते हैं। हाडोप मानचित्र के बीच डेटा संचारित करने और कार्यों को कम करने के लिए इसका भी उपयोग करता है। डेटा के साथ फ़ील्ड नामों को संग्रहीत करने से काफी बेहतर है। वितरित कंप्यूटिंग पर्यावरण में प्रसंस्करण के लिए इन फ़ाइलों को एकाधिक भागों में विभाजित करना आसान है। चूंकि स्कीमा फ़ाइल में एम्बेडेड है, इसलिए पाठक को यह नहीं पता होना चाहिए कि डेटा कैसा दिखता है। एवरो किसी भी भाषा से बंधे नहीं हैं और एवरो डेटा पढ़ने के लिए कई भाषा एपीआई हैं। यदि आप एक जटिल वस्तु लिखना चाहते हैं, तो जावा का क्रमिकरण या एवरो काम करेगा। यदि आप अधिक शक्ति और दक्षता चाहते हैं और लाखों व्यक्तिगत उदाहरणों का उपयोग कर रहे हैं, तो एवरो एक अच्छा विकल्प है। मुझे यकीन है कि आप जावा एपीआई के साथ ऐसा कर सकते हैं, लेकिन यह कड़ी मेहनत क्यों करें।

स्कीमा रिज़ॉल्यूशन नियमों के माध्यम से स्कीमा विकसित करने के लिए तंत्र हैं। ऐसे उपकरण भी हैं जो आपके जावा ऑब्जेक्ट्स को आपके लिए स्कीमा में बदल देंगे।

शुरू करने के लिए सबसे अच्छी जगह यहां है: http://avro.apache.org/docs/current/spec.html यह समझने के लिए कुछ पढ़ सकते हैं। एवरो पैकेज के साथ आने वाले कुछ टूल का उपयोग करने के बाद इसे फिर से पढ़ें। लटका पाने के लिए एवरो थोड़ी देर लेता है। JSON केवल डेटा विनिर्देश भाषा के रूप में उपयोग किया जाता है जिसका उपयोग डेटा को संग्रहीत करने के लिए नहीं किया जाता है। आप API का उपयोग करके या JSON फ़ाइल का उपयोग कर स्कीमा उत्पन्न कर सकते हैं। लचीलापन और पर्याप्त रस्सी के साथ आसानी से परेशानी हो रही है - इसके लायक है।

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