Birden Çok Veritabanıyla Ölçeklendirme

Firebase Realtime Database ürününde performansı optimize etmenin ve verilerinizi ölçeklendirmenin en iyi yolu verilerinizi birden çok Realtime Database örneğine ayırmaktır. yardımcı olur. Parçalama size, veri tabanı için geçerli olan sınırlar ek olarak yük dengeleme ve performans optimizasyonu.

Verilerinizi ne zaman bölmelisiniz?

Realtime Database kullanıyorsanız ve aşağıdaki senaryolardan herhangi birine uyuyorsanız verilerinizi birden fazla veritabanı arasında bölme isteyebilirsiniz:

  • 200.000 eşzamanlı bağlantı sınırını aşmak istiyorsanız 1.000 yazma işlemi/saniye veya limits değerini döndürür.
  • Birden fazla ayrı veri kümeniz varsa ve performansı optimize etmek istiyorsanız (örneğin, ayrı ve bağımsız kullanıcı gruplarına hizmet veren bir sohbet uygulaması)
  • Çalışma süresini artırmak ve tek bir veritabanı örneğinin aşırı yüklenme riskini azaltmak için yükü birden fazla veritabanı arasında dengelemek istiyorsunuz.

Verilerinizi bölme

Verilerinizi parçalara ayırmak için aşağıdaki adımları uygulayın (aşağıda daha ayrıntılı olarak açıklanmıştır):

  1. Uygulamanızın ihtiyaçlarına göre verilerinizi birden fazla veritabanı ile eşleyin.
  2. Birden fazla veritabanı örneği oluşturabilirsiniz.
  3. Uygulamanızı, her veri kümesi için gerekli Realtime Database örneğine bağlanacak şekilde yapılandırın.

Verilerinizi eşleme

Verilerinizi birden çok veritabanıyla eşlerken şu koşulları kabul etmelisiniz:

  • Her sorgu yalnızca tek bir veritabanı örneğinde çalışır. Realtime Database, veritabanı örneklerinde sorguları desteklemiyor.
  • Veritabanı örnekleri arasında veri paylaşımı veya kopyalama yapılmamalıdır (veya minimum düzeyde paylaşım veya kopyalama yapılmalıdır).
  • Her uygulama örneği herhangi bir zamanda yalnızca bir veritabanına bağlanır.

Verilerinizi eşlerken aşağıdaki stratejileri uygulayabilirsiniz:

"Ana parça" oluşturma

Verilerinizin nasıl depolandığına dair bir harita oluşturun izin verir. Bu şekilde, hangi veritabanının örnek, bağlanan istemciye karşılık gelir. Bunun, ihtiyacınız olduğunda doğrudan ihtiyacınız olan veritabanı örneğine bağlanmaktan daha fazla ek maliyete neden olabileceğini unutmayın.

Kategorilere veya müşteriye göre veri grubu verileri

Verileri, kullanıcı veya veri türüne göre gruplandırılmış şekilde ayrı veritabanı örneklerinde depolayın. Örneğin, birden fazla kuruluşa hizmet veren bir sohbet uygulaması oluşturursanız Her kuruluş için bir veritabanı örneği oluşturabilir ve tüm sohbetleri verileri kullanır.

Bu durumda A kuruluşu ve B kuruluşu veri paylaşmaz, veritabanlarınızda yinelenen veri yoktur ve yalnızca tek bir veritabanı örneğine karşı sorgu yürütürsünüz. Ayrıca, her kuruluştaki kullanıcılar yalnızca sohbet uygulamasını kullanırken kuruluşlarının veritabanına bağlanır.

Daha sonra önceden birkaç veritabanı örneği oluşturabilir ve bir ekibi veritabanı örneğiyle eşlemek için kullanılacak kuruluşun kimliğini kullanın. Örneğin, A kuruluşu, Realtime Database A ile eşlenir.

Uygulamanız için verileri eşleme şekliniz, kullanım alanınıza bağlıdır ancak yukarıda belirtilen koşullar ve stratejiler, verileriniz için neyin işe yaradığını belirlemenize yardımcı olabilir.

Birden fazla Realtime Database örneği oluşturma

Blaze fiyatlandırma planı kullanıyorsanız 1.000'e kadar hesap oluşturabilirsiniz. aynı Firebase projesindeki veritabanı örneklerini

<span class=Veritabanları bölümündeki bağlam menüsüne sahip Firebase konsolu" />

  1. Firebase Konsolu'nda Veri Geliştirme > Veritabanı bölümüne bakın.
  2. Realtime Database bölümündeki menüden Yeni veritabanı oluştur'u seçin.
  3. Veritabanı referansı ve Güvenlik kurallarını özelleştirin, ardından Anladım'ı tıklayın.

İhtiyacınız olduğu kadar veritabanı örneği oluşturmak için işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Realtime Database Security Rules grubu vardır. Böylece verilerinize erişimi hassaslaştırabilirsiniz.

Firebase konsolunda veya Realtime Database Management REST API'yi kullanarak veritabanı örnekleri oluşturabilir ve yönetebilirsiniz.

Her örnek için Realtime Database Security Rules öğesini düzenleyin ve dağıtın

Realtime Database Security Rules'ün, projenizdeki her veritabanı örneğine uygun erişime izin verdiğinden emin olun. Her veritabanının kendine ait bir kural grubu vardır. Bu kuralları Firebase konsolundan veya Firebase CLI'yi kullanarak hedefleri dağıtmak için düzenleyip dağıtabilirsiniz.

  • Kuralları Firebase konsolundan düzenlemek ve dağıtmak için aşağıdaki adımları uygulayın:

    1. Geliştirme > Veritabanı bölümündeki Kurallar sekmesine gidin.
    2. Düzenlemek istediğiniz veritabanını seçip kuralları değiştirin.
  • Kuralları Firebase KSA'dan düzenlemek ve dağıtmak için şu adımları uygulayın:

    1. Veritabanı örnekleriniz için kurallar dosyalarındaki kuralları (örneğin, foo.rules.json) değiştirin.
    2. Aynı kurallar dosyasını kullanan veritabanlarını ilişkilendirmek için dağıtım hedefleri oluşturun ve uygulayın. Örneğin:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. firebase.json yapılandırma dosyanızı dağıtım hedefleriyle güncelleyin:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Dağıtma komutunu çalıştırın:

      firebase deploy
      .

Kuralları her zaman aynı yerden düzenlediğinizden ve dağıttığınızdan emin olun. Kuralları Firebase CLI'den dağıtmak, Firebase konsolunda yaptığınız tüm düzenlemeleri geçersiz kılar. Kuralları doğrudan Firebase konsolunda düzenlemek ise Firebase CLI aracılığıyla dağıttığınız son değişiklikleri geçersiz kılar.

Uygulamanızı birden fazla veritabanı örneğine bağlama

İkincil veritabanı örneklerinde depolanan verilere erişmek için veritabanı referansını kullanın. Belirli bir veritabanı örneğinin referansını URL veya uygulamaya göre alabilirsiniz. Eğer bir URL belirtmezseniz uygulamanın referansını alırsınız varsayılan veritabanı örneğidir.

Web

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

const app1 = initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Web

const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Swift
Not: Bu Firebase ürünü, uygulama klipsi hedefinde kullanılamaz.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
. // URL ile ikincil veritabanı örneği al var ref: VeritabanıReferansı! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
Not: Bu Firebase ürünü, uygulama klipsi hedefinde kullanılamaz.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
. // URL ile ikincil veritabanı örneği al @property (güçlü, atomik olmayan) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] referans];
'nı inceleyin.

Kotlin+KTX

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Java

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

Firebase CLI'yi kullanırken örnek belirtme

Firebase CLI komutunu hangi Firebase Realtime Database'a uygulamak istediğinizi belirtmek için --instance seçeneğini kullanın. Örneğin, aşağıdaki komutu kullanarak my-example-shard.firebaseio.com adlı veritabanı örneğinin profil oluşturucusu:

firebase database:profile --instance "my-example-shard"

Her veritabanındaki bağlantıları optimize etme

Her istemcinin bir oturum sırasında birden çok veritabanına bağlanması gerekiyorsa şunları yapabilirsiniz: her veritabanı örneğine eş zamanlı bağlantı sayısını azaltarak gereken süre boyunca her veritabanı örneğine bağlanmayı gerektirir.

Daha fazla tavsiye alın

Verilerinizi birden fazla veritabanı örneğine bölme konusunda daha fazla yardıma ihtiyacınız varsa Slack kanalımızdaki veya Stack Overflow'daki Firebase uzmanlarına ulaşın.