तुलना
Avro या Protocol Buffers
Apache Avro डेटा को writer स्कीमा से जोड़ता है और reader स्कीमा के साथ उसका समाधान करता है। Protocol Buffers (Protobuf) `.proto` परिभाषाओं और field number से कोड बनाता है तथा क्रमांकित बाइनरी wire फ़ॉर्मैट में संदेश encode करता है।
कौन-सा फ़ॉर्मैट चुनें?
जब स्कीमा डेटा के साथ चलता हो और विभिन्न runtime में writer/reader स्कीमा समाधान उपयोगी हो, Avro पर विचार करें। `.proto` से टाइप्ड कोड बनाकर RPC या सेवा सीमाओं पर संदेश साझा करने वाली प्रणालियों के लिए Protobuf उपयुक्त है।
इसके लिए उपयुक्त Avro
निर्धारित स्कीमा के साथ रिकॉर्ड साझा करना
- स्कीमा संस्करण रखने वाले इवेंट और डेटा प्रवाह
इसके लिए उपयुक्त Protocol Buffers स्कीमा फ़ाइल
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
- protoc से भाषा-विशिष्ट कोड बनाना
- RPC और सेवाओं के बीच संचार के संदेश तय करना
मूल जानकारी
| मद | Avro | Protocol Buffers स्कीमा फ़ाइल |
|---|---|---|
| एक्सटेंशन | .avro | .proto |
| MIME प्रकार | application/avro | text/plain |
| सामान्य उपयोग | निर्धारित स्कीमा के साथ रिकॉर्ड साझा करना | Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना |
| कैसे खोलें | Avro समर्थित टूल से स्कीमा, फ़ील्ड, प्रकार और रिकॉर्ड जाँचें। | इसे टेक्स्ट एडिटर या Protocol Buffers समर्थित IDE में खोलें। सिंटैक्स और import जाँचने के लिए प्रोजेक्ट में उपयोग किए जाने वाले protoc संस्करण और सेटिंग से कंपाइल करें। |
| निर्यात या रूपांतरण | JSON या Parquet में बदलते समय फ़ील्ड नाम, प्रकार, null, तार्किक प्रकार, रिकॉर्ड संख्या और स्कीमा संगतता जाँचें। | दूसरे स्कीमा प्रारूप में जाने पर प्रकार, फ़ील्ड नंबर, डिफ़ॉल्ट मान, enum और अनुकूलता के नियमों का मिलान करें। फिर कोड बनाकर वास्तविक डेटा से परीक्षण करें। एक्सटेंशन को .json या किसी बाइनरी एक्सटेंशन में बदलने से फ़ाइल परिवर्तित नहीं होती। |
उपयोग के अनुसार चुनें
स्कीमा संस्करण रखने वाले इवेंट और डेटा प्रवाह
निर्धारित स्कीमा के साथ रिकॉर्ड साझा करना
Avroprotoc से भाषा-विशिष्ट कोड बनाना
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
Protocol Buffers स्कीमा फ़ाइलRPC और सेवाओं के बीच संचार के संदेश तय करना
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
Protocol Buffers स्कीमा फ़ाइलमुख्य बिंदु 1
Avro Object Container फ़ाइल writer स्कीमा और डेटा ब्लॉक साथ रख सकती है। Protobuf wire data में स्कीमा परिभाषा नहीं होती, इसलिए `.proto` फ़ाइलें या descriptor अलग से वितरित और प्रबंधित करने पड़ते हैं।
अंतर के बारे में विस्तार सेमुख्य बिंदु 2
Avro writer और reader स्कीमा के बीच समाधान निर्धारित करता है। Protobuf field number को wire पहचान के रूप में उपयोग करता है और हटाए गए नंबर दोबारा न लेने जैसे विकास नियमों पर निर्भर है।
अंतर के बारे में विस्तार सेअंतर के बारे में विस्तार से
यदि फ़ाइलों में writer स्कीमा होना चाहिए और पाठक को स्कीमा समाधान करना है तो Avro चुनें। जनरेटेड संदेश क्लास और स्थिर field-number अनुबंध अनुकूल हों तो Protobuf चुनें। दोनों में संगतता अनुशासन चाहिए; आवश्यक दिशाओं में पुराने व नए पाठक-लेखक का परीक्षण करें।
- Avro कंटेनर फ़ाइल स्कीमा और डेटा ब्लॉक समाहित कर सकती है। मिलते हुए स्कीमा या descriptor के बिना Protobuf बाइनरी संदेश स्वयं-वर्णनात्मक नहीं होते।
- Avro अपने नियमों से स्कीमा अंतर सुलझाता है। Protobuf संगतता field number, wire type, presence अर्थ और सुरक्षित विकास नियमों पर निर्भर करती है।
- दोनों wire फ़ॉर्मैट परस्पर विनिमेय नहीं हैं। union/oneof, optional और presence, default, enum, अज्ञात फ़ील्ड, logical type, field number और प्रकार बदलाव का मानचित्रण करके वास्तविक पुराने-नए क्लाइंट से जाँचें।
अक्सर पूछे जाने वाले प्रश्न
क्या Avro और Protobuf एक-दूसरे की बाइनरी फ़ाइलें सीधे पढ़ सकते हैं?
नहीं। इनके encoding अलग हैं। रूपांतरण में फ़ील्ड और प्रकार स्पष्ट रूप से मैप करें तथा default, presence, अज्ञात फ़ील्ड और स्कीमा विकास जाँचें।