في Firebase Data Connect، يتم تنفيذ عمليات البيانات المجمّعة باستخدام الطفرات. على الرغم من أنّ مشاريع Data Connect تخزِّن البيانات في PostgreSQL، لا يمكنك تحميل البيانات بشكلٍ مجمّع باستخدام عبارات SQL أو أدوات SQL: يجب أن تظل خدمة Data Connect ومخطّطاتها متزامنة مع قاعدة بياناتك، وسيؤدي العمل مباشرةً في PostgreSQL إلى إيقاف هذه المزامنة.
في Data Connect، يمكنك استخدام التعديلات لإنشاء قاعدة بيانات وإدارة البيانات المجمّعة. يمكنك إنشاء عمليات التعديل لإدارة البيانات واستدعاؤها بطرق مختلفة استنادًا إلى مسارات العمل والبيئات:
في التطوير على الجهاز، عند إنشاء نماذج أولية للتطبيقات، يمكن إنشاء طفرات لبدء استخدام البيانات والاستدعاء في بيئة تطوير على الجهاز باستخدام إضافة VS Code ومحاكي Data Connect ومثيل قاعدة بيانات على الجهاز.
في تطوير الإصدار العلني، عند تنفيذ عمليات أكبر لدمج الإصدارات ونشرها وإدارة بيانات الإصدار العلني، يمكنك استخدام Firebase Admin SDK، وهي مجموعة من المكتبات التي تعمل في بيئات مميّزة.
التطوير على الجهاز: إنشاء بيانات أساسية في النُسخ المحلية
في دليل البدء، يمكنك إعداد تطبيق لإضافة سجلّ واحد إلى جدول واحد باستخدام عملية إدراج مخصّصة.
لكي يكون تطبيق مراجعة الأفلام قابلاً للاستخدام، يحتاج إلى بيانات عن الأفلام والمراجعات والمستخدمين من أجل إنشاء نماذج أولية لطلبات البحث والطفرات التي تستخدِم عمليات الدمج والعمليات الأخرى على جداول متعدّدة تحتوي على بيانات واقعية. يمكنك توسيع مخطّطك وإنشاء قاعدة بياناتك.
.تحتاج بيئة وضع النماذج إلى رمز لتنفيذ عملية إنشاء قاعدة بيانات. يقدّم هذا الدليل بعض النماذج التي توضّح ما يلي:
- استخدام
_insertMany
و_upsertMany
في الجداول الفردية - استخدام
_insertMany
في الجداول ذات الصلة
تعديل مخطّط تطبيق مراجعة الأفلام
يمكنك استخدام طفرات _insertMany
و_upsertMany
لتعديل جداول قاعدة بيانات individual
واحدة تلو الأخرى، أو تعديل جداول متعددة مرتبطة بعلاقات
مجمّعة. في ما يلي مخطّط موسّع لتطبيق مراجعة الأفلام يساعد في توضيح
حالات الاستخدام والأمثلة التالية. ويوسع نطاق 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
استنادًا إلى المرحلة التي وصلت إليها في إنشاء النماذج الأولية، يمكنك استخدام التقنية نفسها
الموضَّحة في دليل "البدء" لإدراج سجلّ واحد أو سجلَّين: أي أنّه
يمكنك استخدام CodeLenses في إضافة VS Code لإنشاء _insert
طفرات،
وبيانات رمز ثابت، وتشغيل هذه الطفرات في VS Code.
في النهاية، من المنطقي إضافة العديد من السجلات إلى جدول باستخدام عملية
_insertMany
. في مثال تطبيق مراجعات الأفلام، يؤدي ذلك إلى إدراج
مجموعة أولية من البيانات في Movie
وActor
.
لتنفيذ عمليات التحويل التالية باستخدام إضافة Firebase في VS Code، انقر على زرَّي Run (Production) (التشغيل في مرحلة الإنتاج) أو Run (Local) (التشغيل على الجهاز) في 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"
}
])
}
اكتب عملية تحويل لإعادة ضبط بيانات البذرة.
أثناء إنشاء النماذج الأولية وتنفيذ عملية التطوير/النشر المتكاملَين، يمكن أن تكون إعادة ضبط البيانات على الحالة الصفرية مفيدة ل executimg سلسلة جديدة من الاختبارات على مجموعة جديدة من البيانات.
لإجراء ذلك، إذا كان رمز النموذج الأولي لا يضيف سجلات إلى الجداول، استخدِم
_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.
يمكنك الاطّلاع على مزيد من المعلومات عن استخدام حزمة "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);
ما هي الخطوات التالية؟
- اطّلِع على مزيد من المعلومات عن دمج Admin SDK في مشاريعك على Data Connect.