Cloud Firestore ডেটা মডেল

Cloud Firestore হল NoSQL, ডকুমেন্ট-ওরিয়েন্টেড ডেটাবেস। SQL ডেটাবেসের মতো, এতে কোনও টেবিল বা সারি নেই। পরিবর্তে, আপনি ডকুমেন্টে ডেটা স্টোর করেন, যা কালেকশনে সাজানো থাকে।

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

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

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

ডকুমেন্ট

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

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

  • alovelace

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

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

  • alovelace

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

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

সংগ্রহ

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

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

    • alovelace

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

    • aturing

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

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

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

একটি সংগ্রহের মধ্যে থাকা ডকুমেন্টের নাম অনন্য হয়। আপনি নিজের কী প্রদান করতে পারেন, যেমন ব্যবহারকারীর আইডি অথবা 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');
Swift
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
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");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Go

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

func createDocReference(client *firestore.Client) {

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

	_ = alovelaceRef
}
PHP

PHP

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

$document = $db->collection('samples/php/users')->document('alovelace');
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

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

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Ruby
document_ref = firestore.col("users").doc("alovelace")

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

এছাড়াও, আপনি কালেকশন-এর রেফারেন্স তৈরি করতে পারবেন:

Web

import { collection } from "firebase/firestore";

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

Web

var usersCollectionRef = db.collection('users');
Swift
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
let usersCollectionRef = db.collection("users")
Objective-C
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
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");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Go

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

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

	_ = usersRef
}
PHP

PHP

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

$collection = $db->collection('samples/php/users');
Unity
CollectionReference collectionRef = db.Collection("users");
C#

C#

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

CollectionReference collectionRef = db.Collection("users");
Ruby
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');
Swift
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
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");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Go

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
}
PHP

PHP

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

$document = $db->document('users/alovelace');
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

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

DocumentReference documentRef = db.Document("users/alovelace");
Ruby
document_path_ref = firestore.doc "users/alovelace"

হায়ারার্কিক্যাল ডেটা

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

বিভিন্ন চ্যাট রুম স্টোর করার জন্য আপনি rooms নামে একটি সংগ্রহ তৈরি করতে পারেন:

  • টি রুম

    • roomA

      name : "my chat room"

    • roomB

      ...

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

সাবকালেকশন

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

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

  • টি রুম

    • roomA

      name : "my chat room"

      • মেসেজ

        • message1

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

        • message2

          ...

    • roomB

      ...

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

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');
Swift
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
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");
Python
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")
C++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Go

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

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

	_ = messageRef
}
PHP

PHP

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

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unity
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

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

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

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

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

সাবকালেকশনের ডকুমেন্টে সাবকালেকশনও থাকতে পারে, যা আপনাকে আরও নেস্ট ডেটা করার অনুমতি দেয়। আপনি সর্বাধিক ১০০ লেভেল পর্যন্ত ডেটা নেস্ট করতে পারবেন।