Firebase Realtime Database ile Cloud Firestore'u Kullanma

Uygulamanızda hem Firebase Realtime Database hem de Cloud Firestore'u kullanabilir, her veritabanı çözümünün avantajlarından ihtiyaçlarınıza uygun şekilde yararlanabilirsiniz. Örneğin, Cloud Firestore'da Varlık Oluşturma bölümünde belirtildiği gibi, varlık için Realtime Database'in desteğinden yararlanmak isteyebilirsiniz.

Veritabanları arasındaki farklar hakkında daha fazla bilgi edinin.

Verileri Cloud Firestore'a taşıma

Verilerinizin bir kısmını Realtime Database'den Cloud Firestore'a taşımaya karar verdiyseniz aşağıdaki akışı kullanabilirsiniz. Her veritabanının kendine özgü ihtiyaçları ve yapısal şartları olduğundan otomatik bir taşıma yolu yoktur. Bunun yerine şu genel ilerlemeyi izleyebilirsiniz:

  1. Realtime Database'deki veri yapısını ve güvenlik kurallarını Cloud Firestore'a eşleyin. Hem Realtime Database hem de Cloud Firestore, Firebase Authentication'ı kullanır. Bu nedenle uygulamanız için kullanıcı kimlik doğrulamasını değiştirmeniz gerekmez. Ancak güvenlik kuralları ve veri modeli farklıdır ve Cloud Firestore'a veri taşımaya başlamadan önce bu farklılıkların dikkatlice hesaplanması önemlidir.

  2. Geçmiş verileri taşıyın. Cloud Firestore'da yeni veri yapınızı oluştururken mevcut verileri Realtime Database'den yeni Cloud Firestore örneğinize eşleyip taşıyabilirsiniz. Ancak uygulamanızda her iki veritabanını da kullanıyorsanız geçmiş verileri Realtime Database'den dışarı taşımanız gerekmez.

  3. Yeni verileri gerçek zamanlı olarak Firestore'a yansıtın. Realtime Database'e eklenen yeni Cloud Firestore veri tabanınıza yeni veriler yazmak için Cloud Functions'ı kullanın.

  4. Cloud Firestore'u, taşınan veriler için birincil veritabanınız yapın. Verilerinizin bir kısmını taşıdıktan sonra birincil veritabanınız olarak Cloud Firestore'u kullanın ve taşınan veriler için Realtime Database kullanımınızı azaltın. Bu veriler için uygulamanızın hâlâ Realtime Database'e bağlı olan sürümlerini ve bunları nasıl desteklemeye devam edeceğinizi düşünün.

Hem Realtime Database hem de Cloud Firestore'un faturalandırma maliyetlerini hesaba kattığınızdan emin olun.

Verilerinizi eşleştirme

Realtime Database'de veriler tek bir ağaç şeklinde yapılandırılır. Cloud Firestore ise belgeler, koleksiyonlar ve alt koleksiyonlar aracılığıyla daha açık veri hiyerarşilerini destekler. Bazı verilerinizi Realtime Database'den Cloud Firestore'a taşırsanız verileriniz için farklı bir mimari kullanmayı düşünebilirsiniz.

Dikkate alınması gereken önemli farklar

Mevcut Realtime Database ağacınızdan Cloud Firestore belge ve koleksiyonlarına veri taşıyorsanız veritabanları arasında Cloud Firestore'da verileri yapılandırma şeklinizi etkileyebilecek aşağıdaki önemli farkları göz önünde bulundurun:

  • Sığ sorgular, hiyerarşik veri yapılarında daha fazla esneklik sunar.
  • Karmaşık sorgular daha fazla ayrıntı sunar ve yinelenen verilere duyulan ihtiyacı azaltır.
  • Sorgu imleçleri daha etkili sayfalara ayırma sağlar.
  • İşlemler artık tüm verileriniz için ortak bir kök gerektirmez ve daha verimlidir.
  • Faturalandırma maliyetleri, Realtime Database ve Cloud Firestore arasında farklılık gösterir. Özellikle çok sayıda küçük işlemden yararlanıyorsanız çoğu durumda Cloud Firestore Realtime Database'den daha pahalı olabilir. Veritabanınızdaki işlem sayısını azaltmayı ve gereksiz yazmalardan kaçınmayı deneyin. Realtime Database ve Cloud Firestore arasındaki faturalandırma farklılıkları hakkında daha fazla bilgi edinin.

Kullanıma sunulmuş en iyi uygulamalar

Aşağıdaki örnekte verilerinizi veritabanları arasında taşırken göz önünde bulundurabileceğiniz bazı noktalar yer almaktadır. Realtime Database ile kullandıklarınızdan daha doğal veri yapıları için yüzeysel okumalardan ve iyileştirilmiş sorgu özelliklerinden yararlanabilirsiniz.

Kullanıcıların dünyanın dört bir yanındaki şehirlerde önemli noktaları bulmalarına yardımcı olan bir şehir rehberi uygulaması düşünün. Realtime Database'de yüzeysel okumalar yapılmadığı için verileri aşağıdaki gibi iki üst düzey düğümde yapılandırmanız gerekebilir:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore'da yüzeysel okuma işlemleri yapılır. Bu nedenle, koleksiyondaki belgelerin sorgulanması alt koleksiyonlardan veri çekmez. Sonuç olarak, önemli nokta bilgilerini bir alt koleksiyonda saklayabilirsiniz:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

Belgelerin maksimum boyutu 1 MB olabilir. Bu, belgeleri iç içe yerleştirilmiş listelerle şişirmek yerine her şehir belgesini küçük tutarak önemli noktaları alt koleksiyon olarak depolamanın bir başka nedenidir.

Cloud Firestore'un gelişmiş sorgulama özellikleri, ortak erişim kalıpları için verileri kopyalama ihtiyacını azaltır. Örneğin, şehir rehberi uygulamasında tüm başkentlerin nüfusa göre sıralandığı bir ekranı ele alalım. Realtime Database'de bunu yapmanın en etkili yolu, cities listesindeki verileri kopyalayan büyük şehirlerin aşağıdaki gibi ayrı bir listesini tutmaktır:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Cloud Firestore'da büyük şehirlerin listesini tek bir sorgu olarak nüfus sırasına göre ifade edebilirsiniz:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Cloud Firestore veri modeli hakkında daha fazla bilgi edinin ve Cloud Firestore veritabanınızı nasıl yapılandıracağınıza dair daha fazla fikir için Çözümlerimize göz atın.

Verilerinizin güvenliğini sağlayın

Android, Apple veya Web istemcileri için Cloud Firestore Güvenlik Kuralları'nı, sunucular için Kimlik Erişim Yönetimi'ni (IAM) kullanıyor olmanız fark etmeksizin, hem Cloud Firestore'da hem de Realtime Database'de verilerinizi güvende tuttuğunuzdan emin olun. Kullanıcı kimlik doğrulaması her iki veritabanı için de Authentication tarafından gerçekleştirilir. Bu nedenle, Cloud Firestore'u kullanmaya başladığınızda Authentication uygulamanızı değiştirmeniz gerekmez.

Dikkate alınması gereken önemli farklar

  • Mobil SDK'lar ve web SDK'ları, Cloud Firestore Güvenlik Kurallarını kullanırken sunucu SDK'ları verilerin güvenliğini sağlamak için Kimlik Erişim Yönetimi (IAM) kullanır.
  • Cloud Firestore Güvenlik Kuralları, joker karakter kullanmadığınız sürece kademeli olarak işlenmez. Aksi takdirde belgeler ve koleksiyonlar, kuralları devralmaz.
  • Artık verileri ayrı olarak doğrulamanız gerekmez (Realtime Database'de yaptığınız gibi).
  • Cloud Firestore, kullanıcının sorgu tarafından döndürülen tüm verilere uygun erişime sahip olduğundan emin olmak için sorgu yürütmeden önce kuralları kontrol eder.

Geçmiş verileri Cloud Firestore'a taşıma

Veri ve güvenlik yapılarınızı Cloud Firestore'un veri ve güvenlik modelleriyle eşleştirdikten sonra verilerinizi eklemeye başlayabilirsiniz. Uygulamanızı Realtime Database'den Cloud Firestore'a taşıdıktan sonra geçmiş verileri sorgulamayı planlıyorsanız eski verilerinizin dışa aktarılmasını yeni Cloud Firestore veritabanınıza ekleyin. Uygulamanızda hem Realtime Database hem de Cloud Firestore kullanmayı planlıyorsanız bu adımı atlayabilirsiniz.

Eski verilerin yeni verilerin üzerine yazılmasını önlemek için önce geçmiş verilerinizi eklemek isteyebilirsiniz. Sonraki adımda açıklandığı gibi, her iki veritabanına da aynı anda yeni veriler eklerseniz Cloud Functions tarafından Cloud Firestore'a eklenen yeni verilere öncelik verdiğinizden emin olun.

Geçmiş verileri Cloud Firestore'a taşımak için aşağıdaki adımları uygulayın:

  1. Verilerinizi Realtime Database'den dışa aktarın veya son yedeklerden birini kullanın.
    1. Firebase konsolunda Realtime Database bölümüne gidin.
    2. Data (Veri) sekmesinde veritabanınızın kök düzeyindeki düğümünü seçip menüden Export JSON (JSON'ı dışa aktar) seçeneğini belirleyin.
  2. Cloud Firestore'da yeni veritabanınızı oluşturun ve verilerinizi ekleyin.

    Verilerinizin bir kısmını Cloud Firestore'a taşırken aşağıdaki stratejileri göz önünde bulundurun:

    • Verilerinizi sizin için taşıyan özel bir komut dosyası yazın. Her veritabanının kendine özgü ihtiyaçları olacağından bu komut dosyası için şablon sunamıyoruz. Ancak Slack kanalımızdaki veya Stack Overflow'daki Cloud Firestore uzmanları komut dosyanızı inceleyebilir veya durumunuzla ilgili önerilerde bulunabilir.
    • Doğrudan Cloud Firestore'a veri yazmak için sunucu SDK'larını (Node.js, Java, Python veya Go) kullanın. Sunucu SDK'larını ayarlama talimatları için Başlarken bölümüne bakın.
    • Büyük veri taşıma işlemlerini hızlandırmak için toplu yazmaları kullanın ve tek bir ağ isteğinde 500'e kadar işlem gönderin.
    • Cloud Firestore hız sınırlarının altında kalmak için işlemleri her koleksiyonda 500 yazma/saniye ile sınırlayın.

Cloud Firestore'a yeni veri ekleme

Veritabanlarınız arasında denkliği korumak için her iki veritabanına gerçek zamanlı olarak yeni veriler ekleyin. Bir istemci Realtime Database'e yazdığında Cloud Firestore'a yazma işlemini tetiklemek için Cloud Functions'ı kullanın. Cloud Firestore'un, geçmiş veri taşıma işleminden yaptığınız tüm yazma işlemlerine göre Cloud Functions'dan gelen yeni verilere öncelik verdiğinden emin olun.

İstemciler Realtime Database'e her veri yazdığında Cloud Firestore'a yeni veya değişen veri yazmak için bir işlev oluşturun. Cloud Functions için Realtime Database tetikleyicileri hakkında daha fazla bilgi edinin.

Cloud Firestore'u taşınan veriler için birincil veritabanınız yapın

Bazı verileriniz için birincil veritabanınız olarak Cloud Firestore'u kullanmaya karar verdiyseniz oluşturduğunuz veri yansıtma işlevlerini hesaba kattığınızdan ve Cloud Firestore Güvenlik Kurallarınızı doğruladığınızdan emin olun.

  1. Veritabanlarınız arasında denkliği korumak için Cloud Functions'ı kullandıysanız yazma işlemlerini bir döngüde her iki veritabanında da kopyalamadığınızdan emin olun. İşlevinizi tek bir veritabanına yazacak şekilde değiştirin veya işlevi tamamen kaldırıp Realtime Database'e bağlı olan uygulamalardaki taşınan veriler için yazma işlevini aşamalı olarak kullanımdan kaldırmaya başlayın. Uygulamanızda bunu nasıl ele alacağınız, özel ihtiyaçlarınıza ve kullanıcılarınıza bağlıdır.

  2. Verilerinizin düzgün şekilde korunduğunu doğrulayın. Cloud Firestore Güvenlik Kurallarınızı veya IAM kurulumunuzu doğrulayın.