কোন বস্তুর হাইড্রেট করার অর্থ কী?


204

কেউ যখন কোনও বস্তু হাইড্রেট করার কথা বলে, তার অর্থ কী?

ওয়েবে হাইড্রেট নামে একটি জাভা প্রকল্প দেখছি যা বিভিন্ন উপস্থাপনের মধ্যে ডেটা রূপান্তর করে (আরডিএমএস থেকে ওওপিএস থেকে এক্সএমএল)। এটি কি অবজেক্ট হাইড্রেশনের সাধারণ অর্থ; উপস্থাপনের মধ্যে তথ্য রূপান্তর করতে? এটির অর্থ কি কোনও সঞ্চিত উপস্থাপনা থেকে কোনও অবৈধ স্তরক্রম পুনর্গঠন করা সম্ভব?


3
দয়া করে এই প্রশ্নটি দেখুন, যার দুর্দান্ত উত্তর রয়েছে। এটি একেবারে একই প্রশ্ন নয়, তাই আমি বন্ধ করার জন্য ভোট দিচ্ছি না। তবে এটি হাইড্রেশনকে ভালভাবে ব্যাখ্যা করেছে: স্ট্যাকওভারফ্লো
এরিক রবার্টসন

উত্তর:


124

আরও জেনেরিক পদ হাইড্রেট সম্মান সঙ্গে

কোনও বস্তু হাইড্রেট করা এমন একটি বস্তু গ্রহণ করছে যা মেমরিতে বিদ্যমান, এটিতে কোনও ডোমেন ডেটা ("রিয়েল" ডেটা) থাকে না এবং তারপরে এটি ডোমেন ডেটা (যেমন একটি ডাটাবেস, নেটওয়ার্ক থেকে বা কোনও ফাইল থেকে) পপুলেট করে পদ্ধতি).

এই উত্তরে এরিক রবার্টসনের মন্তব্য থেকে:

deserialization == ইনস্ট্যান্টেশন + হাইড্রেশন

যদি আপনার ব্লিটারিং পারফরম্যান্স সম্পর্কে চিন্তা করার দরকার পড়ে না এবং আপনি কোনও ডেটা অ্যাক্সেস এপিআইয়ের অভ্যন্তরীণ পারফরম্যান্স অপটিমাইজেশনগুলি ডিবাগ করছেন না, তবে সম্ভবত আপনার স্পষ্টভাবে হাইড্রেশন নিয়ে কাজ করার দরকার নেই। আপনি সাধারণত এর পরিবর্তে ডিসরিয়ালাইজেশন ব্যবহার করবেন যাতে আপনি কম কোড লিখতে পারেন। কিছু ডেটা অ্যাক্সেস এআইপিআই আপনাকে এই বিকল্পটি দেয় না এবং সেই ক্ষেত্রে আপনাকে স্পষ্টতই হাইড্রেশন পদক্ষেপটি নিজে কল করতে হবে।

হাইড্রেশন ধারণার উপর আরও বিশদ জানতে, একই প্রশ্নে এরিক রবার্টসনের উত্তর দেখুন

থেকে সম্মান সঙ্গে জাভা প্রকল্পের নামক হাইড্রেট

আপনি এই কাঠামোটি সম্পর্কে বিশেষভাবে জিজ্ঞাসা করেছিলেন, তাই আমি এটিতে সন্ধান করেছি।

আমি যতটা বলতে পারি সর্বোত্তম, আমি মনে করি না এই প্রকল্পটি খুব জেনারিক অর্থে "হাইড্রেট" শব্দটি ব্যবহার করেছে। আমি "সিরিয়ালাইজেশন" এর আনুমানিক প্রতিশব্দ হিসাবে শিরোনামে এর ব্যবহার দেখতে পাচ্ছি। উপরে বর্ণিত হিসাবে, এই ব্যবহার সম্পূর্ণ সঠিক নয়:

দেখুন: http://en.wikedia.org/wiki/Serialization

ডেটা স্ট্রাকচার বা অবজেক্টের স্থিতি এমন একটি ফর্ম্যাটে অনুবাদ করা যা সংরক্ষণ করা যায় [...] এবং একই বা অন্য কম্পিউটারের পরিবেশে পরে পুনর্গঠন করা যায়।

আমি সরাসরি তাদের নামের পেছনের কারণ হাইড্রেট এফএকিউতে খুঁজে পাচ্ছি না , তবে আমি তাদের উদ্দেশ্য সম্পর্কে ক্লু পেয়েছি। আমি মনে করি তারা "হাইড্রেট" নামটি বেছে নিয়েছে কারণ গ্রন্থাগারের উদ্দেশ্যটি জনপ্রিয় শব্দ-সদৃশ হাইবারনেট কাঠামোর সাথে সমান , তবে এটি ঠিক বিপরীত কর্মপ্রবাহকে মাথায় রেখে তৈরি করা হয়েছিল।

বেশিরভাগ ওআরএম, হাইবারনেট অন্তর্ভুক্ত রয়েছে, ডাটাবেসটিকে দ্বিতীয় বিবেচনায় নিয়ে একটি ইন-মেমরি অবজেক্ট-মডেল ভিত্তিক দৃষ্টিভঙ্গি গ্রহণ করে। হাইড্রেট লাইব্রেরি পরিবর্তে একটি ডাটাবেস-স্কিমা ওরিয়েন্টেড পদ্ধতির গ্রহণ করে, আপনার সম্পর্কিত তথ্য কাঠামো সংরক্ষণ করে এবং আপনার প্রোগ্রামকে আরও পরিষ্কার করে তার উপরে কাজ করতে দেয়।

রূপকভাবে বলতে গেলে, এখনও এই লাইব্রেরির নামটির প্রতি শ্রদ্ধা রেখে: হাইড্রেট হ'ল "ব্যবহারের জন্য প্রস্তুত কিছু তৈরি করা" ( শুকনো খাবারগুলি পুনরায় হাইড্রেট করার মতো )। এটি হাইবারনেটের বিপরীতে রূপক , যা "শীতের জন্য কিছু দূরে রাখার" মতো (যেমন অ্যানিমাল হাইবারনেশন ) is

আমি যতদূর বলতে পারি লাইব্রেরির নাম হাইড্রেট রাখার সিদ্ধান্তটি জেনেরিক কম্পিউটার প্রোগ্রামিং শব্দ "হাইড্রেট" নিয়ে উদ্বিগ্ন ছিল না।

জেনেরিক কম্পিউটার প্রোগ্রামিং শব্দটি "হাইড্রেট" ব্যবহার করার সময়, পারফরম্যান্স অপটিমাইজেশনগুলি সাধারণত অনুপ্রেরণা (বা বিদ্যমান অপ্টিমাইজেশানগুলি ডিবাগিং) হয়। এমনকি লাইব্রেরি কখন কীভাবে এবং কীভাবে ডেটা দিয়ে পপুলেশন করা হয় তার জন্য দানাদার নিয়ন্ত্রণকে সমর্থন করে, সময় এবং কার্য সম্পাদনটি নাম বা গ্রন্থাগারের কার্যকারিতার জন্য প্রাথমিক অনুপ্রেরণা বলে মনে হয় না। গ্রন্থাগারটি এন্ড-টু-এন্ড ম্যাপিং এবং স্কিমা-সংরক্ষণ সক্ষমকরণের সাথে আরও সংশ্লিষ্ট বলে মনে হচ্ছে।


79
-1 হাইড্রেশন ডেটা সহ একটি বিদ্যমান বস্তু পূরণ করার বোঝায়। এটি সিরিয়ালাইজেশন এর প্রতিশব্দ নয়।
এরিক রবার্টসন

20
এটি হয়ও deserialization জন্য প্রতিশব্দ নয়। ডেসরিয়ালাইজেশন এর সাথে সিরিয়ালায়িত হওয়ার সময় এটির সাথে ডেটা তৈরি করা জড়িত। হাইড্রেশন বলতে বোঝায় যে আপনি কীভাবে কোনও ডেটা দিয়ে কোনও বস্তু পূরণ করেন। এটি একটি সূক্ষ্ম পার্থক্য, কিন্তু এটি একটি পার্থক্য। আপনি উদাহরণস্বরূপ কোনও বস্তুকে আংশিকভাবে ডিসস্রায়াল করতে পারবেন না। (কমপক্ষে, কোনও স্ট্যান্ডার্ড এপিআইয়ের মাধ্যমে নয়)
এরিক রবার্টসন

5
আমরা সবাই শিখার চেষ্টা করছি। যদি আমি এটি অপ্রয়োজনীয় বলে বিশ্বাস করি তবে আমি এটিকে সরিয়ে দেব এবং আমি আলোচনার প্রশংসা করি। আমার উত্তর জাভা কেন্দ্রিক নয়, কারণ আমি বেশিরভাগই "হাইড্রেশন" শব্দটি প্রকৃতপক্ষে পিএইচপি-র সাথে ব্যবহার করেছি। "কোন বস্তুর জলবিদ্যুতের অর্থ কী?" প্রশ্নের উত্তর "ডেটা সহ একটি বিদ্যমান বস্তু পূরণ করছে"। আপনি হাইড্রেট করতে পারার আগে অবজেক্টটির অস্তিত্ব থাকতে হবে, যা ডিসরিয়ালাইজেশনের ক্ষেত্রে সত্য নয়। deserialization == instantiation + hydration
এরিক রবার্টসন

2
দুঃখিত, এই উত্তরটিতে আপনাকে ট্যাগ করতে আমার সমস্যা হচ্ছে, মেরলিন মরগান-গ্রাহাম। এটি সংরক্ষণ করার পরে এটি সরিয়ে ফেলা হচ্ছে। আমি স্ফীতকরণকে deserialization হিসাবে সমান করা নিয়েও বিষয়টি নিয়েছি। অসম্পূর্ণ দাবি মুছে ফেলার জন্য আমি লিঙ্কযুক্ত উইকিপিডিয়া নিবন্ধ সম্পাদনা করেছি। আমার প্রতি স্ফীত হওয়া একরকম ডিকম্প্রেশন রুটিনকে বোঝায়। একটি সিরিয়ালাইজেশন রুটিন সংকোচনের জন্য orthogonal হয়।
এরিক রবার্টসন

2
@ এরিকরবার্টসন সাইড নোট: @fooপোস্ট লেখকের প্রতিক্রিয়া জানাতে প্রয়োজন হয় না।
ডানকান জোনস

230

হাইড্রেশন ডেটা দিয়ে কোনও বস্তু পূরণ করার প্রক্রিয়া বোঝায়। এমন কোনও বস্তু যা এখনও হাইড্রেটেড হয় নি তা তাত্ক্ষণিকভাবে চিহ্নিত করা হয়েছে এবং এমন একটি সত্তাকে প্রতিনিধিত্ব করে যা ডেটা আছে তবে ডেটা এখনও অবজেক্টটিতে লোড করা যায় নি। এটি এমন কিছু যা কার্য সম্পাদনের কারণে করা হয়।

অতিরিক্তভাবে, ডেটাবেস বা অন্যান্য ডেটা উত্স থেকে ডেটা লোড করার পরিকল্পনা নিয়ে আলোচনা করার সময় হাইড্রেশন শব্দটি ব্যবহৃত হয়। এখানে কিছু উদাহরন:

আপনি বলতে পারেন যে কোনও বস্তু আংশিকভাবে হাইড্রেটেড যখন আপনি কেবলমাত্র কিছু ক্ষেত্র এতে এতে লোড করেছেন তবে সেগুলি সমস্ত নয়। এটি করা যেতে পারে কারণ আপনার বর্তমান ক্রিয়াকলাপের জন্য other অন্যান্য ক্ষেত্রগুলি প্রয়োজনীয় নয়। সুতরাং ব্যান্ডউইথ এবং সিপিইউ চক্রটি লোড করা, স্থানান্তর করা এবং এটি ব্যবহার করা হবে না তখন এই ডেটা সেট করার অপচয় করার কোনও কারণ নেই।

অতিরিক্তভাবে, কিছু ওআরএম রয়েছে যেমন ডক্ট্রাইন যা তাত্ক্ষণিকভাবে যখন বস্তুগুলিকে হাইড্রেট করে না, তবে কেবল তখনই সেই বস্তুতে ডেটা অ্যাক্সেস করা হয়। এটি এমন একটি পদ্ধতি যা ডেটা লোড না করতে সহায়তা করে যা ব্যবহৃত হচ্ছে না।


7
+1 টি; জাভা এবং হাইড্রেশন প্রসঙ্গে এটি আমার চেয়ে আরও সম্পূর্ণ উত্তর। এটি এখনও সম্পূর্ণরূপে ডেসরিয়ালাইজেশন শব্দটির সম্পূর্ণ সমার্থক, যেমনটি আমার উত্তর বলেছে, তবে ওআরএম-তে সাধারণত ব্যবহৃত হয়। এর কারণ হল ওআরএম এপিআইগুলি প্রায়শই তারা পুনরুদ্ধার করে এমন ডেটার সেটের উপরে নিয়ন্ত্রণ সরবরাহ করে, যা আপনার লেখার প্রতিটি প্রশ্নের জন্য নতুন ম্যাপিংগুলি লেখার পরিবর্তে একটি বিদ্যমান অবজেক্ট ম্যাপিং পুনরায় ব্যবহার করার অনুমতি দেয়। আপনি উল্লেখ করতে চান যে আপনি "অলস-লোডিং" সম্পর্কে কথা বলছেন, যেহেতু এই প্রশ্নোত্তরটি পরিভাষা সম্পর্কে :)
মের্লিন মরগান-গ্রাহাম

1
অবজেক্ট - এক্সট্রাকশন থেকে ডেটা পাওয়ার বিপরীত প্রক্রিয়াটি কল করা কি সঠিক? অবজেক্ট থেকে ডেটা উত্তোলন করুন।
ওলেগ আব্রাজাইভ

43

যদিও মার্লিন উল্লেখ করেছেন এটি কিছুটা অপ্রয়োজনীয় স্থানীয় ভাষায়, আমার অভিজ্ঞতাতে এটি কেবল কোনও বস্তু পূরণ / পপুলেশন করার বিষয়টি বোঝায় , এটি তাত্ক্ষণিকভাবে তৈরি / তৈরি করে না, সুতরাং যখন আপনাকে সুনির্দিষ্ট হওয়ার দরকার হয় তখন এটি কার্যকর শব্দ।


5
আমি আমার মন পরিবর্তন করেছি এবং এখন আমি সম্মত হই যে এই উত্তরটি আমার পুরানো উত্তরের চেয়ে আরও সঠিক। আমি তখন থেকে আমার উত্তর সম্পাদনা করেছি (যেহেতু এটি গৃহীত হয়েছিল, এবং আমি এটি সঠিক হতে চাই)। এখন আশা করা যায় এটি ডিসরিয়ালাইজেশন এবং হাইড্রেশন (বিশেষত deserialization == instantiation + hydration) এর মধ্যে পার্থক্য প্রতিফলিত করে ।
মের্লিন মরগান-গ্রাহাম

8

এটি বেশ পুরানো প্রশ্ন, তবে মনে হচ্ছে যে নিম্নলিখিত পদগুলির অর্থটি নিয়ে এখনও বিভ্রান্তি রয়েছে। আশা করি, এটি বিভ্রান্ত হবে।

hydrate

যখন আপনি এমন বিবরণগুলি দেখেন যেগুলি এমন জিনিস বলে, "একটি বস্তু যা ডেটার জন্য অপেক্ষা করছে, হাইড্রেটেড হওয়ার জন্য অপেক্ষা করছে", এটি বিভ্রান্তিকর এবং বিভ্রান্তিমূলক। অবজেক্টগুলি জিনিসগুলির জন্য অপেক্ষা করে না এবং হাইড্রেশন হ'ল ডেটা দিয়ে কোনও বস্তু পূরণ করার কাজ।

উদাহরণ হিসাবে জাভাস্ক্রিপ্ট ব্যবহার:

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কিছুতে মানগুলি যুক্ত হয় এটি হাইড্রেটিং ting আমি Object.assign()এই উদাহরণে ব্যবহার করছি ।

যেহেতু "সিরিয়ালাইজ" এবং "ডিসিরিয়ালাইজ" পদগুলি অন্যান্য জবাবগুলিতেও উল্লেখ করা হয়েছিল, হাইড্রেশন থেকে এই ধারণাগুলির অর্থ ছাঁটাইতে সহায়তা করার জন্য এখানে উদাহরণ রয়েছে:

ধারাবাহিকভাবে প্রকাশ করা

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

Deserialize

console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.