Dizinler, bir veritabanının performansında önemli bir faktördür. Bir kitaptaki konuları sayfa numaralarıyla eşleyen bir kitabın dizini gibi, bir veritabanı dizini de bir veritabanındaki öğeleri veritabanındaki konumlarıyla eşler. Bir veritabanına bir sorgu gönderdiğinizde, veritabanı, talep ettiğiniz öğelerin konumlarını hızlı bir şekilde aramak için bir dizin kullanabilir.
Bu sayfada, Cloud Firestore'un kullandığı iki dizin türü, tek alanlı dizinler ve bileşik dizinler açıklanmaktadır.
Her sorgunun arkasında bir dizin
Bir sorgu için dizin yoksa, çoğu veritabanı içeriklerini madde madde tarar; bu, veritabanı büyüdükçe daha da yavaşlayan yavaş bir işlemdir. Cloud Firestore, tüm sorgular için dizinler kullanarak yüksek sorgu performansını garanti eder. Sonuç olarak, sorgu performansı, veritabanındaki öğelerin sayısına değil, sonuç kümesinin boyutuna bağlıdır.
Daha az dizin yönetimi, daha fazla uygulama geliştirme
Cloud Firestore, dizinleri yönetmek için harcamanız gereken süreyi azaltan özellikler içerir. En temel sorgular için gerekli indeksler sizin için otomatik olarak oluşturulur. Uygulamanızı kullanıp test ederken Cloud Firestore, uygulamanızın gerektirdiği ek dizinleri belirlemenize ve oluşturmanıza yardımcı olur.
dizin türleri
Cloud Firestore iki tür dizin kullanır: tek alanlı ve bileşik . Dizine alınan alan sayısının yanı sıra, tek alanlı ve bileşik dizinler, onları yönetme biçiminize göre farklılık gösterir.
Tek alanlı dizinler
Tek alan dizini, belirli bir alanı içeren bir koleksiyondaki tüm belgelerin sıralanmış eşlemesini depolar. Tek alanlı bir dizindeki her giriş, bir belgenin belirli bir alan için değerini ve belgenin veritabanındaki konumunu kaydeder. Cloud Firestore, birçok temel sorguyu gerçekleştirmek için bu dizinleri kullanır. Tek alan dizinlerini, veritabanınızın otomatik dizin oluşturma ayarlarını ve dizin muafiyetlerini yapılandırarak yönetirsiniz.
Otomatik indeksleme
Varsayılan olarak Cloud Firestore, bir belgedeki her alan ve bir haritadaki her alt alan için tek alanlı dizinleri otomatik olarak tutar. Cloud Firestore, tek alanlı dizinler için aşağıdaki varsayılan ayarları kullanır:
Cloud Firestore, dizi olmayan ve harita olmayan her alan için biri artan modda ve diğeri azalan modda olmak üzere iki koleksiyon kapsamı tek alan dizini tanımlar.
Cloud Firestore, her harita alanı için, haritadaki her bir dizi olmayan ve harita olmayan alt alan için bir koleksiyon kapsamı artan dizini ve bir azalan dizin oluşturur.
Bir belgedeki her dizi alanı için Cloud Firestore, bir koleksiyon kapsamı dizi içerir dizini oluşturur ve sürdürür.
Koleksiyon grubu kapsamına sahip tek alanlı dizinler varsayılan olarak korunmaz.
Tek alanlı dizin muafiyetleri
Tek alanlı bir dizin muafiyeti oluşturarak, bir alanı otomatik dizin oluşturma ayarlarınızdan muaf tutabilirsiniz. Dizin oluşturma muafiyeti, veritabanı genelindeki otomatik dizin ayarlarını geçersiz kılar. Bir muafiyet, otomatik dizin oluşturma ayarlarınızın aksi takdirde otomatik dizin oluşturmanın etkinleştireceği tek alanlı bir dizini devre dışı bırakacağı veya devre dışı bırakacağı tek alanlı bir dizini etkinleştirebilir. Muafiyetlerin yararlı olabileceği durumlar için dizine ekleme en iyi uygulamalarına bakın.
Bir harita alanı için tek alanlı bir dizin muafiyeti oluşturursanız, haritanın alt alanları bu ayarları devralır. Ancak, belirli alt alanlar için tek alanlı dizin muafiyetleri tanımlayabilirsiniz. Bir alt alan için bir muafiyeti silerseniz, alt alan, varsa üst öğesinin muafiyet ayarlarını veya üst muafiyet yoksa veritabanı genelindeki ayarları devralır.
Tek alanlı dizin muafiyetleri oluşturmak ve yönetmek için bkz . Cloud Firestore'da Dizinleri Yönetme .
Bileşik indeksler
Bileşik bir dizin, dizine eklenecek sıralı bir alan listesine dayalı olarak bir koleksiyondaki tüm belgelerin sıralı bir eşlemesini depolar.
Cloud Firestore, tek alanlı dizinler tarafından halihazırda desteklenmeyen sorguları desteklemek için bileşik dizinler kullanır.
Cloud Firestore, çok sayıda olası alan kombinasyonu nedeniyle, tek alanlı dizinlerde olduğu gibi otomatik olarak bileşik dizinler oluşturmaz. Bunun yerine Cloud Firestore, uygulamanızı oluştururken gerekli bileşik dizinleri belirlemenize ve oluşturmanıza yardımcı olur.
Gerekli dizini oluşturmadan yukarıdaki sorguyu denerseniz, Cloud Firestore, eksik dizini oluşturmak için izleyebileceğiniz bir bağlantı içeren bir hata mesajı döndürür. Bu, bir dizin tarafından desteklenmeyen bir sorgu girişiminde bulunduğunuz her zaman olur. Konsolu veya Firebase CLI'yi kullanarak bileşik dizinleri manuel olarak da tanımlayabilir ve yönetebilirsiniz. Bileşik dizinler oluşturma ve yönetme hakkında daha fazla bilgi için bkz. Dizinleri Yönetme .
Dizin modları ve sorgu kapsamları
Tek alanlı ve bileşik dizinleri farklı şekilde yapılandırırsınız, ancak her ikisi de dizinleriniz için dizin modlarını ve sorgu kapsamlarını yapılandırmanızı gerektirir.
İndeks modları
Bir indeks tanımladığınızda, indekslenen her alan için bir indeks modu seçersiniz. Her alanın dizin modu, o alandaki belirli sorgu yan tümcelerini destekler. Aşağıdaki dizin modlarından seçim yapabilirsiniz:
indeks modu | Açıklama |
---|---|
artan | Alandaki < , <= , == , >= , > , != , in ve not-in , sorgu yan tümcelerini destekler ve sonuçları bu alan değerine göre artan düzende sıralamayı destekler. |
azalan | Alandaki < , <= , == , >= , > , != , in ve not-in sorgu yan tümcelerini destekler ve sonuçları bu alan değerine göre azalan düzende sıralamayı destekler. |
Dizi içeriği | Alandaki array-contains ve array-contains-any sorgu yan tümcesini destekler. |
Sorgu kapsamları
Her dizin, bir koleksiyon veya bir koleksiyon grubu kapsamındadır. Bu, dizinin sorgu kapsamı olarak bilinir:
- Koleksiyon kapsamı
- Cloud Firestore, varsayılan olarak koleksiyon kapsamına sahip dizinler oluşturur. Bu dizinler, tek bir koleksiyondan sonuç döndüren sorguları destekler.
- Koleksiyon grubu kapsamı
- Bir koleksiyon grubu, aynı koleksiyon kimliğine sahip tüm koleksiyonları içerir. Bir koleksiyon grubundan filtrelenmiş veya sıralı sonuçlar döndüren bir koleksiyon grubu sorgusu çalıştırmak için, koleksiyon grubu kapsamına sahip karşılık gelen bir dizin oluşturmanız gerekir.
Varsayılan sıralama ve __name__
alanı
Belgeleri her alan için belirtilen dizin modlarına (artan veya azalan) göre sıralamaya ek olarak, dizinler her belgenin __name__
alanına göre son bir sıralama uygular. __name__
alanının değeri, tam belge yoluna ayarlanır. Bu, sonuç kümesindeki aynı alan değerlerine sahip belgelerin belge yoluna göre sıralandığı anlamına gelir.
Varsayılan olarak, __name__
alanı dizin tanımındaki son sıralanan alanla aynı yönde sıralanır. Örneğin:
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
şehirler | __name__ | adı, Toplamak |
şehirler | __name__ | durumu, Toplamak |
şehirler | __name__ | ülke, nüfus, Toplamak |
Sonuçları varsayılan olmayan __name__
yönüne göre sıralamak için bu dizini oluşturmanız gerekir.
İndeksleme örneği
Cloud Firestore, sizin için otomatik olarak tek alanlı dizinler oluşturarak, uygulamanızın en temel veritabanı sorgularını hızlı bir şekilde desteklemesini sağlar. Tek alan dizinleri, alan değerlerine ve <
, <=
, ==
, >=
, >
in
. Dizi alanları için, array-contains
ve array-contains-any
sorgu gerçekleştirmenize izin verir.
Örneklemek için, aşağıdaki örnekleri dizin oluşturma açısından inceleyin. Aşağıdaki kod parçacığı, bir cities
koleksiyonunda birkaç city
belgesi oluşturur ve her belge için name
, state
, country
, capital
, population
ve tags
alanlarını ayarlar:
ağ
var citiesRef = db.collection("cities"); citiesRef.doc("SF").set({ name: "San Francisco", state: "CA", country: "USA", capital: false, population: 860000, regions: ["west_coast", "norcal"] }); citiesRef.doc("LA").set({ name: "Los Angeles", state: "CA", country: "USA", capital: false, population: 3900000, regions: ["west_coast", "socal"] }); citiesRef.doc("DC").set({ name: "Washington, D.C.", state: null, country: "USA", capital: true, population: 680000, regions: ["east_coast"] }); citiesRef.doc("TOK").set({ name: "Tokyo", state: null, country: "Japan", capital: true, population: 9000000, regions: ["kanto", "honshu"] }); citiesRef.doc("BJ").set({ name: "Beijing", state: null, country: "China", capital: true, population: 21500000, regions: ["jingjinji", "hebei"] });
Varsayılan otomatik dizin oluşturma ayarlarını varsayarak Cloud Firestore, dizi alanı için artan tek alan dizini, dizi olmayan alan başına bir azalan tek alan dizini ve dizi içeren tek alan dizini günceller. Aşağıdaki tablodaki her satır, tek alanlı bir dizindeki bir girişi temsil eder:
Toplamak | Alan indekslendi | Sorgu kapsamı |
---|---|---|
şehirler | adı | Toplamak |
şehirler | durumu | Toplamak |
şehirler | ülke | Toplamak |
şehirler | sermaye | Toplamak |
şehirler | nüfus | Toplamak |
şehirler | adı | Toplamak |
şehirler | durumu | Toplamak |
şehirler | ülke | Toplamak |
şehirler | sermaye | Toplamak |
şehirler | nüfus | Toplamak |
şehirler | array-contains bölgeler | Toplamak |
Tek alan dizinleri tarafından desteklenen sorgular
Otomatik olarak oluşturulan bu tek alanlı dizinleri kullanarak, aşağıdaki gibi basit sorgular çalıştırabilirsiniz:
ağ
const stateQuery = citiesRef.where("state", "==", "CA"); const populationQuery = citiesRef.where("population", "<", 100000); const nameQuery = citiesRef.where("name", ">=", "San Francisco");
Ayrıca in
ve bileşik eşitlik ( ==
) sorguları da oluşturabilirsiniz:
ağ
citiesRef.where('country', 'in', ["USA", "Japan", "China"]) // Compound equality queries citiesRef.where("state", "==", "CO").where("name", "==", "Denver") citiesRef.where("country", "==", "USA") .where("capital", "==", false) .where("state", "==", "CA") .where("population", "==", 860000)
Aralık karşılaştırması ( <
, <=
, >
veya >=
) kullanan bir bileşik sorgu çalıştırmanız gerekiyorsa veya farklı bir alana göre sıralama yapmanız gerekiyorsa, o sorgu için bir bileşik dizin oluşturmanız gerekir.
array-contains
dizini, regions
dizi alanını sorgulamanıza olanak tanır:
ağ
citiesRef.where("regions", "array-contains", "west_coast") // array-contains-any and array-contains use the same indexes citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
Bileşik dizinler tarafından desteklenen sorgular
Cloud Firestore, tek alanlı dizinler tarafından halihazırda desteklenmeyen bileşik sorguları desteklemek için bileşik dizinler kullanır. Örneğin, aşağıdaki sorgular için bir bileşik dizine ihtiyacınız olacaktır:
ağ
citiesRef.where("country", "==", "USA").orderBy("population", "asc") citiesRef.where("country", "==", "USA").where("population", "<", 3800000) citiesRef.where("country", "==", "USA").where("population", ">", 690000) // in and == clauses use the same index citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000)
Bu sorgular, aşağıdaki bileşik dizini gerektirir. Sorgu, country
alanı için bir eşitlik ( ==
veya in
) kullandığından, bu alan için artan veya azalan bir dizin modu kullanabilirsiniz. Varsayılan olarak, eşitsizlik yan tümceleri, eşitsizlik yan tümcesindeki alana göre artan bir sıralama düzeni uygular.
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
şehirler | (veya ) ülke, nüfus | Toplamak |
Aynı sorguları azalan bir sıralama düzeniyle çalıştırmak için, population
için azalan yönde ek bir bileşik dizine ihtiyacınız vardır:
ağ
citiesRef.where("country", "==", "USA").orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", "<", 3800000) .orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", ">", 690000) .orderBy("population", "desc") citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000) .orderBy("population", "desc")
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
şehirler | ülke, nüfus | Toplamak |
şehirler | ülke , nüfus | Toplamak |
Ayrıca, bir array-contains
veya array-contains-any
sorguyu ek yan tümcelerle birleştirmek için bir bileşik dizin oluşturmanız gerekir.
ağ
citiesRef.where("regions", "array-contains", "east_coast") .where("capital", "==", true) // array-contains-any and array-contains use the same index citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"]) .where("capital", "==", true)
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
şehirler | dizi içeren etiketler, | (veya ) sermayeToplamak |
Koleksiyon grubu dizinleri tarafından desteklenen sorgular
Koleksiyon grubu kapsamına sahip bir dizini göstermek için bazı city
belgelerine bir landmarks
alt koleksiyonu eklediğinizi hayal edin:
ağ
var citiesRef = db.collection("cities"); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Bridge", category : "bridge" }); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Park", category : "park" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Gallery of Art", category : "museum" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Mall", category : "park" });
Koleksiyon kapsamına sahip aşağıdaki tek alanlı dizini kullanarak, tek bir şehrin landmarks
koleksiyonunu category
alanına göre sorgulayabilirsiniz:
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
görülecek yer | (veya ) kategorisi | Toplamak |
ağ
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park") citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])
Şimdi, tüm şehirlerdeki yer işaretlerini sorgulamakla ilgilendiğinizi hayal edin. Tüm landmarks
koleksiyonlarından oluşan koleksiyon grubunda bu sorguyu çalıştırmak için, koleksiyon grubu kapsamına sahip bir landmarks
tek alanlı dizini etkinleştirmeniz gerekir:
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
görülecek yer | (veya ) kategorisi | Koleksiyon grubu |
Bu dizin etkinleştirildiğinde, yer landmarks
toplama grubunu sorgulayabilirsiniz:
ağ
var landmarksGroupRef = db.collectionGroup("landmarks"); landmarksGroupRef.where("category", "==", "park") landmarksGroupRef.where("category", "in", ["park", "museum"])
Filtrelenmiş veya sıralı sonuçlar döndüren bir koleksiyon grubu sorgusu çalıştırmak için, koleksiyon grubu kapsamına sahip karşılık gelen tek alanlı veya bileşik dizini etkinleştirmeniz gerekir. Ancak sonuçları filtrelemeyen veya sıralamayan koleksiyon grubu sorguları, herhangi bir ek dizin tanımı gerektirmez.
Örneğin, ek bir dizini etkinleştirmeden aşağıdaki koleksiyon grubu sorgusunu çalıştırabilirsiniz:
ağ
db.collectionGroup("landmarks").get()
Dizin girişleri
Projenizin yapılandırılmış dizinleri ve bir belgenin yapısı, bir belge için dizin girişi sayısını belirler. Dizin girişleri, dizin giriş sayısı sınırına dahil edilir .
Aşağıdaki örnek, bir belgenin dizin girişlerini gösterir.
belge
/cities/SF
city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]
Tek Alan dizinleri
- şehir_adı ASC
- şehir_adı DESC
- sıcaklıklar.yaz ASC
- sıcaklıklar.yaz TANIM
- sıcaklıklar.kış ASC
- sıcaklıklar.kış TANIM
- Dizi İçeriği (ASC ve DESC)
Bileşik indeksler
- şehir_adı ASC, mahalleler ARRAY
- şehir_adı DESC, mahalleler ARRAY
Dizin girişleri
Bu dizin oluşturma yapılandırması, belge için aşağıdaki 18 dizin girişiyle sonuçlanır:
dizin | Dizinlenmiş veriler |
---|---|
Tek alanlı dizin girişleri | |
şehir_adı ASC | şehir_adı: "San Francisco" |
şehir_adı DESC | şehir_adı: "San Francisco" |
sıcaklıklar.yaz ASC | sıcaklıklar.yaz: 67 |
sıcaklıklar.yaz TANIM | sıcaklıklar.yaz: 67 |
sıcaklıklar.kış ASC | sıcaklıklar.kış: 55 |
sıcaklıklar.kış TANIM | sıcaklıklar.kış: 55 |
mahalleler Dizisi ASC İçerir | mahalleler: "Misyon" |
mahalleler Dizi DESC İçerir | mahalleler: "Misyon" |
mahalleler Dizisi ASC İçerir | mahalleler: "Şehir merkezi" |
mahalleler Dizi DESC İçerir | mahalleler: "Şehir merkezi" |
mahalleler Dizisi ASC İçerir | mahalleler: "Marina" |
mahalleler Dizi DESC İçerir | mahalleler: "Marina" |
Bileşik dizin girişleri | |
şehir_adı ASC, mahalleler ARRAY | city_name: "San Francisco", mahalleler: "Misyon" |
şehir_adı ASC, mahalleler ARRAY | city_name: "San Francisco", mahalleler: "Şehir merkezi" |
şehir_adı ASC, mahalleler ARRAY | şehir_adı: "San Francisco", mahalleler: "Yat limanı" |
şehir_adı DESC, mahalleler ARRAY | city_name: "San Francisco", mahalleler: "Misyon" |
şehir_adı DESC, mahalleler ARRAY | city_name: "San Francisco", mahalleler: "Şehir merkezi" |
şehir_adı DESC, mahalleler ARRAY | şehir_adı: "San Francisco", mahalleler: "Yat limanı" |
Endeksler ve fiyatlandırma
Dizinler, uygulamanızın depolama maliyetlerine katkıda bulunur. Dizinler için depolama boyutunun nasıl hesaplandığı hakkında daha fazla bilgi için bkz. Dizin girişi boyutu .
Dizin birleştirmenin avantajlarından yararlanma
Cloud Firestore her sorgu için bir dizin kullansa da sorgu başına bir dizin gerektirmesi gerekmez. Birden çok eşitlik ( ==
) yan tümcesi ve isteğe bağlı olarak bir orderBy
yan tümcesi içeren sorgular için Cloud Firestore, mevcut dizinleri yeniden kullanabilir. Cloud Firestore, daha büyük eşitlik sorguları için gereken bileşik dizinleri oluşturmak üzere basit eşitlik filtreleri için dizinleri birleştirebilir.
Dizin birleştirmenin avantajlarından yararlanabileceğiniz durumları belirleyerek dizin oluşturma maliyetlerini azaltabilirsiniz. Örneğin, bir restoran derecelendirme uygulaması için bir restaurants
koleksiyonu hayal edin:
name : "Burger Thyme"
category : "burgers"
city : "San Francisco"
editors_pick : true
star_rating : 4
Şimdi, bu uygulamanın aşağıdakiler gibi sorgular kullandığını hayal edin. Uygulamanın, her zaman artan star_rating
göre sıralama yaparken category
, city
ve editors_pick
için eşitlik yan tümcelerinin kombinasyonlarını kullandığına dikkat edin:
ağ
db.collection("restaurants").where("category", "==", "burgers") .orderBy("star_rating") db.collection("restaurants").where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==" "San Francisco") .where("editors_pick", "==", true ) .orderBy("star_rating")
Her sorgu için bir dizin oluşturabilirsiniz:
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
restoranlar | kategorisi, star_rating | Toplamak |
restoranlar | şehir, star_rating | Toplamak |
restoranlar | kategorisi, şehir, star_rating | Toplamak |
restoranlar | kategorisi, şehir, editors_pick, star_rating | Toplamak |
Daha iyi bir çözüm olarak, Cloud Firestore'un eşitlik maddeleri için dizinleri birleştirme yeteneğinden yararlanarak dizin sayısını azaltabilirsiniz:
Toplamak | İndekslenen alanlar | Sorgu kapsamı |
---|---|---|
restoranlar | kategorisi, star_rating | Toplamak |
restoranlar | şehir, star_rating | Toplamak |
restoranlar | editors_pick, yıldız_derecelendirmesi | Toplamak |
Bu dizin kümesi yalnızca daha küçük olmakla kalmaz, aynı zamanda ek bir sorguyu da destekler:
ağ
db.collection("restaurants").where("editors_pick", "==", true) .orderBy("star_rating")
İndeksleme limitleri
Dizinler için aşağıdaki sınırlar geçerlidir. Tüm kotalar ve limitler için bkz. Kotalar ve Limitler .
sınır | Detaylar |
---|---|
Bir veritabanı için maksimum bileşik dizin sayısı | 200 Bu sınıra bir artış talep etmek için destek ekibiyle iletişime geçebilirsiniz . |
Bir veritabanı için maksimum tek alanlı yapılandırma sayısı | 200 Toplam 200 alan düzeyinde yapılandırmaya izin verilir. Bir alan konfigürasyonu, aynı alan için birden fazla konfigürasyon içerebilir. Örneğin, tek alanlı bir dizin oluşturma muafiyeti ve aynı alandaki bir TTL ilkesi, sınıra doğru bir alan yapılandırması olarak sayılır. |
Her belge için maksimum dizin girişi sayısı | 40.000 Dizin girişlerinin sayısı, bir belge için aşağıdakilerin toplamıdır:
Cloud Firestore'un bir belgeyi ve bir dizi dizini nasıl dizin girişlerine dönüştürdüğünü görmek için bu dizin girişi sayısı örneğine bakın. |
Bileşik dizindeki maksimum alan sayısı | 100 |
Bir dizin girişinin maksimum boyutu | 7,5 KiB Cloud Firestore'un dizin girişi boyutunu nasıl hesapladığını görmek için dizin girişi boyutu bölümüne bakın. |
Bir belgenin dizin girişlerinin boyutlarının maksimum toplamı | 8 MiB Toplam boyut, bir belge için aşağıdakilerin toplamıdır: |
Dizinlenmiş bir alan değerinin maksimum boyutu | 1500 bayt 1500 baytın üzerindeki alan değerleri kesilir. Kesilmiş alan değerleri içeren sorgular tutarsız sonuçlar verebilir. |
En iyi uygulamaları dizine ekleme
Çoğu uygulamada, dizinlerinizi yönetmek için otomatik dizin oluşturmaya ve hata mesajı bağlantılarına güvenebilirsiniz. Ancak, aşağıdaki durumlarda tek alanlı muafiyetler eklemek isteyebilirsiniz:
Dava | Açıklama |
---|---|
Büyük dize alanları | Sorgulama için kullanmadığınız, genellikle uzun dize değerleri içeren bir dize alanınız varsa, alanı dizinlemeden muaf tutarak depolama maliyetlerini azaltabilirsiniz. |
Sıralı değerlere sahip belgeler içeren bir koleksiyona yüksek yazma hızları | Zaman damgası gibi bir koleksiyondaki belgeler arasında sırayla artan veya azalan bir alanı indekslerseniz, koleksiyona maksimum yazma hızı saniyede 500 yazmadır. Sıralı değerlere sahip alana göre sorgulama yapmazsanız, bu sınırı aşmak için alanı indekslemeden muaf tutabilirsiniz. Örneğin, yüksek yazma hızına sahip bir IoT kullanım durumunda, zaman damgası alanına sahip belgeler içeren bir koleksiyon saniyede 500 yazma sınırına yaklaşabilir. |
TTL alanları | TTL (yaşam süresi) politikaları kullanıyorsanız, TTL alanının bir zaman damgası olması gerektiğini unutmayın. TTL alanlarında indeksleme varsayılan olarak etkindir ve daha yüksek trafik hızlarında performansı etkileyebilir. En iyi uygulama olarak, TTL alanlarınız için tek alan muafiyetleri ekleyin. |
Büyük dizi veya harita alanları | Büyük dizi veya harita alanları, belge başına 40.000 dizin girişi sınırına yaklaşabilir. Büyük bir diziye veya harita alanına dayalı sorgulama yapmıyorsanız, onu indekslemeden muaf tutmalısınız. |