डेटा डालना और बल्क डेटा ऑपरेशन करना

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 में डेटा का शुरुआती सेट डालता है.

वीएस कोड Firebase एक्सटेंशन का इस्तेमाल करके, सही फ़ाइल एडिटर व्यू में, यहां दिए गए म्यूटेशन को लागू करने के लिए, Run (प्रोडक्शन) या Run (Local) 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",
    }
   
}

आगे क्या करना है?