क्लाउड फायरस्टोर डेटा मॉडल

Cloud Firestore एक NoSQL, दस्तावेज़-उन्मुख डेटाबेस है। SQL डेटाबेस के विपरीत, कोई टेबल या पंक्तियाँ नहीं हैं। इसके बजाय, आप दस्तावेज़ों में डेटा है, जो संग्रह में आयोजन किया जाता है की दुकान।

प्रत्येक दस्तावेज़ कुंजी-मान जोड़ों का एक सेट होता। Cloud Firestore छोटे दस्तावेज़ों के बड़े संग्रह को संग्रहीत करने के लिए अनुकूलित है।

सभी दस्तावेजों को संग्रह में संग्रहित किया जाना चाहिए। दस्तावेज़ subcollections और नेस्टेड वस्तुओं, जो दोनों के तार या सूचियों की तरह जटिल वस्तुओं की तरह आदिम क्षेत्रों को शामिल कर सकते हो सकते हैं।

क्लाउड फायरस्टोर में संग्रह और दस्तावेज निहित रूप से बनाए जाते हैं। बस एक संग्रह के भीतर किसी दस्तावेज़ को डेटा असाइन करें। यदि संग्रह या दस्तावेज़ मौजूद नहीं है, तो Cloud Firestore इसे बनाता है।

दस्तावेज़

क्लाउड फायरस्टोर में, भंडारण की इकाई दस्तावेज़ है। एक दस्तावेज़ एक हल्का रिकॉर्ड होता है जिसमें फ़ील्ड होते हैं, जो मानों को मैप करते हैं। प्रत्येक दस्तावेज़ को एक नाम से पहचाना जाता है।

एक दस्तावेज़ एक उपयोगकर्ता को दर्शाने वाली alovelace ऐसा दिख सकता है:

  • alovelace

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

किसी दस्तावेज़ में जटिल, नेस्टेड वस्तुओं को मानचित्र कहा जाता है। उदाहरण के लिए, आप ऊपर दिए गए उदाहरण से उपयोगकर्ता के नाम को मानचित्र के साथ संरचित कर सकते हैं, जैसे:

  • alovelace

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

आप देख सकते हैं कि दस्तावेज़ बहुत कुछ JSON की तरह दिखते हैं। वास्तव में, वे मूल रूप से हैं। कुछ अंतर हैं (उदाहरण के लिए, दस्तावेज़ अतिरिक्त डेटा प्रकारों का समर्थन करते हैं और आकार में 1 एमबी तक सीमित हैं), लेकिन सामान्य तौर पर, आप दस्तावेज़ों को हल्के JSON रिकॉर्ड के रूप में मान सकते हैं।

संग्रह

दस्तावेज़ संग्रह में रहते हैं, जो दस्तावेज़ों के लिए केवल कंटेनर हैं। उदाहरण के लिए, यदि आप एक हो सकता था users अपने विभिन्न उपयोगकर्ताओं, प्रत्येक एक दस्तावेज के प्रतिनिधित्व को रोकने के लिए संग्रह:

  • उपयोगकर्ताओं

    • alovelace

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

    • aturing

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

Cloud Firestore स्कीमा रहित है, इसलिए आपको इस बात की पूर्ण स्वतंत्रता है कि आप प्रत्येक दस्तावेज़ में कौन-से फ़ील्ड डालते हैं और उन फ़ील्ड में आप किस प्रकार का डेटा संग्रहीत करते हैं। एक ही संग्रह के सभी दस्तावेज़ों में अलग-अलग फ़ील्ड हो सकते हैं या उन फ़ील्ड में विभिन्न प्रकार के डेटा संग्रहीत कर सकते हैं। हालांकि, एकाधिक दस्तावेज़ों में समान फ़ील्ड और डेटा प्रकारों का उपयोग करना एक अच्छा विचार है, ताकि आप दस्तावेज़ों को अधिक आसानी से क्वेरी कर सकें।

एक संग्रह में दस्तावेज़ होते हैं और कुछ नहीं। इसमें मूल्यों के साथ सीधे कच्चे फ़ील्ड नहीं हो सकते हैं, और इसमें अन्य संग्रह नहीं हो सकते हैं। (देखें श्रेणीबद्ध डेटा बादल Firestore में अधिक जटिल डेटा संरचित करने के तरीके के लिए स्पष्टीकरण।)

संग्रह के भीतर दस्तावेज़ों के नाम अद्वितीय हैं। आप अपनी खुद की चाबियां प्रदान कर सकते हैं, जैसे उपयोगकर्ता आईडी, या आप क्लाउड फायरस्टोर को आपके लिए स्वचालित रूप से यादृच्छिक आईडी बनाने दे सकते हैं।

आपको संग्रहों को "बनाने" या "हटाएं" करने की आवश्यकता नहीं है। संग्रह में पहला दस्तावेज़ बनाने के बाद, संग्रह मौजूद है। यदि आप किसी संग्रह के सभी दस्तावेज़ हटाते हैं, तो वह अब मौजूद नहीं रहेगा।

संदर्भ

Cloud Firestore में प्रत्येक दस्तावेज़ को डेटाबेस के भीतर उसके स्थान द्वारा विशिष्ट रूप से पहचाना जाता है। पिछले उदाहरण के एक दस्तावेज से पता चला है alovelace संग्रह के भीतर users । अपने कोड में इस स्थान का उल्लेख करने के लिए, आप इसे करने के लिए एक संदर्भ बना सकते हैं।

वेब संस्करण 9

import { doc } from "firebase/firestore";

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

वेब संस्करण 8

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
तीव्र
let alovelaceDocumentRef = db.collection("users").document("alovelace")
उद्देश्य सी
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");
सी#
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');
तीव्र
let usersCollectionRef = db.collection("users")
उद्देश्य सी
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");
सी#
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');
तीव्र
let aLovelaceDocumentReference = db.document("users/alovelace")
उद्देश्य सी
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");
सी#
DocumentReference documentRef = db.Document("users/alovelace");
माणिक
document_path_ref = firestore.doc "users/alovelace"

पदानुक्रमित डेटा

यह समझने के लिए कि क्लाउड फायरस्टोर में पदानुक्रमित डेटा संरचनाएं कैसे काम करती हैं, संदेशों और चैट रूम के साथ एक उदाहरण चैट ऐप पर विचार करें।

आप एक संग्रह बुलाया बना सकते हैं rooms अलग कमरे चैट स्टोर करने के लिए:

  • कमरे

    • roomA

      name : "my chat room"

    • roomB

      ...

अब जब आपके पास चैट रूम हैं, तो तय करें कि अपने संदेशों को कैसे संग्रहीत किया जाए। हो सकता है कि आप उन्हें चैट रूम के दस्तावेज़ में संग्रहीत नहीं करना चाहें। Cloud Firestore में दस्तावेज़ हल्के होने चाहिए, और एक चैट रूम में बड़ी संख्या में संदेश हो सकते हैं। हालांकि, आप अपने चैट रूम के दस्तावेज़ में उपसंग्रह के रूप में अतिरिक्त संग्रह बना सकते हैं।

उपसंग्रह

इस परिदृश्य में संदेशों को संग्रहीत करने का सबसे अच्छा तरीका उपसंग्रहों का उपयोग करना है। एक उपसंग्रह एक विशिष्ट दस्तावेज़ से जुड़ा एक संग्रह है।

आप एक 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');
तीव्र
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
उद्देश्य सी
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");
सी#
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 और उसके साथ सहभागिता की तरह आप किसी भी अन्य संग्रह संदर्भ।

उप-संग्रह में दस्तावेज़ों में उप-संग्रह भी हो सकते हैं, जिससे आप डेटा को और अधिक नेस्ट कर सकते हैं। आप डेटा को 100 स्तर तक नेस्ट कर सकते हैं।