Cloud Firestore'u Firebase Realtime Database ile kullanın

Uygulamanızda hem Firebase Realtime Database'i hem de Cloud Firestore'u kullanabilir ve ihtiyaçlarınıza uyacak şekilde her veritabanı çözümünün avantajlarından yararlanabilirsiniz. Örneğin, Cloud Firestore'da Presence Oluşturma bölümünde özetlendiği gibi, Realtime Database'in varlık 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şımak istediğinize karar verdiyseniz aşağıdaki akışı göz önünde bulundurun. Her veritabanının benzersiz ihtiyaçları ve yapısal hususları olduğundan, otomatikleştirilmiş bir geçiş yolu yoktur. Bunun yerine şu genel ilerlemeyi takip edebilirsiniz:

  1. Veri yapısını ve güvenlik kurallarını Realtime Database'den Cloud Firestore'a eşleyin. Hem Gerçek Zamanlı Veritabanı hem de Cloud Firestore, Firebase Kimlik Doğrulamasını temel alır, dolayısıyla 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 verileri Cloud Firestore'a taşımaya başlamadan önce bu farklılıkları dikkatlice hesaba katmak önemlidir.

  2. Geçmiş verileri taşıyın. Cloud Firestore'da yeni veri yapınızı ayarlarken, mevcut verileri Realtime Database'den yeni Cloud Firestore örneğinize eşleyebilir ve taşıyabilirsiniz. Ancak uygulamanızda her iki veritabanını da kullanıyorsanız geçmiş verileri Gerçek Zamanlı Veritabanının dışına taşımanıza gerek yoktur.

  3. Yeni verileri gerçek zamanlı olarak Firestore'a yansıtın. Gerçek Zamanlı Veritabanına eklenen yeni Cloud Firestore veritabanınıza yeni veriler yazmak için Cloud Functions'ı kullanın.

  4. Taşınan veriler için Cloud Firestore'u birincil veritabanınız yapın. Verilerinizin bir kısmını taşıdıktan sonra, Cloud Firestore'u birincil veritabanınız olarak kullanın ve taşınan veriler için Gerçek Zamanlı Veritabanı kullanımınızı azaltın. Uygulamanızın bu veriler için hâlâ Gerçek Zamanlı Veritabanına bağlı olan sürümlerini ve bunları desteklemeye nasıl devam etmeyi planladığınızı düşünün.

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

Verilerinizi haritalayın

Gerçek Zamanlı Veritabanındaki veriler tek bir ağaç olarak yapılandırılmıştır; Cloud Firestore ise belgeler, koleksiyonlar ve alt koleksiyonlar aracılığıyla daha açık veri hiyerarşilerini destekler. Verilerinizin bir kısmını Gerçek Zamanlı Veritabanından Cloud Firestore'a taşıyorsanız verileriniz için farklı bir mimari düşünebilirsiniz.

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

Verileri mevcut Gerçek Zamanlı Veritabanı ağacınızdan Cloud Firestore belgelerine ve koleksiyonlarına taşırsanız, veritabanları arasında Cloud Firestore'da verileri yapılandırma şeklinizi etkileyebilecek aşağıdaki önemli farklılıkları aklınızda bulundurun:

  • 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 sağlam sayfalandırma sunar.
  • İşlemler artık tüm verileriniz için ortak bir kök gerektirmiyor ve daha verimli.
  • Faturalandırma maliyetleri Realtime Database ve Cloud Firestore arasında farklılık gösterir. Çoğu durumda Cloud Firestore, özellikle de çok sayıda küçük operasyona güveniyorsanız, Realtime Database'den daha pahalı olabilir. Veritabanınızdaki işlem sayısını azaltmayı ve gereksiz yazmalardan kaçınmayı düşünün. Realtime Database ile Cloud Firestore arasındaki faturalandırma farklılıkları hakkında daha fazla bilgi edinin.

Uygulamadaki en iyi uygulamalar

Aşağıdaki örnek, verilerinizi veritabanları arasında kaydırırken dikkate alabileceğiniz bazı hususları yansıtmaktadır. Gerçek Zamanlı Veritabanı ile kullandığınızdan daha doğal veri yapıları için yüzeysel okumalardan ve gelişmiş sorgulama yeteneklerinden yararlanabilirsiniz.

Kullanıcıların dünya çapındaki şehirlerdeki önemli yerleri bulmalarına yardımcı olan bir şehir rehberi uygulamasını düşünün. Gerçek Zamanlı Veritabanı sığ okumalara 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'da sığ okumalar olduğundan bir koleksiyondaki belgeler için sorgulama, alt koleksiyonlardan veri çekmez. Sonuç olarak, 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, belgeleri iç içe geçmiş listelerle şişirmek yerine, her bir şehir belgesini küçük tutarak yer işaretlerini bir alt koleksiyon olarak saklamanın başka bir nedenidir.

Cloud Firestore'un gelişmiş sorgulama yetenekleri, ortak erişim kalıpları için verilerin kopyalanması ihtiyacını azaltır. Örneğin, şehir rehberi uygulamasında tüm başkentleri nüfusa göre sıralanmış olarak gösteren bir ekranı düşünün. Gerçek Zamanlı Veritabanında bunu yapmanın en etkili yolu, cities listesindeki verileri aşağıdaki gibi kopyalayan ayrı bir başkentler listesi tutmaktır:

{
   cities: {
    // ...
   },

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

Cloud Firestore'da başkentlerin listesini nüfus sırasına göre tek bir sorguyla 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 ilişkin daha fazla fikir için Çözümlerimize göz atın.

Verilerinizi güvence altına alın

İster Android, Apple veya Web istemcileri için Cloud Firestore Güvenlik Kurallarını , ister sunucular için Kimlik Erişim Yönetimini (IAM) kullanıyor olun, verilerinizi Cloud Firestore'un yanı sıra Gerçek Zamanlı Veritabanında da güvence altına aldığınızdan emin olun. Kullanıcı kimlik doğrulaması, her iki veritabanı için de Kimlik Doğrulama tarafından gerçekleştirilir; dolayısıyla Cloud Firestore'u 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 Güvenlik Kurallarını kullanırken sunucu SDK'ları verileri güvence altına almak için Kimlik Erişim Yönetimi'ni (IAM) kullanır.
  • Cloud Firestore Güvenlik Kuralları, joker karakter kullanmadığınız sürece basamaklanmaz. Aksi takdirde belgeler ve koleksiyonlar kuralları devralmaz.
  • Artık verileri ayrı ayrı doğrulamanıza gerek yok ( Realtime Database'de yaptığınız gibi).
  • Cloud Firestore, kullanıcının sorgu tarafından döndürülen tüm veriler için uygun erişime sahip olduğundan emin olmak amacıyla bir sorguyu yürütmeden önce kuralları kontrol eder.

Geçmiş verileri Cloud Firestore'a taşıyın

Verilerinizi ve güvenlik yapılarınızı Cloud Firestore'un veri ve güvenlik modelleriyle eşledikten 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ı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 eski verilerin üzerine yazılmasını önlemek için öncelikle geçmiş verilerinizi eklemek isteyebilirsiniz. Bir 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 şu adımları izleyin:

  1. Verilerinizi Gerçek Zamanlı Veritabanından dışarı aktarın veya yeni bir yedekleme kullanın .
    1. Firebase konsolunda Gerçek Zamanlı Veritabanı bölümüne gidin.
    2. Veri sekmesinden 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'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 benzersiz ihtiyaçları olacağından bu komut dosyası için bir şablon sunamıyoruz, ancak Slack kanalımızdaki veya Stack Overflow'taki Cloud Firestore uzmanları komut dosyanızı inceleyebilir veya özel durumunuza yönelik öneriler sunabilir.
    • Verileri doğrudan Cloud Firestore'a yazmak için sunucu SDK'larını (Node.js, Java, Python veya Go) kullanın. Sunucu SDK'larının kurulumuna ilişkin talimatlar için bkz . Başlarken .
    • Büyük veri geçişlerini hızlandırmak için toplu yazma işlemlerini 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 500 yazma/saniye ile sınırlandırın.

Cloud Firestore'a yeni veriler ekleme

Veritabanlarınız arasındaki eşitliği korumak için her iki veritabanına da gerçek zamanlı olarak yeni veriler ekleyin. Bir istemci Realtime Database'e yazdığında Cloud Firestore'a yazmayı tetiklemek için Cloud Functions'ı kullanın. Cloud Firestore'un, geçmiş veri taşıma işleminizde yaptığınız tüm yazma işlemlerinden ziyade Cloud Functions'tan gelen yeni verilere öncelik verdiğinden emin olun.

Bir istemci Realtime Database'e her veri yazdığında yeni veya değişen verileri Cloud Firestore'a yazmak için bir işlev oluşturun. Bulut İşlevleri için Gerçek Zamanlı Veritabanı tetikleyicileri hakkında daha fazla bilgi edinin.

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

Verilerinizin bir kısmı için Cloud Firestore'u birincil veritabanınız olarak kullanmaya karar verdiyseniz, kurduğunuz tüm 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 eşliği korumak için Cloud Functions'ı kullandıysanız yazma işlemlerini her iki veritabanında bir döngü halinde kopyalamadığınızdan emin olun. İşlevinizi tek bir veritabanına yazacak şekilde değiştirin veya işlevi tamamen kaldırın ve hala Realtime Database'e bağlı olan uygulamalardaki taşınan veriler için yazma işlevini aşamalı olarak kaldırmaya başlayın. Uygulamanız için bunu 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 Güvenlik Kurallarınızı veya IAM kurulumunuzu doğrulayın.