Cloud Firestore'da dizinleri yönetin

Cloud Firestore, her emin olun. En temel sorgular için gereken dizinler otomatik olarak sizin için oluşturulmuşlardır. Cloud Firestore, uygulamanızı kullanırken ve test ederken uygulamanızın ihtiyaç duyduğu ek dizinleri oluşturmanıza yardımcı olan hata mesajları oluşturur. Bu sayfada, tek alanlı ve birleşik dizinler.

Hata mesajı aracılığıyla eksik dizin oluşturma

Bir mevcut bir dizinle eşleşmeyen aralık ifadesi içeren bileşik sorgu bir hata alırsınız. Hata mesajı, Firebase konsolunda eksik dizin.

Oluşturulan bağlantıyı izleyerek Firebase konsoluna gidin, otomatik olarak doldurduktan sonra Oluştur'u tıklayın.

Roller ve izinler

Cloud Firestore ürününde dizin oluşturmadan önce size aşağıdaki rollerden birinin atandığından emin olun:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

Özel roller tanımladıysanız dizin oluşturmak için aşağıdaki izinlerin tümünü atayın:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

Firebase konsolunu kullanma

Firebase konsolundan manuel olarak yeni bir dizin oluşturmak için:

resmi
Firebase konsolundaki firestore dizine ekleme arayüzü

  1. Firebase konsolunun Cloud Firestore bölümüne gidin.
  2. Dizinler sekmesine gidin ve Dizin Ekle'yi tıklayın.
  3. Koleksiyon adını girin ve dizini sıralamak istediğiniz alanları ayarlayın.
  4. Oluştur'u tıklayın.

Dizin alanları, alan yollarıyla ilgili kısıtlamalara uygun olmalıdır.

Dizinlerin oluşturulması sorgunun boyutuna bağlı olarak birkaç dakika sürebilir. Bunları oluşturduktan sonra dizinlerinizi ve durumlarını Birleşik Dizinler bölümü. Geliştirme süreçleri devam ediyorsa Firebase konsolunda bina durum çubuğuna

Dizinleri kaldır

Bir dizini silmek için:

  1. Firebase konsolunun Cloud Firestore bölümüne gidin.
  2. Dizine eklemeler sekmesini tıklayın.
  3. Fare imlecini, silmek istediğiniz dizinin üzerine getirin ve içerik menüsünden Sil'i seçin.
  4. Uyarıda Sil'i tıklayarak uyarıyı silmek istediğinizi onaylayın.

Firebase CLI'yi kullanma

Dizinleri Firebase CLI ile de dağıtabilirsiniz. Başlamak için proje dizininizde firebase init firestore komutunu çalıştırın. Firebase CLI, kurulum sırasında varsayılan değer ile bir JSON dosyası oluşturur. doğru biçimde olmasını sağlayın. Daha fazla dizin eklemek ve dağıtmak için dosyayı düzenleyin. firebase deploy komutuyla ekleyebilirsiniz.

Yalnızca Cloud Firestore dizine ekleme ve kural dağıtmak için --only firestore işaretini ekleyin.

Firebase konsolunu kullanarak dizinlerde düzenleme yaparsanız yerel dizin dosyanızı da güncellediğinizden emin olun. Referans JSON dizin tanımı referansı.

Terraform kullan

Veritabanında dizin oluşturma

Cloud Firestore veritabanları hem tek alanlı hem de birleşik dizinler içerebilir. Veritabanınız için dizin oluşturmak üzere Terraform yapılandırma dosyasını düzenleyebilirsiniz. Tek alanlı ve birleşik dizinler farklı Terraform kaynak türleri kullanır.

Tek alanlı dizin

Aşağıdaki örnek Terraform yapılandırma dosyası, chatrooms koleksiyonundaki name alanında tek alanlı bir dizin oluşturur:

firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "database-id"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • project-id yerine proje kimliğinizi yazın. Proje kimlikleri benzersiz olmalıdır.
  • database-id değerini veritabanı kimliğinizle değiştirin.

Birleşik dizin

Aşağıdaki örnek Terraform yapılandırma dosyası, chatrooms koleksiyonundaki name alanı ile description alanının bir kombinasyonu için bileşik dizin oluşturur:

firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"
  database = "database-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • project-id yerine proje kimliğinizi yazın. Proje kimlikleri benzersiz olmalıdır.
  • database-id değerini veritabanı kimliğinizle değiştirin.

Dizin oluşturma süresi

Cloud Firestore, dizin oluşturmak için dizini ayarlamalı ve ardından dizini mevcut verilerle doldurmalıdır. Dizin oluşturma süresi, kurulum süresinin toplamıdır ve doldurma süresi:

  • Dizin oluşturmak birkaç dakika sürer. Minimum derleme süresi boş bir veritabanında bile birkaç dakikadır.

  • Doldurma süresi, mevcut verilerin ne kadarının yeni dizine ait olduğuna bağlıdır. İlgili içeriği oluşturmak için kullanılan dizin tanımıyla eşleşen daha fazla alan değeri bulursanız dizini yeniden doldurun.

Dizin derlemeleri uzun süreli işlemlerdir.

Bir dizin derlemesi başlatmanızdan sonra, Cloud Firestore işleme benzersiz bir ad verin. İşlem adlarının başında projects/[PROJECT_ID]/databases/(default)/operations/ öneki bulunur, örneğin:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Ancak aşağıdakiler için bir işlem adı belirtirken öneki çıkarabilirsiniz describe komutunu kullanın.

Tüm uzun süreli işlemleri listeleme

Uzun süren işlemleri listelemek için gcloud firestore operations list komutunu kullanın. Bu komut, devam eden ve yakın zamanda tamamlanan işlemleri listeler. İşlemler, tamamlandıktan sonra birkaç gün boyunca listelenir:

gcloud firestore operations list

İşlem durumunu kontrol et

Tüm uzun süreli işlemleri listelemek yerine, görevlerin tek bir işlemle:

gcloud firestore operations describe operation-name

Tamamlanma süresini tahmin etme

İşleminiz çalışırken state alanının değerine bakın. zaman çizelgesini takip edin.

Uzun süreli bir işlemin durumuyla ilgili istek de metrikleri döndürür. workEstimated ve workCompleted. Bu metrikler şu sayı için döndürülür: sağlayabilir. workEstimated, tahmini toplam doküman sayısını gösterir. işlenecek. workCompleted şu ana kadar işlenen doküman sayısını gösterir. İşlem tamamlandıktan sonra workCompleted, gönderilen dokümanların toplam sayısını gösterir workEstimated değerinden farklı olabilir.

İlerleme tahmini için workCompleted değerini workEstimated değerine bölün. İlgili içeriği oluşturmak için kullanılan tahmini, geciken istatistiklere bağlı olduğundan yanlış olabilir koleksiyonudur.

Örneğin, bir dizin oluşturma işleminin ilerleme durumu aşağıda verilmiştir:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Bir işlem tamamlandığında işlem açıklamasında "done": true yer alır. Şu değer için state alanındaki değere bakın: anlamına gelir. Yanıtta done alanı ayarlanmamışsa değeri false olur. done değerinin varlığına bağlı olmama dört temel adımı ele alacağız.

Dizin oluşturma hataları

Bileşik dizinleri ve dizinleri yönetirken dizin oluşturma hatalarıyla karşılaşabilirsiniz tek alanlı dizin muafiyetleri. Dizine ekleme işlemi aşağıdaki durumlarda başarısız olabilir: Cloud Firestore, dizine eklediği verilerle ilgili bir sorunla karşılaştı. Bu durum genellikle bir dizin sınırına ulaştığınızı gösterir. Örneğin, Örneğin, işlem maksimum dizin girişi sayısına ulaşmış olabilir not alın.

Dizin oluşturma işlemi başarısız olursa konsolda hata mesajı görürsünüz. Şu tarihten sonra: herhangi bir hedefe ulaşmadığınızı dizin sınırlarından sonra dizine ekleme işleminizi yeniden deneyin.