Dizinleri yönet

Yalnızca Cloud Firestore Enterprise sürümü için geçerlidir.

Bu sayfada, dizinlerinizi nasıl yöneteceğiniz açıklanmaktadır. Dizinler hakkında daha fazla bilgi edinmek için Dizinlere genel bakış başlıklı makaleyi inceleyin.

Başlamadan önce

MongoDB uyumluluğu ile Cloud Firestore'da dizin oluşturabilmek için aşağıdaki rollerden birinin size atanmış olması gerekir:

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

Rol vermek için Tek bir rol verme başlıklı makaleyi inceleyin. Cloud Firestore rolleri ve ilişkili izinler hakkında daha fazla bilgi için Önceden tanımlanmış roller başlıklı makaleyi inceleyin.

Ö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

Dizin oluşturma

Dizin oluşturmak için aşağıdaki adımları uygulayın:

MongoDB API

Dizin oluşturmak için createIndex() yöntemini kullanın. Örneğin:

  •   db.restaurants.createIndex({"cuisine" : 1})
      
  •   db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
      
  • db.runCommand() ile dizin oluşturma da en fazla bir dizinle desteklenir.

      db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
      

Aşağıdaki sınırlamalara dikkat edin:

  • İstek başına yalnızca bir dizin oluşturabilirsiniz. db.collection.createIndexes() desteklenmiyor.
  • MongoDB API ile dizin oluşturma için denetleme günlüklerinde google.firestore.admin.v1.FirestoreAdmin.CreateIndex yöntem adı kullanılır.
  • Desteklenen dizin seçenekleri için dizinler ve dizin özellikleri başlıklı makaleyi inceleyin.
Firebase konsolu
  1. Firebase konsolunda Firestore Database sayfasına gidin.

    Firestore veritabanına gitme

  2. Veritabanları listesinden bir veritabanı seçin.
  3. Dizinler sekmesinde Dizin Oluştur'u tıklayın.
  4. Koleksiyon kimliği girin.
  5. Bir veya daha fazla alan yolu ekleyin ve her biri için bir dizin seçeneği belirleyin.
  6. Alan varlığı seçeneği olarak seyrek olmayan veya seyrek'i belirleyin.
  7. İsteğe bağlı olarak çok anahtarlı dizin seçeneğini ayarlayabilirsiniz.
  8. Oluştur'u tıklayın.
  9. Yeni dizininiz dizinler listesinde gösterilir ve MongoDB uyumluluğu ile Cloud Firestore, dizininizi oluşturmaya başlar. Dizininiz oluşturulduğunda dizinin yanında yeşil bir onay işareti görürsünüz. index oluşturulmazsa olası nedenler için Dizin oluşturma hataları bölümüne bakın.
gcloud CLI

Dizin oluşturmak için gcloud firestore indexes composite create komutunu kullanın. api-scope değerini mongodb-compatible-api olarak ayarlayın.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense \
--api-scope=mongodb-compatible-api

Aşağıdakini değiştirin:

  • DATABASE_ID: Veritabanı kimliği.
  • COLLECTION: Koleksiyon adı.
  • FIELD_CONFIGURATION: alan yapılandırması. Her alan için --field-config=field-path= ekleyin. Örneğin:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    Bu alanları yapılandırma hakkında daha fazla bilgi için --field-config başlıklı makaleyi inceleyin.

Seyrek dizin oluşturmak için --density=sparse-any değerini ayarlayın.

Çok anahtarlı bir dizin oluşturmak için --multikey işaretini ekleyin.

Benzersiz bir dizin oluşturmak için --unique işaretini ekleyin.

Terraform

google_firestore_index kaynağını kullanarak api_scope değerini MONGODB_COMPATIBLE_API, query_scope değerini ise COLLECTION_GROUP olarak ayarlayın.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  api_scope   = "MONGODB_COMPATIBLE_API"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

Aşağıdakini değiştirin:

  • DATABASE_ID: Seçtiğiniz veritabanının veritabanı kimliği
  • COLLECTION: Dizinlenecek koleksiyonun adı
  • FIELD_PATH: Dizine eklenecek alanın adı
  • ORDER: ASCENDING veya DESCENDING değerlerinden biri
  • DENSITY: SPARSE_ANY veya DENSE değerlerinden biri

Dizin silme

Bir dizini silmek için aşağıdaki adımları tamamlayın:

MongoDB API

Bir dizini silmek için dropIndex() yöntemini kullanın. Örneğin:

Dizin adını kullanarak dizin silme

db.restaurants.dropIndex("cuisine_index")

Dizin tanımını kullanarak dizin silme

db.restaurants.dropIndex({"cuisine" : 1})
Firebase konsolu
  1. Firebase konsolunda Firestore Database sayfasına gidin.

    Firestore veritabanına gitme

  2. Veritabanları listesinden bir veritabanı seçin.
  3. Dizinler sekmesini tıklayın.
  4. Dizin listesinde, silmek istediğiniz dizin için Diğer düğmesinden Sil'i seçin.
  5. Dizini Sil'i tıklayın.
gcloud CLI
  1. Dizinin adını bulmak için gcloud firestore indexes composite list komutunu kullanın.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    DATABASE_ID yerine veritabanı kimliğini yazın.

  2. Dizini silmek için gcloud firestore indexes composite delete komutunu kullanın.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    Aşağıdakini değiştirin:

    • INDEX_NAME: bir dizinin adı
    • DATABASE_ID: veritabanı kimliği

Dizin oluşturma süresi

Bir dizin oluşturmak için MongoDB uyumlu Cloud Firestore, dizini oluşturmalı ve ardından dizin girişlerini mevcut verilerle doldurmalıdır. Dizin oluşturmak için gereken süre aşağıdakilere göre belirlenir:

  • Bir dizinin minimum oluşturma süresi, boş bir veritabanı için bile birkaç dakikadır.

  • Dizin girişlerini doldurmak için gereken süre, yeni dizinde ne kadar mevcut veri olduğuna bağlıdır. Dizin tanımıyla eşleşen alan değerleri ne kadar fazlaysa dizin girişlerinin doldurulması o kadar uzun sürer.

Uzun süreli işlemleri yönetme

Dizin oluşturma işlemleri uzun süreli işlemlerdir. Aşağıdaki bölümlerde, uzun süren dizin işlemleriyle nasıl çalışılacağı açıklanmaktadır.

Dizin oluşturmaya başladıktan sonra MongoDB uyumlu Cloud Firestore, işleme benzersiz bir ad atar. İşlem adlarının önüne projects/PROJECT_ID/databases/DATABASE_ID/operations/ ön eki eklenir. Örneğin:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

describe komutu için işlem adı belirtirken öneki atlayabilirsiniz.

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 etme

Uzun süreli işlemlerin tamamını listelemek yerine tek bir işlemin ayrıntılarını listeleyebilirsiniz:

gcloud firestore operations describe operation-name

Tamamlanma süresini tahmin etme

İşleminiz çalışırken işlemin genel durumu için state alanının değerini görün.

Uzun süreli bir işlemin durumuyla ilgili istekler, workEstimated ve workCompleted metriklerini de döndürür. workEstimated, bir işlemin işleyeceği tahmini toplam belge sayısını gösterir. workCompleted Şu ana kadar işlenen doküman sayısını gösterir. İşlem tamamlandıktan sonra, workCompleted, workEstimated değerinden farklı olabilecek, gerçekten işlenen toplam belge sayısını yansıtır.

Bir işlemin ilerleme durumunu tahmin etmek için workCompleted değerini workEstimated değerine bölün.

Aşağıda, dizin oluşturma sürecine dair bir örnek 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. İşlemin sonucu için state alanının değerini görün. Yanıtın done alanı ayarlanmamışsa işlem tamamlanmamıştır.