Bu sayfada, Cloud Firestore içinde parçalanmış alanların kullanımının nasıl görüntüleneceği ve kontrol edileceği açıklanmaktadır. Bu özellik Firestore Enterprise sürümünde kullanılabilir.
Dokümanlar yazılırken Cloud Firestore, belirli alanların parçalanmış biçimde saklanması gerektiğini belirleyebilir. Parçalanmış alanlar, sorgu performansını optimize etmek için belgenin tamamı yerine yalnızca gerekli alanları okur.
Parçalanmış alanlardan yararlanan sorgular
Parçalanmış alanlardaki okumalar, uygun olduğu durumlarda aşağıdaki sorgu şekillerine uygulanır:
Toplama sorguları: Toplama işlemleri için yalnızca bir alan alt kümesine erişmesi gereken sorgular. Örneğin:
db.pipeline() .collection("/customers") .where(lessThan("account_balance", 0)) .aggregate( countAll().as("total"), )veya gruplandırma ile:
db.pipeline() .collection("/customers") .where(lessThan("account_balance", 0)) .aggregate({ accumulators: [ field('account_balance').average().as('avg_account_balance') ], groups: [field('market_segment')] })Tahmin sorguları: Yalnızca belirli bir alan alt kümesini döndüren sorgular. Örneğin:
db.pipeline() .collection("/customers") .select("family_name", "given_name") .limit(10)Filtre sorguları: Cloud Firestore sorgu motorunun doküman filtreleme için parçalanmış alanların kullanılmasının faydalı olduğuna karar verdiği sorgular. Örneğin:
db.pipeline() .collection("/customers") .where(equal("given_name", "alice"))
Parçalanmış alanların kullanımını görüntüleme
Bir sorgunun parçalanmış alanları kullanıp kullanmadığını kontrol etmek için sorgu açıklama özelliğini kullanabilirsiniz. Sorgu planındaki TableScan düğümü, aşağıdaki metrikleri içeren bir Storage bölümü içerir:
- Şekli tarama:
shredded_fields_only: Sorgu yalnızca parçalanmış alanlardan okur.shredded_fields_backjoin: Sorgu, parçalanmış alanlardan okur ve diğer alanlar için orijinal belgeyle birleşir.
- Parçalanmış alanlar kullanıldı: Parçalanmış alanlar olarak okunan alan adlarının listesi.
- Yeniden kontrol sayısı: Yeniden kontrol gişelerinin haritası. Yeniden kontrol, parçalanmış alanlar taranırken orijinal tam belgeden okumaya geri dönmek anlamına gelir. Bu durum, bir dokümandaki alan değeri 8 KiB'ı aştığında (parçalanmış alan depolama alanı için çok büyük bir değer) meydana gelebilir.
Örnek çıkış
...
└── • TableScan
source: /customers
order: UNDEFINED
row range: (-∞..+∞)
filter: ($account_balance_1 < 0L)
output bindings: {$account_balance_1=account_balance, $market_segment_1=market_segment}
variables: [$account_balance_1, $market_segment_1]
Execution:
records returned: 1,374
latency: 26.58 ms
post-filtered rows: 13,626
records scanned: 15,000
data bytes read: 23.73 MiB (24,887,141 B)
Storage:
scan shape: shredded_fields_only
shredded fields used: [account_balance, market_segment]
Parçalanmış alan kullanımını kontrol etme
Varsayılan olarak, Cloud Firestore uygun olduğunda parçalanmış alanları kullanır. Bu davranışı table_scan_method sorgu seçeneğini kullanarak kontrol edebilirsiniz.
table_scan_method seçeneği için desteklenen değerler:
shredded_fields_enabled(Varsayılan): Mümkün olduğunda parçalanmış alanları kullanın.shredded_fields_disabled: Parçalanmış alanları kullanmayın.force_shredded_fields: Parçalanmış alanlar taranarak tablo taraması gerçekleştirilemiyorsa sorgu başarısız olur.
Örnek
var opts = new PipelineExecuteOptions()
.with("table_scan_method", "shredded_fields_disabled");
var snapshot = db.pipeline()
.collection("/customers")
.where(equal("given_name", "alice"))
.execute(opts)
.get();
Sorgu performansı uyarıları
Cloud Firestore, verimsiz parçalanmış alan kullanımı algılandığında sorgu açıklama sonucunda performans uyarıları verebilir. Örneğin:
Düşük seçiciliğe sahip sorgular: Bir sorgu, filtreleme için parçalanmış alanları taradığında ancak çok az belgeyi filtrelediğinde meydana gelir. Bu durum, taramayı verimsiz hale getirir.
Yüksek yeniden kontrol sorguları: Sorgu, tam belge okumalarına sık sık geri döndüğünde oluşur ve performansı etkileyebilir. Yeniden kontrolü tetikleyen büyük değerleri belirlemek için
storage_sizegibi işlevleri kullanabilirsiniz.
Bu gibi durumlarda, sorgu seçeneklerini kullanarak parçalanmış alan okumalarını devre dışı bırakmayı düşünebilirsiniz.
Sınırlamalar
Cloud Firestore yalnızca üst düzey alanları parçalar. Ayrıca, koleksiyon grubu başına parçalanabilecek alan sayısını da kısıtlar.