Birden Çok Veritabanıyla Ölçeklendirin

Firebase Realtime Database'de performansı optimize etmenin ve verilerinizi ölçeklendirmenin en iyi yolu, verilerinizi veritabanı parçalama olarak da bilinen birden çok Realtime Database örneğine bölmektir. Sharding, yük dengeleme ve performans optimizasyonuna ek olarak, bireysel veritabanı örnekleri için geçerli olan sınırların ötesine ölçeklendirme esnekliği sağlar.

Verilerinizi ne zaman parçalamalısınız?

Gerçek Zamanlı Veritabanı kullanıyorsanız ve aşağıdaki senaryolardan herhangi birine uyuyorsanız, verilerinizi birden çok veritabanında paylaşmak isteyebilirsiniz:

  • Tek bir veritabanı eşgörünümü için 200.000 eşzamanlı bağlantı, 1.000 yazma işlemi/saniye sınırının veya diğer sınırlardan herhangi birinin ötesine ölçeklendirmek istiyorsunuz.
  • Birden çok, ayrı veri kümeniz var ve performansı optimize etmek istiyorsunuz (örneğin, ayrı, bağımsız kullanıcı gruplarına hizmet eden bir sohbet uygulaması).
  • Çalışma süresini iyileştirmek ve tek bir veritabanı örneğini aşırı yükleme riskini azaltmak için yükü birden çok veritabanında dengelemek istiyorsunuz.

Verilerinizi nasıl parçalayabilirsiniz?

Verilerinizi parçalamak için şu adımları izleyin (aşağıda daha ayrıntılı olarak açıklanmıştır):

  1. Uygulamanızın özel ihtiyaçlarına göre verilerinizi birden çok veritabanıyla eşleştirin.
  2. Birden çok veritabanı örneği oluşturun.
  3. Uygulamanızı, her veri kümesi için gerekli olan Gerçek Zamanlı Veritabanı örneğine bağlanacak şekilde yapılandırın.

Verilerinizi eşleyin

Verilerinizi birden çok veritabanıyla eşlerken aşağıdaki koşulları karşılamaya çalışın:

  • Her sorgu yalnızca tek bir veritabanı örneğine karşı çalışır. Gerçek Zamanlı Veritabanı, veritabanı örnekleri arasında sorguları desteklemez.
  • Veritabanı örnekleri arasında veri paylaşımı veya kopyası yok (veya minimum paylaşım veya çoğaltma).
  • Her uygulama örneği, herhangi bir anda yalnızca bir veritabanına bağlanır.

Verilerinizi eşlerken aşağıdaki stratejileri uygulamayı düşünün:

Bir "ana parça" oluşturun

Verilerinizin veritabanı örneklerinde nasıl depolandığına dair bir harita saklayın. Bu şekilde, bağlanan istemciye karşılık gelen veritabanı örneğini programlı olarak arayabilirsiniz. Bunun, ihtiyacınız olan belirli bir veritabanı örneğine ihtiyacınız olduğunda doğrudan bağlanmaktan daha fazla ek yükü olabileceğini unutmayın.

Kategorilere veya müşteriye göre paket verileri

Verileri, kullanıcı veya veri türüne göre gruplanmış, silolanmış veritabanı örneklerinde depolayın. Örneğin, birden çok kuruluşa hizmet veren bir sohbet uygulaması oluşturursanız, her kuruluş için bir veritabanı örneği oluşturabilir ve tüm sohbet verilerini benzersiz veritabanı örneklerinde depolayabilirsiniz.

Bu durumda, A kuruluşu ve B kuruluşu verileri paylaşmaz, veritabanlarınızda yinelenen veriler yoktur ve yalnızca tek bir veritabanı örneğine yönelik sorgular gerçekleştirirsiniz. Ayrıca, her kuruluştaki kullanıcılar yalnızca sohbet uygulamasını kullandıklarında kuruluşlarının veritabanına bağlanır.

Daha sonra önceden birkaç veritabanı örneği oluşturabilir ve bir ekibi veritabanı örneğine eşlemek için kuruluşun kimliğini kullanabilirsiniz. Örneğin, A kuruluşu Gerçek Zamanlı Veritabanı A ile eşleşir.

Uygulamanız için verileri haritalama şekliniz, özel kullanım durumunuza bağlıdır, ancak yukarıda özetlenen koşullar ve stratejiler, verileriniz için neyin işe yaradığını tanımlamanıza yardımcı olabilir.

Birden çok Gerçek Zamanlı Veritabanı örneği oluşturun

Blaze fiyatlandırma planındaysanız , aynı Firebase projesinde birden çok veritabanı örneği oluşturabilirsiniz.

veritabanları bölümündeki bağlam menüsü ile Firebase konsolunda bir veritabanı oluşturun

  1. Firebase konsolunda, Geliştirme > Veritabanı bölümündeki Veri sekmesine gidin.
  2. Gerçek Zamanlı Veritabanı bölümündeki menüden Yeni veritabanı oluştur'u seçin.
  3. Veritabanı referansınızı ve Güvenlik kurallarınızı özelleştirin, ardından Anladım'a tıklayın.

İhtiyacınız olduğu kadar çok veritabanı örneği oluşturmak için işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Gerçek Zamanlı Veritabanı Kuralları vardır, böylece verilerinize erişimde ince ayar yapabilirsiniz.

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

Her örnek için Gerçek Zamanlı Veritabanı Kurallarını düzenleyin ve dağıtın

Gerçek Zamanlı Veritabanı Kurallarınızın projenizdeki her bir veritabanı örneğine uygun erişime izin verdiğinden emin olun. Her veritabanının, Firebase konsolundan veya hedefleri dağıtmak için Firebase CLI'yi kullanarak düzenleyebileceğiniz ve dağıtabileceğiniz kendi kural kümesi vardır.

  • Firebase konsolundan kuralları düzenlemek ve dağıtmak için şu adımları izleyin:

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

    1. Veritabanı örnekleriniz için kural dosyalarındaki kuralları değiştirin (örneğin, foo.rules.json ).
    2. Aynı kurallar dosyasını kullanan veritabanlarını ilişkilendirmek için konuşlandırma hedefleri oluşturun ve uygulayın. Örneğin:
      firebase target:apply database main my-db-1 my-db-2
      tutucu1 l10n-yer
      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ğıtım komutunu çalıştırın:

      firebase deploy

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

Uygulamanızı birden çok veritabanı örneğine bağlayın

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

Web sürümü 9

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 sürümü 8

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);
Süratli
Not: Bu Firebase ürünü, Uygulama Klibi hedefinde mevcut değildir.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// URL'ye göre ikincil bir veritabanı örneği alın var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Amaç-C
Not: Bu Firebase ürünü, Uygulama Klibi hedefinde mevcut değildir.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

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

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();

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

Firebase CLI'yi kullanırken bir örnek belirtin

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

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

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

Bir oturum sırasında her istemcinin birden çok veritabanına bağlanması gerekiyorsa, her bir veritabanı örneğine yalnızca gerektiği kadar bağlanarak her bir veritabanı örneğine eşzamanlı bağlantı sayısını azaltabilirsiniz.

Daha fazla tavsiye alın

Verilerinizi birden çok veritabanı örneği arasında paylaştırmak için daha fazla yardıma ihtiyacınız varsa, Slack kanalımızdaki veya Stack Overflow'daki Firebase uzmanlarına ulaşın.