Cloud Firestore'da dizinleri yönetin

Cloud Firestore, her bir cihaz için dizin gerektirerek sorgu performansı sağlar. emin olun. En temel sorgular için gereken dizinler otomatik olarak sizin için oluşturulmuşlardır. Cloud, uygulamanızı kullanırken ve test ederken Firestore, pek çok bilgi sağlayabilir. Bu sayfada, tek alanlı ve birleşik dizinler.

Hata mesajı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'da 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ı belirleyin.
  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. Dizinler 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'ı 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 dizinlerini ve kurallarını dağıtmak için --only firestore işareti.

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 veritabanı, tek alanlı bir dizin veya birleşik dizin içerebilir. Veritabanınız için dizin oluşturmak üzere Terraform yapılandırma dosyasını düzenleyebilirsiniz.

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.

Bileş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

Dizin oluşturmak için Cloud Firestore'un dizini ayarlaması ve ardından dizini mevcut verilerle doldurun. 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şlattığınızda, 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üreli işlemleri listelemek için gcloud firestore işlemleri listesi 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 gecikmeli istatistiklere bağlı olduğundan yanlış olabilir koleksiyonudur.

Örneğin, bir dizin derlemesinin ilerleme durumu aşağıdaki gibidir:

{
  "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ı. En sık genelde bu, çok kısa bir süre içinde dizin sınırı. Ö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österilir. Şu tarihten sonra: herhangi bir hedefe ulaşmadığınızı dizin sınırlarından sonra dizine ekleme işleminizi yeniden deneyin.