ডেটাবেস রেফারেন্স পান
ডেটাবেস থেকে ডেটা পড়তে বা লিখতে, আপনার
DatabaseReference-এর ইনস্ট্যান্স প্রয়োজন:
DatabaseReference ref = FirebaseDatabase.instance.ref();
পড়া ও লেখার তালিকা
ডেটার তালিকায় যোগ করুন
মাল্টিইউজার অ্যাপ্লিকেশনে কোনও তালিকায় ডেটা যোগ করতে push() পদ্ধতি ব্যবহার করুন।
push() পদ্ধতিটি প্রতিবার নির্দিষ্ট Firebase রেফারেন্সে একটি নতুন চাইল্ড যোগ করার সময় একটি অনন্য কী তৈরি করে। তালিকার প্রতিটি নতুন এলিমেন্টের জন্য অটোমেটিক জেনারেট হওয়া এইসব কী ব্যবহার করে,
একাধিক ক্লায়েন্ট একই সময়ে একই লোকেশনে চাইল্ড যোগ করতে পারবেন,
এতে রাইট কনফ্লিক্ট হবে না। push()-এর মাধ্যমে তৈরি করা অনন্য কী
টাইমস্ট্যাম্পের উপর ভিত্তি করে তৈরি হয়, তাই তালিকার আইটেমগুলি অটোমেটিক কালানুক্রমিকভাবে
সাজানো হয়।
আপনি push() পদ্ধতি দ্বারা রিটার্ন করা নতুন ডেটার রেফারেন্স ব্যবহার করে
চাইল্ডের অটোমেটিক জেনারেট করা কী-এর ভ্যালু পেতে বা চাইল্ডের জন্য ডেটা সেট করতে পারেন। push() রেফারেন্সের
.key প্রপার্টিতে অটোমেটিক জেনারেট করা কী থাকে।
আপনার ডেটা স্ট্রাকচার ফ্ল্যাটেন করার প্রসেস সহজ করতে, আপনি এইসব অটোমেটিক জেনারেট করা কী ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ডেটা ফ্যান-আউট সংক্রান্ত উদাহরণ দেখুন।
যেমন, সামাজিক অ্যাপ্লিকেশনে পোস্টের তালিকায় নতুন পোস্ট যোগ করতে push() ব্যবহার করা যেতে পারে:
DatabaseReference postListRef = FirebaseDatabase.instance.ref("posts");
DatabaseReference newPostRef = postListRef.push();
newPostRef.set({
// ...
});
চাইল্ড ইভেন্টের জন্য শুনুন
কোনও নোডের চাইল্ডে নির্দিষ্ট অপারেশন ঘটলে চাইল্ড ইভেন্ট ট্রিগার হয়। যেমন, push() পদ্ধতির মাধ্যমে নতুন চাইল্ড যোগ করা অথবা update() পদ্ধতির মাধ্যমে চাইল্ড আপডেট করা।
| ইভেন্ট | সাধারণ ব্যবহার |
|---|---|
onChildAdded |
আইটেমের তালিকা ফিরিয়ে আনা বা আইটেমের তালিকায় নতুন কিছু যোগ করা হয়েছে কিনা তা শোনা। এই ইভেন্টটি প্রতিটি বিদ্যমান চাইল্ডের জন্য একবার ট্রিগার করা হয় এবং তারপরে আবার প্রতিবার নির্দিষ্ট পাথে একটি নতুন চাইল্ড যোগ করা হয়। লিসনারকে নতুন চাইল্ডের ডেটা সহ স্ন্যাপশট পাস করা হয়। |
onChildChanged |
তালিকায় থাকা আইটেমে পরিবর্তন করা হলে তা শোনে। চাইল্ড নোড যেকোনও সময় পরিবর্তন করা হলে এই ইভেন্ট ট্রিগার করা হয়। এর মধ্যে চাইল্ড নোডের ডিসেন্ড্যান্টে করা যেকোনও পরিবর্তন অন্তর্ভুক্ত। ইভেন্ট লিসেনারে পাস করা স্ন্যাপশটে চাইল্ডের জন্য আপডেট করা ডেটা থাকে। |
onChildRemoved |
তালিকা থেকে আইটেম সরিয়ে দেওয়ার সময় শুনুন। এই ইভেন্টটি ট্রিগার হয় যখন একটি ইমিডিয়েট চাইল্ড সরানো হয়। কলব্যাক ব্লকে পাস করা স্ন্যাপশটে সরানো চাইল্ডের ডেটা থাকে। |
onChildMoved |
ক্রমানুসারে সাজানো তালিকায় আইটেমের ক্রম পরিবর্তন হলে তা শুনুন। onChildMoved ইভেন্ট সবসময় onChildChanged ইভেন্টকে অনুসরণ করে যার ফলে আইটেমের ক্রম পরিবর্তিত হয় (আপনার বর্তমান অর্ডার-বাই মেথডের উপর ভিত্তি করে)। |
ডেটাবেসের নির্দিষ্ট নোডে পরিবর্তন শোনার জন্য এগুলির প্রত্যেকটি একসাথে উপযোগী হতে পারে। যেমন, কোনও সোশ্যাল ব্লগিং অ্যাপ, নিচে দেখানো উদাহরণ অনুযায়ী, কোনও পোস্টের কমেন্টে অ্যাক্টিভিটি মনিটর করার জন্য এইসব পদ্ধতি একসাথে ব্যবহার করতে পারে:
final commentsRef = FirebaseDatabase.instance.ref("post-comments/$postId");
commentsRef.onChildAdded.listen((event) {
// A new comment has been added, so add it to the displayed list.
});
commentsRef.onChildChanged.listen((event) {
// A comment has changed; use the key to determine if we are displaying this
// comment and if so displayed the changed comment.
});
commentsRef.onChildRemoved.listen((event) {
// A comment has been removed; use the key to determine if we are displaying
// this comment and if so remove it.
});
ভ্যালু ইভেন্ট শুনুন
ডেটার তালিকা পড়ার জন্য চাইল্ড ইভেন্ট শোনা হল সাজেস্ট করা পদ্ধতি, তবে এমন কিছু পরিস্থিতি আছে যেখানে তালিকার রেফারেন্সে ভ্যালু ইভেন্ট শোনা উপযোগী।
ডেটার তালিকায় value লিসেনার অ্যাটাচ করলে, ডেটার সম্পূর্ণ তালিকা একটি স্ন্যাপশট হিসেবে রিটার্ন করবে,
যেটি আপনি লুপ করে প্রতিটি চাইল্ড অ্যাক্সেস করতে পারবেন।
এমনকি কোয়েরির জন্য শুধুমাত্র একটি ম্যাচ থাকলেও, স্ন্যাপশটটি এখনও একটি তালিকা; এটিতে শুধুমাত্র একটি আইটেম রয়েছে। আইটেম অ্যাক্সেস করতে, আপনাকে ফলাফলের উপর লুপ করতে হবে:
myTopPostsQuery.onValue.listen((event) {
for (final child in event.snapshot.children) {
// Handle the post.
}
}, onError: (error) {
// Error.
});
এই প্যাটার্নটি তখন উপযোগী হতে পারে যখন আপনি একটি তালিকায় সমস্ত চাইল্ডকে একটি অপারেশনে আনতে চান, অতিরিক্ত চাইল্ড যোগ করা ইভেন্টগুলি শোনার পরিবর্তে।
ডেটা সাজানো এবং ফিল্টার করা
আপনি Query ক্লাস ব্যবহার করে
কী, ভ্যালু বা চাইল্ডের ভ্যালু অনুযায়ী সাজানো ডেটা ফিরিয়ে আনতে পারবেন। এছাড়াও, আপনি সাজানো ফলাফলকে নির্দিষ্ট সংখ্যক ফলাফল বা কী বা মানের রেঞ্জে ফিল্টার করতে পারেন।
ডেটা সাজান
সাজানো ডেটা ফিরিয়ে আনতে, ফলাফল কীভাবে সাজানো হবে তা নির্ধারণ করতে অর্ডার-বাই মেথডের মধ্যে একটি নির্দিষ্ট করে শুরু করুন:
| পদ্ধতি | ব্যবহার |
|---|---|
orderByChild() |
নির্দিষ্ট চাইল্ড কী বা নেস্টেড চাইল্ড পাথের ভ্যালু অনুযায়ী ফলাফল সাজান। |
orderByKey() |
চাইল্ড কী অনুযায়ী ফলাফল সাজান। |
orderByValue() |
চাইল্ড ভ্যালু অনুযায়ী ফলাফল সাজান। |
আপনি একবারে শুধুমাত্র একটি অর্ডার-বাই মেথড ব্যবহার করতে পারবেন। একই কোয়েরিতে একাধিকবার অর্ডার-বাই মেথড কল করলে সমস্যা হয়।
নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে আপনি কোনও ব্যবহারকারীর সেরা পোস্টের তালিকা স্টার সংখ্যার ভিত্তিতে সাজিয়ে দেখতে পারেন:
final myUserId = FirebaseAuth.instance.currentUser?.uid;
final topUserPostsRef = FirebaseDatabase.instance
.ref("user-posts/$myUserId")
.orderByChild("starCount");
এটি এমন একটি কোয়েরি যা চাইল্ড লিসনারের সাথে যুক্ত হয়ে ব্যবহারকারীর আইডি অনুযায়ী ডেটাবেসের পাথ থেকে ব্যবহারকারীর পোস্টের সাথে ক্লায়েন্টকে সিঙ্ক করে। প্রতিটি পোস্ট কতগুলি স্টার পেয়েছে তার ভিত্তিতে এটি সাজানো হয়। ইনডেক্স কী হিসেবে আইডি ব্যবহার করার এই টেকনিককে ডেটা ফ্যান আউট বলা হয়, আপনি আপনার ডেটাবেস স্ট্রাকচার করুন লিঙ্ক থেকে এই বিষয়ে আরও পড়তে পারবেন।
orderByChild() মেথডে করা কল, ফলাফল সাজানোর জন্য চাইল্ড কী নির্দিষ্ট করে। এই ক্ষেত্রে, পোস্টগুলি তাদের নিজ নিজ "starCount" চাইল্ডের ভ্যালু অনুসারে সাজানো হয়। আপনার কাছে যদি এই ধরনের ডেটা থাকে, তাহলে নেস্টেড চিলড্রেন
অনুযায়ীও কোয়েরি সাজানো যেতে পারে:
"posts": {
"ts-functions": {
"metrics": {
"views" : 1200000,
"likes" : 251000,
"shares": 1200,
},
"title" : "Why you should use TypeScript for writing Cloud Functions",
"author": "Doug",
},
"android-arch-3": {
"metrics": {
"views" : 900000,
"likes" : 117000,
"shares": 144,
},
"title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)",
"author": "Doug",
}
},
এই ক্ষেত্রে, আমরা আমাদের লিস্টের এলিমেন্টগুলিকে
metrics কী-এর অধীনে নেস্ট করা ভ্যালু অনুযায়ী সাজাতে পারি, যার জন্য আমাদের
orderByChild() কলে নেস্ট করা চাইল্ডের রিলেটিভ পাথ উল্লেখ করতে হবে।
final mostViewedPosts =
FirebaseDatabase.instance.ref('posts').orderByChild('metrics/views');
অন্যান্য ধরনের ডেটা কীভাবে সাজানো হয় সেই সম্পর্কে আরও জানতে, কোয়েরি ডেটা কীভাবে সাজানো হয় দেখুন।
ডেটা ফিল্টার করা হচ্ছে
ডেটা ফিল্টার করতে, কোয়েরি তৈরি করার সময় আপনি সীমা বা রেঞ্জ মেথডের যেকোনও একটির সাথে অর্ডার-বাই মেথড একত্রিত করতে পারেন।
| পদ্ধতি | ব্যবহার |
|---|---|
limitToFirst() |
ফলাফলের ক্রমানুসারে সাজানো তালিকার শুরু থেকে সর্বাধিক কতগুলি আইটেম দেখানো হবে তা সেট করে। |
limitToLast() |
ফলাফলের ক্রমানুসারে সাজানো তালিকার শেষ থেকে সর্বাধিক কতগুলি আইটেম ফেরত দেওয়া হবে তা সেট করে। |
startAt() |
বেছে নেওয়া অর্ডার-বাই মেথডের উপর নির্ভর করে, নির্দিষ্ট করা কী বা ভ্যালুর চেয়ে বড় বা সমান আইটেম ফেরত পাঠায়। |
startAfter() |
বেছে নেওয়া অর্ডার-বাই মেথডের উপর নির্ভর করে নির্দিষ্ট কী বা ভ্যালুর থেকে বেশি আইটেম রিটার্ন করে। |
endAt() |
বেছে নেওয়া অর্ডার-বাই মেথডের উপর নির্ভর করে, নির্দিষ্ট করা কী বা ভ্যালুর থেকে কম বা সমান আইটেম ফেরত দেয়। |
endBefore() |
বেছে নেওয়া অর্ডার-বাই মেথডের উপর নির্ভর করে নির্দিষ্ট কী বা ভ্যালুর থেকে কম আইটেম রিটার্ন করে। |
equalTo() |
বেছে নেওয়া অর্ডার-বাই মেথডের উপর নির্ভর করে নির্দিষ্ট কী বা ভ্যালুর সমান আইটেম ফেরত দেয়। |
অর্ডার-বাই মেথডের মতো নয়, আপনি একাধিক সীমা বা রেঞ্জ ফাংশন একত্রিত করতে পারেন।
যেমন, আপনি startAt() এবং endAt() পদ্ধতি একসাথে ব্যবহার করে
ফলাফলকে নির্দিষ্ট রেঞ্জের মধ্যে সীমাবদ্ধ করতে পারেন।
ফলাফলের সংখ্যা সীমিত করুন
আপনি limitToFirst() এবং limitToLast() পদ্ধতি ব্যবহার করে কোনও নির্দিষ্ট ইভেন্টের জন্য সিঙ্ক করা হবে এমন সর্বাধিক সংখ্যক চাইল্ড সেট করতে পারেন। যেমন, আপনি যদি
limitToFirst() ব্যবহার করে ১০০-এর সীমা সেট করেন, তাহলে প্রাথমিকভাবে আপনি সর্বাধিক ১০০টি onChildAdded ইভেন্ট পাবেন। আপনার Firebase ডেটাবেসে ১০০টির কম আইটেম স্টোর করা থাকলে, প্রতিটি আইটেমের জন্য একটি onChildAdded ইভেন্ট ফায়ার হয়।
আইটেম পরিবর্তন হওয়ার সাথে সাথে, আপনি কোয়েরিতে প্রবেশ করা আইটেমের জন্য onChildAddedটি ইভেন্ট
এবং কোয়েরি থেকে বাদ পড়া আইটেমের জন্য onChildRemovedটি ইভেন্ট পাবেন যাতে
মোট সংখ্যা ১০০ থাকে।
নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে উদাহরণ ব্লগিং অ্যাপ সব ব্যবহারকারীর ১০০টি সবচেয়ে সাম্প্রতিক পোস্টের তালিকা উদ্ধার করার জন্য কোয়েরি নির্ধারণ করে:
final recentPostsRef = FirebaseDatabase.instance.ref('posts').limitToLast(100);
এই উদাহরণটি শুধুমাত্র একটি কোয়েরি সংজ্ঞায়িত করে, আসলে ডেটা সিঙ্ক করার জন্য এটির সাথে একটি লিসেনার সংযুক্ত থাকতে হবে।
'কী' বা ভ্যালু অনুযায়ী ফিল্টার করুন
আপনি startAt(), startAfter(),endAt(), endBefore() এবং
equalTo() ব্যবহার করে কোয়েরির জন্য ইচ্ছামতো শুরু, শেষ এবং সমতুল্য পয়েন্ট বেছে নিতে পারেন। এটি ডেটা পেজিনেট করার জন্য বা নির্দিষ্ট ভ্যালু আছে এমন চাইল্ড আইটেম
খুঁজে পাওয়ার জন্য উপযোগী হতে পারে।
কোয়েরি ডেটা কীভাবে সাজানো হয়
এই বিভাগে ব্যাখ্যা করা হয়েছে যে কীভাবে Query ক্লাসে প্রতিটি অর্ডার-বাই মেথড অনুযায়ী ডেটা সাজানো হয়।
orderByChild
orderByChild() ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী সহ ডেটা
নিম্নলিখিত ক্রমে সাজানো হয়:
- নির্দিষ্ট চাইল্ড কী-এর জন্য
nullভ্যালু সহ চিলড্রেন প্রথমে আসে। - নির্দিষ্ট চাইল্ড কী-এর জন্য
falseভ্যালু সহ চাইল্ড এর পরে আসে। একাধিক চাইল্ডের ভ্যালুfalseহলে, সেগুলি কী অনুযায়ী লেক্সিকোগ্রাফিক্যালি সাজানো হয়। - নির্দিষ্ট চাইল্ড কী-এর জন্য
trueভ্যালু সহ চাইল্ড এর পরে আসে। একাধিক চাইল্ডের ভ্যালুtrueহলে, সেগুলি কী অনুযায়ী লেক্সিকোগ্রাফিক্যালি সাজানো হয়। - এরপরে সংখ্যাবাচক মান সহ চাইল্ড আসে, যা ছোট থেকে বড় ক্রমে সাজানো থাকে। যদি একাধিক চাইল্ড নোডের জন্য একই সংখ্যাসূচক মান থাকে, তাহলে সেগুলি কী অনুসারে সাজানো হয়।
- স্ট্রিং সংখ্যার পরে আসে এবং ছোট থেকে বড় ক্রমে অভিধানের ক্রম অনুযায়ী সাজানো হয়। একাধিক চাইল্ডের জন্য নির্দিষ্ট চাইল্ড নোডের ভ্যালু একই হলে, সেগুলিকে কী অনুযায়ী লেক্সিকোগ্রাফিক্যালি সাজানো হয়।
- অবজেক্ট শেষে আসে এবং কী অনুযায়ী ছোট থেকে বড় ক্রমে সাজানো হয়।
orderByKey
আপনার ডেটা সাজাতে orderByKey() ব্যবহার করার সময়, ডেটা 'কী' অনুযায়ী ঊর্ধ্বক্রমে
ফেরত দেওয়া হয়।
- যেসব চিলড্রেনকে ৩২-বিট ইন্টিজার হিসেবে পার্স করা যায়, সেগুলি প্রথমে আসে এবং ছোট থেকে বড় হিসেবে সাজানো হয়।
- এর পরে স্ট্রিং ভ্যালু কী হিসেবে আছে এমন চাইল্ড আসে, যা লেক্সিকোগ্রাফিক্যালি ছোট থেকে বড় হিসেবে সাজানো থাকে।
orderByValue
orderByValue() ব্যবহার করার সময়, বাচ্চাদের তাদের ভ্যালু অনুযায়ী সাজানো হয়। ক্রমের
মাপকাঠি orderByChild()-এর মতোই, তবে নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে
নোডের মান ব্যবহার করা হয়।
লিসনার ডিটাচ করুন
আপনার Firebase ডেটাবেস রেফারেন্সে off() মেথড কল করার মাধ্যমে কলব্যাক সরিয়ে দেওয়া হয়।
off()-এ প্যারামিটার হিসেবে পাস করে আপনি একজন শ্রোতাকে সরাতে পারবেন।
কোনও আর্গুমেন্ট ছাড়াই লোকেশনে off() কল করলে, সেই লোকেশনের সব লিসেনারকে সরিয়ে দেওয়া হয়।
প্যারেন্ট লিসেনারে off() কল করলে
তার চাইল্ড নোডে রেজিস্টার করা লিসেনার অটোমেটিক সরিয়ে দেয় না;
কলব্যাক সরাতে যেকোনও চাইল্ড লিসেনারেও
off() কল করতে হবে।