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 yararlanarak ihtiyaçlarınıza uygun hale getirebilirsiniz. Örneğin, Cloud Firestore'da Varlığı Geliştirme başlıklı makalede belirtildiği gibi, Realtime Database'nın varlık desteğinden yararlanmak isteyebilirsiniz.

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 hizmetinden Cloud Firestore hizmetine taşımaya karar verdiyseniz aşağıdaki akışı göz önünde bulundurun. Her veritabanının kendine özgü ihtiyaçları ve yapısal hususları olduğundan otomatik bir taşıma yolu yoktur. Bunun yerine, şu genel ilerleme sırasını izleyebilirsiniz:

  1. Veri yapısını ve güvenlik kurallarını Realtime Database'dan Cloud Firestore'ye eşleyin. Hem Realtime Database hem de Cloud Firestore Firebase Authentication'ı kullandığından uygulamanız için 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şıma Cloud Firestore'da yeni veri yapınızı oluştururken Realtime Database'daki mevcut verileri 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 dışına taşımanız gerekmez.

  3. Yeni verileri Firestore'a anında yansıtın. Cloud Firestore veritabanınıza Realtime Database eklendikçe yeni veriler yazmak için Cloud Functions'ı kullanın.

  4. Taşınan veriler için birincil veritabanınız olarak Cloud Firestore'ı seçin. Verilerinizin bir kısmını taşıdıktan sonra Cloud Firestore'ı birincil veritabanınız olarak kullanın ve taşınan veriler için Realtime Database kullanımınızı azaltın. Uygulamanızın, bu veriler için hâlâ Realtime Database'ya bağlı olan sürümlerini ve bu sürümleri desteklemeye nasıl devam edeceğinizi göz önünde bulundurun.

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

Verilerinizi haritada gösterme

Realtime Database içindeki veriler tek bir ağaç olarak yapılandırılırken Cloud Firestore; belgeler, koleksiyonlar ve alt koleksiyonlar aracılığıyla daha açık veri hiyerarşilerini destekler. Verilerinizin bir kısmını Realtime Database hizmetinden Cloud Firestore hizmetine 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 Cloud Firestore'daki verileri nasıl yapılandıracağınızı etkileyebilecek, veritabanları arasındaki aşağıdaki önemli farklılıkları 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 veri ihtiyacını azaltır.
  • Sorgu imleçleri daha sağlam sayfalara ayırma özelliği sunar.
  • İşlemler artık tüm verileriniz için ortak bir kök gerektirmiyor ve daha verimli.
  • Fatura maliyetleri Realtime Database ile Cloud Firestore arasında farklılık gösterir. Çok sayıda küçük işlem kullanıyorsanız Cloud Firestore, Realtime Database'den daha pahalı olabilir. Veritabanınızdaki işlem sayısını azaltmayı ve gereksiz yazma işlemlerinden kaçınmayı deneyin. Realtime Database ile 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 dikkate alabileceğiniz bazı noktaları yansıtmaktadır. Realtime Database ile kullandığınızdan daha doğal veri yapıları için yüzeysel okumalardan ve gelişmiş sorgulama özelliklerinden yararlanabilirsiniz.

Dünyanın dört bir yanındaki şehirlerde önemli yerleri bulmalarına yardımcı olan bir şehir rehberi uygulamasını ele alalım. Realtime Database'da yüzeysel okuma olmadığı için 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, yüzeysel okumalar yaptığından bir koleksiyondaki belgeler için yapılan sorgular alt koleksiyonlardaki verileri getirmez. Bu nedenle, önemli yer 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 nedenle, iç içe geçmiş listelerle belgeleri şişirmek yerine, her şehir belgesini küçük tutarak önemli yerleri alt koleksiyon olarak saklamak daha iyi bir seçenektir.

Cloud Firestore'nın gelişmiş sorgulama özellikleri, yaygın erişim kalıpları için verilerin kopyalanması ihtiyacını azaltır. Örneğin, şehir rehberi uygulamasında nüfusa göre sıralanmış tüm başkentleri gösteren bir ekranı ele alalım. Realtime Database içinde bunu yapmanın en etkili yolu, cities listesindeki verileri kopyalayan ayrı bir başkentler listesi tutmaktır.

{
   cities: {
    // ...
   },

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

Cloud Firestore içinde, nüfus sırasına göre başkentler listesini 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 Çözümlerimize göz atarak Cloud Firestore veritabanınızı nasıl yapılandıracağınıza dair daha fazla fikir edinin.

Verilerinizi güvence altına alma

Android, Apple veya web istemcileri için Cloud Firestore Security Rules'yi ya da sunucular için Kimlik ve Erişim Yönetimi (IAM)'yi kullanıyor olsanız da verilerinizi Cloud Firestore ve Realtime Database'de de koruduğunuzdan emin olun. Kullanıcı kimlik doğrulaması, her iki veritabanı için de Kimlik Doğrulama tarafından gerçekleştirilir. Bu nedenle, Cloud Firestore kullanmaya başladığınızda Kimlik Doğrulama 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ı verileri güvenli hale getirmek için Identity Access Management (IAM) kullanır.
  • Cloud Firestore Security Rules, joker karakter kullanmadığınız sürece basamaklandırmayın. Dokümanlar ve koleksiyonlar, kuralları başka şekilde devralmaz.
  • Artık verileri ayrı olarak doğrulamanız gerekmez (Realtime Database'da yaptığınız gibi).
  • Cloud Firestore, sorguyu yürütmeden önce kuralları kontrol ederek kullanıcının sorgu tarafından döndürülen tüm verilere uygun erişime sahip olduğundan emin olur.

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

Veri ve güvenlik yapılarınızı Cloud Firestore'nın veri ve güvenlik modelleriyle eşledikten sonra verilerinizi eklemeye başlayabilirsiniz. Uygulamanızı Realtime Database konumundan Cloud Firestore konumuna taşıdıktan sonra geçmiş verileri sorgulamayı planlıyorsanız eski verilerinizin dışa aktarılmış halini 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 verilerle üzerine yazılmasını önlemek için önce geçmiş verilerinizi eklemek isteyebilirsiniz. Bir sonraki adımda açıklandığı gibi, her iki veritabanına da aynı anda yeni veriler eklerseniz Cloud Firestore veritabanına Cloud Functions tarafından eklenen yeni verilere öncelik verdiğinizden emin olun.

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

  1. Verilerinizi Realtime Database dışa aktarın veya yakın zamanda oluşturulmuş bir yedeği kullanın.
    1. Firebase konsolunda Realtime Database bölümüne gidin.
    2. Veri sekmesinde, veritabanınızın kök düzeyindeki düğümünü 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'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 uzmanlar komut dosyanızı inceleyebilir ya da özel durumunuzla ilgili tavsiyelerde bulunabilir.Cloud Firestore
    • Verileri doğrudan Cloud Firestore konumuna yazmak için sunucu SDK'larını (Node.js, Java, Python veya Go) kullanın. Sunucu SDK'larının ayarlanmasıyla ilgili talimatlar için Başlangıç başlıklı makaleyi inceleyin.
    • Büyük veri taşımalarını 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 her koleksiyonda saniyede 500 yazma işlemiyle sınırlayın.

Cloud Firestore bölümüne yeni veri ekleme

Veritabanlarınız arasında eşitliği korumak için her iki veritabanına da yeni verileri anında ekleyin. Bir istemci Realtime Database öğesine her yazdığında Cloud Firestore öğesine yazma işlemini tetiklemek için Cloud Functions öğesini kullanın. Cloud Firestore, Cloud Functions'dan gelen yeni verilere, geçmiş verilerinizi taşırken yaptığınız tüm yazma işlemlerine göre öncelik verir.

Bir istemci Realtime Database konumuna veri yazdığında her seferinde Cloud Firestore konumuna yeni veya değişen veriler yazmak için bir işlev oluşturun. Cloud Functions için Realtime Database tetikleyiciler 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 ayarladığınız tüm veri yansıtma işlevlerini hesaba kattığınızdan ve Cloud Firestore Security Rules'nizi 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 da döngü halinde kopyalamadığınızdan emin olun. İşlevinizi tek bir veritabanına yazacak şekilde değiştirin veya işlevi tamamen kaldırıp Realtime Database'ya bağlı uygulamalarda taşınan veriler için yazma işlevini aşamalı olarak devre dışı bırakmaya 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 güvenli hale getirildiğini doğrulayın. Cloud Firestore Security Rules veya IAM kurulumunuzu doğrulayın.