Firebase Data Connect'te toplu veri işlemleri mutasyonlar kullanılarak gerçekleştirilir. Data Connect projeleriniz verileri PostgreSQL'de depolasa da SQL ifadeleri veya SQL araçlarını kullanarak verileri toplu olarak yükleyemezsiniz: Data Connect hizmetiniz ve şemalarınız veritabanınızla senkronize kalmalıdır ve doğrudan PostgreSQL'de çalışmak bu senkronizasyonu bozar.
Data Connect'te, verileri temel oluşturmak ve toplu verileri yönetmek için mutasyonları kullanırsınız. Veri yönetimi mutasyonlarını iş akışlarınıza ve ortamlarınıza bağlı olarak farklı şekillerde oluşturabilir ve çağırabilirsiniz:
Yerel geliştirme sırasında, uygulamaların prototipini oluştururken VS Code uzantısı, Data Connect emülatörü ve yerel bir veritabanı örneği kullanılarak veri ekleme mutasyonları oluşturulabilir ve yerel bir geliştirme ortamında çağrılabilir.
Üretim geliştirme aşamasında, daha büyük CI/CD akışları gerçekleştirirken ve üretim verilerini yönetirken ayrıcalıklı ortamlarda çalışan bir kitaplık grubu olan Firebase Admin SDK'yi kullanabilirsiniz.
Yerel geliştirme: Yerel örneklere veri ekleme
Başlangıç kılavuzunda, anlık ekleme mutasyonu kullanarak tek bir tabloya tek bir kayıt eklemek için bir uygulama oluşturdunuz.
Film yorumu uygulamasının kullanılabilir olması için film, yorum ve kullanıcı verileri gerekir. Bu veriler, gerçekçi veriler içeren birden fazla tabloda birleştirme ve diğer işlemleri kullanan sorgu ve mutasyon prototipleri oluşturmak için kullanılır. Şemanızı genişletebilir ve veritabanınızı doldurabilirsiniz.
birini inceleyerek erişebilirsiniz.Prototipleme ortamınızda veri ekleme işlemini gerçekleştirmek için kod gerekir. Bu kılavuzda aşağıdakileri gösteren bazı örnekler verilmiştir:
- Bağımsız tablolarda
_insertMany
ve_upsertMany
kullanımı - İlgili tablolarda
_insertMany
kullanımı
Film yorumu uygulaması şemasını güncelleme
_insertMany
ve _upsertMany
mutasyonlarını kullanarak veritabanı tablolarını tek tek güncelleyebilir veya birleştirme ilişkileri ile ilişkili birden fazla tabloyu güncelleyebilirsiniz. Bu kullanım alanlarını ve örnekleri açıklamaya yardımcı olan genişletilmiş bir film yorumu uygulaması şeması aşağıda gösterilmiştir. schema.gql
, daha karmaşık sorguların prototipini oluşturabilmemiz için Actor
ve MovieActor
türlerini içerecek şekilde başlangıç Movie
türünün ötesine geçer.
# 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"
}
Başlangıç durumu verilerini başlatmak için değişiklikler yazma
Prototipleme sırasında, sorgularınızın ve mutasyonlarınızın bir dizi ayrı değerle test edilmesi gerektiğinde verileri birden fazla kayıtla doldurabilirsiniz. Örneğin, karşılaştırma ve filtrelemeyi test etmek için farklı türde türler ve derecelendirmeler içeren birden fazla film kaydı ekleyebilirsiniz.
Movie
ve Actor
tablolarına veri ekleme
Prototip aşamanıza bağlı olarak, bir veya iki kayıt eklemek için Başlangıç kılavuzunda açıklanan aynı tekniği kullanabilirsiniz. Yani, _insert
mutasyonlar oluşturmak, verileri sabit kodlamak ve bu mutasyonları VS Code'da çalıştırmak için VS Code uzantısındaki CodeLenses'i kullanabilirsiniz.
Sonuç olarak, bir tabloya _insertMany
işlemi kullanarak çok sayıda kayıt eklemek daha mantıklı olacaktır. Film yorumu uygulaması örneğinde bu işlem, Movie
ve Actor
alanlarına ilk veri kümesini ekler.
VS Code Firebase uzantısını kullanarak aşağıdaki mutasyonları yürütmek için, üretim hizmetinizle mi yoksa yerel bir veritabanıyla mı prototip oluşturduğunuza bağlı olarak uygun dosya düzenleyici görünümünde Çalıştır (Üretim) veya Çalıştır (Yerel) CodeLens düğmelerini tıklayın.
# 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
birleştirme tablosuna veri ekleme
Sorguları ve mutasyonları birleştirme ve diğer karmaşık işlemleri kullanarak test etmek için MovieActor
tablosuna birden fazla kayıt ekleyebilirsiniz.
Bu tür bir ilişkide birden fazla tabloyu güncellerken güncellemenin düzgün şekilde tamamlanmasını sağlamak için @transaction
yönergesini ekleyebilirsiniz.
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"
}
])
}
Tohum verilerini sıfırlamak için bir mutasyon yazın
Prototip oluştururken ve CI/CD'yi uygularken yeni bir veri kümesinde yeni bir test dizisi yürütmek için verileri sıfır durumuna sıfırlamak yararlı olabilir.
Bunu yapmak için prototip kodunuz tablolarınıza kayıt eklemiyorsa Data Connect tarafından sağlanan _upsertMany
mutasyonunu kullanın.
Aşağıdaki örnekte, film kayıtlarını orijinal durumlarına güncellemek için movie_upsertMany
ilk değerlerle çağrılır.
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",
}
…
}
Üretim geliştirme: doldurmak ve güncellemek için Admin SDK simgesini kullanın
Firebase Admin SDK, ayrıcalıklı ortamlardan çalışmak istediğinizde kullanılabilir. Üretim verilerinizdeki toplu veri işlemlerinin kritik yapısı göz önüne alındığında, binlerce kayıt yüklemek istediğinizde bu önemli bir kullanım alanıdır.
Firebase Admin SDK
Çoğunlukla yerel olarak çalışıyor olsanız bile Firebase, Firebase Data Connect'i yerel ortamınız da dahil olmak üzere ayrıcalıklı bir ortamdan kullanabilmeniz için Admin SDK'ü ayarlamanızı önerir. Node.js için Admin SDK'yi ayarlamanız gerekir.
Admin SDK'sını diğer Data Connectkullanım alanlarında kullanma hakkında daha fazla bilgi edinebilirsiniz.
Üretim verilerini toplu olarak yükleme ve güncelleme
Toplu veri yönetimi API'si, yerel olarak birkaç satır eklemek için daha önce açıklanan executeGraphQL
API'siyle mutation {...}
dizeleri oluşturmanızı istemek yerine sizin adınıza GraphQL mutasyonları oluşturur.
Yönetici API'sinin en önemli avantajlarından biri, CI/CD akışları için veri dizilerini ayrı olarak yönetme ve yeniden kullanma ya da üretim verileri için büyük toplu veri dosyaları oluşturma olanağıdır.
Aşağıdaki snippet'lerde, toplu veri komut dosyasının nasıl oluşturulacağı gösterilmektedir.
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);
Sırada ne var?
- Admin SDK'u Data Connect projelerinize entegre etme hakkında bilgi edinin.