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

Firebase Data Connect में, एक साथ कई डेटा ऑपरेशन करने के लिए, बदलावों का इस्तेमाल किया जाता है. आपके Data Connect प्रोजेक्ट, PostgreSQL में डेटा सेव करते हैं. इसके बावजूद, एसक्यूएल स्टेटमेंट या एसक्यूएल टूल का इस्तेमाल करके, डेटा को एक साथ लोड नहीं किया जा सकता: आपकी Data Connect सेवा और उसके स्कीमा, आपके डेटाबेस के साथ सिंक होने चाहिए. सीधे PostgreSQL में काम करने से, यह सिंक होने की प्रोसेस रुक जाएगी.

Data Connect में, डेटा को सीड करने और एक साथ कई डेटा को मैनेज करने के लिए, म्यूटेशन का इस्तेमाल किया जाता है. अपने वर्कफ़्लो और एनवायरमेंट के आधार पर, डेटा मैनेजमेंट म्यूटेशन को अलग-अलग तरीकों से बनाया और कॉल किया जा सकता है:

  • लोकल डेवलपमेंट में, ऐप्लिकेशन के प्रोटोटाइप बनाते समय, डेटा सीडिंग म्यूटेशन बनाए जा सकते हैं और उन्हें लोकल डेवलपमेंट एनवायरमेंट में कॉल किया जा सकता है. इसके लिए, VS Code एक्सटेंशन, Data Connect एमुलेटर, और लोकल डेटाबेस इंस्टेंस का इस्तेमाल किया जा सकता है.

  • प्रोडक्शन डेवलपमेंट में, बड़े सीआई/सीडी फ़्लो और प्रोडक्शन डेटा को मैनेज करते समय, Firebase Admin SDK का इस्तेमाल किया जा सकता है. यह लाइब्रेरी का एक सेट है, जो खास एनवायरमेंट में काम करता है.

लोकल डेवलपमेंट: लोकल इंस्टेंस में बीज डेटा

शुरू करने के लिए गाइड में, आपने ऐड-हॉक इंसर्ट म्यूटेशन का इस्तेमाल करके, किसी एक टेबल में एक रिकॉर्ड जोड़ने के लिए ऐप्लिकेशन सेट अप किया है.

मूवी की समीक्षा करने वाले ऐप्लिकेशन को इस्तेमाल करने के लिए, उसे मूवी, समीक्षाओं, और उपयोगकर्ताओं का डेटा चाहिए. इससे, क्वेरी और म्यूटेशन के प्रोटोटाइप तैयार किए जा सकते हैं. ये क्वेरी और म्यूटेशन, असल डेटा वाली कई टेबल पर जॉइन और अन्य ऑपरेशन का इस्तेमाल करते हैं. अपने स्कीमा को बड़ा किया जा सकता है और डेटाबेस को सेट किया जा सकता है.

में से किसी एक को देखें.

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

  • अलग-अलग टेबल में _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 एक्सटेंशन में CodeLenses का इस्तेमाल किया जा सकता है.

आखिरकार, _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 का इस्तेमाल करें

Firebase Admin SDK तब उपलब्ध होता है, जब आपको ऐक्सेस की अनुमति वाले एनवायरमेंट से काम करना हो. अगर आपको हज़ारों रिकॉर्ड लोड करने हैं, तो यह इस्तेमाल का एक अहम उदाहरण है. ऐसा इसलिए, क्योंकि आपके प्रोडक्शन डेटा पर बल्क डेटा ऑपरेशन की अहमियत होती है.

Firebase Admin SDK इंस्टॉल करना

भले ही, आपका मुख्य काम स्थानीय तौर पर हो, Firebase का सुझाव है कि आप Admin SDK सेट अप करें. इससे, आपके पास अपने स्थानीय एनवायरमेंट के साथ-साथ, किसी भी एनवायरमेंट में Firebase Data Connect का इस्तेमाल करने का विकल्प होगा. आपको Node.js के लिए, Admin SDK को सेट अप करना होगा.

Data Connect इस्तेमाल के अन्य उदाहरणों में, एडमिन SDK टूल का इस्तेमाल करने के बारे में ज़्यादा जानें.

प्रॉडक्शन डेटा को एक साथ लोड करना और अपडेट करना

बल्क डेटा मैनेजमेंट के लिए एपीआई, आपकी ओर से GraphQL म्यूटेशन बनाता है. इसके बजाय, वह आपको यहां और वहां कुछ पंक्तियां जोड़ने के लिए, पहले बताए गए executeGraphQL एपीआई के साथ mutation {...} स्ट्रिंग बनाने के लिए नहीं कहता.

एडमिन ऐपीआई का एक बड़ा फ़ायदा यह है कि इससे सीआई/सीडी फ़्लो के लिए, डेटा के ऐरे को अलग से मैनेज किया जा सकता है और उनका फिर से इस्तेमाल किया जा सकता है. इसके अलावा, प्रोडक्शन डेटा के लिए बड़ी डेटा फ़ाइलें सेट अप की जा सकती हैं.

यहां दिए गए स्निपेट में, बड़ी डेटा स्क्रिप्ट सेट अप करने का तरीका बताया गया है.

import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';

const app = initializeApp();

const dc = getDataConnect({ location: "us-west2", serviceId: "my-service" });

const 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",
    }
];

// Methods of the bulk operations API
const resp = await dc.insert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.insertMany("movie" /*table name*/, data);

// Or
const resp = await dc.upsert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.upsertMany("movie" /*table name*/, data);

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