Verileri temel oluşturmak ve toplu veri işlemleri gerçekleştirmek

Firebase Data Connect'da, iş akışlarınıza ve ortamlarınıza bağlı olarak toplu veri yükleme ve güncelleme işlemlerini farklı şekillerde gerçekleştirebilirsiniz:

  • Yerel prototiplemede alternatif şemalar denediğinizde, VS Code uzantısı, Data Connect emülatörü ve yerel bir veritabanı örneği kullanılarak yerel geliştirme ortamında veri doldurma mutasyonları oluşturulup çağrılabilir.

  • Üretim geliştirme aşamasında, kararlı bir şemayla daha büyük CI/CD akışları gerçekleştirip üretim verilerini yönetirken iki seçeneğiniz vardır:

    • Tercih edilen yaklaşım, ayrıcalıklı ortamlarda çalışan bir kitaplık grubu olan Firebase Admin SDK kullanmaktır.

    • Verileri değiştirmediğiniz ve veritabanı şemanızı değiştirmediğiniz sürece toplu yükleme ve güncelleme işlemleri yapmak için Cloud SQL örneğinizle SQL araçlarını da kullanabilirsiniz. Veritabanı şemanızı doğrudan SQL araçlarıyla değiştirmeniz Data Connect şemanızı ve bağlayıcılarınızı bozabilir.

Yerel prototip oluşturma: Yerel örneklerde başlangıç verileri

Başlangıç kılavuzunda, geçici bir ekleme mutasyonu kullanarak tek bir tabloya tek bir kayıt eklemek için bir uygulama ayarlarsınız.

Kullanılabilir olması için film inceleme uygulamasının, gerçekçi verilerle birden fazla tabloda birleştirme ve diğer işlemleri kullanan prototip sorguları ve mutasyonları için filmler, incelemeler ve kullanıcılarla ilgili verilere ihtiyacı vardır. Şemanızı genişletebilir ve veritabanınızı doldurabilirsiniz.

Prototip oluşturma ortamınızda veri yerleştirme işleminin gerçekleştirilmesi için kod gerekir. Bu kılavuzda, aşağıdakileri gösteren bazı örnekler verilmektedir:

  • Bağımsız tablolarda _insertMany ve _upsertMany kullanımı
  • İlgili tablolarda _insertMany kullanımı

Film inceleme uygulaması şemasını güncelleme

_insertMany ve _upsertMany mutasyonlarını kullanarak tek tek veritabanı tablolarını güncelleyebilir veya birleştirme ilişkileriyle ilişkili birden fazla tabloyu güncelleyebilirsiniz. Bu kullanım alanlarını ve örnekleri göstermeye yardımcı olan genişletilmiş bir film inceleme uygulaması şeması aşağıda gösterilmektedir. schema.gql, Movie türünün ötesine geçerek Actor ve MovieActor türlerini de kapsar. Böylece daha karmaşık sorguların prototipini oluşturabiliriz.

# 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 doldurmak için değişiklikler yazma

Prototip oluşturma sırasında, sorgularınızın ve mutasyonlarınızın bir dizi ayrı değere göre test edilmesi gerektiğinde verileri birden fazla kayıtla doldurabilirsiniz. Örneğin, karşılaştırma testleri ve filtreleme için farklı türlerde türler ve derecelendirmeler içeren birden fazla film kaydı eklemek isteyebilirsiniz.

Movie ve Actor tablolarına başlangıç verileri ekleme

Prototip oluşturma aşamanıza bağlı olarak, bir veya iki kayıt eklemek için Başlangıç Kılavuzu'nda tanıtılan aynı tekniği kullanabilirsiniz. Yani, VS Code uzantısındaki CodeLens'leri kullanarak _insert mutasyonları oluşturabilir, verileri sabit kodlayabilir ve bu mutasyonları VS Code'da çalıştırabilirsiniz.

Sonuç olarak, _insertMany işlemi kullanarak bir tabloya çok sayıda kayıt eklemek daha mantıklıdır. Film yorumu uygulaması örneğinde bu, Movie ve Actor içine ilk veri grubunu ekler.

Aşağıdaki mutasyonları yürütmek için VS Code Firebase uzantısını kullanarak uygun dosya düzenleyici görünümünde, prototipinizi üretim hizmetinizle mi yoksa yerel bir veritabanıyla mı oluşturduğunuza bağlı olarak Run (Production) [Çalıştır (Üretim)] veya Run (Local) [Ç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 başlangıç verileri ekleme

Birleştirmeleri ve diğer karmaşık işlemleri kullanarak sorguları ve mutasyonları test etmek için MovieActor tablosuna birden fazla kayıt ekleyebilirsiniz.

Burada, 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"
    }
  ])
}

Başlangıç verilerini sıfırlamak için mutasyon yazma

Prototip oluşturma ve CI/CD gerçekleştirme sırasında, yeni bir veri kümesinde yeni bir dizi test yürütmek için verileri sıfır durumuna sıfırlamak faydalı 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 birlikte ç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ı ortamlarda çalışmak istediğinizde kullanılabilir. Üretim verilerinizdeki toplu veri işlemlerinin kritik doğası 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 uygulamasını yükleyin.

Çoğunlukla yerel olarak çalışsanız bile Firebase, Admin SDK'ı ayarlamanızı önerir. Böylece yerel ortamınız da dahil olmak üzere ayrıcalıklı bir ortamdan Firebase Data Connect'ı kullanabilirsiniz. Node.js için Admin SDK kurmanız gerekir.

Yönetici SDK'sını diğer Data Connect kullanım alanlarında kullanma hakkında daha fazla bilgi edinebilirsiniz.

Üretim verilerinin toplu yüklemelerini ve güncellemelerini gerçekleştirme

Toplu veri yönetimi için API, yerel olarak birkaç satır eklemek üzere daha önce açıklanan executeGraphQL API'si ile mutation {...} dizeleri oluşturmanızı istemek yerine sizin adınıza GraphQL mutasyonları oluşturur.

Yönetici API'sinin en büyük avantajlarından biri, CI/CD akışları için veri dizilerini ayrı ayrı yönetme ve yeniden kullanma veya ü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 ayarlanacağı 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);

Üretim geliştirme: Toplu veri güncellemeleri için SQL kullanma

Üretimde kararlı bir şemayla çalışıyor ve şemanızı değiştirmiyorsanız veri yüklemelerini ve güncellemelerini yönetmek için Cloud SQL örneğinizde çalışabilirsiniz.

Veri içe aktarma için PostgreSQL İçin Cloud SQL kılavuzuna bakın.

Sırada ne var?