ক্লাউড ফায়ারস্টোর একটি NoSQL, নথি-ভিত্তিক ডাটাবেস। একটি SQL ডাটাবেসের বিপরীতে, কোন টেবিল বা সারি নেই। পরিবর্তে, আপনি নথিতে ডেটা সঞ্চয় করেন, যা সংগ্রহে সংগঠিত হয়।
প্রতিটি নথিতে কী-মানের জোড়ার একটি সেট রয়েছে। ক্লাউড ফায়ারস্টোর ছোট নথির বড় সংগ্রহ সংরক্ষণের জন্য অপ্টিমাইজ করা হয়েছে।
সমস্ত নথি সংগ্রহে সংরক্ষণ করা আবশ্যক. নথিতে উপ- সংকলন এবং নেস্টেড অবজেক্ট থাকতে পারে, উভয়ের মধ্যেই আদিম ক্ষেত্র যেমন স্ট্রিং বা তালিকার মতো জটিল বস্তু অন্তর্ভুক্ত থাকতে পারে।
ক্লাউড ফায়ারস্টোরে সংগ্রহ এবং নথিগুলি অন্তর্নিহিতভাবে তৈরি করা হয়। একটি সংগ্রহের মধ্যে একটি নথিতে কেবল ডেটা বরাদ্দ করুন। সংগ্রহ বা দস্তাবেজটি বিদ্যমান না থাকলে, ক্লাউড ফায়ারস্টোর এটি তৈরি করে।
নথিপত্র
ক্লাউড ফায়ারস্টোরে, স্টোরেজের ইউনিট হল নথি। একটি দস্তাবেজ হল একটি হালকা ওজনের রেকর্ড যাতে ক্ষেত্র থাকে, যা মানগুলিকে মানচিত্র করে। প্রতিটি নথি একটি নাম দ্বারা চিহ্নিত করা হয়.
একটি ব্যবহারকারী alovelace
প্রতিনিধিত্বকারী একটি নথি এইরকম দেখতে পারে:
first : "Ada"
last : "Lovelace"
born : 1815
একটি নথিতে জটিল, নেস্টেড অবজেক্টকে ম্যাপ বলা হয়। উদাহরণস্বরূপ, আপনি উপরের উদাহরণ থেকে একটি মানচিত্র দিয়ে ব্যবহারকারীর নাম গঠন করতে পারেন, যেমন:
name :
first : "Ada"
last : "Lovelace"
born : 1815
আপনি লক্ষ্য করতে পারেন যে নথিগুলি দেখতে অনেকটা JSON এর মতো। আসলে, তারা মূলত. কিছু পার্থক্য রয়েছে (উদাহরণস্বরূপ, নথিগুলি অতিরিক্ত ডেটা প্রকারগুলিকে সমর্থন করে এবং আকারে 1 MB পর্যন্ত সীমাবদ্ধ), তবে সাধারণভাবে, আপনি দস্তাবেজগুলিকে হালকা JSON রেকর্ড হিসাবে বিবেচনা করতে পারেন৷
সংগ্রহ
নথিগুলি সংগ্রহে থাকে, যা নথিগুলির জন্য কেবল পাত্র। উদাহরণস্বরূপ, আপনার বিভিন্ন ব্যবহারকারীদের ধারণ করার জন্য আপনার কাছে একটি users
সংগ্রহ থাকতে পারে, প্রতিটি একটি নথি দ্বারা প্রতিনিধিত্ব করা হয়:
first : "Ada"
last : "Lovelace"
born : 1815
first : "Alan"
last : "Turing"
born : 1912
ক্লাউড ফায়ারস্টোর স্কিমলেস, তাই প্রতিটি নথিতে আপনি কোন ক্ষেত্রগুলি রাখেন এবং সেই ক্ষেত্রগুলিতে আপনি কী ধরনের ডেটা সংরক্ষণ করেন সে সম্পর্কে আপনার সম্পূর্ণ স্বাধীনতা রয়েছে৷ একই সংগ্রহের মধ্যে থাকা নথিতে বিভিন্ন ক্ষেত্র থাকতে পারে বা সেই ক্ষেত্রগুলিতে বিভিন্ন ধরণের ডেটা সঞ্চয় করতে পারে। যাইহোক, একাধিক নথিতে একই ক্ষেত্র এবং ডেটা প্রকারগুলি ব্যবহার করা একটি ভাল ধারণা, যাতে আপনি নথিগুলিকে আরও সহজে জিজ্ঞাসা করতে পারেন৷
একটি সংগ্রহে নথি রয়েছে এবং অন্য কিছু নেই। এটি সরাসরি মান সহ কাঁচা ক্ষেত্র ধারণ করতে পারে না এবং এটি অন্যান্য সংগ্রহ ধারণ করতে পারে না। (ক্লাউড ফায়ারস্টোরে আরও জটিল ডেটা কীভাবে গঠন করা যায় তার ব্যাখ্যার জন্য হায়ারার্কিক্যাল ডেটা দেখুন।)
একটি সংগ্রহের মধ্যে নথির নাম অনন্য। আপনি আপনার নিজস্ব কী প্রদান করতে পারেন, যেমন ব্যবহারকারী আইডি, অথবা আপনি ক্লাউড ফায়ারস্টোরকে স্বয়ংক্রিয়ভাবে আপনার জন্য র্যান্ডম আইডি তৈরি করতে দিতে পারেন।
আপনার সংগ্রহগুলি "তৈরি করা" বা "মুছে ফেলার" দরকার নেই৷ আপনি একটি সংগ্রহে প্রথম নথি তৈরি করার পরে, সংগ্রহটি বিদ্যমান থাকে। আপনি যদি একটি সংগ্রহের সমস্ত নথি মুছে ফেলেন তবে এটি আর বিদ্যমান থাকবে না।
তথ্যসূত্র
ক্লাউড ফায়ারস্টোরের প্রতিটি নথি ডাটাবেসের মধ্যে তার অবস্থান দ্বারা অনন্যভাবে চিহ্নিত করা হয়। আগের উদাহরণটি সংগ্রহ users
মধ্যে একটি ডকুমেন্ট alovelace
দেখিয়েছে। আপনার কোডে এই অবস্থানটি উল্লেখ করতে, আপনি এটির একটি রেফারেন্স তৈরি করতে পারেন।
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web version 8
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
সুইফট
let alovelaceDocumentRef = db.collection("users").document("alovelace")
উদ্দেশ্য গ
FIRDocumentReference *alovelaceDocumentRef = [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Kotlin+KTX
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Dart
final alovelaceDocumentRef = db.collection("users").doc("alovelace");
জাভা
পাইথন
Python
সি++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
যাওয়া
পিএইচপি
$document = $db->collection('samples/php/users')->document('lovelace');
ঐক্য
DocumentReference documentRef = db.Collection("users").Document("alovelace");
সি#
DocumentReference documentRef = db.Collection("users").Document("alovelace");
রুবি
একটি রেফারেন্স হল একটি হালকা ওজনের বস্তু যা আপনার ডাটাবেসের একটি অবস্থানকে নির্দেশ করে। সেখানে ডেটা বিদ্যমান থাকুক বা না থাকুক আপনি একটি রেফারেন্স তৈরি করতে পারেন এবং একটি রেফারেন্স তৈরি করা কোনো নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করে না।
আপনি সংগ্রহের রেফারেন্সও তৈরি করতে পারেন:
Web version 9
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web version 8
var usersCollectionRef = db.collection('users');
সুইফট
let usersCollectionRef = db.collection("users")
উদ্দেশ্য গ
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Java
CollectionReference usersCollectionRef = db.collection("users");
Kotlin+KTX
val usersCollectionRef = db.collection("users")
Dart
final usersCollectionRef = db.collection("users");
জাভা
পাইথন
Python
সি++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
যাওয়া
পিএইচপি
$collection = $db->collection('samples/php/users');
ঐক্য
CollectionReference collectionRef = db.Collection("users");
সি#
CollectionReference collectionRef = db.Collection("users");
রুবি
সুবিধার জন্য, আপনি ফরওয়ার্ড স্ল্যাশ ( /
) দ্বারা পৃথক পাথ উপাদান সহ একটি স্ট্রিং হিসাবে একটি নথি বা সংগ্রহের পথ নির্দিষ্ট করে রেফারেন্স তৈরি করতে পারেন। উদাহরণস্বরূপ, alovelace
নথির একটি রেফারেন্স তৈরি করতে:
Web version 9
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web version 8
var alovelaceDocumentRef = db.doc('users/alovelace');
সুইফট
let aLovelaceDocumentReference = db.document("users/alovelace")
উদ্দেশ্য গ
FIRDocumentReference *aLovelaceDocumentReference = [self.db documentWithPath:@"users/alovelace"];
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Kotlin+KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
জাভা
পাইথন
Python
সি++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
যাওয়া
পিএইচপি
$document = $db->document('users/lovelace');
ঐক্য
DocumentReference documentRef = db.Document("users/alovelace");
সি#
DocumentReference documentRef = db.Document("users/alovelace");
রুবি
অনুক্রমিক ডেটা
ক্লাউড ফায়ারস্টোরে কীভাবে শ্রেণিবদ্ধ ডেটা স্ট্রাকচার কাজ করে তা বোঝার জন্য, বার্তা এবং চ্যাট রুম সহ একটি উদাহরণ চ্যাট অ্যাপ বিবেচনা করুন।
আপনি বিভিন্ন চ্যাট রুম সঞ্চয় করার জন্য rooms
নামে একটি সংগ্রহ তৈরি করতে পারেন:
name : "my chat room"
...
এখন আপনার চ্যাট রুম আছে, আপনার বার্তাগুলি কীভাবে সংরক্ষণ করবেন তা স্থির করুন৷ আপনি তাদের চ্যাট রুমের নথিতে সংরক্ষণ করতে চান না। ক্লাউড ফায়ারস্টোরের নথিগুলি হালকা হওয়া উচিত এবং একটি চ্যাট রুমে প্রচুর সংখ্যক বার্তা থাকতে পারে৷ যাইহোক, আপনি আপনার চ্যাট রুমের নথিতে উপ-সংগ্রহ হিসাবে অতিরিক্ত সংগ্রহ তৈরি করতে পারেন।
উপসংগ্রহ
এই পরিস্থিতিতে বার্তাগুলি সংরক্ষণ করার সর্বোত্তম উপায় হল উপ-সংগ্রহগুলি ব্যবহার করে৷ একটি উপসংগ্রহ একটি নির্দিষ্ট নথির সাথে যুক্ত একটি সংগ্রহ।
আপনি আপনার rooms
সংগ্রহে প্রতিটি ঘরের নথির জন্য messages
নামে একটি উপ-সংগ্রহ তৈরি করতে পারেন:
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
...
এই উদাহরণে, আপনি নিম্নলিখিত কোড সহ উপ-সংকলনে একটি বার্তার একটি রেফারেন্স তৈরি করবেন:
Web version 9
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web version 8
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
সুইফট
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
উদ্দেশ্য গ
FIRDocumentReference *messageRef = [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"] collectionWithPath:@"messages"] documentWithPath:@"message1"];
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Kotlin+KTX
val messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Dart
final messageRef = db .collection("rooms") .doc("roomA") .collection("messages") .doc("message1");
জাভা
পাইথন
Python
সি++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
যাওয়া
পিএইচপি
$document = $db ->collection('rooms') ->document('roomA') ->collection('messages') ->document('message1');
ঐক্য
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
সি#
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
রুবি
সংগ্রহ এবং নথির বিকল্প প্যাটার্ন লক্ষ্য করুন। আপনার সংগ্রহ এবং নথি সবসময় এই প্যাটার্ন অনুসরণ করা আবশ্যক. আপনি একটি সংগ্রহে একটি সংগ্রহ বা একটি নথিতে একটি নথি উল্লেখ করতে পারবেন না.
উপ-সংগ্রহগুলি আপনাকে ডেটা ক্রমানুসারে গঠন করতে দেয়, যাতে ডেটা অ্যাক্সেস করা সহজ হয়। roomA
-তে সমস্ত বার্তা পেতে, আপনি উপ-সংগ্রহ messages
একটি সংগ্রহের রেফারেন্স তৈরি করতে পারেন এবং অন্য কোনও সংগ্রহের রেফারেন্সের মতো এটির সাথে ইন্টারঅ্যাক্ট করতে পারেন।
উপসংগ্রহের নথিতে উপসংগ্রহও থাকতে পারে, যা আপনাকে আরও নেস্ট ডেটার অনুমতি দেয়। আপনি 100 স্তর গভীর পর্যন্ত ডেটা নেস্ট করতে পারেন৷