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:
- Firebase konsolunun Cloud Firestore bölümüne gidin.
- Dizinler sekmesine gidin ve Dizin Ekle'yi tıklayın.
- Koleksiyon adını girin ve dizini sıralamak istediğiniz alanları ayarlayın.
- 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:
- Firebase konsolunun Cloud Firestore bölümüne gidin.
- Dizine eklemeler sekmesini tıklayın.
- Fare imlecini, silmek istediğiniz dizinin üzerine getirin ve içerik menüsünden Sil'i seçin.
- 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.