في Firebase Data Connect، يمكنك إجراء عمليات تحميل وتعديل مجمّعة للبيانات بطرق مختلفة حسب سير العمل والبيئات:
في النماذج الأولية المحلية، عند تجربة مخططات بديلة، يمكن إنشاء عمليات تغيير لملء البيانات وتفعيلها في بيئة تطوير محلية باستخدام إضافة VS Code ومحاكي Data Connect ونسخة محلية من قاعدة البيانات.
في مرحلة تطوير الإصدار العلني، وعند استخدام مخطط ثابت، يتوفّر لك خياران عند تنفيذ عمليات أكبر في مسار التكامل المستمر/التسليم المستمر وإدارة بيانات الإصدار العلني:
الأسلوب المفضّل هو استخدام Firebase Admin SDK، وهي مجموعة من المكتبات التي تعمل في بيئات ذات امتيازات.
يمكنك أيضًا استخدام أدوات SQL مع مثيل Cloud SQL لإجراء عمليات تحميل وتعديل مجمّعة، طالما أنّك تعدّل البيانات وليس مخطط قاعدة البيانات. يمكن أن يؤدي تعديل مخطط قاعدة البيانات مباشرةً باستخدام أدوات SQL إلى تعطيل مخطط Data Connect والموصلات.
إنشاء نماذج أولية محلية: بيانات أولية في النسخ المحلية
في دليل البدء، يمكنك إعداد تطبيق لإضافة سجلّ واحد إلى جدول واحد باستخدام عملية إدراج مخصّصة.
لكي يكون تطبيق مراجعات الأفلام قابلاً للاستخدام، يجب أن يتضمّن بيانات للأفلام والمراجعات والمستخدمين من أجل إنشاء نماذج أولية للاستعلامات وعمليات التعديل التي تستخدم عمليات الربط وغيرها من العمليات على جداول متعددة تتضمّن بيانات واقعية. يمكنك توسيع المخطط وتعبئة قاعدة البيانات.
تحتاج بيئة إنشاء النماذج الأولية إلى رمز لتنفيذ عملية إدخال البيانات. يقدّم هذا الدليل بعض الأمثلة التي توضّح ما يلي:
- استخدام
_insertMany
و_upsertMany
في الجداول الفردية - استخدام
_insertMany
في الجداول ذات الصلة
تعديل مخطط تطبيق مراجعات الأفلام
يمكنك استخدام عمليات التعديل _insertMany
و_upsertMany
لتعديل جداول قاعدة البيانات الفردية واحدًا تلو الآخر، أو لتعديل جداول متعددة مرتبطة بعلاقات الربط. في ما يلي مخطط موسّع لتطبيق مراجعات الأفلام يساعد في توضيح حالات الاستخدام والأمثلة هذه. ويوسّع هذا النوع نطاق schema.gql
ليشمل أنواع Actor
وMovieActor
، بالإضافة إلى النوع Movie
الأولي، ما يتيح لنا إنشاء نماذج أولية لطلبات بحث أكثر تعقيدًا.
# 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
استنادًا إلى مرحلة إنشاء النموذج الأوّلي، يمكنك استخدام الأسلوب نفسه
المقدَّم في دليل "البدء" لإدراج سجلّ واحد أو سجلّين، أي يمكنك
استخدام CodeLenses في إضافة VS Code لإنشاء عمليات _insert
،
وتضمين البيانات في الرمز، وتنفيذ هذه العمليات في VS Code.
في النهاية، من المنطقي أكثر إضافة العديد من السجلات إلى جدول باستخدام عملية _insertMany
. في مثال تطبيق مراجعات الأفلام، يؤدي ذلك إلى إدراج مجموعة أولية من البيانات في Movie
وActor
.
لتنفيذ عمليات التعديل التالية، استخدِم إضافة Firebase في VS Code، ثم انقر على الزر تشغيل (مرحلة الإنتاج) أو تشغيل (محلي) في 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"
}
])
}
كتابة عملية تغيير لإعادة ضبط البيانات الأولية
أثناء إنشاء النماذج الأولية وتنفيذ عملية التكامل المستمر والتسليم المستمر، يمكن أن تكون إعادة ضبط البيانات إلى حالة صفرية مفيدة لتنفيذ سلسلة جديدة من الاختبارات على مجموعة جديدة من البيانات.
لإجراء ذلك، إذا لم يضِف رمز النموذج الأوّلي سجلات إلى جداولك، استخدِم عملية التغيير _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 حالات استخدام أخرى.
تنفيذ عمليات تحميل وتعديل مجمَّعة لبيانات الإنتاج
تنشئ واجهة برمجة التطبيقات لإدارة البيانات المجمّعة عمليات تعديل GraphQL نيابةً عنك، بدلاً من أن تطلب منك إنشاء سلاسل mutation {...}
باستخدام واجهة برمجة التطبيقات executeGraphQL
الموضّحة سابقًا لإضافة بضعة صفوف بشكل متفرّق محليًا.
من المزايا الرئيسية لواجهة برمجة التطبيقات الإدارية إمكانية إدارة وإعادة استخدام مصفوفات البيانات بشكل منفصل لعمليات التكامل المستمر/التسليم المستمر، أو إعداد ملفات بيانات مجمّعة كبيرة لبيانات الإنتاج.
توضّح المقتطفات التالية كيفية إعداد نص برمجي للبيانات المجمّعة.
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.