Cloud Firestore'daki dizin türleri

Dizinler bir veritabanının performansında önemli bir faktördür. Bir kitaptaki konuları sayfa numaralarıyla eşleştiren bir kitabın dizinine benzer şekilde, bir veritabanı dizini de bir veritabanındaki öğeleri veritabanındaki konumlarıyla eşleştirir. Bir veritabanına sorgu gönderdiğinizde, veritabanı istediğiniz öğelerin konumlarını hızlı bir şekilde aramak için bir dizin kullanabilir.

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

Her sorgunun arkasında bir dizin

Bir sorgu için dizin yoksa, çoğu veritabanı içeriklerini öğe öğe tarayarak veritabanı büyüdükçe daha da yavaşlayan yavaş bir işlemdir. Cloud Firestore, tüm sorgular için dizinleri kullanarak yüksek sorgu performansını garanti eder. Sonuç olarak sorgu performansı, veritabanındaki öğe 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 alanların sayısının yanı sıra, tek alanlı ve bileşik dizinler, onları nasıl yönettiğinize göre farklılık gösterir.

Tek alanlı dizinler

Tek alanlı dizin, belirli bir alanı içeren bir koleksiyondaki tüm belgelerin sıralanmış eşlemesini saklar. Tek alanlı indeksteki her giriş, belirli bir alan için belgenin değerini ve belgenin veritabanındaki konumunu kaydeder. Cloud Firestore, birçok temel sorguyu gerçekleştirmek için bu dizinleri kullanır. Veritabanınızın otomatik indeksleme ayarlarını ve indeks muafiyetlerini yapılandırarak tek alanlı indeksleri 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 korur. Cloud Firestore, tek alanlı dizinler için aşağıdaki varsayılan ayarları kullanır:

  • Dizi olmayan ve harita olmayan her alan için Cloud Firestore, biri artan modda ve diğeri azalan modda olmak üzere iki koleksiyon kapsamı tek alan dizini tanımlar.

  • Her harita alanı için Cloud Firestore aşağıdakileri oluşturur:

    • Dizi olmayan, harita olmayan her alt alan için bir koleksiyon kapsamı artan dizini.
    • Dizi olmayan, harita olmayan her alt alan için bir koleksiyon kapsamı azalan dizin.
    • Bir koleksiyon kapsamı dizisi, her dizi alt alanı için dizin içerir.
    • Cloud Firestore, her harita alt alanını yinelemeli olarak dizine ekler.
  • Bir belgedeki her dizi alanı için Cloud Firestore, koleksiyon kapsamı dizi içeren bir dizin oluşturur ve korur.

  • Koleksiyon grubu kapsamına sahip tek alanlı dizinler varsayılan olarak korunmaz.

Tek alanlı dizin muafiyetleri

Tek alanlı 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 indeksleme ayarlarınızın normalde devre dışı bırakacağı tek alanlı bir dizini etkinleştirebilir veya otomatik indekslemenin normalde etkinleştireceği tek alanlı bir dizini devre dışı bırakabilir. Muafiyetlerin yararlı olabileceği durumlar için dizine eklemeyle ilgili en iyi uygulamalara bakın.

Bir koleksiyon grubundaki tüm alanlara koleksiyon düzeyinde dizin muafiyetleri eklemek için * alan yolu değerini kullanın. Örneğin, koleksiyon grubu comments için, comments koleksiyonu grubundaki tüm alanlarla eşleşmesi için alan yolunu * olarak ayarlayın ve koleksiyon grubu altındaki tüm alanların indekslenmesini devre dışı bırakın. Daha sonra yalnızca sorgularınız için gerekli alanları dizine eklemek için muafiyetler ekleyebilirsiniz. Dizinlenen alanların sayısının azaltılması, depolama maliyetlerini azaltır ve yazma performansını artırabilir.

Bir harita alanı için tek alanlı dizin muafiyeti oluşturursanız haritanın alt alanları bu ayarları devralır. Ancak belirli alt alanlar için tek alanlı dizin muafiyetlerini tanımlayabilirsiniz. Bir alt alan için bir muafiyet silerseniz, alt alan, varsa üst öğenin muafiyet ayarlarını veya üst öğe muafiyetleri yoksa veritabanı genelindeki ayarları devralır.

Tek alanlı dizin muafiyetlerini oluşturmak ve yönetmek için bkz. Cloud Firestore'da Dizinleri Yönetme .

Bileşik dizinler

Bileşik dizin, dizine eklenecek alanların sıralı listesine dayalı olarak bir koleksiyondaki tüm belgelerin sıralı eşlemesini saklar.

Cloud Firestore, tek alanlı dizinler tarafından halihazırda desteklenmeyen sorguları desteklemek için bileşik dizinleri kullanır.

Cloud Firestore, çok sayıda olası alan kombinasyonu nedeniyle tek alanlı dizinlerde olduğu gibi bileşik dizinleri otomatik olarak oluşturmaz. Bunun yerine Cloud Firestore, uygulamanızı oluştururken gerekli bileşik dizinleri belirlemenize ve oluşturmanıza yardımcı olur.

Yukarıdaki sorguyu önce gerekli dizini oluşturmadan denerseniz Cloud Firestore, eksik dizini oluşturmak için takip edebileceğiniz bağlantıyı içeren bir hata mesajı döndürür. Bu, bir dizin tarafından desteklenmeyen bir sorguyu denediğinizde meydana gelir. Konsolu veya Firebase CLI'yi kullanarak bileşik dizinleri manuel olarak da tanımlayabilir ve yönetebilirsiniz. Bileşik dizinleri 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.

Dizin modları

Bir dizin tanımladığınızda, dizine eklenen her alan için bir dizin modu seçersiniz. Her alanın dizin modu, o alandaki belirli sorgu tümcelerini destekler. Aşağıdaki indeks modları arasından seçim yapabilirsiniz:

Dizin modu Tanım
Artan Alandaki < , <= , == , >= , > , != , in ve not-in sorgu cümlelerini destekler ve sonuçları bu alan değerine göre artan düzende sıralamayı destekler.
Azalan Alandaki < , <= , == , >= , > , != , in ve not-in sorgu cümlelerini destekler ve sonuçların bu alan değerine göre azalan düzende sıralanmasını destekler.
Dizi şunları içerir Alandaki array-contains ve array-contains-any sorgu cümlelerini destekler.

Sorgu kapsamları

Her dizinin kapsamı bir koleksiyona veya koleksiyon grubuna göre belirlenir. 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ı
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 karşılık gelen bir dizin oluşturmanız gerekir.

Varsayılan sıralama ve __name__ alanı

Dokümanları her alan için belirlenen indeks modlarına (artan veya azalan) göre sıralamanın yanı sıra, indeksler her dokümanın __name__ alanına göre son bir sıralama uygular. __name__ alanının değeri tam belge yolu olarak 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 Dizine eklenen alanlar Sorgu kapsamı
şehirler adı, __name__ Toplamak
şehirler durumu, __name__ Toplamak
şehirler ülke, nüfus, __name__ Toplamak

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

Dizin oluşturma ö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 desteklemesine olanak tanır. Tek alanlı dizinler, alan değerlerine ve < , <= , == , >= , > ve in karşılaştırıcılarına dayalı olarak basit sorgular gerçekleştirmenize olanak tanır. Dizi alanları için, array-contains ve array-contains-any sorgularını gerçekleştirmenize olanak tanır.

Açıklamak için aşağıdaki örnekleri dizin oluşturma açısından inceleyin. Aşağıdaki kod parçası, cities koleksiyonunda birkaç city belgesi oluşturur ve her belge için name , state , country , capital , population ve tags alanlarını ayarlar:

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 indeksleme ayarlarını varsayarak Cloud Firestore, dizi olmayan alan başına bir artan tek alanlı dizini, dizi olmayan alan başına bir azalan tek alanlı dizini günceller ve dizi alanı için bir dizi içeren tek alanlı dizini günceller. Aşağıdaki tablodaki her satır, tek alanlı bir dizindeki bir girişi temsil eder:

Toplamak Alan dizine eklendi 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 ülkesi Toplamak
şehirler sermaye Toplamak
şehirler nüfus Toplamak
şehirler array-contains bölgeler Toplamak

Tek alanlı dizinler tarafından desteklenen sorgular

Otomatik olarak oluşturulan bu tek alanlı dizinleri kullanarak aşağıdaki gibi basit sorguları çalıştırabilirsiniz:

const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

Ayrıca eşitlik ( == ) sorguları in ve bunları birleştirebilirsiniz:

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 bu sorgu için bir bileşik dizin oluşturmanız gerekir.

array-contains dizini, regions dizi alanını sorgulamanıza olanak tanır:

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 dizinleri kullanır. Örneğin, aşağıdaki sorgular için bileşik bir dizine ihtiyacınız olacaktır:

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 dizin modunu kullanabilirsiniz. Varsayılan olarak eşitsizlik maddeleri, eşitsizlik maddesindeki alana göre artan bir sıralama düzeni uygular.

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

Aynı sorguları azalan 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:

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

Ayrıca array-contains veya array-contains-any sorguyu ek cümleciklerle birleştirmek için bileşik bir dizin oluşturmanız gerekir.

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 Dizine eklenen alanlar Sorgu kapsamı
şehirler dizi etiketleri içerir , ( ) büyük harf Toplamak

Koleksiyon grubu dizinleri tarafından desteklenen sorgular

Koleksiyon grubu kapsamına sahip bir dizin göstermek için bazı city belgelerine bir landmarks alt koleksiyonu eklediğinizi hayal edin:

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, category alanına göre tek bir şehrin landmarks koleksiyonunu sorgulayabilirsiniz:

Toplamak Dizine eklenen alanlar Sorgu kapsamı
görülecek yer ( ) kategorisi Toplamak
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. Bu sorguyu tüm landmarks koleksiyonlarından oluşan koleksiyon grubunda çalıştırmak için koleksiyon grubu kapsamına sahip landmarks tek alan dizinini etkinleştirmeniz gerekir:

Toplamak Dizine eklenen alanlar Sorgu kapsamı
görülecek yer ( ) kategorisi Koleksiyon grubu

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

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

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

Dizin girişleri

Projenizin yapılandırılmış dizinleri ve belgenin yapısı, belge için dizin girişi sayısını belirler. Dizin girişleri , dizin girişi sayım sınırına dahil edilir.

Aşağıdaki örnek bir belgenin dizin girişlerini göstermektedir.

Belge

/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.yaz DESC
  • sıcaklıklar.kış ASC
  • sıcaklıklar.kış DESC
  • mahalleler Dizi İçeriği (ASC ve DESC)

Bileşik dizinler

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

Dizin girişleri

Bu indeksleme yapılandırması, belge için aşağıdaki 18 indeks girişiyle sonuçlanır:

Dizin Dizine eklenen 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 DESC sıcaklıklar.yaz: 67
sıcaklıklar. kış ASC sıcaklıklar. kış: 55
sıcaklıklar.kış DESC sıcaklıklar. kış: 55
mahalleler Dizisi ASC İçerir mahalleler: "Görev"
mahalleler Dizisi DESC İçerir mahalleler: "Görev"
mahalleler Dizisi ASC İçerir mahalleler: "Şehir Merkezi"
mahalleler Dizisi DESC İçerir mahalleler: "Şehir Merkezi"
mahalleler Dizisi ASC İçerir mahalleler: "Marina"
mahalleler Dizisi DESC İçerir mahalleler: "Marina"
Bileşik dizin girişleri
şehir_adı ASC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Görev"
şehir_adı ASC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Şehir Merkezi"
şehir_adı ASC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Marina"
şehir_adı DESC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Görev"
şehir_adı DESC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Şehir Merkezi"
şehir_adı DESC, mahalleler ARRAY city_name: "San Francisco", mahalleler: "Marina"

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 mutlaka bir dizin gerektirmez. Birden fazla 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 amacıyla basit eşitlik filtrelerine yönelik dizinleri birleştirebilir.

Endeks birleştirmenin avantajlarından yararlanabileceğiniz durumları belirleyerek endeksleme maliyetlerini azaltabilirsiniz. Örneğin, bir restoran derecelendirme uygulaması için bir restaurants koleksiyonu düşünün:

  • restoranları

    • burgerkeki

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

Şimdi bu uygulamanın aşağıdaki 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 cümleciklerinin kombinasyonlarını kullandığına dikkat edin:

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 Dizine eklenen alanlar Sorgu kapsamı
restoranlar kategorisi, star_rating Toplamak
restoranlar şehir, star_rating Toplamak
restoranlar kategorisi, şehir, star_rating Toplamak
restoranlar kategorisi, şehri, editors_pick, star_rating Toplamak

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

Toplamak Dizine eklenen alanlar Sorgu kapsamı
restoranlar kategorisi, star_rating Toplamak
restoranlar şehir, star_rating Toplamak
restoranlar editors_pick, star_rating Toplamak

Bu dizin kümesi yalnızca daha küçük olmakla kalmıyor, aynı zamanda ek bir sorguyu da destekliyor:

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

Dizin oluşturma sınırları

Aşağıdaki sınırlar dizinler için geçerlidir. Tüm kotalar ve sınırlar için bkz. Kotalar ve Sınırlar .

Sınır Detaylar
Bir veritabanı için maksimum bileşik dizin sayısı
Bir veritabanı için maksimum tek alanlı yapılandırma sayısı

Bir alan düzeyinde konfigürasyon, aynı alan için birden fazla konfigürasyon içerebilir. Örneğin, tek alanlı dizin oluşturma muafiyeti ve aynı alandaki TTL politikası, sınıra göre tek 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:

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

Cloud Firestore'un bir belgeyi ve bir dizi dizini dizin girişlerine nasıl 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 bkz . dizin girişi boyutu .

Bir belgenin dizin girişlerinin boyutlarının maksimum toplamı

8 MiB

Toplam boyut, bir belge için aşağıdakilerin toplamıdır:

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

    1500 bayt

    1500 baytın üzerindeki alan değerleri kesilir. Kesilmiş alan değerlerini 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 Tanım
    Büyük dize alanları

    Sorgulama için kullanmadığınız, genellikle uzun dize değerlerini tutan bir dize alanınız varsa, alanı dizin oluşturma işleminden muaf tutarak depolama maliyetlerini azaltabilirsiniz.

    Sıralı değerlere sahip belgeler içeren bir koleksiyona yüksek yazma oranları

    Zaman damgası gibi bir koleksiyondaki belgeler arasında sırayla artan veya azalan bir alanı dizine eklerseniz koleksiyona maksimum yazma hızı saniyede 500 yazma olur. Sıralı değerlere sahip alanı temel alarak sorgulama yapmazsanız bu sınırı atlamak için alanı indekslemeden muaf tutabilirsiniz.

    Örneğin, yazma hızının yüksek olduğu bir IoT kullanım durumunda, zaman damgası alanına sahip belgeleri 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 dizine ekleme 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 alanlı muafiyetler 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 dizi veya harita alanına göre sorgulama yapmıyorsanız, onu indekslemeden muaf tutmalısınız.

    Dizine ekleme sorunlarının (dizin yayılımı, INVALID_ARGUMENT hataları) nasıl çözüleceği hakkında daha fazla bilgi için sorun giderme sayfasına bakın.