Yerel moddaki 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şlevlerinin 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 dizinlenmemiş sorgular varsayılan olarak koleksiyonun tamamını tarar. Bu durum, veri kümesi büyüdükçe gecikmenin ve maliyetlerin artmasına neden olabilir.
Firestore ardışık düzen işlemleri, olası sorgu aralığını önemli ölçüde genişletmek için gelişmiş bir sorgu motoru üzerine kurulu olan Firestore Enterprise sürümünün temel bir özelliğidir. Pipeline işlemleri, esnek bir sorgu söz dizimi ve dizinlerin isteğe bağlı olduğu ve otomatik olarak oluşturulmadığı ayrı bir dizin oluşturma 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 izin verir. Ancak bu işlemleri Enterprise sürümünde kullanırken, dizine ekleme ve faturalandırma ile 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ümünde kullanılan tanıdık yöntem zincirleme söz dizimini (örneğin, .where(), .orderBy()) korur. Bu işlemler, mobil ve web istemcilerinde gerçek zamanlı dinleme sorgularını ve çevrimdışı kalıcılığı destekler. Bu işlemlerin standart işlemsel iş yükleri, basit aramalar ve mevcut uygulama kodu taşıma için kullanılması önerilir.
Özel dizine ekleme
Enterprise sürümündeki temel işlemler, Standart sürümün aksine tek alanlı dizinleri otomatik olarak oluşturmaz. Dizinler isteğe bağlıdır ve sorgu yürütmek için gerekli değildir. Belirli bir dizin eksikse sorgu, koleksiyonun tamamını tarar. Dizinlenmemiş sorgular hızlı prototip oluşturmaya olanak tanır ancak veri kümesi büyüdükçe daha yavaş çalışabilir ve daha fazla maliyete neden 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 Bazlı)
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 gruplar halinde ücretlendirilir. Belge yazmak için verilerle ilgili birimler ve güncellenen her dizin girişi için ek birimler kullanılır. Otomatik tek alanlı indekslemenin zorunlu olduğu Standard sürümün aksine, artık yazma maliyetlerini ve performansı optimize etmek için indekslenecek belirli alanları seçebilirsiniz.
Firestore ardışık düzen işlemlerinin özellikleri
Ardışık düzen işlemleri 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. Ardışık düzen 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şamayı tanımlayarak 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 ay içinde 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:
- Toplamalar: Rastgele gruplandırma alanlarıyla birlikte yeni toplama işlevleri (ör.
sum(...),min(...)vecount_distinct(...)) desteği. - İlişkisel birleştirme: Korelasyonlu alt sorgular kullanarak koleksiyonlar ve alt koleksiyonlar arasında sunucu tarafı birleştirme işlemleri gerçekleştirin.
- Karmaşık Filtreleme:
regex_match(...),add(...)vestr_contains(...)dahil olmak üzere, rastgele karmaşıkwhere(...)ifadelerini ifade etmek için yüzlerce ek işlev desteği. Tüm bunlar, katı dizin gereksinimleri olmadan. - Kısmi Okumalar / Projeksiyonlar:
select(...),remove_fields(...)ve diğer birçok belge işleme aşamasını kullanarak belgelerin dinamik alt kümelerini alın.
Bu özellikler hakkında daha fazla bilgi edinmek için Verileri Pipeline işlemleriyle sorgulama başlıklı makaleyi inceleyin.
Gerçek Zamanlı ve Çevrimdışı Destek
Geliştiriciler, Gerçek Zamanlı ve Çevrimdışı özelliklerinden yararlanmak için Firestore Enterprise sürümündeki Firestore Core işlemlerini kullanabilir.
Müşteri ve Araç Entegrasyonu
Enterprise sürümünde, Pipeline sorgularıyla etkileşim kurmak ve bunları yönetmek için özel özellikler bulunur:
- Sorgu açıklama ve profil oluşturma: Sorgu Açıklama sonuçlarını kullanarak bir sorgunun kaç okuma veya yazma birimi kullandığını anlayabilir ve yürütülmesini analiz edebilirsiniz.
- Sorgu analizleri: Enterprise sürümü, veritabanınızda çalıştırılan en iyi 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 araması 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 işlem hattı işlemleri arasındaki en büyük operasyonel fark, dizine ekleme yönetiminde yatar. Bu durum, performansı ve maliyeti doğrudan etkiler.
| Standart sürüm - Temel işlemler | Enterprise sürümü - Temel işlemler ve İşlem hattı işlemleri | |
| Dizine ekleme koşulu | Sorgular için dizinler gereklidir.
Tek tek alanların dizinleri 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 gerekli değildir ve bu nedenle sorgular için isteğe bağlıdır.
Dizinleri gerektiği şekilde tanımlarsınız. Enterprise sürümü, seyrek olmayan/seyrek ve benzersiz dizinler de dahil olmak üzere daha geniş bir dizin türü aralığını da destekler. |
| Dizine Eklenen Alanlar | Daha önce eklenmemişse dizine eklenen alanlara otomatik olarak ek bir __name__ alanı eklenir. | __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 Düzenlemesi | Sorgunun order by ifadesi, eşitsizlik alanları ve __name__ alanı (henüz mevcut değilse) sona eklenerek normalleştirilir. Bu, sonuçların, order by ifadesindeki diğer alanlardan bağımsız olarak benzersiz ve deterministik bir şekilde sıralanmasını sağlar. | Sıralama ölçütü normalleştirme yok. sort a ASC gibi bir sıralama düzeni yalnızca sonuçların 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ümesi arasında 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 deterministik bir şekilde sıralanmasını sağlamak için sıralama düzenine __name__ gibi benzersiz bir alan eklemeniz gerekir. |
| Performans | Dizinlenmiş sorgular: Performans ve maliyet, sonuç kümenizin boyutuyla orantılıdır. |
Dizinlenmemiş sorgular: Performans ve maliyet, veri kümenizin boyutuyla birlikte ölçeklenir. Dizinlenmiş sorgular: Performans ve maliyet, sonuç kümenizin boyutuyla orantılıdır. Dizin oluşturmak ve sorgularınızın performansını ve maliyetini iyileştirmek için Sorgu Açıklama ve Sorgu Analizleri araçlarını kullanmanızı öneririz. |
| Depolama Maliyeti Etkisi | Otomatik dizinler ve bileşik dizinlerden kaynaklanan depolama ek yüküyle karşılaşırsınız. | Her alan için otomatik olarak dizin oluşturulmadığından depolama maliyetlerinden tasarruf edersiniz. |
| Maliyet Temeli | Belge başına okuma, yazma ve silme işlemi için ücret alınır. | Okuma birimi (4 KB'lık dilimler) ve Yazma birimi (1 KB'lık dilimler) başına ücret alınır. Yazma dizini girişleri, yazma birimlerini tüketir.
Yeni fiyatlandırma hakkında örnekler üzerinden 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ılavuzundan, verilerinizi Pipeline sorgularını destekleyecek şekilde nasıl modelleyeceğinizi öğrenebilirsiniz. |