একটি FIRDatabaseReference পান
ডাটাবেস থেকে ডেটা পড়তে বা লিখতে, আপনার FIRDatabaseReference
এর একটি উদাহরণ প্রয়োজন:
সুইফট
var ref: DatabaseReference! ref = Database.database().reference()
উদ্দেশ্য-C
@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];
পড়া এবং তালিকা লেখা
ডেটার তালিকায় যুক্ত করুন
মাল্টি-ইউজার অ্যাপ্লিকেশানগুলিতে একটি তালিকায় ডেটা যুক্ত করতে childByAutoId
পদ্ধতি ব্যবহার করুন। প্রতিবার নির্দিষ্ট ফায়ারবেস রেফারেন্সে একটি নতুন শিশু যোগ করা হলে childByAutoId
পদ্ধতি একটি অনন্য কী তৈরি করে। তালিকার প্রতিটি নতুন উপাদানের জন্য এই স্বয়ংক্রিয়-উত্পাদিত কীগুলি ব্যবহার করে, অনেক ক্লায়েন্ট একই সময়ে শিশুদের লেখার দ্বন্দ্ব ছাড়াই একই স্থানে যুক্ত করতে পারে। childByAutoId
দ্বারা উত্পন্ন অনন্য কী একটি টাইমস্ট্যাম্পের উপর ভিত্তি করে, তাই তালিকা আইটেমগুলি স্বয়ংক্রিয়ভাবে কালানুক্রমিকভাবে অর্ডার করা হয়।
আপনি childByAutoId
পদ্ধতির দ্বারা প্রত্যাবর্তিত নতুন ডেটার রেফারেন্স ব্যবহার করে সন্তানের স্বয়ংক্রিয়-উত্পন্ন কী বা সন্তানের জন্য ডেটা সেট করার মান পেতে পারেন। একটি childByAutoId
রেফারেন্সে getKey
কল করা স্বয়ংক্রিয়ভাবে তৈরি কী ফেরত দেয়।
আপনি আপনার ডেটা স্ট্রাকচারকে সমতল করার জন্য এই স্বয়ংক্রিয়-উত্পন্ন কীগুলি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ডেটা ফ্যান-আউট উদাহরণ দেখুন।
শিশু ঘটনা শুনুন
শিশু ঘটনাগুলি নির্দিষ্ট অপারেশনের প্রতিক্রিয়া হিসাবে ট্রিগার করা হয় যা একটি অপারেশন থেকে একটি নোডের শিশুদের ক্ষেত্রে ঘটে যেমন শিশু দ্বারা একটি নতুন শিশু যোগ করা হয়েছে বা childByAutoId
পদ্ধতির মাধ্যমে updateChildValues
করা হয়েছে৷
ইভেন্টের ধরন | সাধারণ ব্যবহার |
---|---|
FIRDataEventTypeChildAdded | আইটেমগুলির তালিকা পুনরুদ্ধার করুন বা আইটেমগুলির একটি তালিকায় সংযোজনের জন্য শুনুন। এই ইভেন্টটি প্রতিটি বিদ্যমান শিশুর জন্য একবার ট্রিগার করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়। |
FIRDataEventTypeChildChanged | একটি তালিকার আইটেম পরিবর্তনের জন্য শুনুন. একটি চাইল্ড নোড পরিবর্তন করা হলে এই ইভেন্টটি ট্রিগার করা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। ইভেন্ট শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে। |
FIRDataEventTypeChildRemoved | একটি তালিকা থেকে আইটেম মুছে ফেলার জন্য শুনুন. এই ইভেন্টটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরানো হয়৷ কলব্যাক ব্লকে পাস করা স্ন্যাপশটে সরানো সন্তানের ডেটা থাকে৷ |
FIRDataEventTypeChildMoved | অর্ডার করা তালিকায় আইটেমের ক্রম পরিবর্তনের জন্য শুনুন। এই ইভেন্টটি ট্রিগার করা হয় যখনই একটি আপডেট শিশুর পুনর্বিন্যাস ঘটায়। এটি queryOrderedByChild বা queryOrderedByValue দ্বারা অর্ডার করা ডেটার সাথে ব্যবহার করা হয়। |
ডাটাবেসের একটি নির্দিষ্ট নোডের পরিবর্তনগুলি শোনার জন্য এইগুলির প্রত্যেকটি একসাথে কার্যকর হতে পারে। উদাহরণস্বরূপ, একটি সামাজিক ব্লগিং অ্যাপ একটি পোস্টের মন্তব্যে কার্যকলাপ নিরীক্ষণ করতে এই পদ্ধতিগুলি একসাথে ব্যবহার করতে পারে, যেমনটি নীচে দেখানো হয়েছে:
সুইফট
// Listen for new comments in the Firebase database commentsRef.observe(.childAdded, with: { (snapshot) -> Void in self.comments.append(snapshot) self.tableView.insertRows( at: [IndexPath(row: self.comments.count - 1, section: self.kSectionComments)], with: UITableView.RowAnimation.automatic ) }) // Listen for deleted comments in the Firebase database commentsRef.observe(.childRemoved, with: { (snapshot) -> Void in let index = self.indexOfMessage(snapshot) self.comments.remove(at: index) self.tableView.deleteRows( at: [IndexPath(row: index, section: self.kSectionComments)], with: UITableView.RowAnimation.automatic ) })
উদ্দেশ্য-C
// Listen for new comments in the Firebase database [_commentsRef observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) { [self.comments addObject:snapshot]; [self.tableView insertRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:self.comments.count - 1 inSection:kSectionComments] ] withRowAnimation:UITableViewRowAnimationAutomatic]; }]; // Listen for deleted comments in the Firebase database [_commentsRef observeEventType:FIRDataEventTypeChildRemoved withBlock:^(FIRDataSnapshot *snapshot) { int index = [self indexOfMessage:snapshot]; [self.comments removeObjectAtIndex:index]; [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:kSectionComments]] withRowAnimation:UITableViewRowAnimationAutomatic]; }];
মান ঘটনা জন্য শুনুন
যদিও শিশু ইভেন্টের জন্য শোনা তথ্যের তালিকা পড়ার প্রস্তাবিত উপায়, সেখানে এমন পরিস্থিতিতে আছে যে তালিকার রেফারেন্সে মূল্য ইভেন্টের জন্য শোনা দরকারী।
ডেটার একটি তালিকার সাথে একটি FIRDataEventTypeValue
পর্যবেক্ষক সংযুক্ত করা ডেটার সম্পূর্ণ তালিকাকে একটি একক ডেটাস্ন্যাপশট হিসাবে ফিরিয়ে দেবে, যা আপনি পৃথক শিশুদের অ্যাক্সেস করতে লুপ করতে পারেন।
এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে. আইটেমটি অ্যাক্সেস করতে, আপনাকে ফলাফলটি লুপ করতে হবে:
সুইফট
_commentsRef.observe(.value) { snapshot in for child in snapshot.children { ... } }
উদ্দেশ্য-C
[_commentsRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) { // Loop over children NSEnumerator *children = [snapshot children]; FIRDataSnapshot *child; while (child = [children nextObject]) { // ... } }];
এই প্যাটার্নটি উপযোগী হতে পারে যখন আপনি অতিরিক্ত শিশু যুক্ত ইভেন্টের জন্য শোনার পরিবর্তে একটি একক অপারেশনে একটি তালিকার সমস্ত শিশু আনতে চান।
তথ্য বাছাই এবং ফিল্টারিং
কী, মান অনুসারে বা শিশুর মান অনুসারে সাজানো ডেটা পুনরুদ্ধার করতে আপনি Realtime Database FIRDatabaseQuery
ক্লাস ব্যবহার করতে পারেন। আপনি বাছাই করা ফলাফলকে নির্দিষ্ট সংখ্যক ফলাফল বা কী বা মানের পরিসরে ফিল্টার করতে পারেন।
তথ্য সাজান
বাছাই করা ডেটা পুনরুদ্ধার করতে, ফলাফলগুলি কীভাবে অর্ডার করা হয় তা নির্ধারণ করতে অর্ডার-বাই পদ্ধতিগুলির একটি নির্দিষ্ট করে শুরু করুন:
পদ্ধতি | ব্যবহার |
---|---|
queryOrderedByKey | চাইল্ড কী দ্বারা ফলাফল অর্ডার করুন। |
queryOrderedByValue | সন্তানের মান অনুযায়ী ফলাফল ক্রম করুন। |
queryOrderedByChild | একটি নির্দিষ্ট চাইল্ড কী বা নেস্টেড চাইল্ড পাথের মান অনুসারে ফলাফল ক্রম করুন। |
আপনি একটি সময়ে শুধুমাত্র একটি অর্ডার পদ্ধতি ব্যবহার করতে পারেন. একই ক্যোয়ারীতে একাধিকবার অর্ডার-বাই মেথড কল করলে একটি ত্রুটি দেখা দেয়।
নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে একজন ব্যবহারকারীর শীর্ষ পোস্টের তালিকা পুনরুদ্ধার করতে পারেন তাদের তারকা সংখ্যা অনুসারে সাজানো:
সুইফট
// My top posts by number of stars let myTopPostsQuery = ref.child("user-posts").child(getUid()).queryOrdered(byChild: "starCount")
উদ্দেশ্য-C
// My top posts by number of stars FIRDatabaseQuery *myTopPostsQuery = [[[self.ref child:@"user-posts"] child:[super getUid]] queryOrderedByChild:@"starCount"];
এই ক্যোয়ারী ডাটাবেসের পাথ থেকে ব্যবহারকারীর পোস্টগুলি পুনরুদ্ধার করে তাদের ব্যবহারকারী আইডির উপর ভিত্তি করে, প্রতিটি পোস্টে প্রাপ্ত তারার সংখ্যা অনুসারে অর্ডার করা হয়। আইডিগুলিকে সূচক কী হিসাবে ব্যবহার করার এই কৌশলটিকে ডেটা ফ্যান আউট বলা হয়, আপনি এটি সম্পর্কে আরও পড়তে পারেন আপনার ডেটাবেসের কাঠামোতে ।
queryOrderedByChild
পদ্ধতিতে কল করা ফলাফলের অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই উদাহরণে, প্রতিটি পোস্টে "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", } },
এই ক্ষেত্রে, আমরা আমাদের queryOrderedByChild
কলে নেস্টেড চাইল্ডের আপেক্ষিক পাথ নির্দিষ্ট করে metrics
কী-এর অধীনে নেস্ট করা মান অনুসারে আমাদের তালিকার উপাদানগুলিকে অর্ডার করতে পারি।
সুইফট
let postsByMostPopular = ref.child("posts").queryOrdered(byChild: "metrics/views")
উদ্দেশ্য-C
FIRDatabaseQuery *postsByMostPopular = [[ref child:@"posts"] queryOrderedByChild:@"metrics/views"];
অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷
ফিল্টারিং ডেটা
ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বাই পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।
পদ্ধতি | ব্যবহার |
---|---|
queryLimitedToFirst | ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে। |
queryLimitedToLast | ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে। |
queryStartingAtValue | ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন। |
queryStartingAfterValue | ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় আইটেমগুলি ফেরত দিন। |
queryEndingAtValue | ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন। |
queryEndingBeforeValue | ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে কম আইটেমগুলি ফেরত দিন৷ |
queryEqualToValue | ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন। |
অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণস্বরূপ, আপনি ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে queryStartingAtValue
এবং queryEndingAtValue
পদ্ধতিগুলিকে একত্রিত করতে পারেন৷
ফলাফলের সংখ্যা সীমিত করুন
প্রদত্ত কলব্যাকের জন্য সর্বাধিক সংখ্যক শিশুকে সিঙ্ক করার জন্য আপনি queryLimitedToFirst
এবং queryLimitedToLast
পদ্ধতিগুলি ব্যবহার করতে পারেন৷ উদাহরণস্বরূপ, যদি আপনি 100-এর সীমা সেট করতে queryLimitedToFirst
ব্যবহার করেন, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি FIRDataEventTypeChildAdded
কলব্যাক পাবেন। যদি আপনার ফায়ারবেস ডাটাবেসে 100 টিরও কম আইটেম সংরক্ষিত থাকে, তাহলে প্রতিটি আইটেমের জন্য একটি FIRDataEventTypeChildAdded
কলব্যাক চালু হবে।
আইটেমগুলি পরিবর্তন হওয়ার সাথে সাথে, আপনি FIRDataEventTypeChildAdded
কলব্যাকগুলি পাবেন যে আইটেমগুলি ক্যোয়ারী প্রবেশ করেছে এবং FIRDataEventTypeChildRemoved
কলব্যাকগুলি যেগুলি থেকে বাদ পড়ে যায় যাতে মোট সংখ্যা 100-এ থাকে৷
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি উদাহরণ ব্লগিং অ্যাপ সমস্ত ব্যবহারকারীর 100টি সাম্প্রতিক পোস্টের একটি তালিকা পুনরুদ্ধার করতে পারে:
সুইফট
// Last 100 posts, these are automatically the 100 most recent // due to sorting by push() keys let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))!
উদ্দেশ্য-C
// Last 100 posts, these are automatically the 100 most recent // due to sorting by push() keys FIRDatabaseQuery *recentPostsQuery = [[self.ref child:@"posts"] queryLimitedToFirst:100];
কী বা মান দ্বারা ফিল্টার করুন
আপনি queryStartingAtValue
, queryStartingAfterValue
, queryEndingAtValue
, queryEndingBeforeValue
, এবং queryEqualToValue
ব্যবহার করতে পারেন প্রশ্নগুলির জন্য নির্বিচারে শুরু, শেষ এবং সমতুল্য পয়েন্টগুলি বেছে নিতে। এটি ডেটা পেজিনেট করার জন্য বা শিশুদের সাথে আইটেম খুঁজে বের করার জন্য দরকারী হতে পারে যেগুলির একটি নির্দিষ্ট মান রয়েছে৷
কিভাবে কোয়েরি ডেটা অর্ডার করা হয়
এই বিভাগটি ব্যাখ্যা করে যে কিভাবে FIRDatabaseQuery
ক্লাসের প্রতিটি ক্রম অনুসারে পদ্ধতি দ্বারা ডেটা সাজানো হয়।
queryOrderedByKey
আপনার ডেটা সাজানোর জন্য queryOrderedByKey
ব্যবহার করার সময়, কী দ্বারা ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত দেওয়া হয়।
- 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
- একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।
queryOrderedByValue
queryOrderedByValue
ব্যবহার করার সময়, বাচ্চাদের তাদের মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড queryOrderedByChild
এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।
queryOrderedByChild
queryOrderedByChild
ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করা ডেটা নিম্নরূপ সাজানো হয়:
- নির্দিষ্ট চাইল্ড কী-এর জন্য একটি
nil
মান সহ শিশুরা প্রথমে আসে। - নির্দিষ্ট চাইল্ড কী-এর জন্য
false
এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুরfalse
মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়। - নির্দিষ্ট চাইল্ড কী-এর জন্য
true
মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদেরtrue
মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়। - একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
- স্ট্রিংগুলি সংখ্যার পরে আসে এবং আভিধানিকভাবে ঊর্ধ্বক্রম অনুসারে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে অর্ডার করা হয়।
- অবজেক্টগুলি শেষের দিকে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
শ্রোতাদের বিচ্ছিন্ন করুন
আপনি যখন ViewController
ছেড়ে যান তখন পর্যবেক্ষকরা স্বয়ংক্রিয়ভাবে ডেটা সিঙ্ক করা বন্ধ করে না। যদি একজন পর্যবেক্ষককে সঠিকভাবে সরানো না হয়, তাহলে এটি স্থানীয় মেমরিতে ডেটা সিঙ্ক করতে থাকে এবং ইভেন্ট হ্যান্ডলার ক্লোজারে ক্যাপচার করা যেকোন বস্তুকে ধরে রাখে, যা মেমরি লিক হতে পারে। যখন একজন পর্যবেক্ষকের আর প্রয়োজন হয় না, তখন সংশ্লিষ্ট FIRDatabaseHandle
টিকে removeObserverWithHandle
পদ্ধতিতে পাস করে এটি সরিয়ে ফেলুন।
আপনি যখন একটি রেফারেন্সে একটি কলব্যাক ব্লক যোগ করেন, একটি FIRDatabaseHandle
ফেরত দেওয়া হয়। এই হ্যান্ডেলগুলি কলব্যাক ব্লক অপসারণ করতে ব্যবহার করা যেতে পারে।
যদি একটি ডাটাবেস রেফারেন্সে একাধিক শ্রোতা যোগ করা হয়, একটি ইভেন্ট উত্থাপিত হলে প্রতিটি শ্রোতাকে ডাকা হয়। সেই অবস্থানে ডেটা সিঙ্ক করা বন্ধ করার জন্য, আপনাকে removeAllObservers
পদ্ধতিতে কল করে একটি অবস্থানের সমস্ত পর্যবেক্ষককে সরিয়ে ফেলতে হবে।
removeObserverWithHandle
বা removeAllObservers
শ্রোতার উপর কল করা স্বয়ংক্রিয়ভাবে তার চাইল্ড নোডে নিবন্ধিত শ্রোতাদের সরিয়ে দেয় না; সেগুলি সরানোর জন্য আপনাকে অবশ্যই সেই রেফারেন্স বা হ্যান্ডেলগুলির ট্র্যাক রাখতে হবে।