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

ক্লাউড ফায়ারস্টোর একটি NoSQL, নথি-ভিত্তিক ডাটাবেস। একটি SQL ডাটাবেসের বিপরীতে, কোন টেবিল বা সারি নেই। পরিবর্তে, আপনি দস্তাবেজে ডেটা, সংগ্রহগুলি সংগঠিত করা হয় সংরক্ষণ করি।

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

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

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

নথিপত্র

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

একটি নথি একটি ব্যবহারকারী প্রতিনিধিত্বমূলক alovelace ভালো চেহারা পারে:

  • alovelace

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

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

  • alovelace

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

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

সংগ্রহ

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

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

    • alovelace

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

    • aturing

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

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

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

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

আপনার সংগ্রহগুলি "তৈরি করা" বা "মুছে ফেলার" দরকার নেই৷ আপনি একটি সংগ্রহে প্রথম নথি তৈরি করার পরে, সংগ্রহটি বিদ্যমান থাকে। আপনি যদি একটি সংগ্রহের সমস্ত নথি মুছে ফেলেন তবে এটি আর বিদ্যমান থাকবে না।

তথ্যসূত্র

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

ওয়েব সংস্করণ 9

import { doc } from "firebase/firestore";

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

ওয়েব সংস্করণ 8

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

জাভা

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

কোটলিন+কেটিএক্স

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

পাইথন

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');
যাওয়া
alovelaceRef := client.Collection("users").Doc("alovelace")
পিএইচপি
$document = $db->collection('samples/php/users')->document('lovelace');
ঐক্য
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
DocumentReference documentRef = db.Collection("users").Document("alovelace");
রুবি
document_ref = firestore.col("users").doc("alovelace")

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

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

ওয়েব সংস্করণ 9

import { collection } from "firebase/firestore";

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

ওয়েব সংস্করণ 8

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

জাভা

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

কোটলিন+কেটিএক্স

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

পাইথন

users_ref = db.collection("users")
সি++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
যাওয়া
usersRef := client.Collection("users")
পিএইচপি
$collection = $db->collection('samples/php/users');
ঐক্য
CollectionReference collectionRef = db.Collection("users");
C#
CollectionReference collectionRef = db.Collection("users");
রুবি
collection_ref = firestore.col "users"

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

ওয়েব সংস্করণ 9

import { doc } from "firebase/firestore"; 

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

ওয়েব সংস্করণ 8

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

জাভা

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

কোটলিন+কেটিএক্স

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

পাইথন

a_lovelace_ref = db.document("users/alovelace")
সি++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
যাওয়া
alovelaceRef := client.Doc("users/alovelace")
পিএইচপি
$document = $db->document('users/lovelace');
ঐক্য
DocumentReference documentRef = db.Document("users/alovelace");
C#
DocumentReference documentRef = db.Document("users/alovelace");
রুবি
document_path_ref = firestore.doc "users/alovelace"

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

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

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

  • কক্ষ

    • roomA

      name : "my chat room"

    • roomB

      ...

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

উপসংগ্রহ

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

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

  • কক্ষ

    • roomA

      name : "my chat room"

      • বার্তা

        • message1

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

        • message2

          ...

    • roomB

      ...

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

ওয়েব সংস্করণ 9

import { doc } from "firebase/firestore"; 

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

ওয়েব সংস্করণ 8

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"];

জাভা

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

কোটলিন+কেটিএক্স

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

পাইথন

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');
যাওয়া
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
পিএইচপি
$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
ঐক্য
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#
DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
রুবি
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

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

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

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