در 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",
}
…
}
بعدش چی؟
- درباره ادغام Admin SDK در پروژه های Data Connect خود بیاموزید.