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

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

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

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

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

दस्तावेज़

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

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

  • एलोवेलेस

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

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

  • एलोवेलेस

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

आप देख सकते हैं कि दस्तावेज़ काफी हद तक JSON जैसे दिखते हैं। वास्तव में, वे मूलतः हैं। कुछ अंतर हैं (उदाहरण के लिए, दस्तावेज़ अतिरिक्त डेटा प्रकारों का समर्थन करते हैं और आकार में 1 एमबी तक सीमित हैं), लेकिन सामान्य तौर पर, आप दस्तावेज़ों को हल्के 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');
तीव्र
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
let alovelaceDocumentRef = db.collection("users").document("alovelace")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
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");
नोड.जे.एस
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');
तीव्र
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
let usersCollectionRef = db.collection("users")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
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");
नोड.जे.एस
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');
तीव्र
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
let aLovelaceDocumentReference = db.document("users/alovelace")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
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");
नोड.जे.एस
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');
तीव्र
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
उद्देश्य सी
नोट: यह उत्पाद वॉचओएस और ऐप क्लिप लक्ष्य पर उपलब्ध नहीं है।
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");
नोड.जे.एस
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 स्तर तक गहराई तक नेस्ट कर सकते हैं।