এই ডকুমেন্টে ডেটা পুনরুদ্ধারের মূল বিষয়গুলি এবং ফায়ারবেস ডেটা কীভাবে অর্ডার এবং ফিল্টার করতে হয় তা কভার করা হয়েছে।
শুরু করার আগে
নিশ্চিত করুন যে আপনি আপনার অ্যাপটি সেটআপ করেছেন এবং Get Started " নির্দেশিকায় বর্ণিত ডাটাবেসটি অ্যাক্সেস করতে পারছেন।
তথ্য উদ্ধার করা হচ্ছে
Firebase ডেটা GetValue() এ একবার কল করে অথবা FirebaseDatabase রেফারেন্সে ValueListener এর সাথে সংযুক্ত করে পুনরুদ্ধার করা হয়। ডেটার প্রাথমিক অবস্থার জন্য ভ্যালু লিসেনার একবার কল করা হয় এবং ডেটা পরিবর্তন হলে আবারও কল করা হয়।
একটি ডাটাবেস রেফারেন্স পান
ডাটাবেসে ডেটা লেখার জন্য, আপনার DatabaseReference এর একটি উদাহরণ প্রয়োজন:
// Get the root reference location of the database. firebase::database::DatabaseReference dbref = database->GetReference();
একবার তথ্য পড়ুন
আপনি GetValue() পদ্ধতি ব্যবহার করে একটি নির্দিষ্ট পাথের কন্টেন্টের স্ট্যাটিক স্ন্যাপশট একবার পড়তে পারেন। টাস্কের ফলাফলে সেই অবস্থানের সমস্ত ডেটা সহ একটি স্ন্যাপশট থাকবে, যার মধ্যে চাইল্ড ডেটাও থাকবে। যদি কোনও ডেটা না থাকে, তাহলে ফেরত আসা স্ন্যাপশটটি null হবে।
firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("Leaders").GetValue();
অনুরোধটি করার পর, কিন্তু মানটি পড়ার আগে আমাদের ফিউচার সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে। যেহেতু গেমগুলি সাধারণত একটি লুপে চলে এবং অন্যান্য অ্যাপ্লিকেশনের তুলনায় কম কলব্যাক চালিত হয়, তাই আপনি সাধারণত সমাপ্তির জন্য পোল করবেন।
// In the game loop that polls for the result... if (result.status() != firebase::kFutureStatusPending) { if (result.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetValue() returned an invalid result."); // Handle the error... } else if (result.error() != firebase::database::kErrorNone) { LogMessage("ERROR: GetValue() returned error %d: %s", result.error(), result.error_message()); // Handle the error... } else { firebase::database::DataSnapshot snapshot = result.result(); // Do something with the snapshot... } }
এটি কিছু মৌলিক ত্রুটি পরীক্ষা দেখায়, ত্রুটি পরীক্ষা সম্পর্কে আরও তথ্যের জন্য এবং ফলাফল কখন প্রস্তুত তা নির্ধারণের উপায়গুলির জন্য firebase::Future রেফারেন্স দেখুন।
ইভেন্টগুলি শুনুন
ডেটাতে পরিবর্তনের ক্ষেত্রে আপনি শ্রোতাদের সাবস্ক্রাইব করতে যোগ করতে পারেন:
ValueListener বেস ক্লাস
| কলব্যাক | সাধারণ ব্যবহার |
|---|---|
OnValueChanged | একটি পথের সম্পূর্ণ বিষয়বস্তুর পরিবর্তনগুলি পড়ুন এবং শুনুন। |
OnChildListener বেস ক্লাস
OnChildAdded | আইটেমের তালিকা পুনরুদ্ধার করুন অথবা আইটেমের তালিকায় সংযোজন শুনুন। তালিকার পরিবর্তনগুলি পর্যবেক্ষণ করতে OnChildChanged এবং OnChildRemoved সাথে ব্যবহারের প্রস্তাবিত। |
OnChildChanged | তালিকার আইটেমগুলিতে পরিবর্তনগুলি শুনুন। তালিকার পরিবর্তনগুলি পর্যবেক্ষণ করতে OnChildAdded এবং OnChildRemoved ব্যবহার করুন। |
OnChildRemoved | তালিকা থেকে আইটেমগুলি সরানো হচ্ছে কিনা তা শুনুন। তালিকার পরিবর্তনগুলি পর্যবেক্ষণ করতে OnChildAdded এবং OnChildChanged ব্যবহার করুন। |
OnChildMoved | একটি ক্রমানুসার তালিকার আইটেমের ক্রম পরিবর্তনের জন্য শুনুন। আইটেমের ক্রম পরিবর্তনের কারণে (আপনার বর্তমান ক্রম-দ্বারা পদ্ধতির উপর ভিত্তি করে) OnChildMoved কলব্যাকগুলি সর্বদা OnChildChanged কলব্যাকগুলি অনুসরণ করে। |
ভ্যালুলিস্টার ক্লাস
আপনি OnValueChanged কলব্যাক ব্যবহার করে কোনও নির্দিষ্ট পাথের কন্টেন্টের পরিবর্তনের জন্য সাবস্ক্রাইব করতে পারেন। শ্রোতা সংযুক্ত করার সময় এই কলব্যাকটি একবার ট্রিগার হয় এবং প্রতিবার যখন ডেটা, শিশু সহ, পরিবর্তিত হয়। কলব্যাকটি সেই অবস্থানের সমস্ত ডেটা ধারণকারী একটি স্ন্যাপশট পাঠানো হয়, যার মধ্যে শিশু ডেটাও অন্তর্ভুক্ত থাকে। যদি কোনও ডেটা না থাকে, তাহলে ফেরত আসা স্ন্যাপশটটি null হয়।
নিম্নলিখিত উদাহরণটি ডাটাবেস থেকে লিডারবোর্ডের স্কোর পুনরুদ্ধার করার একটি গেমের চিত্র প্রদর্শন করে:
class LeadersValueListener : public firebase::database::ValueListener { public: void OnValueChanged( const firebase::database::DataSnapshot& snapshot) override { // Do something with the data in snapshot... } void OnCancelled(const firebase::database::Error& error_code, const char* error_message) override { LogMessage("ERROR: LeadersValueListener canceled: %d: %s", error_code, error_message); } }; // Elsewhere in the code... LeadersValueListener* listener = new LeadersValueListener(); firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("Leaders").AddValueListener(listener);
Future<DataSnapshot> ফলাফলে ইভেন্টের সময় ডাটাবেসের নির্দিষ্ট স্থানে থাকা ডেটা থাকে। স্ন্যাপশটে value() কল করলে ডেটা প্রতিনিধিত্বকারী একটি Variant ফেরত আসে।
এই উদাহরণে, OnCancelled পদ্ধতিটিও ওভাররাইড করা হয়েছে যাতে পঠন বাতিল করা হয়েছে কিনা তা দেখা যায়। উদাহরণস্বরূপ, যদি ক্লায়েন্টের Firebase ডাটাবেস অবস্থান থেকে পঠনের অনুমতি না থাকে তবে একটি পঠন বাতিল করা যেতে পারে। database::Error ব্যর্থতা কেন ঘটেছে তা নির্দেশ করবে।
চাইল্ডলিসনার ক্লাস
PushChild() পদ্ধতির মাধ্যমে নতুন শিশু যোগ করা বা UpdateChildren() পদ্ধতির মাধ্যমে আপডেট করা হচ্ছে এমন কোনও অপারেশন থেকে নোডের শিশুদের সাথে ঘটে যাওয়া নির্দিষ্ট ক্রিয়াকলাপের প্রতিক্রিয়ায় চাইল্ড ইভেন্টগুলি ট্রিগার করা হয়। এই প্রতিটি একসাথে একটি ডাটাবেসের একটি নির্দিষ্ট নোডে পরিবর্তনগুলি শোনার জন্য কার্যকর হতে পারে। উদাহরণস্বরূপ, একটি গেম একটি গেম সেশনের মন্তব্যে কার্যকলাপ পর্যবেক্ষণ করার জন্য এই পদ্ধতিগুলি একসাথে ব্যবহার করতে পারে, যেমনটি নীচে দেখানো হয়েছে:
class SessionCommentsChildListener : public firebase::database::ChildListener { public: void OnChildAdded(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnChildChanged(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnChildRemoved( const firebase::database::DataSnapshot& snapshot) override { // Do something with the data in snapshot ... } void OnChildMoved(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnCancelled(const firebase::database::Error& error_code, const char* error_message) override { LogMessage("ERROR: SessionCommentsChildListener canceled: %d: %s", error_code, error_message); } }; // elsewhere .... SessionCommentsChildListener* listener = new SessionCommentsChildListener(); firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("GameSessionComments").AddChildListener(listener);
OnChildAdded কলব্যাক সাধারণত Firebase ডাটাবেসে আইটেমের তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়। প্রতিটি বিদ্যমান সন্তানের জন্য একবার OnChildAdded কলব্যাক কল করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করার সময় আবার কল করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট পাঠানো হয়।
যেকোনো চাইল্ড নোড পরিবর্তন করার সময় OnChildChanged কলব্যাক কল করা হয়। এর মধ্যে চাইল্ড নোডের ডিসেন্ডেন্টের যেকোনো পরিবর্তন অন্তর্ভুক্ত থাকে। এটি সাধারণত OnChildAdded এবং OnChildRemoved কলের সাথে আইটেমের তালিকার পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়। শ্রোতার কাছে পাঠানো স্ন্যাপশটে চাইল্ডের আপডেট করা ডেটা থাকে।
যখন কোনও তাৎক্ষণিক শিশুকে সরিয়ে দেওয়া হয় তখন OnChildRemoved কলব্যাক ট্রিগার হয়। এটি সাধারণত OnChildAdded এবং OnChildChanged কলব্যাকের সাথে ব্যবহার করা হয়। কলব্যাকে পাঠানো স্ন্যাপশটে সরানো শিশুটির ডেটা থাকে।
যখনই OnChildChanged কলটি এমন কোনও আপডেটের কারণে উত্থাপিত হয় যার ফলে শিশুটির ক্রম পরিবর্তন হয়, তখন OnChildMoved কলব্যাক ট্রিগার করা হয়। এটি OrderByChild বা OrderByValue দিয়ে অর্ডার করা ডেটার সাথে ব্যবহৃত হয়।
ডেটা বাছাই এবং ফিল্টার করা
আপনি Realtime Database Query ক্লাস ব্যবহার করে কী, মান বা সন্তানের মান অনুসারে সাজানো ডেটা পুনরুদ্ধার করতে পারেন। আপনি বাছাই করা ফলাফলকে নির্দিষ্ট সংখ্যক ফলাফল বা কী বা মানের পরিসরে ফিল্টার করতে পারেন।
ডেটা সাজান
সাজানো ডেটা পুনরুদ্ধার করতে, ফলাফল কীভাবে সাজানো হবে তা নির্ধারণ করার জন্য ক্রম-দ্বারা পদ্ধতিগুলির একটি নির্দিষ্ট করে শুরু করুন:
| পদ্ধতি | ব্যবহার |
|---|---|
OrderByChild() | একটি নির্দিষ্ট চাইল্ড কী-এর মান অনুসারে ফলাফল সাজান। | OrderByKey() | চাইল্ড কী দ্বারা ফলাফল সাজান। |
OrderByValue() | শিশু মান অনুসারে ফলাফল সাজান। |
আপনি একবারে শুধুমাত্র একটি অর্ডার-বাই মেথড ব্যবহার করতে পারবেন। একই কোয়েরিতে একাধিকবার অর্ডার-বাই মেথড কল করলে একটি ত্রুটি দেখা দেয়।
নিচের উদাহরণটি দেখায় যে কীভাবে আপনি স্কোর অনুসারে ক্রমানুসারে একটি স্কোর লিডারবোর্ডে সাবস্ক্রাইব করতে পারেন।
firebase::database::Query query = dbRef.GetReference("Leaders").OrderByChild("score"); // To get the resulting DataSnapshot either use query.GetValue() and poll the // future, or use query.AddValueListener() and register to handle the // OnValueChanged callback.
এটি একটি firebase::Query সংজ্ঞায়িত করে যা ValueListener এর সাথে মিলিত হলে ক্লায়েন্টকে ডাটাবেসের লিডারবোর্ডের সাথে সিঙ্ক্রোনাইজ করে, প্রতিটি এন্ট্রির স্কোরের ভিত্তিতে। আপনি Structure Your Database এ আপনার ডেটা দক্ষতার সাথে গঠন সম্পর্কে আরও পড়তে পারেন।
OrderByChild() পদ্ধতিতে কল করার মাধ্যমে ফলাফলগুলি কোন চাইল্ড কী অনুসারে সাজানো হবে তা নির্দিষ্ট করা হয়। এই ক্ষেত্রে, ফলাফলগুলি প্রতিটি চাইল্ডের "score" মানের মান অনুসারে সাজানো হয়। অন্যান্য ডেটা টাইপগুলি কীভাবে সাজানো হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা সাজানো হয় তা দেখুন।
ডেটা ফিল্টার করা হচ্ছে
ডেটা ফিল্টার করার জন্য, আপনি একটি কোয়েরি তৈরি করার সময় যেকোনো সীমা বা পরিসর পদ্ধতিকে একটি অর্ডার-বাই পদ্ধতির সাথে একত্রিত করতে পারেন।
| পদ্ধতি | ব্যবহার |
|---|---|
LimitToFirst() | ফলাফলের ক্রমানুসারে তালিকার শুরু থেকে ফিরে আসার জন্য সর্বোচ্চ সংখ্যক আইটেম সেট করে। |
LimitToLast() | ক্রমানুসারে ফলাফলের তালিকার শেষ থেকে ফিরে আসার জন্য সর্বোচ্চ সংখ্যক আইটেম সেট করে। |
StartAt() | নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন। |
EndAt() | নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে কম বা সমান আইটেম ফেরত দিন। |
EqualTo() | নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেম ফেরত দিন। |
অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণস্বরূপ, আপনি StartAt() এবং EndAt() পদ্ধতিগুলিকে একত্রিত করে ফলাফলগুলিকে একটি নির্দিষ্ট পরিসরে সীমাবদ্ধ করতে পারেন।
এমনকি যখন কোয়েরির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা হিসেবে থাকে; এতে কেবল একটি আইটেম থাকে।
ফলাফলের সংখ্যা সীমিত করুন
আপনি একটি নির্দিষ্ট কলব্যাকের জন্য সর্বাধিক কতগুলি শিশু সিঙ্ক করা হবে তা নির্ধারণ করতে LimitToFirst() এবং LimitToLast() পদ্ধতি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি LimitToFirst() ব্যবহার করে ১০০ এর সীমা নির্ধারণ করেন, তাহলে আপনি প্রাথমিকভাবে কেবলমাত্র ১০০ টি OnChildAdded কলব্যাক পাবেন। যদি আপনার Firebase ডাটাবেসে ১০০ টিরও কম আইটেম সংরক্ষিত থাকে, তাহলে প্রতিটি আইটেমের জন্য একটি OnChildAdded কলব্যাক চালু হবে।
আইটেম পরিবর্তনের সাথে সাথে, আপনি কোয়েরিতে প্রবেশ করা আইটেমগুলির জন্য OnChildAdded কলব্যাক এবং বাদ পড়া আইটেমগুলির জন্য OnChildRemoved কলব্যাক পাবেন যাতে মোট সংখ্যা 100 এ থাকে।
উদাহরণস্বরূপ, নীচের কোডটি লিডারবোর্ড থেকে সর্বোচ্চ স্কোর প্রদান করে:
firebase::database::Query query = dbRef.GetReference("Leaders").OrderByChild("score").LimitToLast(1); // To get the resulting DataSnapshot either use query.GetValue() and poll the // future, or use query.AddValueListener() and register to handle the // OnValueChanged callback.
কী বা মান অনুসারে ফিল্টার করুন
আপনি StartAt() , EndAt() , এবং EqualTo() ব্যবহার করে প্রশ্নের জন্য নির্বিচারে শুরু, শেষ এবং সমতুল্য বিন্দু নির্বাচন করতে পারেন। এটি ডেটা পৃষ্ঠাঙ্কন করার জন্য বা নির্দিষ্ট মান সম্পন্ন শিশুদের আইটেম খুঁজে বের করার জন্য কার্যকর হতে পারে।
কোয়েরি ডেটা কীভাবে সাজানো হয়
এই বিভাগটি ব্যাখ্যা করে যে Query ক্লাসের প্রতিটি ক্রম-দ্বারা পদ্ধতি অনুসারে ডেটা কীভাবে সাজানো হয়।
OrderByChild
OrderByChild() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণকারী ডেটা নিম্নরূপ সাজানো হয়:
- নির্দিষ্ট শিশু কী-এর জন্য
nullমান সহ শিশুরা প্রথমে আসে। - নির্দিষ্ট শিশু কী-এর জন্য
falseমান সহ শিশুদের পরে আসে। যদি একাধিক শিশুদেরfalseমান থাকে, তবে তাদের কী অনুসারে অভিধানিকভাবে সাজানো হয়। - নির্দিষ্ট child key-এর জন্য
trueমান সম্পন্ন শিশুদের পরে আসে। যদি একাধিক শিশুদেরtrueমান থাকে, তাহলে তাদের অভিধানিকভাবে key অনুসারে সাজানো হয়। - সংখ্যাসূচক মান সম্পন্ন শিশুরা পরবর্তীতে আসে, ঊর্ধ্বক্রমানুসারে সাজানো। যদি একাধিক শিশু নির্দিষ্ট শিশু নোডের জন্য একই সংখ্যাসূচক মান ধারণ করে, তাহলে তাদের কী অনুসারে সাজানো হয়।
- স্ট্রিংগুলি সংখ্যার পরে আসে এবং লেক্সিকোগ্রাফিকভাবে ঊর্ধ্বক্রমানুসারে সাজানো হয়। যদি একাধিক চাইল্ড নোডের জন্য একই মান থাকে, তাহলে সেগুলিকে কী দ্বারা লেক্সিকোগ্রাফিকভাবে সাজানো হয়।
- বস্তুগুলি শেষে আসে এবং শব্দকোষ অনুসারে কী অনুসারে ঊর্ধ্বক্রমানুসারে সাজানো হয়।
OrderByKey
আপনার ডেটা সাজানোর জন্য OrderByKey() ব্যবহার করার সময়, কী অনুসারে ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত পাঠানো হয়।
- ৩২-বিট পূর্ণসংখ্যা হিসেবে পার্স করা যায় এমন কী সহ শিশুদের প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
- যেসব শিশুদের কী হিসেবে স্ট্রিং মান থাকে, তারা পরবর্তীতে আসে, লেক্সিকোগ্রাফিকভাবে ঊর্ধ্বক্রমানুসারে সাজানো হয়।
OrderByValue
OrderByValue() ব্যবহার করার সময়, শিশুদের তাদের মান অনুসারে সাজানো হয়। অর্ডারিং মানদণ্ড OrderByChild() এর মতোই, তবে নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে নোডের মান ব্যবহার করা হয়।