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, tek tek veritabanı eşgörünümleri için geçerli olan sınırların ötesinde ö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 parçalamak 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ırların ötesinde ölçeklendirme yapmak istiyorsunuz.
  • Birden çok ayrı veri kümeniz var ve performansı optimize etmek istiyorsunuz (örneğin, ayrı, bağımsız kullanıcı gruplarına hizmet veren bir sohbet uygulaması).
  • Çalışma süresini iyileştirmek ve tek bir veritabanı eşgörünümünün aşırı yüklenmesi riskini azaltmak için yükü birden çok veritabanı arasında dengelemek istiyorsunuz.

Verilerinizi parçalama

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

  1. Verilerinizi, uygulamanızın özel gereksinimlerine göre birden çok veritabanıyla eşleyin.
  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ı eşgörünümlerinde sorguları desteklemez.
  • Veritabanı eşgörünümleri arasında veri paylaşımı veya çoğaltması 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ı eşgörünümlerinde nasıl depolandığına dair bir harita depolayın. Bu şekilde, bağlanan istemciye hangi veritabanı örneğinin karşılık geldiğini programlı olarak arayabilirsiniz. Bunun, ihtiyaç duyduğunuzda, ihtiyacınız olan belirli bir veritabanı örneğine doğrudan bağlanmaktan daha fazla ek yükü olabileceğini unutmayın.

Kategorilere veya müşteriye göre paket verileri

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

Bu durumda, A kuruluşu ve B kuruluşu verileri paylaşmaz, veritabanlarınızda yinelenen veri yoktur ve yalnızca tek bir veritabanı örneğine karşı sorgular gerçekleştirirsiniz. Ek olarak, 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 Realtime Database A ile eşleşir.

Uygulamanız için verileri eşleme ş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'ı tıklayın.

İhtiyaç duyduğunuz sayıda veritabanı örneği oluşturmak için işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Gerçek Zamanlı Veritabanı Güvenlik Kuralları vardır, böylece verilerinize erişimde ince ayar yapabilirsiniz.

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

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

Gerçek Zamanlı Veritabanı Güvenlik 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 kuralları vardır.

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

    1. Develop > Database bölümündeki Rules 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
      firebase target:apply database other my-other-db-3
    3. firebase.json yapılandırma dosyanızı konuşlandırma hedefleriyle güncelleyin:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. konuşlandırma 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'dan 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 fazla veritabanı örneğine bağlayın

İkincil veritabanı eşgörünümlerinde depolanan verilere erişmek için veritabanı referansını kullanın. Belirli bir veritabanı örneği için referansı URL veya uygulama ile alabilirsiniz. Bir URL belirtmezseniz, uygulamanın varsayılan veritabanı örneği için referans alırsınız.

Web modular API

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 namespaced API

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ı];

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 kullanırken bir örnek belirtin

Hangi Firebase Gerçek Zamanlı Veritabanına bir Firebase CLI komutu 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 üzere aşağıdaki komutu kullanın:

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

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

Her istemcinin bir oturum sırasında birden çok veritabanına bağlanması gerekiyorsa, her bir veritabanı örneğine yalnızca gerekli olduğu sürece bağlanarak her bir veritabanı örneğine yapılan eşzamanlı bağlantı sayısını azaltabilirsiniz.

Daha fazla tavsiye alın

Verilerinizi birden çok veritabanı eşgörünümünde parçalamak için daha fazla yardıma ihtiyacınız varsa Slack kanalımızda veya Stack Overflow'ta Firebase uzmanlarına ulaşın.