ক্লাউড ফায়ারস্টোর ডেটা মডেল

Cloud Firestore একটি NoSQL, ডকুমেন্ট-ভিত্তিক ডেটাবেস। SQL ডেটাবেসের মতো এতে কোনো টেবিল বা সারি নেই। এর পরিবর্তে, আপনি ডকুমেন্ট -এ ডেটা সংরক্ষণ করেন, যা কালেকশন -এ সংগঠিত থাকে।

প্রতিটি ডকুমেন্টে এক সেট কী-ভ্যালু পেয়ার থাকে। Cloud Firestore ছোট ছোট ডকুমেন্টের বিশাল সংগ্রহ সংরক্ষণের জন্য বিশেষভাবে তৈরি।

সমস্ত ডকুমেন্ট অবশ্যই কালেকশনে সংরক্ষণ করতে হবে। ডকুমেন্টের মধ্যে সাব-কালেকশন এবং নেস্টেড অবজেক্ট থাকতে পারে, যেগুলোর উভয়টিতেই স্ট্রিং-এর মতো প্রিমিটিভ ফিল্ড অথবা লিস্টের মতো জটিল অবজেক্ট অন্তর্ভুক্ত থাকতে পারে।

Cloud Firestore কালেকশন এবং ডকুমেন্ট স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়। একটি কালেকশনের মধ্যে থাকা কোনো ডকুমেন্টে শুধু ডেটা অ্যাসাইন করুন। যদি কালেকশন বা ডকুমেন্টটির কোনোটি বিদ্যমান না থাকে, Cloud Firestore তা তৈরি করে দেয়।

নথি

Cloud Firestore , স্টোরেজের একক হলো ডকুমেন্ট। ডকুমেন্ট হলো একটি লাইটওয়েট রেকর্ড যাতে ফিল্ড থাকে, যা ভ্যালুর সাথে ম্যাপ করা থাকে। প্রতিটি ডকুমেন্ট একটি নাম দ্বারা চিহ্নিত করা হয়।

alovelace নামের একজন ব্যবহারকারীর প্রতিনিধিত্বকারী একটি ডকুমেন্ট দেখতে এইরকম হতে পারে:

  • অ্যালোভলেস

    first : "Ada"
    last : "Lovelace"
    born : 1815

একটি ডকুমেন্টের মধ্যে থাকা জটিল, নেস্টেড অবজেক্টগুলোকে ম্যাপ বলা হয়। উদাহরণস্বরূপ, আপনি উপরের উদাহরণ থেকে ব্যবহারকারীর নামটি একটি ম্যাপ ব্যবহার করে এভাবে সাজাতে পারেন:

  • অ্যালোভলেস

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

আপনি হয়তো লক্ষ্য করবেন যে ডকুমেন্টগুলো দেখতে অনেকটা JSON-এর মতোই। আসলে, এগুলো মূলত তাই। কিছু পার্থক্য আছে (উদাহরণস্বরূপ, ডকুমেন্টগুলো অতিরিক্ত ডেটা টাইপ সমর্থন করে এবং ডকুমেন্টের আকারের সীমাবদ্ধতা দ্বারা সীমিত থাকে), কিন্তু সাধারণভাবে, আপনি ডকুমেন্টগুলোকে হালকা JSON রেকর্ড হিসেবে বিবেচনা করতে পারেন।

সংগ্রহ

ডকুমেন্টগুলো কালেকশনের মধ্যে থাকে, যা মূলত ডকুমেন্ট রাখার একটি ধারক। উদাহরণস্বরূপ, আপনার বিভিন্ন ব্যবহারকারীকে রাখার জন্য একটি users কালেকশন থাকতে পারে, যেখানে প্রত্যেক ব্যবহারকারী একটি ডকুমেন্টের মাধ্যমে উপস্থাপিত হয়:

  • ব্যবহারকারী

    • অ্যালোভলেস

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • ভ্রমণ

      first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore স্কিমাবিহীন, তাই প্রতিটি ডকুমেন্টে আপনি কী কী ফিল্ড রাখবেন এবং সেই ফিল্ডগুলিতে কী ধরনের ডেটা সংরক্ষণ করবেন, সে বিষয়ে আপনার সম্পূর্ণ স্বাধীনতা রয়েছে। একই কালেকশনের অন্তর্গত ডকুমেন্টগুলিতে ভিন্ন ভিন্ন ফিল্ড থাকতে পারে অথবা সেই ফিল্ডগুলিতে ভিন্ন ভিন্ন ধরনের ডেটা সংরক্ষণ করা যেতে পারে। তবে, একাধিক ডকুমেন্টে একই ফিল্ড এবং ডেটা টাইপ ব্যবহার করা ভালো, যাতে আপনি ডকুমেন্টগুলো আরও সহজে কোয়েরি করতে পারেন।

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

একটি সংগ্রহের অন্তর্গত নথিগুলোর নাম অনন্য হয়। আপনি আপনার নিজস্ব কী (key), যেমন ইউজার আইডি, প্রদান করতে পারেন, অথবা Cloud Firestore আপনার জন্য স্বয়ংক্রিয়ভাবে র‍্যান্ডম আইডি তৈরি করতে দিতে পারেন।

কালেকশন 'তৈরি' বা 'মুছে ফেলার' প্রয়োজন নেই। কোনো কালেকশনে প্রথম ডকুমেন্টটি তৈরি করার পর, কালেকশনটির অস্তিত্ব তৈরি হয়ে যায়। যদি আপনি কালেকশনের সমস্ত ডকুমেন্ট মুছে ফেলেন, তবে সেটির আর অস্তিত্ব থাকে না।

তথ্যসূত্র

Cloud Firestore প্রতিটি ডকুমেন্ট ডাটাবেসের মধ্যে তার অবস্থান দ্বারা অনন্যভাবে চিহ্নিত করা হয়। পূর্ববর্তী উদাহরণে users কালেকশনের মধ্যে alovelace একটি ডকুমেন্ট দেখানো হয়েছিল। আপনার কোডে এই অবস্থানটি উল্লেখ করার জন্য, আপনি এটির একটি রেফারেন্স তৈরি করতে পারেন।

Web

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

Web

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
let alovelaceDocumentRef = db.collection("users").document("alovelace")
উদ্দেশ্য-সি
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin

val alovelaceDocumentRef = db.collection("users").document("alovelace")

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
জাভা
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
পাইথন
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
সি++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
নোড.জেএস
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
যান

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
পিএইচপি

পিএইচপি

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

$document = $db->collection('samples/php/users')->document('alovelace');
ঐক্য
DocumentReference documentRef = db.Collection("users").Document("alovelace");
সি#

সি#

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

DocumentReference documentRef = db.Collection("users").Document("alovelace");
রুবি
document_ref = firestore.col("users").doc("alovelace")

রেফারেন্স হলো একটি লাইটওয়েট অবজেক্ট যা আপনার ডাটাবেসের কোনো একটি অবস্থানকে নির্দেশ করে। সেখানে ডেটা থাকুক বা না থাকুক, আপনি একটি রেফারেন্স তৈরি করতে পারেন এবং রেফারেন্স তৈরি করার সময় কোনো নেটওয়ার্ক অপারেশন সম্পাদিত হয় না।

আপনি কালেকশনগুলির রেফারেন্সও তৈরি করতে পারেন:

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
let usersCollectionRef = db.collection("users")
উদ্দেশ্য-সি
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin

val usersCollectionRef = db.collection("users")

Java

CollectionReference usersCollectionRef = db.collection("users");

Dart

final usersCollectionRef = db.collection("users");
জাভা
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
পাইথন
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
সি++
CollectionReference users_collection_reference = db->Collection("users");
নোড.জেএস
const usersCollectionRef = db.collection('users');
যান

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
পিএইচপি

পিএইচপি

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

$collection = $db->collection('samples/php/users');
ঐক্য
CollectionReference collectionRef = db.Collection("users");
সি#

সি#

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

CollectionReference collectionRef = db.Collection("users");
রুবি
collection_ref = firestore.col "users"

সুবিধার জন্য, আপনি কোনো ডকুমেন্ট বা কালেকশনের পাথকে স্ট্রিং হিসেবে উল্লেখ করেও রেফারেন্স তৈরি করতে পারেন, যেখানে পাথের অংশগুলো একটি ফরওয়ার্ড স্ল্যাশ ( / ) দ্বারা আলাদা করা থাকে। উদাহরণস্বরূপ, alovelace ডকুমেন্টটির একটি রেফারেন্স তৈরি করতে:

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
let aLovelaceDocumentReference = db.document("users/alovelace")
উদ্দেশ্য-সি
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin

val alovelaceDocumentRef = db.document("users/alovelace")

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Dart

final aLovelaceDocRef = db.doc("users/alovelace");
জাভা
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
পাইথন
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
সি++
DocumentReference alovelace_document = db->Document("users/alovelace");
নোড.জেএস
const alovelaceDocumentRef = db.doc('users/alovelace');
যান

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
পিএইচপি

পিএইচপি

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

$document = $db->document('users/alovelace');
ঐক্য
DocumentReference documentRef = db.Document("users/alovelace");
সি#

সি#

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

DocumentReference documentRef = db.Document("users/alovelace");
রুবি
document_path_ref = firestore.doc "users/alovelace"

শ্রেণিবদ্ধ ডেটা

Cloud Firestore হায়ারারকিক্যাল ডেটা স্ট্রাকচার কীভাবে কাজ করে তা বোঝার জন্য, মেসেজ এবং চ্যাট রুম সহ একটি উদাহরণ চ্যাট অ্যাপ বিবেচনা করুন।

আপনি বিভিন্ন চ্যাট রুম সংরক্ষণ করার জন্য rooms নামে একটি কালেকশন তৈরি করতে পারেন:

  • রুম

    • A

      name : "my chat room"

    • বি

      ...

এখন যেহেতু আপনার চ্যাট রুম আছে, আপনার মেসেজগুলো কীভাবে সংরক্ষণ করবেন তা ঠিক করুন। আপনি হয়তো সেগুলোকে চ্যাট রুমের ডকুমেন্টে সংরক্ষণ করতে চাইবেন না। Cloud Firestore ডকুমেন্টগুলো হালকা হওয়া উচিত, এবং একটি চ্যাট রুমে প্রচুর সংখ্যক মেসেজ থাকতে পারে। তবে, আপনি আপনার চ্যাট রুমের ডকুমেন্টের ভেতরে সাব-কালেকশন হিসেবে অতিরিক্ত কালেকশন তৈরি করতে পারেন।

উপ-সংগ্রহ

এই পরিস্থিতিতে মেসেজ সংরক্ষণ করার সেরা উপায় হলো সাবকালেকশন ব্যবহার করা। সাবকালেকশন হলো একটি কালেকশন যা একটি নির্দিষ্ট ডকুমেন্টের সাথে যুক্ত থাকে।

আপনি আপনার rooms কালেকশনের প্রতিটি room ডকুমেন্টের জন্য messages নামে একটি সাব-কালেকশন তৈরি করতে পারেন:

  • রুম

    • A

      name : "my chat room"

      • বার্তা

        • বার্তা১

          from : "alex"
          msg : "Hello World!"

        • বার্তা২

          ...

    • বি

      ...

এই উদাহরণে, আপনি নিম্নলিখিত কোড ব্যবহার করে সাবকালেকশনের মধ্যে থাকা একটি মেসেজের রেফারেন্স তৈরি করবেন:

Web

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
উদ্দেশ্য-সি
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin

val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Dart

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("message1");
জাভা
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
পাইথন
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
সি++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
নোড.জেএস
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
যান

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
পিএইচপি

পিএইচপি

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
ঐক্য
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
সি#

সি#

Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
রুবি
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

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

সাবকালেকশন আপনাকে ডেটাকে স্তরবিন্যাস অনুযায়ী সাজাতে সাহায্য করে, ফলে ডেটা অ্যাক্সেস করা সহজ হয়। roomA এর সমস্ত মেসেজ পেতে, আপনি messages সাবকালেকশনটির একটি কালেকশন রেফারেন্স তৈরি করতে পারেন এবং অন্য যেকোনো কালেকশন রেফারেন্সের মতোই এটি ব্যবহার করতে পারেন।

উপ-সংগ্রহের নথিগুলির মধ্যেও উপ-সংগ্রহ থাকতে পারে, যা আপনাকে ডেটাকে আরও স্তর পর্যন্ত বিন্যস্ত করার সুযোগ দেয়। আপনি ১০০ স্তর পর্যন্ত ডেটা বিন্যস্ত করতে পারেন।