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
veusers.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?
- Dizin oluşturma ve yönetme hakkında bilgi edinin.