C++ এর জন্য ফায়ারবেস রিয়েলটাইম ডেটাবেস দিয়ে ডেটা পুনরুদ্ধার করা হচ্ছে

এই দস্তাবেজটি ডেটা পুনরুদ্ধারের মূল বিষয়গুলি কভার করে এবং কীভাবে Firebase ডেটা অর্ডার এবং ফিল্টার করতে হয়।

আপনি শুরু করার আগে

নিশ্চিত করুন যে আপনি আপনার অ্যাপ সেটআপ করেছেন এবং 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&ltfirebase::database::DataSnapshot&gt 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...
    }
  }

এটি কিছু মৌলিক ত্রুটি পরীক্ষা দেখায়, ত্রুটি পরীক্ষা করার বিষয়ে আরও তথ্যের জন্য ফায়ারবেস::ভবিষ্যত রেফারেন্স দেখুন এবং ফলাফল কখন প্রস্তুত তা নির্ধারণ করার উপায়।

ঘটনা শুনুন

আপনি ডেটার পরিবর্তনগুলিতে সদস্যতা নিতে শ্রোতাদের যোগ করতে পারেন:

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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("Leaders").AddValueListener(listener);

Future&ltDataSnapshot&gt ফলাফলে ইভেন্টের সময় ডাটাবেসের নির্দিষ্ট স্থানে ডেটা থাকে। একটি স্ন্যাপশটে কলিং value() ডেটা প্রতিনিধিত্বকারী একটি Variant প্রদান করে।

এই উদাহরণে, পড়া বাতিল করা হয়েছে কিনা তা দেখতে OnCancelled পদ্ধতি ওভাররাইড করা হয়েছে। উদাহরণস্বরূপ, যদি ক্লায়েন্টের ফায়ারবেস ডাটাবেস অবস্থান থেকে পড়ার অনুমতি না থাকে তবে একটি রিড বাতিল করা যেতে পারে। 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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("GameSessionComments").AddChildListener(listener);

OnChildAdded কলব্যাক সাধারণত ফায়ারবেস ডাটাবেসের আইটেমগুলির একটি তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়। OnChildAdded কলব্যাক প্রতিটি বিদ্যমান শিশুর জন্য একবার কল করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়।

যেকোনো সময় চাইল্ড নোড পরিবর্তন করা হলে OnChildChanged কলব্যাক বলা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। এটি সাধারণত OnChildAdded এবং OnChildRemoved কলগুলির সাথে আইটেমগুলির একটি তালিকায় পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়। শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে।

OnChildRemoved কলব্যাকটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরিয়ে দেওয়া হয়। এটি সাধারণত OnChildAdded এবং OnChildChanged কলব্যাকের সাথে ব্যবহার করা হয়। কলব্যাকে পাঠানো স্ন্যাপশটে সরানো সন্তানের ডেটা রয়েছে।

OnChildMoved কলব্যাকটি ট্রিগার করা হয় যখনই OnChildChanged কল একটি আপডেট দ্বারা উত্থাপিত হয় যা সন্তানের পুনর্বিন্যাস ঘটায়। এটি 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 সংজ্ঞায়িত করে যেটি যখন একটি ভ্যালুলিস্টেনারের সাথে মিলিত হয় তখন প্রতিটি এন্ট্রির স্কোর অনুসারে ক্লায়েন্টকে ডাটাবেসের লিডারবোর্ডের সাথে সিঙ্ক্রোনাইজ করে। আপনি আপনার ডেটাবেস গঠনে দক্ষতার সাথে আপনার ডেটা গঠন সম্পর্কে আরও পড়তে পারেন।

OrderByChild() পদ্ধতিতে কল করা ফলাফলগুলি অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই ক্ষেত্রে, প্রতিটি সন্তানের "score" মানের মান অনুসারে ফলাফলগুলি সাজানো হয়। অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷

ফিল্টারিং ডেটা

ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বাই পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
LimitToFirst() ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে।
LimitToLast() ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে।
StartAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন।
EndAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন।
EqualTo() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণ স্বরূপ, ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে আপনি StartAt() এবং EndAt() পদ্ধতিগুলিকে একত্রিত করতে পারেন।

এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে.

ফলাফলের সংখ্যা সীমিত করুন

একটি প্রদত্ত কলব্যাকের জন্য সিঙ্ক করার জন্য সর্বাধিক সংখ্যক শিশু সেট করতে আপনি LimitToFirst() এবং LimitToLast() পদ্ধতিগুলি ব্যবহার করতে পারেন৷ উদাহরণ স্বরূপ, আপনি যদি LimitToFirst() ব্যবহার করেন 100 এর সীমা সেট করতে, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি পর্যন্ত OnChildAdded কলব্যাক পাবেন। আপনার ফায়ারবেস ডাটাবেসে 100টিরও কম আইটেম সংরক্ষিত থাকলে, প্রতিটি আইটেমের জন্য একটি 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() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করে এমন ডেটা নিম্নরূপ সাজানো হয়:

  1. নির্দিষ্ট চাইল্ড কী-এর জন্য একটি null মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট চাইল্ড কী-এর জন্য false এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুর false মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  3. নির্দিষ্ট চাইল্ড কী-এর জন্য true মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদের true মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  4. একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং আভিধানিকভাবে ঊর্ধ্বক্রম অনুসারে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে অর্ডার করা হয়।
  6. অবজেক্টগুলি শেষের দিকে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।

OrderByKey

আপনার ডেটা সাজানোর ��ন্য OrderByKey() ব্যবহার করার সময়, কী দ্বারা ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত দেওয়া হয়।

  1. 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
  2. একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।

OrderByValue

OrderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদে�� মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড OrderByChild() এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।

পরবর্তী পদক্ষেপ

,

এই দস্তাবেজটি ডেটা পুনরুদ্ধারের মূল বিষয়গুলি কভার করে এবং কীভাবে Firebase ডেটা অর্ডার এবং ফিল্টার করতে হয়।

আপনি শুরু করার আগে

নিশ্চিত করুন যে আপনি আপনার অ্যাপ সেটআপ করেছেন এবং 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&ltfirebase::database::DataSnapshot&gt 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...
    }
  }

এটি কিছু মৌলিক ত্রুটি পরীক্ষা দেখায়, ত্রুটি পরীক্ষা করার বিষয়ে আরও তথ্যের জন্য ফায়ারবেস::ভবিষ্যত রেফারেন্স দেখুন এবং ফলাফল কখন প্রস্তুত তা নির্ধারণ করার উপায়।

ঘটনা শুনুন

আপনি ডেটার পরিবর্তনগুলিতে সদস্যতা নিতে শ্রোতাদের যোগ করতে পারেন:

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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("Leaders").AddValueListener(listener);

Future&ltDataSnapshot&gt ফলাফলে ইভেন্টের সময় ডাটাবেসের নির্দিষ্ট স্থানে ডেটা থাকে। একটি স্ন্যাপশটে কলিং value() ডেটা প্রতিনিধিত্বকারী একটি Variant প্রদান করে।

এই উদাহরণে, পড়া বাতিল করা হয়েছে কিনা তা দেখতে OnCancelled পদ্ধতি ওভাররাইড করা হয়েছে। উদাহরণস্বরূপ, যদি ক্লায়েন্টের ফায়ারবেস ডাটাবেস অবস্থান থেকে পড়ার অনুমতি না থাকে তবে একটি রিড বাতিল করা যেতে পারে। 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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("GameSessionComments").AddChildListener(listener);

OnChildAdded কলব্যাক সাধারণত ফায়ারবেস ডাটাবেসের আইটেমগুলির একটি তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়। OnChildAdded কলব্যাক প্রতিটি বিদ্যমান শিশুর জন্য একবার কল করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়।

যেকোনো সময় চাইল্ড নোড পরিবর্তন করা হলে OnChildChanged কলব্যাক বলা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। এটি সাধারণত OnChildAdded এবং OnChildRemoved কলগুলির সাথে আইটেমগুলির একটি তালিকায় পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়। শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে।

OnChildRemoved কলব্যাকটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরিয়ে দেওয়া হয়। এটি সাধারণত OnChildAdded এবং OnChildChanged কলব্যাকের সাথে ব্যবহার করা হয়। কলব্যাকে পাঠানো স্ন্যাপশটে সরানো সন্তানের ডেটা রয়েছে।

OnChildMoved কলব্যাকটি ট্রিগার করা হয় যখনই OnChildChanged কল একটি আপডেট দ্বারা উত্থাপিত হয় যা সন্তানের পুনর্বিন্যাস ঘটায়। এটি 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 সংজ্ঞায়িত করে যেটি যখন একটি ভ্যালুলিস্টেনারের সাথে মিলিত হয় তখন প্রতিটি এন্ট্রির স্কোর অনুসারে ক্লায়েন্টকে ডাটাবেসের লিডারবোর্ডের সাথে সিঙ্ক্রোনাইজ করে। আপনি আপনার ডেটাবেস গঠনে দক্ষতার সাথে আপনার ডেটা গঠন সম্পর্কে আরও পড়তে পারেন।

OrderByChild() পদ্ধতিতে কল করা ফলাফলগুলি অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই ক্ষেত্রে, প্রতিটি সন্তানের "score" মানের মান অনুসারে ফলাফলগুলি সাজানো হয়। অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷

ফিল্টারিং ডেটা

ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বাই পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
LimitToFirst() ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে।
LimitToLast() ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে।
StartAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির ��পর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন।
EndAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন।
EqualTo() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণ স্বরূপ, ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে আপনি StartAt() এবং EndAt() পদ্ধতিগুলিকে একত্রিত করতে পারেন।

এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে.

ফলাফলের সংখ্যা সীমিত করুন

একটি প্রদত্ত কলব্যাকের জন্য সিঙ্ক করার জন্য সর্বাধিক সংখ্যক শিশু সেট করতে আপনি LimitToFirst() এবং LimitToLast() পদ্ধতিগুলি ব্যবহার করতে পারেন৷ উদাহরণ স্বরূপ, আপনি যদি LimitToFirst() ব্যবহার করেন 100 এর সীমা সেট করতে, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি পর্যন্ত OnChildAdded কলব্যাক পাবেন। আপনার ফায়ারবেস ডাটাবেসে 100টিরও কম আইটেম সংরক্ষিত থাকলে, প্রতিটি আইটেমের জন্য একটি 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() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করে এমন ডেটা নিম্নরূপ সাজানো হয়:

  1. নির্দিষ্ট চাইল্ড কী-এর জন্য একটি null মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট চাইল্ড কী-এর জন্য false এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুর false মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  3. নির্দিষ্ট চাইল্ড কী-এর জন্য true মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদের true মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  4. একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং আভিধানিকভাবে ঊর্ধ্বক্রম অনুসারে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে তাদের কী দ্বারা অভিধানিকভাবে আদেশ করা হয়।
  6. অবজেক্টগুলি শেষের দিকে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।

OrderByKey

আপনার ডেটা সাজানোর জন্য OrderByKey() ব্যবহার করার সময়, কী দ্বারা ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত দেওয়া হয়।

  1. 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
  2. একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।

OrderByValue

OrderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদের মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড OrderByChild() এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।

পরবর্তী পদক্ষেপ

,

এই দস্তাবেজটি ডেটা পুনরুদ্ধারের মূল বিষয়গুলি কভার করে এবং কীভাবে Firebase ডেটা অর্ডার এবং ফিল্টার করতে হয়।

আপনি শুরু করার আগে

নিশ্চিত করুন যে আপনি আপনার অ্যাপ সেটআপ করেছেন এবং 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&ltfirebase::database::DataSnapshot&gt 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...
    }
  }

এটি কিছু মৌলিক ত্রুটি পরীক্ষা দেখায়, ত্রুটি পরীক্ষা করার বিষয়ে আরও তথ্যের জন্য ফায়ারবেস::ভবিষ্যত রেফারেন্স দেখুন এবং ফলাফল কখন প্রস্তুত তা নির্ধারণ করার উপায়।

ঘটনা শুনুন

আপনি ডেটার পরিবর্তনগুলিতে সদস্যতা নিতে শ্রোতাদের যোগ করতে পারেন:

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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("Leaders").AddValueListener(listener);

Future&ltDataSnapshot&gt ফলাফলে ইভেন্টের সময় ডাটাবেসের নির্দিষ্ট স্থানে ডেটা থাকে। একটি স্ন্যাপশটে কলিং value() ডেটা প্রতিনিধিত্বকারী একটি Variant প্রদান করে।

এই উদাহরণে, পড়া বাতিল করা হয়েছে কিনা তা দেখতে OnCancelled পদ্ধতি ওভাররাইড করা হয়েছে। উদাহরণস্বরূপ, যদি ক্লায়েন্টের ফায়ারবেস ডাটাবেস অবস্থান থেকে পড়ার অনুমতি না থাকে তবে একটি রিড বাতিল করা যেতে পার���। 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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("GameSessionComments").AddChildListener(listener);

OnChildAdded কলব্যাক সাধারণত ফায়ারবেস ডাটাবেসের আইটেমগুলির একটি তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়। OnChildAdded কলব্যাক প্রতিটি বিদ্যমান শিশুর জন্য একবার কল করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়।

যেকোনো সময় চাইল্ড নোড পরিবর্তন করা হলে OnChildChanged কলব্যাক বলা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। এটি সাধারণত OnChildAdded এবং OnChildRemoved কলগুলির সাথে আইটেমগুলির একটি তালিকায় পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়। শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে।

OnChildRemoved কলব্যাকটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরিয়ে দেওয়া হয়। এটি সাধারণত OnChildAdded এবং OnChildChanged কলব্যাকের সাথে ব্যবহার করা হয়। কলব্যাকে পাঠানো স্ন্যাপশটে সরানো সন্তানের ডেটা রয়েছে।

OnChildMoved কলব্যাকটি ট্রিগার করা হয় যখনই OnChildChanged কল একটি আপডেট দ্বারা উত্থাপিত হয় যা সন্তানের পুনর্বিন্যাস ঘটায়। এটি 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 সংজ্ঞায়িত করে যেটি যখন একটি ভ্যালুলিস্টেনারের সাথে মিলিত হয় তখন প্রতিটি এন্ট্রির স্কোর অনুসারে ক্লায়েন্টকে ডাটাবেসের লিডারবোর্ডের সাথে সিঙ্ক্রোনাইজ করে। আপনি আপনার ডেটাবেস গঠনে দক্ষতার সাথে আপনার ডেটা গঠন সম্পর্কে আরও পড়তে পারেন।

OrderByChild() পদ্ধতিতে কল করা ফলাফলগুলি অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই ক্ষেত্রে, প্রতিটি সন্তানের "score" মানের মান অনুসারে ফলাফলগুলি সাজানো হয়। অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷

ফিল্টারিং ডেটা

ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বা�� পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
LimitToFirst() ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে।
LimitToLast() ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে।
StartAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন।
EndAt() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন।
EqualTo() ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণ স্বরূপ, ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে আপনি StartAt() এবং EndAt() পদ্ধতিগুলিকে একত্রিত করতে পারেন।

এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে.

ফলাফলের সংখ্যা সীমিত করুন

একটি প্রদত্ত কলব্যাকের জন্য সিঙ্ক করার জন্য সর্বাধিক সংখ্যক শিশু সেট করতে আপনি LimitToFirst() এবং LimitToLast() পদ্ধতিগুলি ব্যবহার করতে পারেন৷ উদাহরণ স্বরূপ, আপনি যদি LimitToFirst() ব্যবহার করেন 100 এর সীমা সেট করতে, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি পর্যন্ত OnChildAdded কলব্যাক পাবেন। আপনার ফায়ারবেস ডাটাবেসে 100টিরও কম আইটেম সংরক্ষিত থাকলে, প্রতিটি আইটেমের জন্য একটি 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() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করে এমন ডেটা নিম্নরূপ সাজানো হয়:

  1. নির্দিষ্ট চাইল্ড কী-এর জন্য একটি null মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট চাইল্ড কী-এর জন্য false এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুর false মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  3. নির্দিষ্ট চাইল্ড কী-এর জন্য true মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদের true মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  4. একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং আভিধানিকভাবে ঊর্ধ্বক্রম অনুসারে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে অর্ডার করা হয়।
  6. অবজেক্টগুলি শেষের দিকে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।

OrderByKey

আপনার ডেটা সাজানোর জন্য OrderByKey() ব্যবহার করার সময়, কী দ্বারা ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত দেওয়া হয়।

  1. 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
  2. একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।

OrderByValue

OrderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদের মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড OrderByChild() এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।

পরবর্তী পদক্ষেপ

,

এই দস্��াবেজটি ডেটা পুনরুদ্ধারের মূল বিষয়গুলি কভার করে এবং কীভাবে Firebase ডেটা অর্ডার এবং ফিল্টার করতে হয়।

আপনি শুরু করার আগে

নিশ্চিত করুন যে আপনি আপনার অ্যাপ সেটআপ করেছেন এবং 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&ltfirebase::database::DataSnapshot&gt 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...
    }
  }

এটি কিছু মৌলিক ত্রুটি পরীক্ষা দেখায়, ত্রুটি পরীক্ষা করার বিষয়ে আরও তথ্যের জন্য ফায়ারবেস::ভবিষ্যত রেফারেন্স দেখুন এবং ফলাফল কখন প্রস্তুত তা নির্ধারণ করার উপায়।

ঘটনা শুনুন

আপনি ডেটার পরিবর্তনগুলিতে সদস্যতা নিতে শ্রোতাদের যোগ করতে পারেন:

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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("Leaders").AddValueListener(listener);

Future&ltDataSnapshot&gt ফলাফলে ইভেন্টের সময় ডাটাবেসের নির্দিষ্ট স্থানে ডেটা থাকে। একটি স্ন্যাপশটে কলিং value() ডেটা প্রতিনিধিত্বকারী একটি Variant প্রদান করে।

এই উদাহরণে, পঠন বাতিল হয়েছে কিনা তা দেখার জন্য OnCancelled পদ্ধতিটিও ওভাররাইড করা হয়। উদাহরণস্বরূপ, ক্লায়েন্টের ফায়ারবেস ডাটাবেসের অবস্থান থেকে পড়ার অনুমতি না থাকলে একটি পঠন বাতিল করা যেতে পারে। 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&ltfirebase::database::DataSnapshot&gt result =
    dbRef.GetReference("GameSessionComments").AddChildListener(listener);

OnChildAdded কলব্যাকটি সাধারণত ফায়ারবেস ডাটাবেসে আইটেমগুলির একটি তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়। OnChildAdded কলব্যাকটি প্রতিটি বিদ্যমান সন্তানের জন্য একবার বলা হয় এবং তারপরে প্রতিবার যখন নির্দিষ্ট পথে নতুন শিশুকে যুক্ত করা হয়। শ্রোতাদের নতুন সন্তানের ডেটাযুক্ত একটি স্ন্যাপশট পাস করা হয়।

OnChildChanged কলব্যাককে যে কোনও সময় শিশু নোড সংশোধন করা হয় বলে অভিহিত করা হয়। এর মধ্যে শিশু নোডের বংশধরদের কোনও পরিবর্তন অন্তর্ভুক্ত রয়েছে। এটি সাধারণত আইটেমের তালিকায় পরিবর্তনের প্রতিক্রিয়া জানাতে OnChildAdded এবং OnChildRemoved কলগুলির সাথে একত্রে ব্যবহৃত হয়। শ্রোতার কাছে পাস করা স্ন্যাপশটটিতে সন্তানের জন্য আপডেট হওয়া ডেটা রয়েছে।

তাত্ক্ষণিক শিশুকে অপসারণ করা হলে OnChildRemoved কলব্যাক ট্রিগার করা হয়। এটি সাধারণত OnChildAdded এবং OnChildChanged কলব্যাকগুলির সাথে একত্রে ব্যবহৃত হয়। কল��্যাকে পাস করা স্ন্যাপশটটিতে সরানো সন্তানের ডেটা রয়েছে।

যখনই OnChildMoved কলটি একটি আপডেটের দ্বারা উত্থাপিত OnChildChanged যা সন্তানের পুনঃনির্মাণের কারণ হয়। এটি এমন ডেটা দিয়ে ব্যবহৃত হয় যা 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 সংজ্ঞায়িত করে যা যখন কোনও ভালুলিস্টেনারের সাথে মিলিত হয় তখন ক্লায়েন্টকে ডাটাবেসে লিডারবোর্ডের সাথে সিঙ্ক্রোনাইজ ��র��, প���র��������� ����্ট্রিটির স্কোর দ্বারা অর্ডার করা হয়। আপনি আপনার ডাটাবেস কাঠামোতে দক্ষতার সাথে আপনার ডেটা কাঠামোগত সম্পর্কে আরও পড়তে পারেন।

OrderByChild() পদ্ধতিতে কলটি ফলাফলগুলি অর্ডার করার জন্য শিশু কী নির্দিষ্ট করে। এই ক্ষেত্রে, ফলাফলগুলি প্রতিটি সন্তানের "score" মানের মান অনুসারে বাছাই করা হয়। অন্যান্য ডেটা ধরণের কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে ক্যোয়ারী ডেটা অর্ডার করা হয় তা দেখুন।

ফিল্টারিং ডেটা

ডেটা ফিল্টার করতে, আপনি কোনও ক্যোয়ারী নির্মাণের সময় কোনও অর্ডার-বাই পদ্ধতির সাথে সীমা বা রেঞ্জের পদ্ধতিগুলির সাথে একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
LimitToFirst() ক্রমযুক্ত ফলাফলের তালিকার শুরু থেকেই আইটেমের সর্বাধিক সংখ্যক আইটেম সেট করে।
LimitToLast() ক্রমযুক্ত ফলাফলের তালিকার শেষ থেকে ফিরে আসতে আইটেমের সর্বাধিক সংখ্যক সেট করে।
StartAt() নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফিরিয়ে দিন।
EndAt() নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে কম বা সমান আইটেমগুলি ফিরিয়ে দিন।
EqualTo() নির্বাচিত অর্ডার-বাই পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার বাই পদ্ধতিগুলির বিপরীতে, আপনি একাধিক সীমা বা পরিসীমা ফাংশন একত্রিত করতে পারেন। উদাহরণস্বরূপ, ফলাফলগুলি নির্দিষ্ট মানগুলির মধ্যে সীমাবদ্ধ করতে আপনি StartAt() এবং EndAt() পদ্ধতিগুলি একত্রিত করতে পারেন।

এমনকি ক্যোয়ারির জন্য কেবল একটি একক ম্যাচ থাকলেও স্ন্যাপশটটি এখনও একটি তালিকা; এটিতে কেবল একটি একক আইটেম রয়েছে।

ফলাফলের সংখ্যা সীমাবদ্ধ করুন

প্রদত্ত কলব্যাকের জন্য সর্বাধিক সংখ্যক শিশুদের সিঙ্ক করার জন্য আপনি LimitToFirst() এবং LimitToLast() পদ্ধতিগুলি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি 100 এর সীমা নির্ধারণ করতে LimitToFirst() ব্যবহার করেন তবে আপনি প্রা��মিকভাবে কেবল 100 টি OnChildAdded কলব্যাকস পান। আপনার যদি আপনার ফায়ারবেস ডাটাবেসে 100 টিরও কম আইটেম সঞ্চিত থাকে তবে প্রতিটি আইটেমের জন্য একটি 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() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী রয়েছে এমন ডেটা নিম্নরূপ অর্ডার করা হয়েছে:

  1. নির্দিষ্ট শিশু কী জন্য একটি null মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট শিশু কীটির জন্য false মানযুক্ত শিশুরা পরবর্তী সময়ে আসে। যদি একাধিক শিশুদের false মান থাকে তবে তাদের কী দ্বারা অভিধানগতভাবে বাছাই করা হয়।
  3. নির্দিষ্ট শিশু কীটির জন্য true মান সহ শিশুরা পরবর্তী সময়ে আসে। যদি একাধিক শিশুদের true মান থাকে তবে তাদের কী দ্বারা অভিধানগতভাবে বাছাই করা হয়।
  4. একটি সংখ্যার মান সহ শিশুরা পরবর্তী সময়ে আসে, আরোহী ক্রমে বাছাই করা। যদি একাধিক শিশুদের নির্দিষ্ট শিশু নোডের জন্য একই সংখ্যার মান থাকে তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং আরোহী ক্রমে অভিধানগতভাবে বাছাই করা হয়। যদি একাধিক শিশুদের নির্দিষ্ট শিশু নোডের জন্য একই মান থাকে তবে তাদের কী দ্বারা অভিধানগতভাবে অর্ডার করা হয়।
  6. অবজেক্টগুলি শেষ হয় এবং আরোহী ক্রমে কী দ্বারা অভিধানগতভাবে বাছাই করা হয়।

OrderByKey

আপনার ডেটা বাছাই করতে OrderByKey() ব্যবহার করার সময়, ডেটা কী দ্বারা আরোহী ক্রমে ফিরে আসে।

  1. 32-বিট পূর্ণসংখ্যা হিসাবে পা��্স করা যেতে পারে এমন একটি কী সহ শিশুরা প্রথমে আসে, আরোহী ক্রমে বাছাই করা।
  2. স্ট্রিং মান সহ শিশুরা তাদের কী পরবর্তী সময়ে আসে, আরোহী ক্রমে অভিধানগতভাবে বাছাই করে।

OrderByValue

OrderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদের মান দ্বারা অর্ডার করা হয়। অর্ডারিং মানদণ্ডগুলি OrderByChild() হিসাবে একই, নোডের মান ব্যতীত নির্দিষ্ট শিশু কী এর মানের পরিবর্তে ব্যবহৃত হয়।

পরবর্তী পদক্ষেপ