Firebase Data Connect এ, আপনি আপনার ওয়ার্কফ্লো এবং পরিবেশের ওপর নির্ভর করে বিভিন্ন উপায়ে বাল্ক ডেটা লোড ও আপডেট করতে পারেন:
লোকাল প্রোটোটাইপিংয়ের সময়, যখন আপনি বিকল্প স্কিমাগুলো পরীক্ষা করছেন, তখন ভিএস কোড এক্সটেনশন, Data Connect এমুলেটর এবং একটি লোকাল ডাটাবেস ইনস্ট্যান্স ব্যবহার করে লোকাল ডেভেলপমেন্ট এনভায়রনমেন্টে ডেটা সিডিং মিউটেশন তৈরি ও কল করা যেতে পারে।
প্রোডাকশন ডেভেলপমেন্টে , একটি স্থিতিশীল স্কিমা ব্যবহার করে, যখন আপনি বড় আকারের CI/CD ফ্লো সম্পাদন করেন এবং প্রোডাকশন ডেটা পরিচালনা করেন, তখন আপনার কাছে দুটি বিকল্প থাকে:
পছন্দনীয় পদ্ধতি হলো Firebase Admin SDK ব্যবহার করা, যা বিশেষাধিকারপ্রাপ্ত পরিবেশে চালিত লাইব্রেরির একটি সেট।
আপনি আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের সাথে এসকিউএল টুলস ব্যবহার করে বাল্ক লোড এবং আপডেটও করতে পারেন, তবে শর্ত হলো আপনাকে ডেটা পরিবর্তন করতে হবে, আপনার ডেটাবেস স্কিমা নয়। এসকিউএল টুলস দিয়ে সরাসরি আপনার ডেটাবেস স্কিমা পরিবর্তন করলে আপনার 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 টেবিলে ডেটা প্রবেশ করান
Depending on your stage of prototyping, you can use the same technique introduced in the Get started guide to insert one or two records: that is, you can use CodeLenses in the VS Code extension to create _insert mutations, hard-code data, and Run those mutations in VS Code .
অবশেষে, একটি টেবিলে _insertMany অপারেশন ব্যবহার করে অনেকগুলো রেকর্ড যোগ করাই বেশি যুক্তিযুক্ত। মুভি রিভিউ অ্যাপের উদাহরণে, এটি Movie এবং Actor ফোল্ডারে প্রাথমিক কিছু ডেটা ইনসার্ট করে।
নিম্নলিখিত মিউটেশনগুলি কার্যকর করতে, VS Code Firebase এক্সটেনশন ব্যবহার করে, উপযুক্ত ফাইল এডিটর ভিউতে, আপনি আপনার প্রোডাকশন সার্ভিস বা লোকাল ডেটাবেস দিয়ে প্রোটোটাইপিং করছেন কিনা তার উপর নির্ভর করে Run (Production) বা 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"
}
])
}
সিড ডেটা রিসেট করতে একটি মিউটেশন লিখুন
প্রোটোটাইপিং এবং 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 অন্যান্য ব্যবহার ক্ষেত্রে অ্যাডমিন এসডিকে ব্যবহারের বিষয়ে আপনি আরও জানতে পারবেন।
উৎপাদন ডেটার বাল্ক লোড এবং আপডেট সম্পাদন করুন।
বাল্ক ডেটা ম্যানেজমেন্টের জন্য ব্যবহৃত এপিআইটি আপনার হয়ে 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);
উৎপাদন উন্নয়ন: বাল্ক ডেটা আপডেটের জন্য SQL ব্যবহার করুন
যখন আপনি প্রোডাকশনে একটি স্থিতিশীল স্কিমা নিয়ে কাজ করছেন এবং আপনার স্কিমা পরিবর্তন করছেন না, তখন আপনি ডেটা লোড এবং আপডেট পরিচালনা করার জন্য আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সে কাজ করতে পারেন।
ডেটা ইম্পোর্ট করার জন্য Cloud SQL for PostgreSQL গাইডটি দেখুন।
এরপর কী?
- আপনার Data Connect প্রোজেক্টে Admin SDK ইন্টিগ্রেট করার বিষয়ে জানুন।