क्लाउड फायरस्टोर एक 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");
जावा
अजगर
Python
सी++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
नोड.जे.एस
जाना
पीएचपी
पीएचपी
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
एकता
DocumentReference documentRef = db.Collection("users").Document("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");
जावा
अजगर
Python
सी++
CollectionReference users_collection_reference = db->Collection("users");
नोड.जे.एस
जाना
पीएचपी
पीएचपी
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
एकता
CollectionReference collectionRef = db.Collection("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");
जावा
अजगर
Python
सी++
DocumentReference alovelace_document = db->Document("users/alovelace");
नोड.जे.एस
जाना
पीएचपी
पीएचपी
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
एकता
DocumentReference documentRef = db.Document("users/alovelace");
सी#
सी#
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
माणिक
पदानुक्रमित डेटा
यह समझने के लिए कि क्लाउड फायरस्टोर में पदानुक्रमित डेटा संरचनाएं कैसे काम करती हैं, संदेशों और चैट रूम के साथ एक उदाहरण चैट ऐप पर विचार करें।
आप अलग-अलग चैट रूम को संग्रहीत करने के लिए rooms
नामक एक संग्रह बना सकते हैं:
name : "my chat room"
...
अब जब आपके पास चैट रूम हैं, तो तय करें कि अपने संदेशों को कैसे संग्रहीत किया जाए। हो सकता है कि आप उन्हें चैट रूम के दस्तावेज़ में संग्रहीत न करना चाहें। क्लाउड फायरस्टोर में दस्तावेज़ हल्के होने चाहिए, और चैट रूम में बड़ी संख्या में संदेश हो सकते हैं। हालाँकि, आप अपने चैट रूम के दस्तावेज़ में उपसंग्रह के रूप में अतिरिक्त संग्रह बना सकते हैं।
उपसंग्रह
इस परिदृश्य में संदेशों को संग्रहीत करने का सबसे अच्छा तरीका उपसंग्रहों का उपयोग करना है। उपसंग्रह एक विशिष्ट दस्तावेज़ से जुड़ा संग्रह है।
आप अपने rooms
संग्रह में प्रत्येक कमरे के दस्तावेज़ के लिए messages
नामक एक उपसंग्रह बना सकते हैं:
name : "my chat room"
from : "alex"
msg : "Hello World!"
...
...
इस उदाहरण में, आप निम्नलिखित कोड के साथ उपसंग्रह में एक संदेश का संदर्भ बनाएंगे:
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");
जावा
अजगर
Python
सी++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
नोड.जे.एस
जाना
पीएचपी
पीएचपी
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
एकता
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
सी#
सी#
क्लाउड फायरस्टोर क्लाइंट स्थापित करने और बनाने के बारे में अधिक जानकारी के लिए, क्लाउड फायरस्टोर क्लाइंट लाइब्रेरीज़ देखें।
माणिक
संग्रहों और दस्तावेज़ों के वैकल्पिक पैटर्न पर ध्यान दें। आपके संग्रह और दस्तावेज़ों को हमेशा इसी पैटर्न का पालन करना चाहिए। आप किसी संग्रह को किसी संग्रह में या किसी दस्तावेज़ को किसी दस्तावेज़ में संदर्भित नहीं कर सकते।
उपसंग्रह आपको डेटा को पदानुक्रमित रूप से संरचित करने की अनुमति देता है, जिससे डेटा तक पहुंच आसान हो जाती है। roomA
में सभी संदेश प्राप्त करने के लिए, आप उपसंग्रह messages
के लिए एक संग्रह संदर्भ बना सकते हैं और इसके साथ इंटरैक्ट कर सकते हैं जैसे आप किसी अन्य संग्रह संदर्भ के साथ करते हैं।
उपसंग्रहों में दस्तावेज़ों में उपसंग्रह भी शामिल हो सकते हैं, जिससे आप डेटा को और अधिक नेस्ट कर सकते हैं। आप डेटा को 100 स्तर तक गहराई तक नेस्ट कर सकते हैं।