Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Cloud Firestore'da dizinleri yönetin

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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 . Uygulamanızı kullandıkça ve test ettikçe 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şturun

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

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

Firebase konsolunu kullanın

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

firebase konsolundaki firestore indeksleme arabiriminin 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.

Dizinlerin oluşturulması, sorgunun boyutuna bağlı olarak birkaç dakika sürebilir. Oluşturduktan sonra, Bileşik Dizinler bölümünde dizinlerinizi ve durumlarını görebilirsiniz. Hâlâ inşa ediyorlarsa 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ıklayarak 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 onu firebase deploy komutuyla konuşlandırın. Yalnızca dizinleri dağıtmak istiyorsanız --only firestore:indexes bayrağını ekleyin. Firebase konsolunu kullanarak dizinlerde düzenlemeler yaparsanız, yerel dizinler dosyanızı da güncellediğinizden emin olun. JSON dizin tanımı başvurusuna bakın.

Dizin oluşturma süresi

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

  • Dizin oluşturmak birkaç dakika sürer. Bir dizin için minimum oluşturma 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 daha fazla alan değeri, dizini doldurmak için daha uzun sürer.

Dizin oluşturma işlemleri 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 atlayabilirsiniz.

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

Uzun süredir devam eden 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 birkaç gün sonra 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 durumu için yapılan istek, workEstimated ve workCompleted metriklerini de döndürür. Bu metrikler 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 , şu ana kadar işlenen belge sayısını gösterir. İşlem tamamlandıktan sonra workCompleted , gerçekte işlenen ve workEstimated değerinden farklı olabilecek toplam belge sayısını yansıtır.

Kaba bir ilerleme tahmini için workEstimated workCompleted bölün. Gecikmeli istatistik toplamaya bağlı olduğu için tahmin yanlış olabilir.

Örneğin, bir dizin oluşturmanın ilerleme durumu şöyledir:

{
  "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 yapıldığında, işlem açıklaması "done": true değerini içerecektir. İşlemin sonucu için state alanının değerine bakın. done alanı yanıtta ayarlanmamışsa değeri false olur. Devam eden işlemler için done değerinin 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, dizine eklediği verilerle ilgili bir sorunla karşılaşırsa bir dizin oluşturma işlemi başarısız olabilir. En yaygın olarak, 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 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.