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

در Firebase Data Connect ، عملیات داده انبوه با استفاده از جهش انجام می شود. حتی اگر پروژه‌های Data Connect شما داده‌ها را در PostgreSQL ذخیره می‌کنند، نمی‌توانید داده‌ها را با استفاده از دستورات SQL یا ابزار SQL بارگیری کنید: سرویس Data Connect و طرح‌واره‌های آن باید با پایگاه داده شما همگام باشند و کار کردن مستقیم در PostgreSQL این همگام‌سازی را از بین می‌برد.

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

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

  • در توسعه تولید ، هنگامی که جریان‌های CI/CD بزرگ‌تری را انجام می‌دهید و داده‌های تولید را مدیریت می‌کنید، می‌توانید از 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 قرار دهید

بسته به مرحله نمونه سازی شما، می توانید از همان تکنیک معرفی شده در راهنمای 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);

بعدش چی؟