FlatBuffers একটি কার্যকর ডেটা সিরিয়ালাইজেশন লাইব্রেরি, যা বিশেষভাবে কম মেমরি ব্যবহারের জন্য এবং দ্রুত ডেটা এক্সেসের জন্য ডিজাইন করা হয়েছে। এটি মূলত Google দ্বারা তৈরি করা হয়েছে এবং গেম ডেভেলপমেন্ট, ডাটা স্টোরেজ এবং অন্যান্য পারফরম্যান্স-সংবেদনশীল অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।
FlatBuffers-এর বিশেষত্ব হলো এটি ডেটা ডিরেক্টলি "ফ্ল্যাট" বাইনারি ফর্ম্যাটে সংরক্ষণ করে, ফলে কোনো অতিরিক্ত ডেসিরিয়ালাইজেশন প্রয়োজন হয় না। FlatBuffers ফাইল বা মেমোরি থেকে ডেটা সরাসরি পড়তে পারে, এবং ডেটা অ্যাক্সেসের জন্য অতিরিক্ত ডেটা ডিকোডিং প্রয়োজন হয় না। এ কারণে এটি খুবই দ্রুত কাজ করে।
Step-by-Step: FlatBuffers ব্যবহার করে ডাটা ডেসিরিয়ালাইজেশন এবং এক্সেস করা
FlatBuffers দিয়ে ডাটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সাধারণত তিনটি ধাপ থাকে:
- FlatBuffers স্কিমা তৈরি করা: ফ্ল্যাটবাফার স্কিমা ভাষায় (যা .fbs এক্সটেনশন ফাইল হিসাবে সংরক্ষণ করা হয়) ডেটা স্ট্রাকচার সংজ্ঞায়িত করা।
- কোড জেনারেট করা: স্কিমা থেকে লক্ষ্য ভাষার জন্য জেনারেটেড কোড তৈরি করা।
- ডেসিরিয়ালাইজ এবং এক্সেস করা: ফ্ল্যাটবাফার ফাইল থেকে ডেটা ডিরেক্টলি অ্যাক্সেস করা।
উদাহরণ: FlatBuffers দিয়ে Person অবজেক্ট ডেসিরিয়ালাইজ এবং এক্সেস করা
আমরা একটি Person অবজেক্ট এর স্কিমা তৈরি করব, তারপর এটিকে ডেসিরিয়ালাইজ করে অ্যাক্সেস করব।
Step 1: স্কিমা তৈরি করা
প্রথমে একটি .fbs ফাইল তৈরি করতে হবে, যেখানে Person অবজেক্টের জন্য ফিল্ডগুলো সংজ্ঞায়িত করা হবে। উদাহরণস্বরূপ, person.fbs ফাইলের জন্য নিচের মতো স্কিমা ব্যবহার করতে পারেন:
namespace Example;
table Person {
id:int;
name:string;
age:short;
email:string;
}
root_type Person;
Step 2: স্কিমা থেকে কোড জেনারেট করা
স্কিমা ফাইল থেকে লক্ষ্য ভাষার জন্য FlatBuffers কম্পাইলার (flatc) দিয়ে জেনারেটেড কোড তৈরি করতে হবে। উদাহরণস্বরূপ, Python এর জন্য কমান্ড হবে:
flatc --python person.fbs
এর ফলে Person অবজেক্টের জন্য Python কোড জেনারেট হবে, যা ডিরেক্টলি ডেটা পড়তে এবং লিখতে সাহায্য করবে।
Step 3: ডেসিরিয়ালাইজ এবং ডেটা অ্যাক্সেস করা
FlatBuffers এর ডেটা ফাইল থেকে ডেসিরিয়ালাইজ করে ডেটা অ্যাক্সেস করা যায়। Python এ ডেটা অ্যাক্সেস করার উদাহরণ নিচে দেয়া হলো:
import example.Person as Person
import flatbuffers
# ডেটা পড়া (বাইনারি ডেটা আসুম করা হচ্ছে buffer এ রয়েছে)
buffer = get_binary_data() # এটি আপনার বাইনারি ডেটা
# Buffer থেকে Person অবজেক্ট ডিরেক্টলি পড়া
person = Person.Person.GetRootAsPerson(buffer, 0)
# ডেটা অ্যাক্সেস করা
print("ID:", person.Id())
print("Name:", person.Name().decode('utf-8'))
print("Age:", person.Age())
print("Email:", person.Email().decode('utf-8'))
গুরুত্বপূর্ণ বিষয়
- Zero-copy Access: FlatBuffers "zero-copy" অ্যাক্সেস প্রদান করে, অর্থাৎ মেমোরিতে ডেটা কপি না করেই ডেটা অ্যাক্সেস করা যায়।
- Language Support: Python ছাড়াও C++, Java, Go, C# ইত্যাদি ভাষায় FlatBuffers সমর্থিত।
FlatBuffers এর মাধ্যমে ডেসিরিয়ালাইজেশনের এই পদ্ধতিটি খুবই দ্রুত এবং কার্যকর, বিশেষ করে বড় বা nested ডেটা স্ট্রাকচারগুলির জন্য।
Read more