Firebase Firestore — nedir, NoSQL belgeler ve koleksiyonlar

Yazar: IT Sectr Yayınlanma: 2026-04-28 Okuma süresi: 10 dk

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

  • Firestore, sorguları, indeksleri ve işlemleri destekleyen bir NoSQL belge veritabanıdır.
  • Veri senkronizasyonu WebSocket aracılığıyla gerçek zamanlı çalışır — sunucudaki değişiklikler anında tüm istemcilere iletilir.
  • Firestore çevrimdışı modu destekler — veriler yerel olarak önbelleğe alınır ve bağlantı yeniden kurulduğunda senkronize edilir.
  • Parçalama veya çoğaltma yapılandırmadan milyonlarca eşzamanlı bağlantıya otomatik ölçekleme.
  • Security Rules, sunucu tarafı kodu olmadan veri erişimini yönetmeye olanak tanır.

Firebase Firestore Nedir

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.

Realtime Database'den Evrim

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 Ücretsiz Limitleri

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.

Veri Modeli: Koleksiyonlar, Belgeler ve Alanlar

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.

Koleksiyonlar ve Belgeler

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üÖrnekDizine Eklenmiş
String“user@example.com”Evet
Number42, 3.14Evet
Booleantrue, falseEvet
Array[1, 2, 3]Yalnızca contains
Map{“nested”: “value”}Evet (anahtarlara göre)
Timestamp2026-07-03T12:00:00ZEvet
Referenceusers/user123Evet

Toplu Yazma ve İşlemler

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 Karşılaştırması

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.

Temel Farklılıklar

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.

Fiyatlandırma

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'da Sorgular, İndeksler ve Sayfalama

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.

Sorgu Türleri

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.

kotlin
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)
}

Otomatik ve Bileşik İndeksler

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.

Android'de Firestore Entegrasyonu

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.

groovy
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-firestore-ktx")
}

// Başlatma
val db = FirebaseFirestore.getInstance()

Veri Okuma ve Yazma

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.

Çevrimdışı Mod

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.

Güvenlik Kuralları ve Veri Doğrulama

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.

Kuralların Yapısı

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.

javascript
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;
    }
  }
}

Veri Doğrulama

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 ve Realtime Database arasındaki fark nedir?

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 nasıl ölçeklenir?

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.

Realtime Database'den Firestore'a veri taşıyabilir miyim?

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.

Firestore çevrimdışı yazmalar sırasında çakışmaları nasıl yönetir?

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.

Firestore ne kadar ücretsiz depolama sunuyor?

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

  • Firebase Firestore, gerçek zamanlı senkronizasyon ve otomatik ölçekleme ile Google'ın NoSQL belge veritabanıdır.
  • Veri modeli: koleksiyonlar → belgeler → alanlar (String, Number, Boolean, Array, Map, Timestamp, Reference, GeoPoint).
  • Karmaşık koşullar için filtreleme, sıralama, sayfalama ve bileşik indekslerle bileşik sorguları destekler.
  • Çevrimdışı mod, bağlantı yeniden kurulduğunda otomatik senkronizasyonla cihazda 500 MiB'a kadar veri önbelleğe alır.
  • Security Rules — arka uç kodu yazmadan tür ve değer doğrulamalı sunucu tarafı erişim kontrol dili.
  • Otomatik hata kurtarma ile çok bölgeli çoğaltma — veri merkezi kesintisinde bile veriler kullanılabilir.
  • Varsayılan veritabanı olarak yeni projeler için önerilir, oyunlar ve ultra düşük gecikme senaryoları için Realtime Database.

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.

Projeyi tartış

Ayrıca okuyun