Cloud Firestore'daki dizin türleri

Dizinler, veritabanı performansında önemli bir faktördür. Şuna çok benzer: bir kitaptaki konuları sayfa numaralarıyla eşleyen bir kitabın dizini, bir veritabanı dizini veritabanındaki öğeleri veritabanındaki konumlarıyla eşler. Şu işlemleri gerçekleştirdiğinizde bir dizin kullanabilir. Böylece o veritabanı, konumlarını hızlı bir şekilde ve talep ettiğiniz öğeler arasından seçim yapın.

Bu sayfada, Cloud Firestore'un kullandığı iki dizin türü açıklanmaktadır: tek alanlı dizinler ve birleşik dizin.

Dizin tanımı ve yapısı

Belirli bir belgedeki alanlar listesinde bir dizin, dizin modunu kullanabilirsiniz.

Bir dizin, dizin tanımında adı geçen her alan için bir giriş içerir. İlgili içeriği oluşturmak için kullanılan aşağıdaki kriterlere göre sorgular için potansiyel sonuç olan tüm dokümanları dizine ekler. Bir dokümanın dizine eklenebilmesi için dizine eklenmiş bir değere sahip olması gerekir için ayarlanır. Dizin tanımı bir alana için herhangi bir değer ayarlanmamışsa bu doküman dizinde görünmez. Bu durumda, doküman hiçbir zaman dizine dayalı herhangi bir sorgunun sonucu olarak döndürülmez.

Bileşik dizin, alan değerlerine göre, anlamına gelir.

Her sorgunun arkasındaki dizin

Bir sorgu için dizin yoksa çoğu veritabanı, kendi içerik öğelerini tarar bu da veritabanı büyüdükçe daha da yavaşlayan bir süreçtir. Cloud Firestore, yüksek sorgu performansı için dizinleri kullanarak all sorguları. Sonuç olarak, sorgu performansı boyuta, veri kümesindeki öğelerin sayısı değil, veri kümesindeki öğelerin sayısı farklıdır.

Daha az dizin yönetimi, daha fazla uygulama geliştirme

Cloud Firestore, yaptığınız iş yükünü azaltmanıza ve harcamanız gerektiği anlamına gelir. En temel otomatik olarak oluşturulur. Uygulamanızı kullanıp test ederken Cloud Firestore, sorunları tespit etmenize ve Uygulamanızın gerektirdiği ek dizinleri oluşturun.

Dizin türleri

Cloud Firestore iki tür dizin kullanır: tek alan ve composite [compozit]. Dizine eklenen alan sayısının yanı sıra tek alan ve bileşik dizinleri yönetme şekliniz açısından farklılık gösterir.

Tek alanlı dizinler

Tek alanlı dizin, tüm dokümanların sıralanmış eşlemesini bir koleksiyon oluşturur. Tek alanlı bir dizindeki her giriş bir dokümanın belirli bir alan için değerini ve dokümanın konumunu kaydeder ekler. Cloud Firestore, pek çok işlem yapmak için bu dizinleri kullanır. temel sorgular. Tek alanlı dizinleri, veritabanınızın temel özelliklerini yapılandırarak otomatik dizine ekleme ayarları ve dizin muafiyetleri.

Otomatik dizine ekleme

Cloud Firestore, varsayılan olarak tek alanlı dizinleri otomatik olarak korur bir dokümandaki her alan ve bir haritadaki her alt alan için. Cloud Firestore tek alanlı dizinler için aşağıdaki varsayılan ayarları kullanır:

  • Cloud Firestore, dizi olmayan ve eşleme olmayan her alan için iki tane tanımlar collection-scope tek alanlı dizinler, bir tanesi artan modda ve biri azalan modda.

  • Cloud Firestore, her eşleme alanı için aşağıdakileri oluşturur:

    • Dizi olmayan, harita dışı her alt alan için bir koleksiyon kapsamlı artan dizin.
    • Dizi olmayan, harita dışı her alt alan için bir koleksiyon kapsamı azalan dizin.
    • Her dizi alt alanı için bir koleksiyon kapsamı dizi-içeren dizin.
    • Cloud Firestore, her harita alt alanını yinelemeli olarak dizine ekler.
  • Cloud Firestore, belgedeki her dizi alanı için , koleksiyon kapsamlı bir dizi içeren dizin sağlar.

  • Koleksiyon grubu kapsamına sahip tek alanlı dizinler varsayılandır.

Tek alanlı dizin muafiyetleri

Bir alanı otomatik dizine ekleme kapsamınızdan muaf tutabilirsiniz. ayarları için tek alanlı dizin muafiyeti oluşturun. Dizine ekleme muafiyeti, veritabanı genelindeki otomatik dizin ayarlarını geçersiz kılar. muafiyet, otomatik dizine ekleme ayarlarınızın tek alanlı bir dizini etkinleştirebilir otomatik dizine ekleme işlemini yapan tek alanlı bir dizini devre dışı bırakır veya etkinleştiremez. Muafiyetlerin yararlı olabileceği durumlar için dizine eklemeyle ilgili en iyi uygulamalar.

Tüm uygulamalara koleksiyon düzeyinde dizin muafiyetleri eklemek için * alanı yolu değerini kullanın alanları olabilir. Örneğin, comments koleksiyon grubu için comments koleksiyon grubundaki tüm alanlarla eşleştirmek için * alan yolunu ve koleksiyon grubu altındaki tüm alanların dizine eklenmesini devre dışı bırakın. Ardından istisnaları ekleyebilirsiniz. Trafiğin azaltılması Dizine eklenen alanların sayısı, depolama maliyetlerini azaltır ve yazmayı iyileştirebilir bazı yolları da görmüştük.

Bir harita alanı için tek alanlı dizin muafiyeti oluşturursanız haritanın alt alanlar bu ayarları devralır. Bununla birlikte, tek alanlı dizin tanımlayabilirsiniz. hariç tutmanızı öneririz. Bir alt alan için muafiyeti silerseniz alt alan, varsa üst alanının muafiyet ayarlarını veya veritabanı genelindeki ayarları kullanarak varsayılan ayarları kullanmanız gerekir.

Tek alanlı dizin muafiyetleri oluşturmak ve yönetmek için şuraya bakın: Dizinleri yönetin.

Birleşik dizinler

Bileşik dizin, koleksiyondaki tüm dokümanların sıralı eşlemesini depolar, alanlar listesini temel alır.

Cloud Firestore, verileri desteklemek için bileşik dizinler kullanır şu anda tek alanlı dizinler tarafından desteklenmiyor.

Cloud Firestore, otomatik olarak bunun gibi bileşik dizinler oluşturmaz büyük sayıda olası alan nedeniyle tek alanlı dizinler için geçerlidir. emin olun. Bunun yerine, Cloud Firestore'u kullanarak gereken bileşik dizinleri inceleyebilirsiniz.

Bir dizin tarafından desteklenmeyen bir sorguyu denediğinizde Cloud Firestore eksik dosyayı oluşturmak için izleyebileceğiniz bir bağlantıyı içeren hata mesajı dizin.

Ayrıca, bileşik dizinleri manuel olarak tanımlayabilir ve yönetebilirsiniz Firebase için Google Analytics 360'ı KSA. Proje yönetimi hakkında daha fazla bileşik dizinler için Dizinleri yönetme bölümüne bakın.

Dizin modları ve sorgu kapsamları

Tek alanlı ve birleşik dizinleri farklı şekilde yapılandırırsınız ancak her ikisi için de yapılandırdığınızdan emin olun.

Dizin modları

Bir dizin tanımladığınızda, dizine eklenen her alan için bir dizin modu seçersiniz. Her biri alanın dizin modu, bu alanda belirli sorgu deyimlerini destekler. Siz şu dizin modlarından birini seçebilir:

Dizin modu Açıklama
Artan Alanda <, <=, ==, >=, >, !=, in ve not-in sorgu deyimlerini ve bu alan değerine göre sonuçları artan düzende sıralamayı destekler.
Azalan Alanda <, <=, ==, >=, >, !=, in ve not-in sorgu deyimlerini destekler ve sonuçları bu alan değerine göre azalan düzende sıralamayı destekler.
Dizi-içerir Alanda array-contains ve array-contains-any sorgu ifadelerini destekler.
Vektör Alanda FindNearest sorgu deyimlerini destekler.

Sorgu kapsamları

Her dizin, bir koleksiyon veya koleksiyon grubuna ayarlanır. Bu biliniyor şu şekilde ayarlayın:

Koleksiyon kapsamı
Cloud Firestore varsayılan olarak koleksiyon kapsamıyla dizinler oluşturur. Bu dizinler, tek bir koleksiyondan sonuç döndüren sorguları destekler.

Koleksiyon grubu kapsamı
Koleksiyon grubu, aynı koleksiyon kimliğine sahip tüm koleksiyonları içerir. Alıcı: filtrelenmiş döndüren bir koleksiyon grubu sorgusu çalıştırma bir koleksiyon grubundan sıralı sonuçlar için de dizin oluşturun.

Varsayılan sıralama ve __name__ alanı

Dokümanları dizin modlarına göre sıralamanın yanı sıra, her alan için belirtildiğinde (artan veya azalan) , dizinler son bir her belgenin __name__ alanına göre sıralayabilirsiniz. __name__ değeri alanı, tam doküman yolu olarak ayarlandı. Bu, belgelerin değerleri, doküman yoluna göre sıralanır.

Varsayılan olarak __name__ alanı, sonla aynı yönde sıralanır. sıralanan alanı belirtir. Örneğin:

Toplama Dizine eklenen alanlar Sorgu kapsamı
şehirler adı, __name__ Toplama
şehirler eyalet, __name__ Toplama
şehirler ülke, nüfus, __name__ Toplama

Sonuçları varsayılan olmayan __name__ yönüne göre sıralamak için oluşturmanız gerekir.

Dizin özellikleri

Sorgunun en verimli şekilde yürütülmesine olanak tanıyan bir dizin, aşağıdaki özellikler tarafından tanımlanır:

  • Eşitlik filtrelerinde kullanılan alanlar
  • Sıralama siparişlerinde kullanılan alanlar
  • Aralık ve eşitsizlik filtrelerinde kullanılan (sıralama siparişlerine halihazırda dahil olmayanlar) alanlar
  • Toplamalarda kullanılan alanlar (sıralama siparişleri ile aralık ve eşitsizlik filtrelerine halihazırda dahil olmayanlar)

Cloud Firestore, sorguların sonuçlarını şu şekilde hesaplar:

  1. Sorgu koleksiyonuna, filtre özelliklerine, filtre operatörlerine ve sıralama siparişlerine karşılık gelen dizini tanımlar.
  2. Taramanın başlatılacağı dizin konumunu tanımlar. Başlangıç konumu, sorgunun eşitlik filtrelerinin önüne eklenir ve ilk orderBy alanındaki aralık ve eşitsizlik filtreleriyle biter.
  3. Tarama işlemi aşağıdakilerden birini yapana kadar dizini taramaya başlar ve tüm filtrelere uygun olan her dokümanı döndürür:
    • Filtre koşullarını karşılamayan bir dokümanla karşılaşır ve sonraki dokümanların filtre koşullarını hiçbir zaman tam olarak karşılamayacağını onaylar.
    • Dizinin sonuna ulaşır.
    • Sorgu tarafından istenen maksimum sayıda sonuç toplar.

Dizine ekleme örneği

Cloud Firestore, sizin için otomatik olarak tek alanlı dizinler oluşturur. Bu özellik, uygulamanızın en temel veritabanı sorgularını hızla desteklemesine olanak tanır. Tek alanlı dizinler, alan değerlerine göre basit sorgular gerçekleştirmenizi sağlar ve <, <=, ==, >=, > ve in karşılaştırıcıları. Dizi alanlarında array-contains ve array-contains-any sorguları gerçekleştirebilirsiniz.

Anlatmak için aşağıdaki örnekleri müşterinin bakış açısından inceleyin dizin oluşturma. Aşağıdaki snippet, cities koleksiyonunda birkaç city doküman içerir ve name, state Her belge için country, capital, population ve tags alanları:

Web
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 dizine ekleme ayarları göz önünde bulundurulduğunda Cloud Firestore, dizi olmayan alan başına bir artan tek alanlı dizin, bir tane azalan tek- dizi olmayan alan başına alan dizini ve bir dizi içeren tek alanlı dizin dizi alanına girin. Aşağıdaki tabloda her satır, tek alanlı dizin:

Toplama Alana dizine eklendi Sorgu kapsamı
şehirler adı Toplama
şehirler eyalet Toplama
şehirler ülke Toplama
şehirler büyük harf Toplama
şehirler nüfus Toplama
şehirler adı Toplama
şehirler eyalet Toplama
şehirler ülke Toplama
şehirler büyük harf Toplama
şehirler nüfus Toplama
şehirler array-contains bölge Toplama

Tek alanlı dizinler tarafından desteklenen sorgular

Otomatik olarak oluşturulan bu tek alanlı dizinleri kullanarak, çok kolay bir şekilde şunun gibi sorgulardır:

Web
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:

Web
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 >=) ya da farklı bir alana göre sıralama yapmanız gerekiyorsa bir birleşik dizin.

array-contains dizini, regions dizi alanını sorgulamanızı sağlar:

Web
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, verileri desteklemek için bileşik dizinler kullanır bileşik sorgular tek alanlı dizinler tarafından hâlihazırda desteklenmemektedir. Örneğin, şu sorgular için bir bileşik dizin gerektirir:

Web
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 için aşağıdaki bileşik dizin gereklidir. Sorgu, country alanı için bir eşitlik (== veya in) içeriyorsa, dizin moduna geçebiliriz. Varsayılan olarak eşitsizlik yan tümceleri, eşitsizlik ifadesidir.

Toplama Dizine eklenen alanlar Sorgu kapsamı
şehirler (veya ) ülke, nüfus Toplama

Aynı sorguları azalan sıralama düzeniyle çalıştırmak için population için azalan yönde ek bir birleşik dizin gerekir:

Web
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")
Toplama Dizine eklenen alanlar Sorgu kapsamı
şehirler ülke, nüfus Toplama
şehirler ülke, nüfus Toplama

dizin birleştirmenin neden olduğu performans kaybını önlemek için dizin birleştirme array-contains veya array-contains-any sorgusunu birleştiren bir bileşik dizin şu ifadeleri kullanın:

Web
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)
Toplama Dizine eklenen alanlar Sorgu kapsamı
şehirler array-contains etiketleri, (veya ) büyük harf Toplama

Koleksiyon grubu dizinleri tarafından desteklenen sorgular

Koleksiyon grubu kapsamına sahip bir dizin göstermek için city dokümanından bazılarına landmarks alt koleksiyon eklendi:

Web
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" });

Aşağıdaki tek alanlı dizini koleksiyon kapsamıyla kullanarak sorgulayabilirsiniz: category alanına göre tek bir şehrin landmarks koleksiyonu:

Toplama Dizine eklenen alanlar Sorgu kapsamı
önemli noktalar (veya ) kategorisi Toplama
Web
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

Örneğin, tüm şehirlerdeki önemli noktaları sorgulamak istiyorsanız, bu sorguyu tüm landmarks içeren koleksiyon grubunda çalıştırırsınız koleksiyonlar oluşturun. Ayrıca, tek alanlı landmarks dizinini de etkinleştirmelisiniz koleksiyon grubu kapsamı:

Toplama Dizine eklenen alanlar Sorgu kapsamı
önemli noktalar (veya ) kategorisi Koleksiyon grubu

Bu dizin etkinleştirildiğinde landmarks koleksiyon grubunu sorgulayabilirsiniz:

Web
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

Filtrelenmiş sonuçları döndüren bir koleksiyon grubu sorgusu çalıştırmak için: ilişkili tek bir alanı veya birleşik bir alanı etkinleştirmek için dizin oluşturun. Filtrelenmeyen koleksiyon grubu sorguları ancak sipariş sonuçları için ek dizin tanımı gerekmez.

Örneğin, aşağıdaki koleksiyon grubu sorgusunu etkinleştirmeden ek bir dizin:

Web
db.collectionGroup("landmarks").get()

Dizin girişleri

Projenizin yapılandırılmış dizinleri ve bir belgenin yapısı, bir dokümandaki dizin girişlerinin sayısıdır. Dizin girişleri dizin girişi sayısı sınırını aşmamalıdır.

Aşağıdaki örnekte bir dokümanın dizin girişleri gösterilmektedir.

Doküman

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

Tek Alanlı dizinler

  • şehir_adı ASC
  • şehir_adı DESC
  • sıcaklıklar.yaz ASC
  • sıcaklıklar.summer DESC
  • sıcaklıklar.winter ASC
  • sıcaklıklar.winter DESC
  • Mahalleler Dizisi İçerir (ASC ve DESC)

Birleşik dizinler

  • şehir_adı ASC, mahalleler ARRAY
  • şehir_adı DESC, mahalleler ARRAY

Dizin girişleri

Bu dizine ekleme yapılandırması, doküman:

Dizin Dizine eklenmiş veriler
Tek alanlı dizin girişleri
şehir_adı ASC City_name: "İstanbul"
şehir_adı DESC City_name: "İstanbul"
sıcaklıklar.yaz ASC sıcaklıklar.yaz: 67
sıcaklıklar.summer DESC sıcaklıklar.yaz: 67
sıcaklıklar.winter ASC sıcaklıklar.winter: 55
sıcaklıklar.winter DESC sıcaklıklar.winter: 55
mahalle dizisinde ASC içerir muhitler: "Misyon"
mahalleler Dizisi Şunu İçerir: DESC muhitler: "Misyon"
mahalle dizisinde ASC içerir mahalleler: "Şehir merkezi"
mahalleler Dizisi Şunu İçerir: DESC mahalleler: "Şehir merkezi"
mahalle dizisinde ASC içerir mahalleler: "İstanbul"
mahalleler Dizisi Şunu İçerir: DESC mahalleler: "İstanbul"
Bileşik dizin girişleri
şehir_adı ASC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "İstanbul"
şehir_adı ASC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "Şehir Merkezi"
şehir_adı ASC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "İstanbul"
şehir_adı DESC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "İstanbul"
şehir_adı DESC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "Şehir Merkezi"
şehir_adı DESC, mahalleler ARRAY City_name: "İstanbul", mahalleler: "İstanbul"

Dizinler ve fiyatlandırma

Dizinler, uygulamanızın depolama maliyetlerine katkıda bulunur. Dizinler için depolama alanı boyutunu hesaplama hakkında daha fazla bilgi edinmek istiyorsanız Dizin girişi boyutu.

Dizin birleştirmeyi kullan

Cloud Firestore her sorgu için bir dizin kullansa da her sorgu için bir dizin gerekir. Çoklu eşitliğe sahip sorgular için (==) ifadeleri ve isteğe bağlı olarak orderBy deyimiyle birlikte Cloud Firestore, mevcut dizinleri yeniden kullanın. Cloud Firestore, kullanımı kolaylaştırmak için dizinleri birleştirebilir daha büyük eşitlik için gereken bileşik dizinleri oluşturmak üzere eşitlik filtreleri daha fazla bilgi edineceksiniz.

Dizin'i kullanabileceğiniz durumları tanımlayarak dizine ekleme maliyetlerini azaltabilirsiniz. birleştiriliyor. Örneğin, bir restoran derecelendirme uygulamasının restaurants koleksiyonunda:

  • restoran

    • hamburger

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

Bu uygulama, aşağıdaki gibi sorgular kullanır. Uygulama eşitlik kombinasyonları kullanıyor category, city ve editors_pick için ifadeler kullanarak her zaman sıralama ölçütü olarak kullanın artan star_rating:

Web
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:

Toplama Dizine eklenen alanlar Sorgu kapsamı
restoranlar kategorisi, star_rating Toplama
restoranlar şehir, yıldızlı değerlendirme Toplama
restoranlar kategorisi, şehir, star_rating Toplama
restoranlar kategorisi, şehir, editor_pick, star_rating Toplama

Daha iyi bir çözüm olarak, denemenizin sayısını azaltabilirsiniz. Cloud Firestore'un birleştirme özelliğinden yararlanarak dizinleri eşitlik ifadeleri için dizinler:

Toplama Dizine eklenen alanlar Sorgu kapsamı
restoranlar kategorisi, star_rating Toplama
restoranlar şehir, yıldızlı değerlendirme Toplama
restoranlar editörleri_seç, yıldız_derecelendirmesi Toplama

Bu dizin grubu hem daha küçüktür hem de ek bir sorguyu destekler:

Web
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

Dizine ekleme sınırları

Dizinler için aşağıdaki sınırlar geçerlidir. Kotalar ve sınırlar hakkında daha fazla bilgi için Kotalar ve Sınırlar.

Sınır Ayrıntılar
Bir veritabanı için maksimum birleşik dizin sayısı
Bir veritabanı için maksimum tek alanlı yapılandırma sayısı

Tek alan düzeyinde yapılandırma aynı alan için birden fazla yapılandırma içerebilir. Örneğin, aynı alanda tek alanlı dizine ekleme muafiyeti ve TTL politikası bir alan yapılandırması olarak sayılır.

Her belge için maksimum dizin girişi sayısı

40.000

Belgelerde dizin girişlerinin sayısı, aşağıdakilerin toplamına eşittir:

  • Tek alanlı dizin girişlerinin sayısı
  • Birleşik dizin girişlerinin sayısı

Cloud Firestore'un bir belgeyi ve dizin grubunu nasıl dizin girişine dönüştürdüğünü görmek için dizin girişi sayısıyla ilgili bu örneğe göz atın.

Bileşik dizindeki maksimum alan sayısı 100
Dizin girişinin maksimum boyutu

7,5 KiB

Cloud Firestore'un dizin girişi boyutunu nasıl hesapladığını öğrenmek için dizin girişi boyutu bölümünü inceleyin.

Bir belgenin dizin girişlerinin maksimum toplam boyutu

8 MiB

Belgelerdeki toplam boyut, aşağıdakilerin toplamına eşittir:

  • Bir belgenin tek alanlı dizin girişlerinin toplam boyutu
  • Bir belgenin bileşik dizin girişlerinin toplam boyutu
  • Dizine eklenen alan değerinin maksimum boyutu

    1.500 bayt

    Boyutu 1.500 baytı aşan alan değerleri kısaltılır. Kısaltılmış alan değerleri içeren sorgular tutarsız sonuçlar verebilir.

    Dizine eklemeyle ilgili en iyi uygulamalar

    Çoğu uygulama için otomatik dizine ekleme işlevini kullanabilirsiniz. Hata mesajında nasıl yönetebileceğinizi öğreneceksiniz. Ancak tek alan muafiyetini, şu durumlardan biridir:

    Durum Açıklama
    Geniş dize alanları

    Genellikle kullanırsanız, alanı muaf tutarak depolama maliyetlerini azaltabilirsiniz. olabilir.

    Sıralı değerleri olan belgeler içeren bir koleksiyona yüksek yazma hızları

    Bir alanı dizine eklemede bir bir zaman damgası gibi, bir koleksiyondaki dokümanların maksimum toplama işlemi saniyede 500 yazmadır. Sıralı değerlere sahip alana göre sorgulama yapmazsanız alanı muaf tutabilirsiniz. dizine eklenmesini engelleyebilirsiniz.

    Örneğin, yazma hızı yüksek olan bir IoT kullanım alanında, zaman damgası alanı olan belgeler içeren bir koleksiyon, saniyede 500 yazma sınırına yaklaşabilir.

    TTL alanları

    TTL (geçerlilik süresi) politikalarını kullanıyorsanız TTL'nin alanına bir zaman damgası girilmelidir. TTL alanlarında dizine ekleme varsayılan olarak etkindir ve performansı daha yüksek trafik oranlarında etkiler. En iyi uygulama olarak, tek alan muafiyeti vardır.

    Büyük dizi veya eşleme alanları

    Büyük dizi veya eşleme alanları,belge başına 40.000 dizin girişi sınırına yaklaşabilir. Geniş bir diziye veya eşleme alanına dayalı sorgulama yapmıyorsanız dizine ekleme işleminden muaf tutmanız gerekir.

    Birden çok alanda aralık ve eşitsizlik operatörleri içeren sorgular kullanıyorsanız dizine ekleme dikkate almanız gereken hususların Cloud Firestore sorgularının performansı ve maliyeti

    Dizine ekleme sorunlarının (dizin dağılması, INVALID_ARGUMENT hataları) nasıl giderileceği hakkında daha fazla bilgi için sorun giderme sayfasına bakın.