FlatBuffers দিয়ে একটি বেসিক প্রজেক্ট তৈরি করতে চাইলে প্রথমে একটি স্কিমা তৈরি করতে হবে, তারপর সেই স্কিমা অনুযায়ী ডাটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে হবে। এই প্রজেক্টে আমরা একটি সাধারণ ইউজার প্রোফাইল ডাটা সংরক্ষণ করবো, যেখানে ইউজারের নাম, বয়স, এবং ইমেইল ঠিকানা থাকবে। FlatBuffers ব্যবহার করে এ ডাটাকে বাইনারি ফর্মে সিরিয়ালাইজ করে মেমোরিতে সংরক্ষণ করবো এবং প্রয়োজনে তা ডেসিরিয়ালাইজ করবো।
Step 1: FlatBuffers Schema তৈরি করা
প্রথমে একটি .fbs ফাইল তৈরি করুন, যেটিতে ইউজারের ডাটার জন্য প্রয়োজনীয় তথ্য নির্ধারণ করা হবে।
Schema file: user_profile.fbs
namespace Project;
table UserProfile {
name: string;
age: int;
email: string;
}
root_type UserProfile;
এই স্কিমায় একটি UserProfile টেবিল আছে যা তিনটি ফিল্ড ধারণ করে:
name: ইউজারের নামage: ইউজারের বয়সemail: ইউজারের ইমেইল ঠিকানা
Step 2: FlatBuffers থেকে কোড জেনারেট করা
FlatBuffers কম্পাইলার (flatc) ব্যবহার করে স্কিমা থেকে কোড জেনারেট করতে হবে। আমরা Python ব্যবহার করে দেখাবো, তবে FlatBuffers এর সমর্থিত অন্যান্য ভাষাতেও কোড জেনারেট করা সম্ভব।
flatc --python user_profile.fbs
এই কমান্ডটি user_profile.fbs স্কিমা থেকে Python কোড জেনারেট করবে, যা আমাদের সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সাহায্য করবে।
Step 3: ডাটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা
এখন Python ব্যবহার করে ইউজার ডাটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা দেখানো হলো।
সিরিয়ালাইজ করা (Serialization)
UserProfile অবজেক্টে ডাটা ইনপুট দিয়ে বাইনারি ফর্মে সিরিয়ালাইজ করবো।
import Project.UserProfile as UserProfile
from flatbuffers import Builder
def serialize_user_data(name, age, email):
builder = Builder(1024)
# স্ট্রিং ডাটা তৈরি করা
name_offset = builder.CreateString(name)
email_offset = builder.CreateString(email)
# UserProfile টেবিল সিরিয়ালাইজ করা
UserProfile.Start(builder)
UserProfile.AddName(builder, name_offset)
UserProfile.AddAge(builder, age)
UserProfile.AddEmail(builder, email_offset)
user = UserProfile.End(builder)
builder.Finish(user)
# সিরিয়ালাইজড ডাটা
return builder.Output()
# উদাহরণ ইনপুট
serialized_data = serialize_user_data("Alice", 28, "alice@example.com")
print("Serialized Data:", serialized_data)
এখানে serialize_user_data ফাংশনটি একটি ইউজারের নাম, বয়স এবং ইমেইল ইনপুট নিয়ে তা সিরিয়ালাইজ করে বাইনারি ফর্মে রিটার্ন করছে।
ডেসিরিয়ালাইজ করা (Deserialization)
FlatBuffers দিয়ে ডাটা ডেসিরিয়ালাইজ করে ইউজারের তথ্য এক্সেস করবো।
import Project.UserProfile as UserProfile
def deserialize_user_data(data):
# ডাটা ডেসিরিয়ালাইজ করা
user = UserProfile.UserProfile.GetRootAsUserProfile(data, 0)
# ডাটা প্রিন্ট করা
print("Name:", user.Name().decode("utf-8"))
print("Age:", user.Age())
print("Email:", user.Email().decode("utf-8"))
# ডেসিরিয়ালাইজ করে আউটপুট দেখানো
deserialize_user_data(serialized_data)
Step 4: প্রজেক্ট ফাইল স্ট্রাকচার
এই প্রজেক্টের ফাইল স্ট্রাকচার নিচের মতো হতে পারে:
project_directory/
├── user_profile.fbs
├── generate_code.sh # FlatBuffers কোড জেনারেট করার জন্য শেল স্ক্রিপ্ট (ঐচ্ছিক)
├── serialize.py # সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের জন্য Python কোড
├── Project/ # FlatBuffers জেনারেটেড Python কোড (user_profile_generated.py)
└── requirements.txt # প্রয়োজনীয় প্যাকেজের তালিকা (যদি প্রয়োজন)
Step 5: প্রজেক্ট রান করা
- স্কিমা ফাইল থেকে কোড জেনারেট করতে
flatc --python user_profile.fbsকমান্ডটি চালান। serialize.pyফাইলে সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন ফাংশনগুলো রান করুন।
উপসংহার
এই প্রজেক্টে FlatBuffers ব্যবহার করে ইউজারের ডাটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হলো। এই ধরনের প্রজেক্টে FlatBuffers ব্যবহার করলে ডাটা এক্সেস দ্রুত হয় এবং কম মেমোরি ব্যবহার হয়, যা বিশেষ করে বড় আকারের ডাটা প্রসেসিং এবং কম্প্যাক্ট ডাটা স্টোরেজের জন্য উপযোগী।
Read more