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

Firebase Data Connect'te toplu veri işlemleri mutasyonlar kullanılarak gerçekleştirilir. Data Connect projeleriniz PostgreSQL'de veri depolasa da verileri SQL ifadelerini veya SQL araçlarını kullanarak toplu olarak yükleyemezsiniz: Data Connect hizmetiniz ve şemaları, veritabanınızla senkronize olmalıdır. Doğrudan PostgreSQL'de çalışmak bu senkronizasyonu bozar.

Bu nedenle Data Connect, başlangıç verileri ve toplu veri yönetimi için standart _insertMany, _upsertMany ve _deleteMany mutasyonları sağlar.

Uygulama prototipleri oluştururken ve CI/CD akışları çalıştırırken bu mutasyonlar, VS Code uzantısı, Data Connect emülatörü ve (isteğe bağlı olarak) yerel bir veritabanı örneği kullanılarak yerel bir geliştirme ortamında çağrılabilir.

Yerel ve üretim örneklerine veri ekleme

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

Film inceleme uygulamasının kullanılabilmesi için filmlere, yorumlara ve kullanıcılara ait verilere ihtiyaç duyar. Bu verilere, birleştirme ve diğer işlemleri gerçekçi verilerle yapan sorgu ve mutasyonların prototipleri oluşturulur. Ş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:

  • Ayrı 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şkilerine göre 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

Prototip oluşturma sırasında sorgularınızın ve mutasyonlarınızın bir dizi ayrı değerlere göre test edilmesi gerektiğinde verileri birden fazla kayıtla doldurabilirsiniz. Örneğin, karşılaştırmaları ve filtrelemeyi test etmek için farklı türlere ve derecelendirmelere sahip birden çok film kaydı eklemek isteyebilirsiniz.

Movie ve Actor tablolarına veri çek

Prototip oluşturma aşamanıza bağlı olarak, Başlangıç kılavuzunda açıklanan aynı tekniği kullanarak bir veya iki kayıt ekleyebilirsiniz. Yani, VS Code uzantısında Kod Lenslerini kullanarak _insert mutasyonları ve sabit kodlu veriler oluşturabilir ve bu mutasyonları VS Code'da çalıştırabilirsiniz.

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 değişiklikleri yürütmek için, üretim hizmetiniz veya yerel veritabanı ile prototip oluşturmanıza 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"
    }
   ])
}

Verileri MovieActor birleştirme tablosuna aktar

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

Burada, bu tür bir ilişkiyle birden fazla tabloyu güncellerken güncellemenin düzgün bir şekilde tamamlandığından emin olmak 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 gerçekleştirirken 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 başlangıç değerleriyle birlikte movie_upsertMany çağrılmıştı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",
    }
   
}

Sırada ne var?