একটি সাম্প্রতিক প্রজেক্ট আপডেট মিটিং চলাকালীন, আমার টিম এই অ্যাপ্লিকেশান থেকে ডেটা বারবার পাঠাতে আমরা কীভাবে সিরিয়ালাইজেশন ব্যবহার করতে যাচ্ছি সে সম্পর্কে কথা বলেছিল।
একজন প্রকৌশলী যিনি সফ্টওয়্যার প্রকল্পগুলিতে আরও বেশি কিছু পেতে চেয়েছিলেন আমাকে বলেছিলেন যে তারা এই শব্দটির সাথে অপরিচিত ছিলেন।
এই ধরনের প্রয়োজনীয় প্রক্রিয়াগুলি মিস করা সহজ যেগুলি আপনি আরও বিস্তৃত প্রকল্পগুলিতে ডুব না দেওয়া পর্যন্ত আসে না। এই ব্যক্তির ক্ষেত্রে এটি ছিল, যেমনটি এক সময়ে আমার জন্য ছিল।
তাই এটা নিয়ে লিখতে চাইলাম। আমি সেই দিন আমার সহকর্মীকে সিরিয়ালাইজেশন সম্পর্কে শিখতে সাহায্য করেছিলাম, এবং আপনি আজ এটি সম্পর্কে শিখতে যাচ্ছেন।
ক্রমিককরণ কি?
সিরিয়ালাইজেশন হল এমন একটি প্রক্রিয়া যেখানে একটি পরিষেবা একটি ডেটা স্ট্রাকচারে নেয়, যেমন পাইথনের একটি অভিধান, এটিকে গুটিয়ে রাখে এবং পড়ার জন্য অন্য পরিষেবাতে প্রেরণ করে। এটাই সহজ সংজ্ঞা।
কল্পনা করুন যে আমি কাউকে একটি বার্তা পাঠাতে চাই। তাই আমি ইতিমধ্যে একত্রিত ধাঁধার উপর টেক্সট লিখুন. আমি টুকরোগুলো আলাদা করে নিয়েছি, কিভাবে ধাঁধাটি আবার একত্রিত করতে হয় সে বিষয়ে কিছু নির্দেশনা যোগ করি এবং সাথে পাঠাই।
বার্তা প্রাপক তখন ধাঁধার টুকরোগুলো পায়, সেগুলিকে আবার একসাথে রাখে এবং এখন তাদের কাছে আমার বার্তা রয়েছে৷
প্রযুক্তিগত সংজ্ঞা একটু বেশি মজার। বুদ্ধিমত্তার জন্য, সিরিয়ালাইজেশন হল একটি ডেটা অবজেক্টকে একটি বাইট স্ট্রীমে রূপান্তর করার প্রক্রিয়া, এবং একটি ডিস্কে সংরক্ষণ করা বা একটি নেটওয়ার্ক জুড়ে প্রেরণ করা বস্তুর অবস্থা সংরক্ষণ করা। এটি প্রয়োজনীয় স্টোরেজ সাইজ কমিয়ে দেয় এবং নেটওয়ার্কে তথ্য স্থানান্তর করা সহজ করে তোলে।
মার্শালিং এবং সিরিয়ালাইজেশন - পার্থক্য কি?
মার্শালিং প্রক্রিয়া মনে আসতে পারে. মার্শালিং হল একটি বস্তুর মেমরি উপস্থাপনাকে ট্রান্সমিশনের জন্য উপযুক্ত ফর্মে রূপান্তরিত করার প্রক্রিয়া।
যদিও মার্শালিং এবং সিরিয়ালাইজেশন আলগালি হয় সমার্থক, একটি গুরুত্বপূর্ণ পার্থক্য আছে। উদাহরণ স্বরূপ, গোল্যাং ডেটা স্ট্রাকচারে JSON ডেটা পড়ার জন্য একটি Golang প্রোগ্রাম তৈরি করার সময়, আপনি JSON কী মানগুলিকে Golang কী মানগুলিতে অনুবাদ করতে মার্শালিং ব্যবহার করতে পারেন।
পার্থক্য হল যে মার্শালিং ডেটা অনুবাদ করতে ব্যবহার করা যেতে পারে। বিপরীতে, সিরিয়ালাইজেশন বাইট স্ট্রীমে ডেটা পাঠায় বা সঞ্চয় করে এবং এটিকে তার আসল আকারে পুনরায় একত্রিত করে। উভয়ই সিরিয়ালাইজেশন করে, তবে এই দুটি প্রক্রিয়ার উদ্দেশ্যের মধ্যে পার্থক্য রয়েছে।
আপনি এই স্ট্রাকটটি দেখতে পারেন যা আমি টুইটার ডেটার সাথে ইন্টারঅ্যাকশনের জন্য তৈরি করেছি যা কর্মে মার্শালিং করার উদাহরণ হিসাবে নীচে। গোলাং-এ, আপনি ট্যাগ নামক ইঙ্গিত দিতে পারেন, এই বস্তুটিকে সহজেই গোলং-এর অন্তর্নির্মিত মার্শালিং পরিষেবা ব্যবহার করে JSON ডেটাতে রূপান্তর করতে পারেন৷
এন্ডিয়াননেস কি?
আমি এন্ডিয়াননেসের বিষয়টিকে হালকাভাবে স্পর্শ করতে চাই। Endianness মেমরিতে বাইটের ক্রম বর্ণনা করতে ব্যবহৃত একটি শব্দ।
আপনি মেমরিকে একটি ব্লক হিসাবে ভাবতে পারেন যেখানে ডেটার কামড় সংরক্ষণ করা হয়। সিরিয়ালাইজেশন কাজ করার জন্য, বাইট স্ট্রীমকে এক সিস্টেম থেকে অন্য সিস্টেমে পরিবর্তিত প্রান্তিকতা নির্বিশেষে ডেটা প্রকারগুলি স্থানান্তর করতে হবে।
আপনি নীচের ছোট এবং বড়-এন্ডিয়ান পার্থক্য দেখতে পারেন। এটা অত্যাবশ্যক যে একটি সিস্টেম থেকে অন্য সিস্টেমে এন্ডিয়াননেস মেলে বা কোনভাবে রূপান্তরিত হয়, কারণ সমস্ত সিস্টেম তাদের বিটকে একইভাবে অর্ডার করে না।
সিরিয়ালাইজেশনের জন্য কেস ব্যবহার করুন
আমাদের ব্যবহারের ক্ষেত্রে এই বৈশিষ্ট্যগুলির সম্পূর্ণ সুবিধা নেয়। আমরা যে হার্ডওয়্যার স্ক্যান করছি তা থেকে কিছু তথ্য নেওয়ার পরিকল্পনা করি, সেই তথ্যটিকে একটি বাইট স্ট্রীমে প্যাকেজ করে, এবং নেটওয়ার্কের সাথে অন্য পরিষেবাতে পাঠাতে যা ডেটা পুনর্গঠন করবে।
ক্রমিকীকরণ প্রক্রিয়াকে বিপরীত করার এবং ডেটাকে তার আসল আকারে পুনর্গঠন করার প্রক্রিয়াটিকে বলা হয় ডিসারিয়ালাইজেশন .
এই জন্য অন্যান্য ব্যবহার ক্ষেত্রে আছে. উদাহরণস্বরূপ, REST API বা বার্তাপ্রেরণ প্রোটোকল যেমন AMQP ডেটা সংকুচিত করতে এবং পাঠাতে সিরিয়ালাইজেশন ব্যবহার করতে পারে।
AMQP হল একটি মেসেজিং প্রোটোকল যেখানে আপনি একজন AMQP ব্রোকারকে মেসেজ পাঠান, এবং রিসিভিং সার্ভিস এই ব্রোকারকে বার্তার জন্য "শ্রবণ" করছে। ব্যাকএন্ড ইঞ্জিনিয়াররা এটি ভালভাবে জানেন, কারণ এটি প্রায়শই বিতরণ করা সিস্টেমের মধ্যে ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ সহজে কিছু সিরিয়ালাইজেশন স্পিন আপ করার ক্ষমতা অন্তর্ভুক্ত করে। তাই এটি একটি ভাষা-অজ্ঞেয় বিষয়।
ক্রমিকীকরণের উদাহরণ
একটি দ্রুত উদাহরণ দেওয়া যাক। এই কোডটি AMQP এর মাধ্যমে বার্তা পাঠাতে লাইব্রেরি কম্বু ব্যবহার করে। আমরা এটি একটি সফ্টওয়্যার প্যাকেজ থেকে অন্য একটি নেটওয়ার্কে বার্তা পাঠাতে ব্যবহার করছি। এই কোডটি একটি AMQP ব্রোকারকে একটি বার্তা পাঠানোর পরিষেবার জন্য:
def send_message(self, payload, sender_serializer):
...
try:
producer.publish(
{'payload': message},
...
serializer = 'json',
...
)
return
publish
নোট করুন পদ্ধতি আমরা একটি যুক্তি হিসাবে সিরিয়ালাইজেশন পদ্ধতিতে পাস করছি যাতে লাইব্রেরি জানে কিভাবে আমরা যে ডেটা পাস করছি তা সিরিয়ালাইজ করতে হয়৷
ডেটা বার্তাটি বাইটের একটি প্রবাহে রূপান্তরিত হয়, যা আপনি যদি তা দেখেন তবে কেবল অক্ষর এবং সংখ্যার একটি দীর্ঘ স্ট্রিংয়ের মতো দেখায় এবং আমরা বার্তাটি পাঠাই।
সংশ্লিষ্ট পরিষেবাটি তার মূল অবস্থায় ডেটা পুনর্গঠনের জন্য একই সিরিয়ালাইজেশন পদ্ধতি ব্যবহার করবে। এটি একটি উল্লেখযোগ্য বৈশিষ্ট্য কারণ আমরা একটি স্যুট টুল তৈরি করছি যেগুলি কাজ করার জন্য একে অপরকে বার্তা পাঠাতে সক্ষম হতে হবে৷
ক্রমিক ডেটা বিন্যাস
যখনই হাতের কাজটি এটির জন্য আহ্বান করে আমি সিরিয়ালাইজেশনের জন্য JSON ব্যবহার করি। তবে, আপনি আরও কয়েকটি ব্যবহার করতে পারেন।
JSON এর অনেক ওভারহেড আছে, কিন্তু মানুষের পঠনযোগ্যতা এটিকে আমার জন্য আদর্শ করে তোলে। আপনি Protobufs, YAML, বা XML ব্যবহার করতে পারেন। এগুলি শুধুমাত্র কিছু ডেটা অবজেক্ট ফর্ম্যাট যা আপনি ব্যবহার করতে পারেন৷
৷উপসংহার
আমি আনন্দিত যে আমি আমার সিস্টেম থেকে এটি পেয়েছি। আমি এই সম্পর্কে চিন্তা করা বন্ধ করতে পেরেছি, এবং, আশা করি, কেউ এটি থেকে কিছু শিখেছে।
আপনি যখন আপনার যোগাযোগের পাইপলাইন একত্রিত করছেন তখন সিরিয়ালাইজেশন অপরিহার্য হয়ে ওঠে। সঠিক ব্যাকগ্রাউন্ড জ্ঞানের সাথে আপনি যে টুল ব্যবহার করছেন তাতে আত্মবিশ্বাসী বোধ করার জন্য এই বিষয় সম্পর্কে জানা ভাল।
-জর্জ