Firebase Realtime Database ile Cloud Firestore'u Kullanma

Uygulamanızda hem Firebase Realtime Database hem de Cloud Firestore'ü kullanabilir ve ihtiyaçlarınıza göre her veritabanı çözümünün avantajlarından yararlanabilirsiniz. Örneğin, Cloud Firestore'de Etkinlik Oluşturma bölümünde belirtildiği gibi Realtime Database'ün etkinlik desteğinden yararlanabilirsiniz.

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

Veriler Cloud Firestore sürücüsüne taşınıyor

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

  1. Realtime Database'daki veri yapısını ve güvenlik kurallarını Cloud Firestore ile eşleyin. Hem Realtime Database hem de Cloud Firestore, Firebase Authentication'i 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 göz önünde bulundurmanız önemlidir.

  2. Geçmiş verileri taşıma Cloud Firestore'te yeni veri yapınızı kurarken Realtime Database'daki 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'ten taşımanız gerekmez.

  3. Yeni verileri Firestore'a anlık olarak yansıtın. Realtime Database veritabanına yeni veriler eklendikçe yeni Cloud Firestoreveritabanına yeni veriler yazmak için Cloud Functions'ı kullanın.

  4. Taşınan veriler için birincil veritabanınız olarak Cloud Firestore'ı kullanı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. Bu veriler için uygulamanızın hâlâ Realtime Database'e bağ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'teki veriler tek bir ağaç olarak yapılandırılır. Cloud Firestore ise belgeler, koleksiyonlar ve alt koleksiyonlar aracılığıyla daha net veri hiyerarşileri destekler. Verilerinizin bir kısmını Realtime Database'ten Cloud Firestore'e taşıyorsanız verileriniz için farklı bir mimari kullanmayı düşünebilirsiniz.

Dikkate alınması gereken önemli farklılıklar

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 farklılıkları göz önünde bulundurun. Bu farklılıklar, Cloud Firestore'daki verileri yapılandırma şeklinizi 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 verilere olan ihtiyacı azaltır.
  • Sorgu imleçleri daha güçlü sayfalandırma 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. Birçok durumda, özellikle çok sayıda küçük işlem kullanıyorsanız Cloud Firestore, Realtime Database'ten daha pahalı olabilir. Veritabanı işlemlerinizin sayısını azaltmayı ve gereksiz yazma işlemlerinden kaçınmayı deneyin. Realtime Database ile Cloud Firestore arasındaki faturalandırma farklılıkları hakkında daha fazla bilgi edinin.

En iyi uygulamaların uygulanması

Aşağıdaki örnekte, verilerinizi veritabanları arasında taşırken dikkate alabileceğiniz bazı hususlar yansıtılmaktadır. Realtime Database ile kullandığınızdan daha doğal veri yapıları için sığ okumalardan ve gelişmiş sorgu oluşturma özelliklerinden yararlanabilirsiniz.

Kullanıcıların dünyanın dört bir yanındaki şehirlerdeki önemli yerleri bulmasına yardımcı olan bir şehir rehberi uygulaması düşünün. Realtime Database'te yüzeysel okumalar 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ığ okumalara sahiptir. Bu nedenle, bir koleksiyondaki belgeler için sorgu yapıldığında alt koleksiyonlardaki veriler getirilmez. Bu nedenle, yer işareti bilgilerini bir alt koleksiyonda saklayabilirsiniz:

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

Belgelerin maksimum boyutu 1 MB'tır. Bu da, yer işaretlerini alt koleksiyon olarak depolayarak her şehir belgesini küçük tutmak ve belgeleri iç içe yerleştirilmiş listelerle şişirmek yerine daha az yer kaplamasını sağlamak için bir nedendir.

Cloud Firestore'ün 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şkentleri nüfusa göre sıralayan bir ekran düşünün. Realtime Database'te bunu yapmanın en etkili yolu, cities listesindeki verileri kopyalayan ayrı bir başkentler listesi tutmaktır. Bu liste aşağıdaki gibi oluşturulur:

{
   cities: {
    // ...
   },

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

Cloud Firestore'te, nüfusa göre büyükten küçüğe sıralanmış başkentlerin listesini tek bir sorgu olarak ifade edebilirsiniz:

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

Cloud Firestore veritabanınızı nasıl yapılandıracağınızla ilgili daha fazla fikir için Cloud Firestore veri modeli hakkında daha fazla bilgi edinin ve Çözümlerimiz bölümüne göz atın.

Verilerinizin güvenliğini sağlama

Android, Apple veya web istemcileri için Cloud Firestore Security Rules'i, sunucularda ise Identity Access Management (IAM)'i kullanıyor olsanız da verilerinizi Realtime Database'in yanı sıra Cloud Firestore'te de güvende tuttuğunuzdan emin olun. Kullanıcı kimlik doğrulaması, her iki veritabanı için de Kimlik Doğrulama tarafından yönetilir. Bu nedenle, Cloud Firestore kullanmaya başladığınızda Kimlik Doğrulama uygulamanızı değiştirmeniz gerekmez.

Dikkate alınması gereken önemli farklılıklar

  • Mobil ve web SDK'ları Cloud Firestore Security Rules'ü, sunucu SDK'ları ise verileri güvence altına almak için Identity Access Management'i (IAM) kullanır.
  • Cloud Firestore Security Rules, joker karakter kullanmadığınız sürece basamaklandırılmaz. Dokümanlar ve koleksiyonlar, kuralları başka şekilde devralmaz.
  • Artık verileri ayrı ayrı doğrulamanız gerekmez (Realtime Database'te 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'e taşıma

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

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

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

  1. Verilerinizi Realtime Database'ten dışa aktarın veya yakın zamanda oluşturulan bir yedeği kullanın.
    1. Firebase konsolunda Realtime Database bölümüne gidin.
    2. Veriler sekmesinde, veritabanınızın kök düzeyindeki düğümünü seçin ve menüden 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'e 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 benzersiz ihtiyaçları olduğundan bu komut dosyası için bir şablon sunamıyoruz. Bununla birlikte, Cloud Firestore Slack kanalımızdaki veya Stack Overflow'daki uzmanlar komut dosyanızı inceleyebilir ya da durumunuz için tavsiyede bulunabilir.
    • Verileri doğrudan Cloud Firestore'e yazmak için sunucu SDK'larını (Node.js, Java, Python veya Go) kullanın. Sunucu SDK'larını ayarlama talimatları için Başlayın bölümüne bakın.
    • Büyük veri taşıma işlemlerini hızlandırmak için toplu yazma özelliğini 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 koleksiyon için saniyede 500 yazmayla sınırlayın.

Cloud Firestore'e yeni veri ekleme

Veritabanları arasında eşleşmeyi korumak için her iki veritabanına da anlık olarak yeni veriler ekleyin. Bir istemci Realtime Database'ye yazdığında Cloud Firestore'e yazma işlemini tetiklemek için Cloud Functions'ü kullanın. Cloud Firestore, geçmiş veri taşıma işleminizde yaptığınız tüm yazma işlemlerine kıyasla Cloud Functions'dan gelen yeni verilere öncelik verdiğinden emin olun.

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

Taşınan veriler için Cloud Firestore'ü birincil veritabanınız yapın

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

  1. Veritabanları arasında eşitliği korumak için Cloud Functions kullandıysanız bir döngüde yazma işlemlerini her iki veritabanında da kopyalamadığınızdan emin olun. İşlevinizi tek bir veritabanına yazmak için değiştirin veya işlevi tamamen kaldırın ve hâlâ 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ız için bu işlemi nasıl yapacağınız, ihtiyaçlarınıza ve kullanıcılarınıza bağlıdır.

  2. Verilerinizin gerektiği gibi korunduğunu doğrulayın. Cloud Firestore Security Rules veya IAM kurulumunuzu doğrulayın.