Dizinlere genel bakış

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

Bu sayfada, MongoDB uyumluluğu ile Cloud Firestore'da dizine ekleme açıklanmaktadır. MongoDB uyumlu Cloud Firestore, varsayılan olarak herhangi bir dizin oluşturmaz. Veritabanı performansını artırmak için en sık kullandığınız sorgularla ilgili dizinler oluşturun.

Dizinlerin, veritabanı performansı üzerinde büyük etkisi vardır. Bir sorgu için dizin varsa veritabanı, taranması gereken veri miktarını ve sonuçları sıralamak için gereken çalışmayı azaltarak sonuçları verimli bir şekilde döndürebilir. Ancak dizin girişleri, depolama maliyetlerini ve dizine eklenmiş alanlarda yazma işlemi sırasında yapılan iş miktarını artırır.

Dizin tanımı ve yapısı

Bir dizin şunlardan oluşur:

  • koleksiyon kimliği
  • Belirli bir koleksiyondaki alanların listesi
  • Her alan için artan veya azalan bir sıra

Dizin, sparse, multikey veya unique seçeneklerini de etkinleştirebilir.

Dizin sıralaması

Her alanın sırası ve sıralama yönü, indeksi benzersiz şekilde tanımlar. Örneğin, aşağıdaki dizinler iki ayrı dizindir ve birbirinin yerine kullanılamaz:

Toplama Alanlar
şehirler ülke (artan), nüfus (azalan)
şehirler nüfus (azalan), ülke (artan),

Bir sorguyu desteklemek için dizin oluştururken alanları sorgunuzdaki sırayla ekleyin.

Dizin yoğunluğu

Dizin girişleri, varsayılan olarak bir koleksiyondaki tüm dokümanlardan gelen verileri depolar. Bu, seyrek olmayan dizin olarak bilinir. Bir doküman, dizinde belirtilen alanlardan herhangi birini içerip içermediğine bakılmaksızın dizine eklenir. Dizin girişleri oluşturulurken mevcut olmayan alanlar NULL değerine sahipmiş gibi kabul edilir. Bu davranışı değiştirmek için dizini seyrek dizin olarak tanımlayabilirsiniz.

Seyrek dizinler

Seyrek dizin, koleksiyondaki yalnızca dizine eklenmiş alanlardan en az birinde değer (null dahil) içeren belgeleri dizine ekler. Seyrek dizin, depolama maliyetlerini azaltır ve performansı artırabilir.

Dizi değerleri için çok anahtarlı dizinler

Dizi değerleri içeren bir alanda dizin oluşturuyorsanız çok anahtarlı dizin oluşturmanız gerekir. Normal bir dizin, dizi değerlerini dizine ekleyemez. Çok anahtarlı bir dizin, dizin tanımında en fazla bir dizi alanını destekler ve dizi değerlerini geçen işlemler için kullanılabilir.

Çok anahtarlı dizinleri yalnızca dizi değerlerini dizine eklemeniz gerektiğini biliyorsanız kullanın. Normal dizinler, sorgu işlenirken avantaj sağlar. Örneğin, normal dizinler bir aralıktaki değerleri daha verimli bir şekilde filtreleyebilir.

Aşağıdaki durumlarda dizi değerleri ve çok anahtarlı dizinlerle çalışırken hatalar oluşur:

  • Bir işlem, normal dizinle dizine eklenmiş bir alana dizi değeri eklemeye çalışıyor. Dizi değerini eklemek için bu alandaki mevcut normal dizinleri silmeniz ve bunları çok anahtarlı dizinler olarak yeniden oluşturmanız gerekir.
  • Dizi değeri içeren bir alanda normal dizin oluşturmaya çalışıyorsunuz. Çok anahtarlı bir dizin oluşturmanız veya dizi değerlerini silmeniz gerekir.
  • Bir işlem, dizi değerleri içeren birden fazla alanı dizine eklemeye çalışıyor. Çok anahtarlı bir dizinde dizi değeri olan birden fazla alan olamaz. Devam etmek için veri modelinizi veya dizin tanımlarınızı değiştirin.
  • İki alan yolunun users.posts ve users.zip gibi ortak bir öneki paylaştığı çok anahtarlı bir dizin oluşturmaya çalışıyorsunuz.

Benzersiz dizinler

Dizin oluşturulan alanlar için benzersiz değerleri zorunlu kılmak üzere benzersiz dizin seçeneğini ayarlayın. Birden fazla alandaki dizinler için her değer kombinasyonu, dizinde benzersiz olmalıdır. Veritabanı, yinelenen değerlere sahip dizin girişleri oluşturmaya yönelik tüm güncelleme ve ekleme işlemlerini reddeder. Dizine eklenen alanların verileri yinelenen değerler içeriyorsa ve benzersiz bir dizin oluşturmaya çalışırsanız dizin oluşturma işlemi, işlem ayrıntılarında bir hata mesajıyla başarısız olur.

Benzersiz dizinde bulunmayan alanlar

Benzersiz dizin için alanları eksik olan bir belge eklerseniz dizin, eksik alanlar için null değerlerini ayarlar. Sonuç olarak elde edilen dizin girişi benzersiz olmalıdır. Aksi takdirde işlem başarısız olur.

Örneğin, şu dizinde:

db.cities.createIndex( { "name": 1 }, { unique: true } )

Koleksiyona {"abbreviation": "LA"} dokümanını eklerseniz benzersiz dizin, name değeri null olarak ayarlanmış bir giriş oluşturur. Ardından {"abbreviation": "NYC"} belgesini eklemeye çalışırsanız benzersiz dizin için ortaya çıkan giriş aynı olduğundan işlem başarısız olur.

Aynı davranış, birden fazla alanı olan benzersiz dizinler için de geçerlidir. Bir doküman oluşturulurken veya güncellenirken, dizine eklenmiş alanlar eksikse null olarak ayarlanır ve sonuçtaki dizin girişi, dizinde benzersiz olmalıdır.

Dizin oluşturma hatalarını giderme

Dizinlerinizi yönetirken dizin oluşturma hatalarıyla karşılaşabilirsiniz. Veritabanı verilerle ilgili bir sorunla karşılaşırsa dizine ekleme işlemi başarısız olabilir. Dizin oluşturma işlemleri aşağıdaki nedenlerle başarısız olabilir:

  • Dizin sınırına ulaştınız. Ö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 hata mesajı görürsünüz. Bir dizin sınırına ulaşmadıysanız dizinleme işlemini yeniden deneyin.
  • Çok anahtarlı dizin gereklidir. Dizine eklenen alanlardan en az biri dizi değeri içeriyor. Devam etmek için çok anahtarlı bir dizin kullanmanız veya dizi değerlerini silmeniz gerekir.
  • Bir işlem, dizi değerleri içeren birden fazla alanı dizine eklemeye çalışıyor. Çok anahtarlı bir dizinde dizi değeri olan birden fazla alan olamaz. Devam etmek için veri modelinizi veya dizin tanımlarınızı değiştirin.
  • Benzersiz dizin seçeneğini ayarladığınızda, dizine eklenmiş alanların verileri yinelenen dizin girişleri oluşturur. Devam etmek için verilerdeki yinelenen değer kombinasyonlarını kaldırın.

Sırada ne var?