বীজ ডেটা এবং বাল্ক ডেটা অপারেশন, বীজ ডেটা এবং বাল্ক ডেটা অপারেশন সঞ্চালন করে

Firebase Data Connect এ, আপনি আপনার কর্মপ্রবাহ এবং পরিবেশের উপর নির্ভর করে বিভিন্ন উপায়ে বাল্ক ডেটা লোড এবং আপডেট করতে পারেন:

  • স্থানীয় প্রোটোটাইপিং- এ, যখন আপনি বিকল্প স্কিমা চেষ্টা করছেন, তখন VS কোড এক্সটেনশন, Data Connect এমুলেটর এবং একটি স্থানীয় ডাটাবেস ইনস্ট্যান্স ব্যবহার করে স্থানীয় উন্নয়ন পরিবেশে ডেটা সিডিং মিউটেশন তৈরি এবং কল করা যেতে পারে।

  • উৎপাদন উন্নয়নে , একটি স্থিতিশীল স্কিমা সহ, যখন আপনি বৃহত্তর CI/CD প্রবাহ সম্পাদন করেন এবং উৎপাদন ডেটা পরিচালনা করেন, তখন আপনার কাছে দুটি বিকল্প থাকে:

    • পছন্দের পদ্ধতি হল Firebase Admin SDK ব্যবহার করা, যা বিশেষ সুবিধাপ্রাপ্ত পরিবেশে চালিত লাইব্রেরির একটি সেট।

    • আপনি আপনার ক্লাউড SQL ইনস্ট্যান্সের সাথে SQL টুল ব্যবহার করে বাল্ক লোড এবং আপডেট করতে পারেন, যতক্ষণ না আপনি ডেটা পরিবর্তন করছেন এবং আপনার ডাটাবেস স্কিমা নয়। SQL টুল দিয়ে সরাসরি আপনার ডাটাবেস স্কিমা পরিবর্তন করলে আপনার 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 টেবিলে ডেটা সিড করুন

আপনার প্রোটোটাইপিংয়ের স্তরের উপর নির্ভর করে, আপনি "শুরু করুন" নির্দেশিকায় প্রদত্ত একই কৌশল ব্যবহার করে এক বা দুটি রেকর্ড সন্নিবেশ করতে পারেন: অর্থাৎ, আপনি VS কোড এক্সটেনশনে CodeLenses ব্যবহার করে _insert মিউটেশন, হার্ড-কোড ডেটা তৈরি করতে এবং VS কোডে সেই মিউটেশনগুলি চালাতে পারেন।

অবশেষে, _insertMany অপারেশন ব্যবহার করে একটি টেবিলে অনেক রেকর্ড যোগ করা আরও যুক্তিসঙ্গত হয়ে ওঠে। মুভি রিভিউ অ্যাপের উদাহরণে, এটি Movie এবং Actor তে ডেটার একটি প্রাথমিক সেট সন্নিবেশ করায়।

নিম্নলিখিত মিউটেশনগুলি কার্যকর করতে, VS কোড ফায়ারবেস এক্সটেনশন ব্যবহার করে, উপযুক্ত ফাইল এডিটর ভিউতে, রান (প্রোডাকশন) অথবা রান (লোকাল) কোডলেন্স বোতামে ক্লিক করুন, যা নির্ভর করে আপনি আপনার প্রোডাকশন পরিষেবা বা স্থানীয় ডাটাবেসের সাথে প্রোটোটাইপ করছেন কিনা তার উপর।

# 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 সম্পাদনের সময়, নতুন ডেটা সেটের উপর নতুন সিরিজের পরীক্ষা চালানোর জন্য ডেটাকে শূন্য অবস্থায় রিসেট করা কার্যকর হতে পারে।

এটি করার জন্য, যদি আপনার প্রোটোটাইপ কোড আপনার টেবিলে রেকর্ড যোগ না করে, তাহলে 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 ব্যবহার সম্পর্কে আরও জানতে পারবেন।

উৎপাদন ডেটার বাল্ক লোড এবং আপডেট সম্পাদন করুন।

বাল্ক ডেটা ম্যানেজমেন্টের API আপনার পক্ষে GraphQL মিউটেশন তৈরি করে, স্থানীয়ভাবে এখানে-সেখানে কয়েকটি সারি যোগ করার জন্য পূর্বে বর্ণিত executeGraphQL API দিয়ে mutation {...} স্ট্রিং তৈরি করতে বলার পরিবর্তে।

প্রশাসনিক API-এর একটি প্রধান সুবিধা হল 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 ব্যবহার করুন

যখন আপনি প্রোডাকশনে একটি স্থিতিশীল স্কিমা নিয়ে কাজ করছেন এবং আপনার স্কিমা পরিবর্তন করছেন না, তখন আপনি আপনার ক্লাউড SQL ইনস্ট্যান্সে ডেটা লোড এবং আপডেট পরিচালনা করতে পারেন।

ডেটা আমদানির জন্য ক্লাউড SQL for PostgreSQL নির্দেশিকাটি দেখুন।

এরপর কী?