किसी वस्तु को हाइड्रेट करने का क्या मतलब है?


204

जब कोई किसी वस्तु को हाइड्रेट करने की बात करता है, तो इसका क्या मतलब है?

मुझे वेब पर हाइड्रेट नामक एक जावा परियोजना दिखाई देती है जो विभिन्न अभ्यावेदन (RDMS से OOPS to XML) के बीच डेटा को परिवर्तित करती है। क्या यह ऑब्जेक्ट हाइड्रेशन का सामान्य अर्थ है; अभ्यावेदन के बीच डेटा बदलने के लिए? क्या इसका मतलब संग्रहित प्रतिनिधित्व से एक वस्तु पदानुक्रम का पुनर्निर्माण कर सकता है?


3
कृपया इस प्रश्न को भी देखें, जिसका शानदार उत्तर है। यह एक ही सवाल नहीं है, इसलिए मैं बंद करने के लिए मतदान नहीं कर रहा हूं। लेकिन यह हाइड्रेशन को अच्छी तरह से समझाता है: stackoverflow.com/questions/4929243/…
Erick Robertson

जवाबों:


124

अधिक सामान्य शब्द हाइड्रेट के संबंध में

एक ऑब्जेक्ट को हाइड्रेट करना एक ऐसी वस्तु ले रहा है जो स्मृति में मौजूद है, जिसमें अभी तक कोई डोमेन डेटा ("वास्तविक" डेटा) नहीं है, और फिर इसे डोमेन डेटा (जैसे कि डेटाबेस से, नेटवर्क से, या फ़ाइल से पॉप्युलेट करना है) प्रणाली)।

इस उत्तर पर एरिक रॉबर्टसन की टिप्पणियों से:

deserialization == तात्कालिकता + जलयोजन

यदि आपको ब्लिस्टरिंग प्रदर्शन के बारे में चिंता करने की आवश्यकता नहीं है, और आप प्रदर्शन ऑप्टिमाइज़ेशन डिबगिंग नहीं कर रहे हैं जो डेटा एक्सेस एपीआई के आंतरिक में हैं, तो आपको संभवतः हाइड्रेशन से स्पष्ट रूप से निपटने की आवश्यकता नहीं है। आप आमतौर पर deserialization का उपयोग करेंगे इसके बजाय आप कम कोड लिख सकते हैं। कुछ डेटा एक्सेस API आपको यह विकल्प नहीं देते हैं, और उन मामलों में आपको हाइड्रेशन स्टेप को स्वयं स्पष्ट रूप से कॉल करना होगा।

हाइड्रेशन की अवधारणा पर थोड़ा और विस्तार के लिए, इसी सवाल पर एरिक रॉबर्टसन का जवाब देखें ।

हाइड परियोजना नामक जावा परियोजना के संबंध में

आपने इस रूपरेखा के बारे में विशेष रूप से पूछा, इसलिए मैंने इस पर ध्यान दिया।

जैसा कि सबसे अच्छा मैं बता सकता हूं, मुझे नहीं लगता कि इस परियोजना ने "हाइड्रेट" शब्द का इस्तेमाल बहुत सामान्य अर्थों में किया है। मैं शीर्षक में इसके उपयोग को "क्रमांकन" के लिए एक अनुमानित पर्याय के रूप में देखता हूं। जैसा कि ऊपर बताया गया है, यह उपयोग पूरी तरह से सही नहीं है:

देखें: http://en.wikipedia.org/wiki/Serialization

डेटा संरचनाओं या ऑब्जेक्ट स्थिति का एक प्रारूप में अनुवाद करना जिसे [...] संग्रहीत किया जा सकता है और बाद में उसी या किसी अन्य कंप्यूटर वातावरण में पुन: निर्मित किया जा सकता है।

मैं सीधे हाइड्रेट एफएक्यू पर उनके नाम के पीछे का कारण नहीं खोज सकता , लेकिन मुझे उनके इरादे का सुराग मिला। मुझे लगता है कि उन्होंने "हाइड्रेट" नाम उठाया क्योंकि पुस्तकालय का उद्देश्य लोकप्रिय ध्वनि-समान हाइबरनेट रूपरेखा के समान है , लेकिन इसे सटीक विपरीत वर्कफ़्लो को ध्यान में रखते हुए डिज़ाइन किया गया था।

अधिकांश ओआरएम, हाइबरनेट शामिल थे, इन-मेमोरी ऑब्जेक्ट-मॉडल उन्मुख दृष्टिकोण लेते हैं, डेटाबेस के साथ दूसरा विचार लेते हैं। इसके बजाय हाइड्रेट पुस्तकालय एक डेटाबेस-स्कीमा उन्मुख दृष्टिकोण लेता है, आपके संबंधपरक डेटा संरचनाओं को संरक्षित करता है और आपके कार्यक्रम को उनके ऊपर और अधिक सफाई से काम करने देता है।

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

पुस्तकालय हाइड्रेट का नाम देने का निर्णय, जहां तक ​​मैं बता सकता हूं, जेनेरिक कंप्यूटर प्रोग्रामिंग शब्द "हाइड्रेट" से चिंतित नहीं था।

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


79
-1 हाइड्रेशन से तात्पर्य किसी मौजूदा वस्तु को डेटा से भरना है। यह क्रमबद्धता का पर्याय नहीं है।
एरिक रॉबर्टसन

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

5
हम सब सीखने की कोशिश कर रहे हैं। यदि मेरा मानना ​​है कि यह आवश्यक नहीं है, तो मैं इसे हटा दूंगा, और मैं चर्चा की सराहना करता हूं। मेरा जवाब जावा-केंद्रित नहीं है, क्योंकि मैंने ज्यादातर PHP के संबंध में "हाइड्रेशन" शब्द का इस्तेमाल किया है। प्रश्न का उत्तर "किसी वस्तु को हाइड्रेट करने का क्या मतलब है?" "डेटा के साथ किसी मौजूदा ऑब्जेक्ट को भरना" है। इससे पहले कि आप इसे हाइड्रेट कर सकें, वस्तु का अस्तित्व है, जो कि डिजेरलाइजेशन के लिए सही नहीं है। deserialization == instantiation + hydration
एरिक रॉबर्टसन

2
क्षमा करें, मुझे इस उत्तर में, मर्लिन मॉर्गन-ग्राहम को टैग करने में समस्या आ रही है। जब मैं इसे बचा रहा हूं, तो इसे हटाया जा रहा है। मैं भी भड़काऊ के साथ मुद्दों को ले रहा हूँ deserialization के बराबर है। मैंने अनियोजित दावे को हटाने के लिए लिंक किए गए विकिपीडिया लेख को संपादित किया। मेरे लिए मुद्रास्फीति का अर्थ है कि किसी प्रकार का अपघटन दिनचर्या। एक क्रमिक दिनचर्या नियमित रूप से संपीड़न के लिए रूढ़िवादी है।
एरिक रॉबर्टसन

2
@ErickRobertson साइड नोट: @fooपोस्ट लेखक को जवाब देते समय इसकी आवश्यकता नहीं है।
डंकन जोन्स

230

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

इसके अतिरिक्त, डेटाबेस या अन्य डेटा स्रोतों से डेटा लोड करने की योजना पर चर्चा करते समय हाइड्रेशन शब्द का उपयोग किया जाता है। यहाँ कुछ उदाहरण हैं:

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

इसके अतिरिक्त, कुछ ओआरएम हैं, जैसे कि डॉक्ट्रिन, जो ऑब्जेक्ट्स को तात्कालिक होने पर हाइड्रेट नहीं करते हैं, लेकिन केवल तब जब डेटा उस ऑब्जेक्ट में एक्सेस किया जाता है। यह एक तरीका है जो डेटा को लोड नहीं करने में मदद करता है जो कि उपयोग नहीं किया जा रहा है।


7
+1; यह जावा और हाइड्रेशन के संदर्भ में मेरा एक पूर्ण जवाब है। यह अभी भी पूरी तरह से सामान्य शब्द deserialization का पर्याय है, जैसा कि मेरे उत्तर में कहा गया है, लेकिन ORM में सबसे अधिक उपयोग किया जाता है। ऐसा इसलिए होता है क्योंकि ORM API अक्सर आपके द्वारा पुनर्प्राप्त डेटा के सेट पर नियंत्रण प्रदान करते हैं, जिससे आप लिखी गई प्रत्येक क्वेरी के लिए नई मैपिंग लिखने के बजाय किसी मौजूदा ऑब्जेक्ट मैपिंग का पुन: उपयोग कर सकते हैं। उल्लेख करना चाहते हैं कि आप "आलसी-लोडिंग" के बारे में बात कर रहे हैं, क्योंकि यह प्रश्नोत्तर सभी शब्दावली के बारे में है :)
मेरलिन मॉर्गन-ग्राहम

1
क्या वस्तु - निष्कर्षण से डेटा प्राप्त करने की विपरीत प्रक्रिया को कॉल करना सही है? ऑब्जेक्ट से डेटा निकालें।
ओलेग अब्राजेव

43

हालांकि यह कुछ हद तक निरर्थक है जैसा कि मेरलिन ने उल्लेख किया है, मेरे अनुभव में यह केवल किसी वस्तु को भरने / आबाद करने के लिए संदर्भित करता है , न कि इसे त्वरित / बनाने में, इसलिए यह एक उपयोगी शब्द है जब आपको सटीक होने की आवश्यकता होती है।


5
मैंने अपना विचार बदल दिया है, और अब मैं सहमत हूं कि यह उत्तर मेरे पुराने उत्तर की तुलना में अधिक सटीक है। मैंने अपना उत्तर संपादित किया है (क्योंकि यह स्वीकार किया गया था, और मैं चाहता हूं कि यह सटीक हो)। अब उम्मीद है कि अब यह deserialization और जलयोजन (विशेष रूप से, deserialization == instantiation + hydration) के बीच अंतर को दर्शाता है ।
मेरलिन मॉर्गन-ग्राहम

8

यह एक बहुत पुराना प्रश्न है, लेकिन ऐसा लगता है कि निम्नलिखित शब्दों के अर्थ पर अभी भी भ्रम है। उम्मीद है, यह नाकारा होगा।

हाइड्रेट

जब आप उन विवरणों को देखते हैं जो कहते हैं कि, "एक वस्तु जो डेटा की प्रतीक्षा कर रही है, वह हाइड्रेटेड होने की प्रतीक्षा कर रही है", तो यह भ्रामक और भ्रामक है। वस्तुएं चीजों की प्रतीक्षा नहीं करती हैं, और जलयोजन केवल डेटा के साथ एक वस्तु को भरने का कार्य है।

उदाहरण के रूप में जावास्क्रिप्ट का उपयोग करना:

const obj = {}; // empty object
const data = { foo: true, bar: true, baz: true };

// Hydrate "obj" with "data" 
Object.assign(obj, data); 
console.log(obj.foo); // true
console.log(obj.bar); // true
console.log(obj.baz); // true

जो कुछ भी मूल्यों को जोड़ता है objवह "हाइड्रेटिंग" है। मैं सिर्फ Object.assign()इस उदाहरण में उपयोग कर रहा हूं ।

चूंकि अन्य उत्तरों में "सीरियलाइज़" और "डिसेरियलाइज़" का भी उल्लेख किया गया था, इसलिए जलयोजन से उन अवधारणाओं के अर्थ को स्पष्ट करने में मदद करने के लिए उदाहरण हैं:

क्रमबद्ध करें

console.log(JSON.stringify({ foo: true, bar: true, baz: true }));

deserialize

console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.