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

Firebase SQL Connect में, अपने वर्कफ़्लो और एनवायरमेंट के हिसाब से, बल्क में डेटा लोड और अपडेट किया जा सकता है:

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

  • प्रोडक्शन डेवलपमेंट में, जब स्टेबल स्कीमा के साथ, बड़े CI/CD फ़्लो किए जा रहे हों और प्रोडक्शन डेटा मैनेज किया जा रहा हो, तब आपके पास दो विकल्प होते हैं:

    • पहली प्राथमिकता, Firebase Admin SDK का इस्तेमाल करना है. यह लाइब्रेरी का एक सेट है जो खास एनवायरमेंट में काम करता है.

    • बल्क में डेटा लोड और अपडेट करने के लिए, Cloud SQL इंस्टेंस के साथ SQL टूल का भी इस्तेमाल किया जा सकता है. हालांकि, ऐसा तब ही किया जा सकता है, जब डेटा में बदलाव किया जा रहा हो, न कि डेटाबेस स्कीमा में. SQL टूल की मदद से, डेटाबेस स्कीमा में सीधे बदलाव करने पर, SQL 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 म्यूटेशन बनाने, डेटा को हार्ड-कोड करने, और चलाने के लिए, SQL Connect VS Code एक्सटेंशन में CodeLenses का इस्तेमाल किया जा सकता है.

हालांकि, _insertMany कार्रवाई का इस्तेमाल करके, किसी टेबल में कई रिकॉर्ड जोड़ना ज़्यादा सही होता है. मूवी रिव्यू ऐप्लिकेशन के उदाहरण में, इससे Movie और Actor में डेटा का शुरुआती सेट डाला जाता है.

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

सीड किए गए डेटा को रीसेट करने के लिए म्यूटेशन लिखना

प्रोटोटाइपिंग और CI/CD करते समय, डेटा के नए सेट पर टेस्ट की नई सीरीज़ चलाने के लिए, डेटा को ज़ीरो स्टेट पर रीसेट करना काम का हो सकता है.

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

यहां दिए गए उदाहरण में, मूवी रिकॉर्ड को उनकी ओरिजनल स्टेट में अपडेट करने के लिए, शुरुआती वैल्यू के साथ 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 SQL Connect का इस्तेमाल किया जा सकता है. इसमें आपका लोकल एनवायरमेंट भी शामिल है. आपको Node.js के लिए सेट अप करना होगा Admin SDK.

SQL Connect के अन्य SQL Connect इस्तेमाल के उदाहरणों में, Admin SDK के इस्तेमाल के बारे में ज़्यादा जाना जा सकता है.

प्रोडक्शन डेटा को बल्क में लोड और अपडेट करना

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

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

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

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);

प्रोडक्शन डेवलपमेंट: बल्क में डेटा अपडेट करने के लिए SQL का इस्तेमाल करना

जब प्रोडक्शन में स्टेबल स्कीमा के साथ काम किया जा रहा हो और स्कीमा में बदलाव न किया जा रहा हो, तब डेटा लोड और अपडेट मैनेज करने के लिए, Cloud SQL इंस्टेंस में काम किया जा सकता है.

डेटा इंपोर्ट करने के लिए, Cloud SQL for PostgreSQL गाइड देखें.

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