Firebase Firestore, mobil ve web uygulamaları için otomatik gerçek zamanlı senkronizasyona sahip Google'ın esnek NoSQL belge veritabanıdır. Veriler, her biri isteğe bağlı yapıda alanlar içeren koleksiyonlar ve belgeler olarak saklanır. Google, 2026'ya göre Firestore, otomatik hata kurtarma ile çok bölgeli çoğaltmayı destekler. SDK, 100 milisaniyeden düşük gecikmeyle WebSocket bağlantısı üzerinden sunucuya değişiklikleri gönderir.
Önemli Noktalar
Firebase Firestore, Google tarafından 2019 yılında Realtime Database'in halefi olarak piyasaya sürülen bir bulut NoSQL veritabanıdır. Firestore, Google Cloud Spanner ve Google Cloud Datastore altyapısı üzerine inşa edilmiş olup, tek bir işlem içinde güçlü veri tutarlılığı ve otomatik çok bölgeli çoğaltma sağlar. SDK, Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform ve Unity'yi destekler.
Firestore, Google I/O 2017'de “Cloud Firestore” olarak duyuruldu — Realtime Database'in temel sınırlamalarını gideren bir çözüm: karmaşık sorgu desteği eksikliği, birden çok düğümde veri ölçekleyememe ve zayıf tutarlılık. Google'a (2026) göre Firestore, günde 1 trilyondan fazla isteği işler ve yeni Firebase projelerinin %80'inde varsayılan veritabanıdır. Ancak Realtime Database, basit JSON yapısı sayesinde ultra düşük gecikme senaryolarında (oyunlar, işbirlikçi düzenleme) hala geçerliliğini korumaktadır.
Firestore, Spark planında cömert bir ücretsiz limitle kullandıkça öde modeliyle sunulur: 1 GB depolama, ayda 10 GB ağ trafiği, günde 50 bin okuma işlemi, 20 bin yazma işlemi ve 20 bin silme işlemi. Blaze planında yukarıdakilerin tümü ücretsizdir ve aşımlar ücretlendirilir: 100 bin okuma işlemi başına $0.06, 100 bin yazma işlemi başına $0.18. Google'a (2026) göre projelerin %90'ı ücretsiz limit içinde kalır.
Firestore'un veri modeli hiyerarşik olarak düzenlenmiştir: kök koleksiyonları içerir, her koleksiyon belgeleri içerir, her belge alanları (ilkel türler, diziler, Map) ve iç içe koleksiyonları (alt koleksiyonlar) içerir. Koleksiyonların iç içe geçme derinliği sınırsızdır, ancak bir belge başka bir belgeyi doğrudan içeremez — yalnızca bir referans (Reference türü) aracılığıyla.
Koleksiyon, otomatik olarak oluşturulan veya kullanıcı tanımlı tanımlayıcılara sahip belgelerin bir kapsayıcısıdır. Her belge, 1 MiB boyutuna kadar JSON benzeri bir nesnedir. Belge alanları dizeler, sayılar, boole değerleri, diziler, Map, zaman damgaları (Timestamp), coğrafi noktalar (GeoPoint) ve diğer belgelere referanslar (Reference) olabilir. Belge boyutu, tüm alan adları dahil olmak üzere 1 MiB ile sınırlıdır.
| Firestore Alan Türü | Örnek | Dizine Eklenmiş |
|---|---|---|
| String | “user@example.com” | Evet |
| Number | 42, 3.14 | Evet |
| Boolean | true, false | Evet |
| Array | [1, 2, 3] | Yalnızca contains |
| Map | {“nested”: “value”} | Evet (anahtarlara göre) |
| Timestamp | 2026-07-03T12:00:00Z | Evet |
| Reference | users/user123 | Evet |
Firestore, veritabanı düzeyinde atomik işlemleri destekler. Bir işlem birden çok belgeyi okuyup yazabilir — Commit tüm değişiklikleri atomik olarak uygular veya hiçbirini uygulamaz. İşlem başına maksimum 500 işlem, 60 saniye zaman aşımı. Toplu yazma (batch write), okuma aşaması olmayan işlemsel olmayan atomik bir yazma işlemidir. İşlemler finansal işlemler, koltuk rezervasyonları ve envanter yönetimi için kritiktir.
Firestore ve Realtime Database arasında seçim proje gereksinimlerine bağlıdır. Her iki veritabanı da Firebase ekosisteminin bir parçasıdır, gerçek zamanlı senkronizasyon sağlar ve tüm platformlarda kullanılabilir, ancak veri modeli, ölçekleme ve fiyatlandırma açısından temelde farklılık gösterir.
Realtime Database verileri tek bir JSON ağacında depolar, bu basit yapılar için uygundur ancak 3 seviyeden derin iç içe geçmelerde ölçeklemeyi zorlaştırır. Firestore, otomatik parçalama ile koleksiyon-belge modeli kullanarak performans düşüşü olmadan milyonlarca belgeye ölçeklenmeye olanak tanır. Google'a (2026) göre Firestore, hız kaybı olmadan tek bir koleksiyona 10 bine kadar eşzamanlı bağlantıyı desteklerken, Realtime Database tek bir örneğe 200 bine kadar bağlantıyı destekler.
Realtime Database, aktarılan veri hacmine (indirilen bayt) ve eşzamanlı bağlantı sayısına göre faturalandırılır. Firestore, işlem sayısına (okuma, yazma, silme) göre faturalandırılır. Sık sık küçük güncellemeleri olan uygulamalar (sohbet, bildirimler) için Firestore genellikle daha uygun maliyetlidir — her yazma işleminin veri boyutundan bağımsız olarak sabit bir fiyatı vardır. Büyük veri hacimlerinin seyrek okumaları olan uygulamalar için Realtime Database daha ucuz olabilir.
Google'ın önerisi (2026): yeni projeler için varsayılan veritabanı olarak Firestore'u kullanın ve minimum gecikmenin (50 ms altı) ve düz veri yapısının kritik olduğu oyunlar ve uygulamalar için Realtime Database'i kullanın. Her iki veritabanı da aynı projede aynı anda çalışabilir.
Firestore sorguları, filtreleme, sıralama ve limitlerle koleksiyonlara veya koleksiyon gruplarına karşı yürütülür. Her sorgunun istemci tarafı filtrelemeyle tüm JSON ağacını dolaştığı Realtime Database'in aksine, Firestore önceden oluşturulmuş indeksleri kullanarak tüm sorguları sunucuda yürütür. Bu, sorgu karmaşıklığının yalnızca sonuç boyutuna bağlı olmasını, koleksiyon boyutuna bağlı olmamasını garanti eder.
Firestore bir veya birden çok alana göre filtrelemeyi (eşitlik, aralık, in, array-contains, array-contains-any), artan ve azalan sıralamayı, limitleri ve sayfalama için imleçleri destekler. Sınırlamalar: farklı alanlarda filtreleme içeren bileşik sorgular (where price > 10 AND where category == “books”) bileşik bir indeks gerektirir; OR sorguları yasaktır (bunun yerine in ve array-contains-any kullanın) ve farklı alanlarda eşitsizlik sorgularına izin verilmez.
data class Product(
val name: String = "",
val category: String = "",
val price: Double = 0.0,
val inStock: Boolean = false
)
suspend fun FirestoreRepository.queryProducts(): List<Product> {
return firestore
.collection("products")
.whereEqualTo("category", "electronics")
.whereGreaterThanOrEqualTo("price", 100.0)
.whereLessThan("price", 500.0)
.orderBy("price")
.limit(20)
.get()
.await()
.toObjects(Product::class.java)
}
Firestore tek alanlar için otomatik olarak indeksler oluşturur — tek alan sorguları herhangi bir yapılandırma olmadan çalışır. İki veya daha fazla alan içeren sorgular (filtreleme + sıralama) için bileşik indeksler gerekir. Bir sorgu ilk gönderildiğinde, Firestore indeksin tek tıklamayla oluşturulabileceği konsola bir bağlantıyla birlikte bir hata döndürür. Veritabanı başına maksimum 200 bileşik indeks. İndeksler Firebase CLI aracılığıyla dışa ve içe aktarılabilir.
Firestore'u Android uygulamasına bağlama Firebase BOM aracılığıyla standart olarak yapılır. firebase-firestore-ktx bağımlılığı eklendikten sonra, FirebaseFirestore nesnesi getInstance() aracılığıyla kullanılabilir — ek anahtar veya token gerekmez. Firestore, diğer hizmetlerle aynı Firebase projesini kullanır.
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-firestore-ktx")
}
// Başlatma
val db = FirebaseFirestore.getInstance()
Firestore iki okuma modu sunar: tek seferlik (get) ve gerçek zamanlı (addSnapshotListener). Tek seferlik okuma bir belgeyi bir kez alır — ayarlar ve yapılandırma için kullanışlıdır. Bir dinleyici değişikliklere abone olur — herhangi bir belge güncellemesi, bağlı tüm istemcilere gerçek zamanlı olarak otomatik olarak güncellenmiş verileri iletir. set() bir belge oluşturur veya üzerine yazar, update() tüm belgeyi üzerine yazmadan yalnızca belirtilen alanları değiştirir.
Google'a (2026) göre, gerçek zamanlı Firestore kullanan orta ölçekli uygulamalar (100 bin DAU) ayda yaklaşık 5-10 GB giden trafik tüketir. Çevrimdışı önbellek (Persistence Cache) kullanımı, SDK bağlantı yeniden kurulduğunda yalnızca değiştirilen belgeleri yüklediğinden, tekrarlanan indirmeleri %60-70 oranında azaltır.
Persistence Cache, internet erişimi olmadan çalışmak için Firestore'un yerleşik bir mekanizmasıdır. SDK, okunan tüm belgeleri cihazda otomatik olarak önbelleğe alır (Android'de 500 MiB'a kadar). Bağlantı kesildiğinde okumalar önbellekten devam eder ve yazmalar sıraya alınır. Bağlantı yeniden kurulduğunda, bekleyen tüm işlemler sunucuya gönderilir ve önbellek sunucuyla senkronize edilir. Çakışma kontrolü için snapshot-metadata.hasPendingWrites ve setOptions(ServerTimestampBehavior) kullanın.
Security Rules, her okuma veya yazma işleminden önce Google'ın sunucusunda yürütülen Firestore için bildirimsel bir erişim kontrol dilidir. Kurallar sunucu tarafı kodu gerektirmez — Firebase konsolunda veya Firebase CLI aracılığıyla yazılır ve Git aracılığıyla sürümlenir. Her işlem kurallara göre kontrol edilir ve bir ihlal PERMISSION_DENIED hatası döndürür.
Firestore Security Rules match blokları ve allow ifadelerinden oluşur. match bir koleksiyona veya belgeye giden yolu tanımlar, allow izin verilen işlemleri (read, write, create, update, delete) ve bir koşulu — boolean döndüren JavaScript benzeri bir ifade — belirtir. Kurallar kimlik doğrulamayı (request.auth), istek verilerini (request.resource.data), mevcut verileri (resource.data), zamanı (request.time) ve yolu (request.path) kontrol edebilir.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
match /products/{productId} {
allow read: if true;
allow create: if request.auth.token.role == "admin";
allow update: if resource.data.authorId == request.auth.uid;
}
}
}
Security Rules sunucu tarafında tür ve değer doğrulamayı destekler. Fiyat negatifse veya ad boşsa yazmayı yasaklayabilirsiniz. Tüm kontroller yazmadan önce Google'ın sunucusunda gerçekleştirilir — bu, istemciden (Android, iOS, Web, Admin SDK) bağımsız olarak veri tutarlılığını garanti eder. Kurallar kötü niyetli Admin SDK'ya karşı koruma sağlamaz — tasarım gereği kuralları atlar. Tam koruma için Transaction Functions ve Firebase Extensions kullanın.
Sıkça Sorulan Sorular
Firestore indeksler ve karmaşık sorgularla belge modeli kullanır. Realtime Database verileri JSON ağacında saklar ve daha düşük gecikme sağlar. Yeni projeler için Firestore önerilir.
Firestore koleksiyonlar arasında verileri otomatik olarak parçalar — çoğaltma veya parçalama yapılandırmaya gerek yoktur. Veritabanı, performans düşüşü olmadan bir koleksiyonda milyonlarca belgeyi ve binlerce eşzamanlı bağlantıyı yönetir.
Evet, Firebase Console kullanın — “Export to Firestore” özelliği, Realtime Database'in JSON yapısını birkaç tıklamayla Firestore koleksiyonlarına ve belgelerine dönüştürür. İç içe düğümler iç içe koleksiyonlar haline gelir.
Last write wins — varsayılan olarak Firestore, eşzamanlı yazmalar sırasında çakışmaları çözmek için “son yazma kazanır” politikasını kullanır. Özel işleme için yeniden okumalı işlemler kullanın.
Spark planının ücretsiz limiti: 1 GB depolama, günde 50 bin okuma işlemi ve 20 bin yazma işlemi. Bu, MVP'ler ve düşük trafikli uygulamalar için yeterlidir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun