داده‌ها را بذر و عملیات داده‌های انبوه را انجام دهید، داده‌ها را بذر و عملیات داده‌های انبوه را انجام دهید

در Firebase Data Connect ، بسته به گردش کار و محیط خود، می‌توانید بارگیری و به‌روزرسانی انبوه داده را به روش‌های مختلف انجام دهید:

  • در نمونه‌سازی محلی ، زمانی که شما طرح‌واره‌های جایگزین را امتحان می‌کنید، می‌توان جهش‌های بذر داده را با استفاده از پسوند VS Code، شبیه‌ساز Data Connect و یک نمونه پایگاه داده محلی ایجاد کرد و در یک محیط توسعه محلی فراخوانی کرد.

  • در توسعه تولید ، با یک طرحواره پایدار، هنگامی که جریان های CI/CD بزرگتر را انجام می دهید و داده های تولید را مدیریت می کنید، دو گزینه دارید:

    • رویکرد ترجیحی استفاده از Firebase Admin SDK است، مجموعه‌ای از کتابخانه‌ها که در محیط‌های ممتاز اجرا می‌شوند.

    • همچنین می‌توانید از ابزارهای SQL با نمونه Cloud 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 قرار دهید

بسته به مرحله نمونه سازی شما، می توانید از همان تکنیک معرفی شده در راهنمای Get Start برای درج یک یا دو رکورد استفاده کنید: یعنی می توانید از CodeLenses در پسوند VS Code برای ایجاد جهش های _insert ، داده های کد سخت و اجرای آن جهش ها در VS Code استفاده کنید.

در نهایت، افزودن رکوردهای زیادی به یک جدول با استفاده از عملیات _insertMany منطقی تر است. در مثال برنامه بررسی فیلم، مجموعه اولیه داده‌ها را در Movie و Actor وارد می‌کند.

برای اجرای جهش‌های زیر، با استفاده از پسوند VS Code Firebase، در نمای ویرایشگر فایل مناسب، بر روی دکمه‌های Run (Production) یا Run (محلی) 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 ارائه شده توسط Data 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 Data Connect از یک محیط ممتاز، از جمله محیط محلی خود، استفاده کنید. باید Admin SDK برای Node.js تنظیم کنید .

می‌توانید درباره استفاده از Admin SDK در سایر موارد استفاده Data Connect اطلاعات بیشتری کسب کنید.

انجام بارهای انبوه و به روز رسانی داده های تولید

API برای مدیریت داده های انبوه، جهش های GraphQL را از طرف شما ایجاد می کند، به جای اینکه از شما بخواهد رشته های mutation {...} را با API executeGraphQL که قبلا توضیح داده شد برای افزودن چند ردیف اینجا و آنجا به صورت محلی ایجاد کنید.

یکی از مزایای اصلی 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 برای به روز رسانی داده های انبوه استفاده کنید

وقتی در حال تولید با یک طرحواره پایدار کار می کنید، و طرحواره خود را تغییر نمی دهید، می توانید در نمونه Cloud SQL خود برای مدیریت بارگذاری داده ها و به روز رسانی ها کار کنید.

برای وارد کردن داده ها به راهنمای Cloud SQL برای PostgreSQL مراجعه کنید.

بعدش چی؟