Firebase Realtime Database vs. Firestore Database

Veri Ekleme, Silme ve Güncelleme İşlemleri

Adile Güngör ♾️ 🌎
Women in Technology
8 min readSep 8, 2023

--

Merhaba! Ben Kotlin ile Android Programlama Akademisi katılımcılarından Adile Güngör. Kotlin ile Android Programlama Akademisi, “Afetten Etkilenen Yazılımcı Gençlerin Güçlenmesi ve İstihdama Erişimi Projesi”, Sivil Toplum için Destek Vakfı ve Turkey Mozaik Foundation iş birliği ile hayata geçirilen Yerel Güçlenmeye Destek Fonu kapsamında sağlanan hibe desteğiyle gerçekleştirilmektedir.

Yazıya girmeden önce Android ile yeni tanıştıysan buraya da uğramalısın:)

“Eğer fikrinizi yazıya dökemiyorsanız onu kodlayamazsınız”-Peter Haltern

Günün sözünü de yazdıktan sonra başlayalım! Bugün size Firebase Realtime Database ve Firestore Database hakkında bilgiler sunacağım. Ayrıca farklarını anlatacağım. Bunlarla birlikte CRUD olarak bilinen işlemlerden bahsedeceğim. Bunlar Create(oluştur), Read(oku), Update(güncelle) ve Delete(silme) işlemleridir. Bildiğiniz gibi Firebase Realtime Database ve Firebase Cloud Firestore, Firebase tarafından sunulan NoSQL belge tabanlı veritabanlarıdır. Ayrıca gerçek zamanlı veri senkronizasyonu ve çevrimdışı veri erişimi sunarlar. Ancak, aralarında bazı temel farklar vardır.

Ben bu farklardan bahsedeceğim. Aynı zamanda yazı sonunda bu işlerin arkaplanda nasıl gittiğini göstereceğim. Tabi ki kodlarla!

VERİ YAPISI:
Firebase Realtime Database, veriyi JSON ağacında saklar, ancak Cloud Firestore, veriyi JSON’a oldukça benzer belgelerde saklar.

  • Realtime Database’de karmaşık, hiyerarşik veriyi büyüdükçe düzenlemek daha zordur, ancak Cloud Firestore’da karmaşık, hiyerarşik veriyi belgeler içindeki alt koleksiyonlar kullanarak daha kolay düzenlemek mümkündür.
  • Cloud Firestore’da belgeler alt koleksiyonları ve gömülü nesneleri içerebilir, her ikisi de dize gibi ilkel alanlar veya listeler gibi karmaşık nesneler içerebilir.
  • Firestore, veriyi daha yapılandırılmış bir şekilde düzenleme olanağı sunar, bu da karmaşık veri yapıları için sorgulama ve ölçeklendirme işlemini kolaylaştırır. Bu ayrım hakkında az da olsa somut bir görsel bırakalım aşağıya!
JSON TREE IN REALTIME DATABASE(PERSONELKAYDET ÇALIŞMAMDAN ÖRNEK)
JSON TREE IN REALTIME DATABASE(PERSONELKAYDET ÇALIŞMASINDAN ÖRNEK)
DOCUMENT STRUCTURE IN FIRESTORE
DOCUMENT STRUCTURE IN FIRESTORE(FIRESTORE’DA VERİ YAPISI)

Bu görseller aradaki farkı anlamanızı kolaylaştıracaktır.

SORGULAMA
Firebase Realtime Database, tek bir çocuk anahtarına göre sıralama veya tek bir çocuk değerine göre filtreleme gibi sınırlı sorgulama yetenekleri sunar. Öte yandan, Firebase Cloud Firestore, aralık, bileşik ve sayfalama sorguları gibi daha gelişmiş sorgulama seçenekleri sunar.

  • Firestore, sorgu performansını artırmak için indekslemeyi destekler.
  • Realtime veritabanında bir sorguda bir özelliği sıralamak veya filtrelemek mümkünken, Cloud Firestore’da bir özelliği hem sıralamak hem de filtrelemek mümkündür.
  • Cloud Firestore’da birden fazla “where” yöntemini zincirleme ve tek bir sorguda filtreleme ve sıralama kombinasyonu oluşturmak mümkündür.

NOT: Firebase Cloud Firestore, karmaşık sorguları destekleyen bileşik sorguları destekler.

ÖLÇEKLENEBİLİRLİK:

  • Firebase Realtime Database, büyük veri kümeleri ile performans sorunları yaşayabilir, çünkü her sorgu için tüm ağacı getirir. Firestore, yalnızca gereken veriyi getiren ve koleksiyonun veya belgenin bir alt kümesine sınırlanabilen sorgular sunar. Önemli olan, sorgu performansınızın veri kümenizin büyüklüğüne değil, sonuç kümenizin boyutuna bağlı olduğudur. Bu nedenle, arama ne kadar büyük olursa olsun hızlı kalır.

VERİ ÇEKME

  • Cloud Firestore’da Realtime veritabanı gibi verileri anlık olarak dinlemek mümkün. Ancak Cloud Firestore’da veriyi tek seferlik (bir defa çekmek istiyorsanız) de alabiliriz.

GÜVENLİK
Firebase Realtime Database’de açıkça tanımlanması gereken temel güvenlik kuralları vardır, oysa Firestore, belge ve koleksiyon düzeyinde tanımlanabilen daha ayrıntılı güvenlik kurallarına sahiptir.

  • Realtime Database’de veriyi ayrıca doğrulamamız gereken doğrulama kurallarını kullanmamız gerekebilir, ancak Cloud Firestore’da veri doğrulaması otomatik olarak gerçekleşir.
  • Cloud Firestore, mobil, web ve sunucu SDK’ları için Realtime Database’den daha basit ve güçlü güvenlik sağlar.

Ücretten bahsedelim:

Firebase Realtime Database, bant genişliği ve depolama kullanımına dayalı olarak ücretlendirilirken, Firestore, gerçekleştirilen işlemlerin sayısı ve depolanan verinin miktarına dayalı olarak ücretlendirilir.

  • Cloud Firestore kullanırken, bir sorgunun sonuçlarını dinlediğinizde, sonuç kümesindeki bir belge eklenirse veya güncellenirse bir okuma için ücretlendirilirsiniz. Ayrıca, bir belge sonuç kümesinden kaldırıldığında, belge değiştiği için bir okuma için ücretlendirilirsiniz.
  • Cloud Firestore’un ücretleri, Realtime Database’e göre daha düşüktür.

Ortak maddelerimizden!

Her iki veritabanında da set(), update() veya delete() yöntemlerinin herhangi bir kombinasyonunu içeren birden fazla işlemi tek bir toplu işlem olarak yürütebilir ve bunları atomik olarak tamamlayabilirsiniz.

Genel olarak, Firebase Firestore, veriyi düzenleme ve sorgulama açısından daha güçlü ve esnek bir seçenekken, Firebase Realtime Database, gerçek zamanlı güncellemeler gerektiren basit uygulamalar için daha uygun olabilir.

Firebase Realtime Database ve Firebase Firestore ile Android Studio Bağlantı

Firebase Realtime Database ve Firebase Cloud Firestore ile Android Studio arasındaki bağlantıyı nasıl kuracağınızı anlatan adımları anlattım.

Firebase Projeyi Oluşturma:

1. Firebase Console’a gidin (https://console.firebase.google.com/).

2. Firebase hesabınızı kullanarak giriş yapın veya yeni bir hesap oluşturun.

3. Firebase Console’da “Proje Ekle” düğmesine tıklayın.

4. Yeni bir proje adı verin ve “Proje Oluştur” düğmesine tıklayarak proje oluşturun.

3. adımda ise :

ve projeniz şöyle oluşacaktır:

Sonra ne üzerine kodlayacağımızı seçiyoruz. Örneğin ben Android’i seçtim.

Seçtikten sonra

Projemizdeki paket ismini kopyalayıp aşağıdaki gibi yapıştırıyoruz.

Sonra Register App diyoruz. Bizden JSON dosyası indirmemizi istiyor. İndiriyoruz:

Firebase Projeyi Android Studio ile Bağlama:

1. Android Studio’yu açın ve projeyle çalışmak istediğiniz projeyi açın.

2. Sol üst köşede “Tools” (Araçlar) menüsünü açın ve “Firebase” seçeneğini seçin. Şöyle bir pencere açılacaktır:

3. Firebase Araç Penceresi açılacak. Bu pencereden, projenizi Firebase’e bağlamak istediğiniz bölüme gidin (örneğin “Authentication” veya “Realtime Database”).

4. İlgili Firebase hizmetini seçin ve “Bağlantıyı Kur” veya “Başlat” düğmesine tıklayın.

Burada connected olan kısım yaptığınız adımlardan sonra hala connect olarak gözüküyorsa üstüne tıklamanız yeterli:)

Ve Authentication SDK’i yüklemek isterseniz de buradaki değişimleri kabul etmeniz gerekir. Lütfen “Accept changes” butonuna tıklayın. Ve sonra burası da bağlanmış olacaktır.

Realtime database için de aynı adımları uygulayın lütfen:

5. Firebase’e bağlanmak için gereken adımları takip edin. Aşağıdaki adımları yaptığınızdan emin olun. Yukarıda da belirttim. Tekrara düşmüş olmak istemem ama hatırlatmak adına. Aynı zamanda adımları daha düzenli hale getirdiğimi düşünüyorum.

6. JSON dosyasını indirin ve Android Studio projesinin “app” klasörüne yerleştirin. Bu dosya, Firebase’e bağlanmanızı sağlayacak bir yapılandırma dosyasıdır.

6.adım

7. Firebase hizmetini kullanmak için gerekli olan Firebase SDK’larını ekleyin. Bu, projenizin build.gradle dosyasında yapılır.

Örneğin, Firebase Realtime Database kullanıyorsanız, projenizin build.gradle dosyasının dependencies bölümüne şunu ekleyin:

implementation 'com.google.firebase:firebase-database:23.0.0

Firebase Cloud Firestore kullanıyorsanız, aşağıdaki bağımlılığı ekleyin:

implementation 'com.google.firebase:firebase-firestore:23.0.0

Bunları da hallettikten sonra next diyoruz. Ve son adım:

8. Firebase’i projenizle başarıyla bağladıktan sonra, Firebase hizmetini kullanmaya başlayabilirsiniz.

Bu noktada sizden bir soru bekliyorum. İyi, güzel, hoş da tüm bunların amacı ne. Ayrıca bunu ilk kez yapan biri olarak ben hangi detayları kaçırdım acaba. Biliyor musunuz? Bir Junior olarak bunları size aktarmak için araştırıyorum epey. Ve uzun zaman sonra ki kendi projemi yaparken kendi Medium yazılarımı kullanıyorum. Bu noktada size de Medium’da yazmayı tavsiye ediyorum!

Kotlin ile Firebase kullanarak Authentication (Auth) ve Realtime Database (Realtime DB) işlemleri yapıyoruz. Bu ise, uygulamalarınıza kullanıcı kimlik doğrulaması eklemek ve gerçek zamanlı veri depolama sağlamak için Firebase’in sağladığı hizmetlerden yararlanmak anlamına geliyor!

Firebase Authentication (Auth):

Firebase Authentication, kullanıcıların uygulamanıza giriş yapmalarını ve kimliklerini doğrulamalarını sağlar. Kotlin ile Firebase Auth kullanarak, e-posta ve şifre, Google, Facebook, Twitter gibi çeşitli kimlik doğrulama yöntemlerini entegre edebilirsiniz. Bu sayede kullanıcıların giriş yapmasını ve güvenli bir şekilde oturum açmasını yönetebilirsiniz.

Örneğin;

// Kullanıcı girişi
FirebaseAuth.getInstance().signInWithEmailAndPassword(email, password)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Kullanıcı başarıyla giriş yaptı
val user = task.result?.user
} else {
// Giriş sırasında hata oluştu
val exception = task.exception
}
}

2. Firebase Realtime Database (Realtime DB):

Firebase Realtime DB kullanarak, uygulama verilerini anlık olarak senkronize etmek mümkün. Ayrıca kullanıcılara canlı veri güncellemeleri sunmak da. Verileri JSON benzeri bir yapı içinde saklamamız mümkün. Aynı zamanda bu verilere erişmek ve güncellemek için Firebase SDK’larını kullanmak da mümkün!

Örneğin;(Kotlin-Firebase Realtime Database kullanımı)

// Realtime Database referansı alınması
val database = FirebaseDatabase.getInstance()
val reference = database.getReference("kullanici_verileri")
// Veri okuma
reference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
// Veriler güncellendiğinde bu metot çağrılır
val value = dataSnapshot.getValue(String::class.java)
// value ile verileri kullanabilirsiniz
}
override fun onCancelled(databaseError: DatabaseError) {
// Veri okuma işlemi iptal edildiğinde bu metot çağrılır
}
})
// Veri yazma
reference.setValue("Yeni veri")

Umarım, biraz daha gitmiştir pürüzler. Şimdi biraz daha genele gidelim!

Firebase Realtime Database ve Firebase Cloud Firestore Kullanımı:

Firebase Realtime Database veya Firebase Cloud Firestore kullandınız diyelim. Veri eklemek, okumak, güncellemek veya silmek için Firebase SDK’sını kullanmanız mümkün. Bu işler, Firebase belgelerinde daha ayrıntılı. En üstte link de vermiştim:)

Örneğin, Firebase Realtime Database kullanarak bir veri ekleyelim:

val database = FirebaseDatabase.getInstance()
val reference = database.getReference("users")
val user = User("John", "john@example.com")
val userId = reference.push().key
userId?.let {
reference.child(it).setValue(user)
}

Firebase Cloud Firestore kullanarak bir veri eklemek için ise:

val db = FirebaseFirestore.getInstance()
val user = hashMapOf(
"name" to "John",
"email" to "john@example.com"
)
val usersCollection = db.collection("users")
usersCollection
.add(user)
.addOnSuccessListener { documentReference ->
println("Doküman ID: ${documentReference.id}")
}
.addOnFailureListener { e ->
println("Hata: $e")
}

Sıkılmadıysanız örneklere geçelim mi? Tamam o zaman! İlk denememi izleyin lütfen!

Not Uygulamamızın GIF’i

Firebase Realtime Database Örnekleri:

Veri ekleme:

Sizin için yorum satırları ekledim. Böylece kodunuz daha açıklayıcı olacak. Uygulamak isterseniz kopyalama butonuna tıklamanız yeterli. Hatalarla karşılaşırsanız da yüksek ihtimalle bir iki güncelleme işinizi halledecektir. Ah bir İngilizceyi tamamen söksem size daha neler neler anlatacağım:) Neysi dersi sabote etmeyelim. Devam edelim o vakit!

2. Veri Okuma:

Veri okuma işlemlerini de kod üzerinden görsek harika olacak!

3. Veri Güncelleme:

Peki ya veriler nasıl güncelleniyor?

4. Silme:

Tabi ki silmeye de ihtiyacımız var!

Evet. Şimdi! Hani yani olmasa olur mu bilmem ama. Bir de Firestore’da neler oluyor ona baksak mı? Gelin o zaman!

Firebase Firestore Örnekleri:

  1. Veri Ekleme:

2. Veri Okuma:

3. Veri Güncelleme:

4. Veri Silme:

Firebase Realtime Database ve Firebase Firestore’un her ikisinin de güçlü ve zayıf yönleri vardır. Sınırlı sorgulama yeteneklerine sahip gerçek zamanlı bir veritabanı gerekiyorsa ve daha küçük bir veri kümesiyle çalışılıyorsa, Firebase Realtime Database iyi bir seçenek olabilir. Ancak daha yapılandırılmış bir veri tabanına, daha iyi sorgulama yeteneklerine ve ölçeklenebilirliğe ihtiyacınız varsa, Firebase Firestore daha iyi bir seçenektir. Teşekkür ederim bir sonraki yazıda buluşmak üzere!

Dilerseniz GitHub ve Linkedin profilime göz atabilirsiniz. Ve sorularınızı iletebilirsiniz. Sevgiler.

--

--