Yerel modda Firestore, iki işlem grubundan oluşur: Firestore Core işlemleri ve Firestore Pipeline işlemleri.
Firestore Core işlemleri, standart belge oluşturma, okuma, güncelleme ve silme (CRUD) işlevinin yanı sıra anlık dinleme sorguları ve çevrimdışı kalıcılık için yerleşik destek sağlar. Bu sürümdeki belirgin bir operasyonel fark, dizinlerin isteğe bağlı olması ve tek alanlar için otomatik olarak oluşturulmamasıdır. Bu sayede sorgular önceden dizin yapılandırması olmadan yürütülebilir ancak dizine eklenmemiş sorgular varsayılan olarak tüm koleksiyonu tarar. Bu durum, veri kümesi büyüdükçe gecikme süresinin ve maliyetlerin artmasına neden olabilir.
Firestore ardışık düzen işlemleri, Firestore Enterprise sürümünün temel bir özelliğidir. Bu özellik, olası sorgu kapsamını önemli ölçüde genişletmek için gelişmiş bir sorgu motoru üzerine inşa edilmiştir. İşlem hattı işlemleri, esnek bir sorgu söz dizimi ve dizinlerin isteğe bağlı olduğu ve otomatik olarak oluşturulmadığı farklı bir dizine ekleme yöntemi kullanır. Bu sayede uygulamalar için gelişmiş veri alma işlemleri yapılabilir.
Firestore Core işlemlerinin özellikleri
Temel işlemler, standart CRUD işlemlerine ve gerçek zamanlı dinleme sorgularına olanak tanır. Ancak bu işlemleri Enterprise sürümünde kullanırken dizine ekleme ve faturalandırmayla ilgili temel davranış, Standard sürümüne kıyasla önemli ölçüde değişir.
İşlevsellik ve Süreklilik
Temel işlemler, Standard sürümde kullanılan tanıdık yöntem zincirleme söz dizimini (ör. .where(), .orderBy()) korur. Bu işlemler, mobil ve web istemcileri için gerçek zamanlı dinleme sorgularını ve çevrimdışı kalıcılığı destekler. Bu işlemlerin standart işlem iş yükleri, basit aramalar ve mevcut uygulama kodu taşıma işlemleri için kullanılması önerilir.
Özel dizine ekleme
Standard sürümün aksine, Enterprise sürümündeki temel işlemler otomatik olarak tek alanlı dizinler oluşturmaz. Dizinler isteğe bağlıdır ve sorgu yürütmek için gerekli değildir. Belirli bir dizin eksikse sorgu, tam koleksiyon taraması gerçekleştirir. Dizine eklenmemiş sorgular hızlı prototip oluşturmaya olanak tanır ancak veri kümesi büyüdükçe daha yavaş çalışabilir ve daha yüksek maliyetli olabilir. Geliştiriciler, sorgu performansını optimize etmek ve okuma birimi tüketimini azaltmak için dizinleri manuel olarak oluşturmalıdır.
Faturalandırma Modeli (Birim Tabanlı)
Okuma birimleri, belge sayısına göre değil, 4 KB'lık dilimler halinde ücretlendirilir. Büyük bir koleksiyonu tarayan dizine eklenmemiş bir sorgu, tüm dokümanlarda taranan toplam bayt sayısına göre okuma birimi tüketir. Yazma birimleri 1 KB'lık dilimler halinde ücretlendirilir. Doküman yazma işlemi, veriler için birimlerin yanı sıra güncellenen her dizin girişi için ek birimler tüketir. Otomatik tek alan dizine eklemeyi zorunlu kılan Standard sürümün aksine, artık yazma maliyetlerini ve performansı optimize etmek için dizine eklenecek belirli alanları seçebilirsiniz.
Firestore ardışık düzen işlemlerinin özellikleri
Ardışık düzen işlemlerini içeren Firestore Enterprise sürümü, Firestore Standard sürümünün mevcut sınırlamalarının çoğunu ortadan kaldıran gelişmiş bir sorgu motoru kullanır. Pipeline işlemleri, yüzlerce ek sorgu özelliği sunar. Pipeline işlemleri aşağıdaki özelliklere sahiptir:
Aşamaya Dayalı Birleştirilebilir Söz Dizimi
Ardışık düzen sorguları, sırayla yürütülen bir dizi sıralı aşama tanımlanarak oluşturulur. Bu sayede, daha önce mümkün olmayan toplama sonucuna göre filtreleme gibi karmaşık işlemler yapılabilir.
Aşağıdaki örnekte, son bir ayda görüntülenen benzersiz ürün kimliklerinin sayısını bulan bir ardışık düzen sorgusu gösterilmektedir:
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
Genişletilmiş Özellikler
Pipeline sorgusu, aşağıdakiler de dahil olmak üzere çok sayıda yeni özellik sunar:
- Toplama işlemleri: İsteğe bağlı gruplandırma alanlarıyla birleştirilmiş yeni toplama işlevleri (ör.
sum(...),min(...)vecount_distinct(...)) için destek. - İlişkisel birleştirmeler: İlişkili alt sorguları kullanarak koleksiyonlar ve alt koleksiyonlar arasında sunucu tarafı birleştirmeler gerçekleştirin.
- Karmaşık Filtreleme:
regex_match(...),add(...)vestr_contains(...)dahil olmak üzere, katı dizin gereksinimleri olmadan, rastgele karmaşıkwhere(...)ifadelerini ifade etmek için yüzlerce ek işlev desteği. - Kısmi Okumalar / Projeksiyonlar:
select(...),remove_fields(...)ve diğer birçok doküman işleme aşamasını kullanarak dokümanların dinamik alt kümelerini alın.
Bu özellikler hakkında daha fazla bilgi edinmek için Verileri ardışık düzen işlemleriyle sorgulama başlıklı makaleyi inceleyin.
Gerçek Zamanlı ve Çevrimdışı Destek
Geliştiriciler, gerçek zamanlı ve çevrimdışı özelliklerden yararlanmak için Firestore Enterprise sürümündeki Firestore Core işlemlerini kullanabilir.
İstemci ve Araç Entegrasyonu
Enterprise sürümü, Pipeline sorgularıyla etkileşim kurmak ve bunları yönetmek için özel özellikler içerir:
- Sorgu açıklama ve profilleme: Sorgu açıklama sonuçlarını kullanarak bir sorgunun kaç okuma veya yazma birimi tükettiğini anlayabilir ve yürütme işlemini analiz edebilirsiniz.
- Sorgu analizleri: Enterprise sürümü, veritabanınızda çalıştırılan en popüler sorgular ve bunların performans özellikleri hakkında görünürlük sağlayarak performans ve maliyeti iyileştirmek için dizinlerin nerede oluşturulabileceğini belirlemenize yardımcı olan sorgu analizlerini destekler.
- Yeni dizin türleri: Enterprise sürümü için seyrek, seyrek olmayan ve benzersiz dizinler gibi dizin türleri de dahil olmak üzere özel dizinler oluşturabilirsiniz. Ayrıca Enterprise veritabanları için vektör arama dizinleri oluşturmayı ve düzenlemeyi de destekler.
Firestore Standard sürümü ile Firestore Enterprise sürümü arasındaki farklar
Temel işlemler ile ardışık düzen işlemleri arasındaki temel operasyonel fark, dizine ekleme yönetiminde yatar. Bu fark, performansı ve maliyeti doğrudan etkiler.
| Standard sürüm - Temel işlemler | Enterprise sürümü - Temel işlemler ve ardışık düzen işlemleri | |
| Dizine ekleme şartı | Sorgular için dizinler gereklidir.
Tek tek alanlar için dizinler otomatik olarak oluşturulur. Daha karmaşık sorgular ise manuel olarak yapılandırılması gereken bileşik dizinleri veya koleksiyon grubu dizinlerini kullanır. |
Dizinler zorunlu değildir ve bu nedenle sorgular için isteğe bağlıdır.
Dizinleri gerektiği gibi tanımlarsınız. Enterprise sürümü, seyrek olmayan/seyrek ve benzersiz dizinler de dahil olmak üzere daha geniş bir dizin türü yelpazesini de destekler. |
| Dizine Eklenen Alanlar | Dizine eklenen alanlara otomatik olarak ek bir __name__ alanı eklenir (henüz eklenmemişse). | __name__, dizine eklenen alanlara otomatik olarak eklenmez. Uygulamanız için önemliyse dizine eklenen alanlarda __name__ değerini açıkça belirtmeniz gerekir. |
| Sıralama Ölçütü Normalleştirmesi | Sorgunun order by ifadesi, sonuna eşitsizlik alanları ve __name__ alanı eklenerek normalleştirilir (henüz mevcut değilse). Bu, order by yan tümcesinde başka hangi alanlar olursa olsun sonuçların benzersiz ve belirleyici bir şekilde sıralanmasını sağlar. | Sıralama ölçütü normalleştirmesi yok. sort a ASC gibi bir sıralama ölçütü, sonuçların yalnızca a alanına göre sıralanmasını garanti eder. Cloud Firestore, sonuçları mümkün olan en verimli sırada döndürmek için mevcut dizinlerinizi kullanır. Bu nedenle, a sonuç kümesinde benzersiz değilse sonuçların sırası, dizin yapılandırmasına, yürütme stratejilerine vb. bağlı olarak sorgudan sorguya değişebilir. Sonuçların benzersiz ve belirleyici bir sıralamasını garanti etmek için sıralama ölçütüne __name__ gibi benzersiz bir alan eklemeniz gerekir. |
| Performans | Dizine eklenen sorgular: Performans ve maliyet, sonuç kümenizin boyutuna göre ölçeklendirilir. |
Dizine eklenmemiş sorgular: Performans ve maliyet, veri kümenizin boyutuna göre ölçeklendirilir. Dizine eklenen sorgular: Performans ve maliyet, sonuç kümenizin boyutuna göre ölçeklendirilir. Dizin oluşturmak ve sorgularınızın performansını ve maliyetini iyileştirmek için Query Explain ve Query Insights araçlarını kullanmanızı öneririz. |
| Depolama Maliyeti Etkisi | Otomatik dizinler ve bileşik dizinler nedeniyle depolama alanı ek yükü oluşur. | Dizinler her alan için otomatik olarak oluşturulmadığından depolama maliyetlerinden tasarruf edersiniz. |
| Maliyet Temeli | Belge başına okuma, yazma ve silme işlemleri için ücret alınır. | Okuma Birimi (4 KB'lık dilimler) ve Yazma Birimi (1 KB'lık dilimler) başına ücretlendirilir. Dizin girişleri yazmak, yazma birimlerini tüketir.
Örneklerle yeni fiyatlandırma hakkında bilgi edinin. |
| Güvenlik Kuralları | Güvenlik Kuralları, okuma/yazma izinlerini doğrulayarak koleksiyonları korur. | Güvenlik Kuralları, okuma/yazma izinlerini doğrulayarak koleksiyonları korur. Veri Modeli kılavuzunda, Pipeline sorgularını desteklemek için verilerinizi nasıl modelleyeceğinizi öğrenin. |