Cloud Firestore'da dizinleri yönetin

Cloud Firestore, her sorgu için bir dizin gerektirerek sorgu performansını garanti eder. En temel sorgular için gerekli indeksler sizin için otomatik olarak oluşturulur . Siz uygulamanızı kullanıp test ederken Cloud Firestore, uygulamanızın gerektirdiği ek dizinleri oluşturmanıza yardımcı olan hata mesajları oluşturur. Bu sayfada tek alanlı ve bileşik dizinlerinizi nasıl yöneteceğiniz açıklanmaktadır.

Bir hata mesajı aracılığıyla eksik bir dizin oluşturma

Mevcut bir dizinle eşleşmeyen bir aralık yan tümcesiyle bileşik sorgu yapmaya çalışırsanız bir hata alırsınız. Hata mesajı, Firebase konsolunda eksik dizini oluşturmak için doğrudan bir bağlantı içerir.

Firebase konsoluna giden oluşturulan bağlantıyı takip edin, otomatik olarak doldurulan bilgileri inceleyin ve Oluştur'u tıklayın.

Roller ve izinler

Cloud Firestore'da dizin oluşturmadan önce aşağıdaki rollerden birine atandığınızdan 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:

firebase konsolundaki firestore indeksleme arayüzünün görüntüsü

  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ındaki kısıtlamalara uygun olmalıdır .

Sorgunun boyutuna bağlı olarak dizinlerin oluşturulması birkaç dakika sürebilir. İndekslerinizi oluşturduktan sonra Composite Indexes bölümünde indekslerinizi ve durumlarını görebilirsiniz. Hala inşaat halindelerse Firebase konsolunda bir bina durum çubuğu bulunur.

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. Silmek istediğiniz dizinin üzerine gelin ve içerik menüsünden Sil'i seçin.
  4. Uyarıdan Sil'i tıklatarak silmek istediğinizi onaylayın.

Firebase CLI'yi kullanın

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

Yalnızca Cloud Firestore dizinlerini ve kurallarını dağıtmak için --only firestore bayrağını ekleyin.

Firebase konsolunu kullanarak dizinlerde düzenlemeler yapıyorsanız yerel dizinler dosyanızı da güncellediğinizden emin olun. JSON dizin tanımı referansına bakın.

Dizin oluşturma süresi

Bir dizin oluşturmak için Cloud Firestore'un dizini ayarlaması ve ardından dizini mevcut verilerle doldurması gerekir. Dizin oluşturma süresi, kurulum süresi ile dolgu süresinin toplamıdır:

  • Bir dizin oluşturmak birkaç dakika sürer. Bir indeksin minimum oluşturulma süresi, boş bir veritabanı için bile birkaç dakikadır.

  • Doldurma süresi, mevcut verilerin ne kadarının yeni dizine ait olduğuna bağlıdır. Dizin tanımıyla eşleşen alan değerleri ne kadar fazla olursa dizini doldurmak o kadar uzun sürer.

Dizin yapıları uzun süren işlemlerdir .

Bir dizin oluşturmaya başladıktan sonra Cloud Firestore, işleme benzersiz bir ad atar. İşlem adlarının önüne projects/[PROJECT_ID]/databases/(default)/operations/ eklenir, örneğin:

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

Ancak, describe komutu için bir işlem adı belirlerken öneki dışarıda bırakabilirsiniz.

Uzun süredir devam eden tüm işlemleri listeleme

Uzun süredir devam eden işlemleri listelemek için gcloud firestore operasyon listesi komutunu kullanın. Bu komut devam eden ve yakın zamanda tamamlanan işlemleri listeler. İşlemler tamamlandıktan sonraki birkaç gün için listelenir:

gcloud firestore operations list

Çalışma durumunu kontrol edin

Uzun süredir devam eden tüm işlemleri listelemek yerine tek bir işlemin ayrıntılarını listeleyebilirsiniz:

gcloud firestore operations describe operation-name

Tamamlanma süresinin tahmin edilmesi

İşleminiz çalışırken, işlemin genel durumu için state alanının değerine bakın.

Uzun süredir devam eden bir işlemin durumuna ilişkin istek aynı zamanda workEstimated ve workCompleted ölçümlerini de döndürür. Bu ölçümler belge sayısı için döndürülür. workEstimated bir işlemin işleyeceği tahmini toplam belge sayısını gösterir. workCompleted o ana kadar işlenen belge sayısını gösterir. İşlem tamamlandıktan sonra, workCompleted gerçekte işlenen toplam belge sayısını yansıtır; bu, workEstimated değerinden farklı olabilir.

İşi böl workEstimated göre workCompleted kaba bir ilerleme tahmini için tahmin edilir. Tahmin, istatistiklerin toplanmasının gecikmesine bağlı olduğundan hatalı olabilir.

Örneğin, bir dizin yapısının 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ı "done": true . İşlemin sonucu için state alanının değerine bakın. Yanıtta done alanı ayarlanmamışsa değeri false olur. Devam eden işlemler için done değerin varlığına bağlı kalmayın.

Dizin oluşturma hataları

Bileşik dizinleri ve tek alanlı dizin muafiyetlerini yönetirken dizin oluşturma hatalarıyla karşılaşabilirsiniz. Cloud Firestore, indekslediği verilerle ilgili bir sorunla karşılaşırsa indeksleme işlemi başarısız olabilir. Çoğunlukla bu, bir dizin sınırına ulaştığınız anlamına gelir. Örneğin, işlem belge başına maksimum dizin girişi sayısına ulaşmış olabilir.

Dizin oluşturma işlemi başarısız olursa konsolda hata mesajını görürsünüz. Herhangi bir dizin sınırına ulaşmadığınızı doğruladıktan sonra dizin işleminizi yeniden deneyin.