Firebase Realtime Database ile Cloud Firestore'u Kullanma

Uygulamanızda hem Firebase Realtime Database hem de Cloud Firestore kullanabilir ve her veritabanı çözümünün avantajlarından ihtiyaçlarınıza göre yararlanabilirsiniz. Örneğin, Cloud Firestore'da varlık oluşturma bölümünde açıklandığı gibi Realtime Database'ın varlık desteğinden yararlanmak isteyebilirsiniz.

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

Veriler Cloud Firestore adlı klasöre taşınıyor

Verilerinizin bir kısmını Realtime Database'ten Cloud Firestore'e taşımaya karar verdiyseniz aşağıdaki akışı inceleyin. Her veritabanının kendine özgü ihtiyaçları ve yapısal özellikleri olduğundan otomatik bir taşıma yolu yoktur. Bunun yerine, şu genel ilerleme adımlarını takip edebilirsiniz:

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

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

  3. Yeni verileri gerçek zamanlı olarak Firestore'a yansıtma Realtime Database hizmetine eklenen yeni verileri yeni Cloud Firestore veritabanınıza yazmak için Cloud Functions'ı kullanın.

  4. Cloud Firestore veritabanını, 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 kullanın ve taşınan veriler için Realtime Database kullanımınızı azaltın. Uygulamanızın, söz konusu veriler için hâlâ Realtime Database ile bağlantılı olan sürümlerini ve bunları desteklemeye nasıl devam edeceğinizi düşünün.

Hem Realtime Database hem de Cloud Firestore için faturalandırma maliyetlerini hesaba kattığınızdan emin olun.

Verilerinizi eşleme

Realtime Database'daki veriler tek bir ağaç olarak yapılandırılırken Cloud Firestore; dokümanlar, koleksiyonlar ve alt koleksiyonlar aracılığıyla daha belirgin veri hiyerarşilerini destekler. Verilerinizin bir kısmını Realtime Database'ten Cloud Firestore'e taşırsanız verileriniz için farklı bir mimari kullanmayı düşünebilirsiniz.

Dikkate alınması gereken önemli farklar

Mevcut Realtime Database ağacınızdaki verileri Cloud Firestore dokümanlarına ve koleksiyonlarına taşırsanız veritabanları arasındaki aşağıdaki önemli farkları göz önünde bulundurun. Bu farklar, Cloud Firestore'de verileri nasıl yapılandıracağınızı etkileyebilir:

  • Sığ sorgular, hiyerarşik veri yapılarında daha fazla esneklik sunar.
  • Karmaşık sorgular daha fazla ayrıntı düzeyi sunar ve yinelenen veri ihtiyacını azaltır.
  • Sorgu imleçleri daha sağlam sayfalama sunar.
  • İş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. Çoğu durumda, özellikle de çok sayıda küçük işlem yapıyorsanız Cloud Firestore, Realtime Database'dan daha pahalı olabilir. Veritabanınızdaki işlem sayısını azaltmayı ve gereksiz yazma işlemlerinden kaçınmayı deneyin. Realtime Database ve Cloud Firestore arasındaki faturalandırma farkları hakkında daha fazla bilgi edinin.

En iyi uygulamalar

Aşağıdaki örnekte, verilerinizi veritabanları arasında taşırken göz önünde bulundurabileceğiniz bazı noktalar gösterilmektedir. Realtime Database ile kullanmış olabileceğinizden daha doğal veri yapıları için sığ okumalardan ve gelişmiş sorgulama özelliklerinden yararlanabilirsiniz.

Kullanıcıların dünyanın dört bir yanındaki şehirlerde önemli yerleri bulmasına yardımcı olan bir şehir rehberi uygulaması düşünün. Realtime Database, sığ okuma özelliğine sahip olmadığından verileri aşağıdaki gibi iki üst düzey düğümde yapılandırmanız gerekmiş olabilir:

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

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

Cloud Firestore, sığ okuma özelliğine sahiptir. Bu nedenle, bir koleksiyondaki belgeleri sorgulamak alt koleksiyonlardan veri çekmez. Bu nedenle, önemli nokta bilgilerini bir alt koleksiyonda depolayabilirsiniz:

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

Belgelerin boyutu en fazla 1 MB olabilir. Bu da önemli yerleri alt koleksiyon olarak depolamanın ve belgeleri iç içe yerleştirilmiş listelerle şişirmek yerine her şehir belgesini küçük tutmanın bir başka nedenidir.

Cloud Firestore'ın gelişmiş sorgulama özellikleri, yaygın erişim kalıpları için verileri kopyalama ihtiyacını azaltır. Örneğin, şehir rehberi uygulamasında tüm başkentleri nüfusa göre sıralayan bir ekran düşünün. Realtime Database uygulamasında bunu yapmanın en verimli yolu, cities listesindeki verileri kopyalayan ayrı bir başkent listesi oluşturmaktır:

{
   cities: {
    // ...
   },

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

Cloud Firestore'da, başkentlerin listesini nüfusa göre sıralanmış tek bir sorgu olarak 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ızla ilgili daha fazla fikir edinmek için Çözümler sayfamıza göz atın.

Verilerinizi güvence altına alma

Android, Apple veya web istemcileri için Cloud Firestore Security Rules'ı, sunucular için ise Identity Access Management (IAM)'ı kullanıyorsanız verilerinizi Realtime Database'da olduğu gibi Cloud Firestore'te de güvenceye aldığınızdan emin olun. Kullanıcı kimlik doğrulaması, her iki veritabanı için de Authentication tarafından gerçekleştirilir. Bu nedenle, Cloud Firestore kullanmaya başladığınızda Authentication uygulamanızı değiştirmeniz gerekmez.

Dikkate alınması gereken önemli farklar

  • Mobil ve web SDK'ları Cloud Firestore Security Rules kullanırken sunucu SDK'ları, verilerin güvenliğini sağlamak için Identity Access Management (IAM) kullanır.
  • Cloud Firestore Security Rules, joker karakter kullanmadığınız sürece basamaklı olarak uygulanmaz. Dokümanlar ve koleksiyonlar, kuralları başka bir şekilde devralmaz.
  • Artık verileri ayrı ayrı doğrulamanız gerekmez (Realtime Database'da yaptığınız gibi).
  • Cloud Firestore, bir sorguyu yürütmeden önce kuralları kontrol ederek kullanıcının, sorgu tarafından döndürülen tüm veriler için uygun erişime sahip olduğundan emin olur.

Geçmiş verileri Cloud Firestore ürününe 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 veritabanından Cloud Firestore veritabanına taşıdıktan sonra geçmiş verileri sorgulamayı planlıyorsanız eski verilerinizin bir dışa aktarımı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.

Yeni verilerin üzerine eski verilerin yazılmasını önlemek için önce geçmiş verilerinizi eklemeniz önerilir. Bir sonraki adımda açıklandığı gibi her iki veritabanına da aynı anda yeni veri ekliyorsanız Cloud Firestore tarafından Cloud Functions'e eklenen yeni verilere öncelik verdiğinizden emin olun.

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

  1. Verilerinizi Realtime Database uygulamasından dışa aktarın veya yakın tarihli bir yedek kullanın.
    1. Firebase konsolunda Databases & Storage (Veritabanları ve Depolama) > Realtime Database'e (Realtime Database) gidin.
    2. Data (Veri) sekmesinde veritabanınızın kök düzeyindeki düğümünü ve menüden Export JSON'u (JSON'u dışa aktar) seçin.
  2. Cloud Firestore içinde yeni veritabanınızı oluşturun ve verilerinizi ekleyin.

    Verilerinizin bir kısmını Cloud Firestore platformuna 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ı olduğundan bu komut dosyası için bir şablon sunamıyoruz. Ancak Cloud Firestore Slack kanalımızdaki veya Stack Overflow'daki uzmanlar komut dosyanızı inceleyebilir ya da özel durumunuzla ilgili tavsiyelerde bulunabilir.
    • Verileri doğrudan Cloud Firestore veritabanına yazmak için sunucu SDK'larını (Node.js, Java, Python veya Go) kullanın. Sunucu SDK'larını ayarlama talimatları için Başlangıç bölümüne bakın.
    • Büyük veri taşıma işlemlerini hızlandırmak için toplu yazma işlemlerini kullanın ve tek bir ağ isteğinde en fazla 500 işlem gönderin.
    • Cloud Firestore sıklık sınırlarının altında kalmak için işlemleri her koleksiyon için saniyede 500 yazma işlemiyle sınırlayın.

Cloud Firestore için yeni veri ekleme

Veritabanlarınız arasında eşitliği korumak için her iki veritabanına da gerçek zamanlı olarak yeni veriler ekleyin. Bir istemci Realtime Database konumuna her yazdığında Cloud Firestore konumuna yazma işlemini tetiklemek için Cloud Functions kullanın. Cloud Firestore, Cloud Functions üzerinden gelen yeni verilere, geçmiş verilerinizi taşırken yaptığınız yazma işlemlerine kıyasla öncelik vermelidir.

Bir istemci Realtime Database konumuna her veri yazdığında yeni veya değişen verileri Cloud Firestore konumuna yazacak bir işlev oluşturun. Cloud Functions için Realtime Database tetikleyicileri hakkında daha fazla bilgi edinin.

Cloud Firestore, taşınan veriler için birincil veritabanınız olsun

Verilerinizin bir kısmı için birincil veritabanı olarak Cloud Firestore kullanmaya karar verdiyseniz ayarladığınız tüm veri yansıtma işlevlerini hesaba kattığınızdan ve Cloud Firestore Security Rules veritabanınızı doğruladığınızdan emin olun.

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

  2. Verilerinizin uygun şekilde korunduğunu doğrulayın. Cloud Firestore Security Rules veya IAM kurulumunuzu doğrulayın.