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 yararlanabilirsiniz.

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 platformundan Cloud Firestore platformuna 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 veritabanı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 hâlâ Realtime Database ile bağlantılı olan sürümlerini ve bu sürümleri nasıl desteklemeye 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 ile 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 örnek, verilerinizi veritabanları arasında taşırken göz önünde bulundurabileceğiniz bazı noktaları yansıtmaktadır. 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 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, sığ okuma özelliğine sahiptir. Bu nedenle, bir koleksiyondaki belgeleri sorgulamak alt koleksiyonlardan veri çekmez. Bu nedenle, önemli nokta bilgilerini bir alt koleksiyonda saklayabilirsiniz:

// /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, her şehir belgesini küçük tutmanın ve belgeleri iç içe yerleştirilmiş listelerle şişirmemenin 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 içinde 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 nüfusa göre sıralandığı bir listeyi 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'ı ya da sunucular için Identity Access Management (IAM)'ı kullanıyorsanız verilerinizin hem Cloud Firestore hem de Realtime Database üzerinde güvende olduğundan 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'te yaptığınız gibi).
  • Cloud Firestore, sorgu tarafından döndürülen tüm veriler için kullanıcının uygun erişime sahip olduğundan emin olmak amacıyla sorgu yürütmeden önce kuralları kontrol eder.

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 aktarma dosyası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 aynı anda yeni veri eklerseniz Cloud Functions tarafından Cloud Firestore veritabanına eklenen yeni verilere öncelik verdiğinizden emin olun.

Geçmiş verileri Cloud Firestore hizmetine 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 Slack kanalımızdaki veya Stack Overflow'daki Cloud Firestore uzmanlar, komut dosyanızı inceleyebilir ya da özel durumunuzla ilgili tavsiyelerde bulunabilir.
    • Verileri doğrudan Cloud Firestore hizmetine 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ırlaması 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 ekleyin

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 veritabanını, taşınan veriler için birincil veritabanınız yapma

Bazı verileriniz 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 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 güvenliğinin sağlandığını doğrulayın. Cloud Firestore Security Rules veya IAM kurulumunuzu doğrulayın.