Firebase Data Connect में, बल्क डेटा ऑपरेशन करने के लिए, बदलावों का इस्तेमाल किया जाता है. आपके Data Connect प्रोजेक्ट, PostgreSQL में डेटा सेव करते हैं. इसके बावजूद, एसक्यूएल स्टेटमेंट या एसक्यूएल टूल का इस्तेमाल करके, डेटा को एक साथ लोड नहीं किया जा सकता: आपकी Data Connect सेवा और उसके स्कीमा, आपके डेटाबेस के साथ सिंक होने चाहिए. सीधे PostgreSQL में काम करने से, यह सिंक होने की प्रोसेस रुक जाएगी.
इसलिए, Data Connect डेटा को सीड करने और बड़ी डेटावॉल्यूम को मैनेज करने के लिए, स्टैंडर्ड _insertMany
,
_upsertMany
, और _deleteMany
म्यूटेशन उपलब्ध कराता है.
ऐप्लिकेशन के प्रोटोटाइप बनाते समय और सीआई/सीडी फ़्लो चलाते समय, इन म्यूटेशन को स्थानीय डेवलपमेंट एनवायरमेंट में कॉल किया जा सकता है. इसके लिए, VS Code एक्सटेंशन, Data Connect एमुलेटर, और (ज़रूरी नहीं) स्थानीय डेटाबेस इंस्टेंस का इस्तेमाल किया जा सकता है.
लोकल और प्रोडक्शन इंस्टेंस में डेटा डालना
शुरू करने के लिए गाइड में, आपने ऐड-हॉक इंसर्ट म्यूटेशन का इस्तेमाल करके, किसी एक टेबल में एक रिकॉर्ड जोड़ने के लिए ऐप्लिकेशन सेट अप किया है.
मूवी की समीक्षा करने वाले ऐप्लिकेशन को इस्तेमाल करने के लिए, उसे मूवी, समीक्षाओं, और उपयोगकर्ताओं का डेटा चाहिए. इससे, क्वेरी और म्यूटेशन के प्रोटोटाइप तैयार किए जा सकते हैं. ये क्वेरी और म्यूटेशन, असल डेटा वाली कई टेबल पर जॉइन और अन्य ऑपरेशन का इस्तेमाल करते हैं. अपने स्कीमा को बड़ा किया जा सकता है और डेटाबेस को सेट किया जा सकता है.
में से किसी एक को देखें.डेटा सीड करने के लिए, आपके प्रोटोटाइप एनवायरमेंट में कोड की ज़रूरत होती है. इस गाइड में कुछ सैंपल दिए गए हैं, जिनमें ये चीज़ें दिखाई गई हैं:
- अलग-अलग टेबल में
_insertMany
और_upsertMany
का इस्तेमाल करना - मिलती-जुलती टेबल पर
_insertMany
का इस्तेमाल करना
मूवी की समीक्षा करने वाले ऐप्लिकेशन का स्कीमा अपडेट करना
_insertMany
और _upsertMany
म्यूटेशन का इस्तेमाल करके, अलग-अलग डेटाबेस टेबल को एक-एक करके अपडेट किया जा सकता है. इसके अलावा, जॉइन रिलेशनशिप से जुड़ी कई टेबल को भी अपडेट किया जा सकता है. यहां फ़िल्म की समीक्षा करने वाले ऐप्लिकेशन का बड़ा स्कीमा दिया गया है. इससे, इस्तेमाल के उदाहरणों और उदाहरणों को समझने में मदद मिलती है. यह schema.gql
को Movie
टाइप से ज़्यादा बढ़ाकर, Actor
और MovieActor
टाइप में शामिल करता है, ताकि हम ज़्यादा जटिल क्वेरी का प्रोटोटाइप बना सकें.
# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
id: UUID!
imageUrl: String!
name: String! @col(name: "name", dataType: "varchar(30)")
}
# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
# @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
# In this case, @ref(fields: "movieId", references: "id") is implied
movie: Movie!
# movieId: UUID! <- this is created by the implied @ref
actor: Actor!
# actorId: UUID! <- this is created by the implied @ref
role: String! # "main" or "supporting"
}
ज़ीरो स्टेट डेटा को सीड करने के लिए म्यूटेशन लिखना
प्रोटोटाइप बनाने के दौरान, जब आपकी क्वेरी और म्यूटेशन की अलग-अलग वैल्यू की रेंज के हिसाब से जांच की जानी हो, तो डेटा में एक से ज़्यादा रिकॉर्ड जोड़े जा सकते हैं. उदाहरण के लिए, तुलना करने और फ़िल्टर करने की सुविधा की जांच करने के लिए, अलग-अलग तरह की शैलियों और रेटिंग वाली कई मूवी रिकॉर्ड जोड़े जा सकते हैं.
Movie
और Actor
टेबल में डेटा डालना
प्रोटोटाइप बनाने के चरण के आधार पर, एक या दो रिकॉर्ड डालने के लिए, 'शुरू करने के लिए गाइड' में बताई गई उसी तकनीक का इस्तेमाल किया जा सकता है: इसका मतलब है कि _insert
म्यूटेशन, हार्ड-कोड डेटा बनाने के लिए, VS Code एक्सटेंशन में कोड लेंस का इस्तेमाल किया जा सकता है. साथ ही, VS Code में उन म्यूटेशन को चालू किया जा सकता है.
आखिरकार,
_insertMany
ऑपरेशन का इस्तेमाल करके, टेबल में कई रिकॉर्ड जोड़ना ज़्यादा सही होता है. फ़िल्म की समीक्षा करने वाले ऐप्लिकेशन के उदाहरण में, यह Movie
और Actor
में डेटा का शुरुआती सेट डालता है.
नीचे दिए गए म्यूटेशन को लागू करने के लिए, VS Code Firebase एक्सटेंशन का इस्तेमाल करें. इसके लिए, सही फ़ाइल एडिटर व्यू में, रन (प्रोडक्शन) या रन (लोकल) CodeLens बटन पर क्लिक करें. यह इस बात पर निर्भर करता है कि प्रोटोटाइप को प्रोडक्शन सेवा या लोकल डेटाबेस के साथ बनाया जा रहा है या नहीं.
# insertMany for Movie
# 2 records shown
mutation {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
}
# insertMany for Actor
# 2 records shown
mutation {
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
MovieActor
जॉइन टेबल में डेटा डालना
जॉइन और अन्य जटिल ऑपरेशन का इस्तेमाल करके क्वेरी और म्यूटेशन की जांच करने के लिए, MovieActor
टेबल में कई रिकॉर्ड जोड़े जा सकते हैं.
यहां, इस तरह के संबंध में एक से ज़्यादा टेबल अपडेट करते समय, @transaction
डायरेक्टिव जोड़ा जा सकता है, ताकि यह पक्का किया जा सके कि अपडेट सही तरीके से पूरा हो गया है.
mutation @transaction {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
बीज डेटा को रीसेट करने के लिए म्यूटेशन लिखना
प्रोटोटाइप बनाते और सीआई/सीडी करते समय, डेटा के नए सेट पर टेस्ट की नई सीरीज़ को लागू करने के लिए, डेटा को शून्य स्थिति पर रीसेट करना मददगार हो सकता है.
ऐसा करने के लिए, अगर आपका प्रोटोटाइप कोड आपकी टेबल में रिकॉर्ड नहीं जोड़ता है, तो Data Connect के दिए गए _upsertMany
म्यूटेशन का इस्तेमाल करें.
नीचे दिए गए उदाहरण में, फ़िल्म के रिकॉर्ड को उनकी मूल स्थिति में अपडेट करने के लिए, movie_upsertMany
को शुरुआती वैल्यू के साथ कॉल किया गया है.
mutation {
# Execute an upsertMany operation to update the Movie table
movie_upsertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
…
}
आगे क्या करना है?
- Admin SDK को अपने Data Connect प्रोजेक्ट में इंटिग्रेट करने के बारे में जानें.