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

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

به همین دلیل است که Data Connect جهش های استاندارد _insertMany ، _upsertMany و _deleteMany را برای کاشت داده ها و مدیریت داده های انبوه فراهم می کند.

هنگامی که در حال نمونه‌سازی برنامه‌ها و اجرای جریان‌های CI/CD هستید، این جهش‌ها را می‌توان در یک محیط توسعه محلی با استفاده از پسوند VS Code، شبیه‌ساز 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 برای درج یک یا دو رکورد استفاده کنید: یعنی می توانید از Code Lenses در پسوند 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",
    }
   
}

بعدش چی؟