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

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",
    }
   
}

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