FlatBuffers Table তৈরি এবং ডাটা সংরক্ষণ
FlatBuffers এর মাধ্যমে ডেটা সিরিয়ালাইজেশন করার সময় Table তৈরি করা এবং ডেটা সংরক্ষণ করা একটি মৌলিক প্রক্রিয়া। এই প্রক্রিয়ায়, প্রথমে FlatBuffers Schema ডিফাইন করা হয়, তারপর ডেটা সিরিয়ালাইজ করা হয় এবং অবশেষে তা সংরক্ষণ করা হয়। নিচে বিস্তারিতভাবে FlatBuffers Table তৈরি এবং ডাটা সংরক্ষণের প্রক্রিয়া আলোচনা করা হলো।
১. FlatBuffers Schema তৈরি
প্রথমে, একটি FlatBuffers স্কিমা ফাইল তৈরি করতে হবে যা ডেটার কাঠামো নির্ধারণ করবে।
উদাহরণ Schema (monster.fbs)
namespace MyGame.Sample;
// Monster টেবিল
table Monster {
id: int; // মনস্টারের আইডি
name: string; // মনস্টারের নাম
health: float; // স্বাস্থ্য মান
inventory: [string]; // ইনভেন্টরির আইটেমের তালিকা
}
// মূল ধরনের সংজ্ঞা
root_type Monster;
২. স্কিমা ফাইল কম্পাইল করা
FlatBuffers কম্পাইলার (flatc) ব্যবহার করে স্কিমা ফাইলটি কম্পাইল করুন, যাতে কোড উৎপন্ন হয়।
flatc --cpp monster.fbs
এই কমান্ডটি C++ কোড উৎপন্ন করবে যা FlatBuffers ডেটা স্ট্রাকচার তৈরি এবং ব্যবহারের জন্য প্রস্তুত থাকে।
৩. C++ কোডে Table তৈরি করা এবং ডেটা সংরক্ষণ
FlatBuffers ব্যবহার করে ডেটা সংরক্ষণ করার জন্য C++ প্রোগ্রামে নিচের পদক্ষেপগুলি অনুসরণ করতে হবে।
C++ উদাহরণ
#include "monster_generated.h" // উৎপন্ন FlatBuffers ফাইল
#include <iostream>
using namespace MyGame::Sample;
int main() {
// FlatBuffer Builder তৈরি করা
flatbuffers::FlatBufferBuilder builder;
// Monster টেবিল তৈরি করা
auto name = builder.CreateString("Orc"); // মনস্টারের নাম
auto inventory = builder.CreateVector({"Sword", "Axe"}); // ইনভেন্টরি আইটেম তৈরি করা
MonsterBuilder monster_builder(builder);
monster_builder.add_id(1); // ID সেট করা
monster_builder.add_name(name); // নাম সেট করা
monster_builder.add_health(100.0f); // স্বাস্থ্য সেট করা
monster_builder.add_inventory(inventory); // ইনভেন্টরি সেট করা
auto orc = monster_builder.Finish(); // টেবিল শেষ করা
builder.Finish(orc); // বিল্ডার শেষ করা
// বাইনারি ডেটা পঠন
const Monster* monster = GetMonster(builder.GetBufferPointer());
std::cout << "Monster ID: " << monster->id() << ", Name: " << monster->name()->c_str() << ", Health: " << monster->health() << std::endl;
// ইনভেন্টরি আইটেমগুলো প্রিন্ট করা
for (const auto& item : *monster->inventory()) {
std::cout << "Inventory Item: " << item->c_str() << std::endl;
}
return 0;
}
৪. কোডের ব্যাখ্যা
- FlatBufferBuilder: এটি একটি বিল্ডার অবজেক্ট যা FlatBuffers ডেটা তৈরি করার জন্য ব্যবহৃত হয়।
- CreateString: এটি একটি স্ট্রিং তৈরি করে যা FlatBuffers ডেটাতে সংরক্ষণ করা যাবে।
- CreateVector: এটি একটি ভেক্টর তৈরি করে যা FlatBuffers ডেটাতে একাধিক মান সংরক্ষণ করতে সাহায্য করে।
- MonsterBuilder: এটি Monster টেবিলের জন্য একটি বিল্ডার যা বিভিন্ন ফিল্ড সেট করতে সক্ষম।
- Finish: টেবিল তৈরি সম্পন্ন করার জন্য ব্যবহৃত হয় এবং এর ফলাফল প্রদান করে।
- Finish: FlatBufferBuilder শেষ করার জন্য ব্যবহৃত হয় এবং সমস্ত ডেটা সিরিয়ালাইজ করে।
৫. ডেটা সংরক্ষণ
FlatBuffers কম্পাইলার ব্যবহার করে তৈরি বাইনারি ডেটা কোনো ফাইল হিসেবে সংরক্ষণ করতে পারেন:
std::ofstream ofs("monster_data.bin", std::ios::binary);
ofs.write(reinterpret_cast<const char*>(builder.GetBufferPointer()), builder.GetSize());
ofs.close();
সারসংক্ষেপ
- FlatBuffers Schema: ডেটার কাঠামো নির্ধারণ করে।
- Table তৈরি: C++ কোড ব্যবহার করে FlatBuffers Table তৈরি করা হয়।
- ডেটা সংরক্ষণ: বাইনারি ডেটা FlatBuffers ব্যবহার করে সংরক্ষণ করা হয়।
FlatBuffers টেবিল তৈরি এবং ডেটা সংরক্ষণ একটি দ্রুত এবং কার্যকরী প্রক্রিয়া, যা গেম ডেভেলপমেন্ট এবং উচ্চ কার্যক্ষমতা সম্পন্ন অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে উপকারী।
Read more