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

ক্লাউড ফায়ারস্টোর একটি 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 modular API

import { doc } from "firebase/firestore";

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

Web namespaced API

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

Kotlin+KTX

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");
Node.js
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
}
পিএইচপি

পিএইচপি

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

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

সি#

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

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

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

আপনি সংগ্রহের রেফারেন্সও তৈরি করতে পারেন:

Web modular API

import { collection } from "firebase/firestore";

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

Web namespaced API

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

Kotlin+KTX

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");
Node.js
const usersCollectionRef = db.collection('users');
যাওয়া

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

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

	_ = usersRef
}
পিএইচপি

পিএইচপি

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

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

সি#

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

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

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

Web modular API

import { doc } from "firebase/firestore"; 

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

Web namespaced API

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

Kotlin+KTX

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");
Node.js
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
}
পিএইচপি

পিএইচপি

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

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

সি#

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

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

অনুক্রমিক ডেটা

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

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

  • রুম

    • রুম ক

      name : "my chat room"

    • রুম খ

      ...

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

উপসংগ্রহ

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

আপনি আপনার rooms সংগ্রহে প্রতিটি ঘরের নথির জন্য messages নামে একটি উপ-সংগ্রহ তৈরি করতে পারেন:

  • রুম

    • রুম ক

      name : "my chat room"

      • বার্তা

        • বার্তা1

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

        • বার্তা2

          ...

    • রুম খ

      ...

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

Web modular API

import { doc } from "firebase/firestore"; 

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

Web namespaced API

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

Kotlin+KTX

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");
Node.js
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
}
পিএইচপি

পিএইচপি

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

$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");
রুবি
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

সংগ্রহ এবং নথির বিকল্প প্যাটার্ন লক্ষ্য করুন। আপনার সংগ্রহ এবং নথি সবসময় এই প্যাটার্ন অনুসরণ করা আবশ্যক. আপনি একটি সংগ্রহে একটি সংগ্রহ বা একটি নথিতে একটি নথি উল্লেখ করতে পারবেন না.

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

উপসংগ্রহের নথিতে উপসংগ্রহও থাকতে পারে, যা আপনাকে আরও নেস্ট ডেটার অনুমতি দেয়। আপনি 100 স্তর গভীর পর্যন্ত ডেটা নেস্ট করতে পারেন৷