জাভা সিরিয়ালাইজেশন - সুবিধা এবং অসুবিধা, ব্যবহার বা এড়ানো? [বন্ধ]


20

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

এই প্রশ্নটি আমার মনে আসে জোন নিবন্ধটি দেখার পরে কি অবজেক্ট সিরিয়ালাইজেশন এভিল?

এবং এগুলিই আমার প্রশ্নের উত্থাপন করেছিল:

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

এখন, এটি পড়তে পারে এমন বিকাশকারীরা বলতে পারে যে তারা কখনও কোড লিখবেন না যাতে এই সমস্যা রয়েছে। এটি সত্য হতে পারে, তবে আপনি যে লাইব্রেরি ব্যবহার করেন বা অন্য কোনও বিকাশকারী আপনার সংস্থা দ্বারা নিযুক্ত করা হয় সে সম্পর্কে কী হবে? আপনি কি গ্যারান্টি দিতে পারবেন যে এই সমস্যাটি কখনই ঘটবে না? গ্যারান্টি দেওয়ার একমাত্র উপায় হ'ল আলাদা সিরিয়ালাইজেশন পদ্ধতি ব্যবহার করা।


নির্দিষ্টভাবে উল্লেখ করা নিবন্ধে আপনার প্রশ্নটি কী কারণে আপনার কিছুটা প্রসারিত হতে পারে?
gnat

@gnat - প্রশ্নের লাইন যুক্ত করেছেন।
আকাশে স্ক্র্যাপার

'শুধু একটি 1L' নয় এমন অংশটি সঠিক নয়।
ব্যবহারকারী 207421

উত্তর:


15

সিরিয়ালাইজেশন বেশিরভাগ ক্ষেত্রে দুটি ক্ষেত্রে ব্যবহৃত হয়:

  • দৃ pers়তা প্রোটোটাইপিং

    প্রায় প্রতিটি বস্তুর গ্রাফকে দ্রুত সিরিয়ালাইজযোগ্য করে তোলা যায়, দ্রুত প্রুফ-অফ কনসেপ্ট বা দ্রুত এবং মলিন অ্যাপ্লিকেশনগুলির জন্য এটি বাস্তব ওআরএম স্তর বা অন্যান্য দৃ pers়তা সিস্টেম স্থাপনের চেয়ে দ্রুততর হতে পারে might

  • প্রায়-স্বেচ্ছাসেবী বস্তুর স্বল্পমেয়াদী সঞ্চয়:

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

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

জ্যাকএক্সবি এবং অনুরূপ প্রযুক্তিগুলি কিছু সমস্যা হ্রাস করার সময় একইভাবে কম খরচে একই রকম ফাংশন সরবরাহ করে।


আমি JAXB কে 'কম দাম' বলব না - স্কিমাটি লিখতে হবে।
কেভিন cline

3
@ কেভিঙ্কলাইন: জ্যাকএক্সবি সহ আপনার কোনও স্কিমা দরকার নেই, এটি সম্পূর্ণরূপে alচ্ছিক (এবং আপনি যদি চান তবে এটি আপনার ক্লাসগুলি থেকেও তৈরি করতে পারেন)। এছাড়াও: যদি জ্যাকএক্সবি কোনও কারণে কার্যকর না হয় তবে এক্সএমএল বিনগুলি ঠিক যেমন সূক্ষ্মভাবে কাজ করে তার মতো প্রচুর বিকল্প রয়েছে।
জোচিম সৌর

12

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

আমরা ওয়েব সার্ভিসে HTTP এর মাধ্যমে জাভা অবজেক্টগুলি পাস করার জন্য সিরিয়ালাইজেশন ব্যবহার করি। পাঠ্যে পাঠ্যক্রম থেকে সিরিয়ালকরণের চেয়ে অনেক সহজ। অসুবিধাটি হ'ল ক্লায়েন্ট এবং সার্ভার ইনস্টলেশনগুলি অবশ্যই একসাথে মোতায়েন করা উচিত, তবে আমরা উভয় প্রান্তকেই নিয়ন্ত্রণ করি তাই সমস্যা নেই।


3
এটি একটি আকর্ষণীয় ব্যবহারের ক্ষেত্রে! একটি "আরও জটিল" সিস্টেমের জন্য কল করা খুব ছোট এবং বেশিরভাগ ত্রুটিগুলি প্রয়োগ হয় না!
জোছিম সউর

আমরা এখন একটি পোস্ট মর্টেম বিশ্লেষক লিখেছি যা সহজে দেখার জন্য জাভা অবজেক্ট থেকে স্প্রেডশিট তৈরি করতে POI ব্যবহার করে। এটি আমাদের অনেক ঘন্টা লগ ফাইল পরীক্ষার সাশ্রয় করেছে।
কেভিন ক্লিন

7

সিরিয়াল নন পদ্ধতিতে সিরিয়ালাইজেশনের সুবিধাগুলি কী?

জাভা সিরিয়ালাইজের কিছু সুবিধা রয়েছে:

  • সিস্টেমে অন্তর্নির্মিত : আপনার তৃতীয় পক্ষের সরঞ্জাম, গ্রন্থাগার বা কনফিগারেশনের উপর নির্ভর করার দরকার নেই।

  • তুলনামূলকভাবে বুঝতে সহজ , অন্তত শুরুতে।

  • প্রতিটি বিকাশকারী এটি জানেন (বা হওয়া উচিত)। জাভা ডেভস অনুমোদন বা অস্বীকৃতি নির্বিশেষে যাই হোক না কেন, তারা জাভা অবজেক্টগুলিকে সিরিয়ালিংয়ের সাথে পরিচিত হতে পারে।

এবং অবশ্যই অসুবিধাগুলি রয়েছে:

  • মানক জাভা প্রবাহকে সঙ্কুচিত করে। মেমরি বরাদ্দ করে কিন্তু কনস্ট্রাক্টরকে কল করে না, সুতরাং ক্ষণস্থায়ী ক্ষেত্র আরম্ভ করা হয় না। ক্ষেত্রগুলি উত্স ক্রমে নয়, বর্ণানুক্রমিক ক্রমে সূচনা করা হয়।

  • স্থানের দিক থেকে এতটা দক্ষ না, তবে ভয়ঙ্করও নয়। আপনি ফলাফল সংকোচ করতে চাইতে পারেন।

  • আপনার বস্তু পরিবর্তন হলে আপনি সাবধানতা অবলম্বন না করলে ভঙ্গুর করুন । এবং তারপরও।

এটি কখন ব্যবহার করা উচিত এবং কখন এড়ানো উচিত?

যখন ব্যবহার করুন :

  • স্থাপনার আকারের বিষয়গুলি। সিস্টেমে অন্তর্নির্মিত, তাই 0 অতিরিক্ত বাইট।

  • সমস্ত অভিনেতা সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

  • দীর্ঘমেয়াদী সঞ্চয়স্থান কোনও সমস্যা নয়।

কখন এড়িয়ে চলুন :

  • উপরের যে কোনওটি প্রযোজ্য নয়।

3

সিরিয়ালাইজেশন এবং একটি ওআরএম / ডাটাবেস বিভিন্ন জিনিস, যদিও কিছু ওভারল্যাপ রয়েছে।

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

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

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


0

অনুশীলনে সিরিয়ালাইজেশন খুব কমই ব্যবহৃত হয়।

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

যে ডেটা দীর্ঘ সময়ের জন্য ধরে রাখতে হবে (অ্যামাজন শপিং কার্টের মতো) সেই ডেটাবেসগুলিতে ডেটা সংরক্ষণ করা সবচেয়ে ভাল অনুশীলন।

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

এই পদ্ধতির সাথে দুটি সমস্যা রয়েছে:

প্রথমত, সেশন ডেটাবেজে সেশন ডেটা ফ্লাশ করা একটি ধীর প্রক্রিয়া। ফ্লাশিং সেশন ডেটা প্রায়শই পারফরম্যান্সকে হ্রাস করে এবং বেশিরভাগ সার্ভারগুলি প্রতি 30 সেকেন্ড বা প্রতি মিনিটে বা তার বেশি সময় ফ্লাশ করার জন্য কনফিগার করা হয়। এই "মনেহীন" ব্যর্থতা সমাধানটি কখনই 100% কার্যকর হয় না।

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

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

অন্যরা যেমন উল্লেখ করেছে যে, সিরিয়ালাইজেশন নিয়োগের জন্য কিছু সৃজনশীল এবং দরকারী কারণ রয়েছে তবে বাস্তবে এগুলি বিরল।

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


2
"অনুশীলনে সিরিয়ালাইজেশন খুব কমই ব্যবহৃত হয়।" - প্রায়শই REST ওয়েব পরিষেবাদির বিশ্বে সিরিয়ালাইজেশন বলা হয়। বেশিরভাগ সময়, কেবল স্ট্রিংস এবং ইন্টিজারগুলি বা এর মতো কাজ করে - তবে এটি একটি আসল জিনিস এবং আরও জটিল বিষয়গুলির সম্পর্কে সচেতনতার প্রয়োজন। এটি খুব কমই ব্যবহার করা হয় তা বলার জন্য এটি ঘন ঘন ব্যবহার করা একটি বৃহত ডোমেন উপেক্ষা করে।

0

"জাভা সিরিয়ালাইজেশন কখন ব্যবহার করবেন" এবং "কখন জাভা সিরিয়ালাইজেশন এড়াতে হবে" এর সংক্ষিপ্ত উত্তর

জাভা সিরিয়ালাইজেশন ব্যবহার করুন

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

অন্য সমস্ত পরিস্থিতিতে "বাইনারি জাভা সিরিয়ালাইজেশন" খারাপ

বিকল্প

  • এক্সএমএল সিরিয়ালাইজেশন
  • nosql ডাটাবেস
  • ওআরএম এর সাথে সম্পর্কিত ডেটাবেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.