Birden Fazla Veritabanı ile Ölçeklendirin

Firebase Realtime Database'de performansı optimize etmenin ve verilerinizi ölçeklendirmenin en iyi yolu, verilerinizi birden fazla Realtime Database örneğine bölmektir. Buna veritabanı parçalama da denir. Parçalama, yük dengeleme ve performans optimizasyonuna ek olarak size ayrı veritabanı örnekleri için geçerli olan sınırların ötesinde ölçeklendirme yapma esnekliği sunar.

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

Realtime Database kullanıyorsanız ve aşağıdaki senaryolardan birine uyuyorsanız verilerinizi birden çok veritabanına parçalamak isteyebilirsiniz:

  • Tek bir veritabanı örneği için 200.000 eşzamanlı bağlantı ya da saniye başına 1.000 yazma işlemi sınırını veya diğer sınırlardan herhangi birinin ötesinde ölçeklendirme yapmak istiyorsanız.
  • Birden fazla ayrı veri kümeniz varsa ve performansı optimize etmek istiyorsanız (ö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ı örneğinin aşırı yüklenme riskini azaltmak için birden fazla veritabanı arasında yükü dengelemek istersiniz.

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 fazla veritabanıyla eşleyin.
  2. Birden fazla veritabanı örneği oluşturun.
  3. Uygulamanızı, her veri kümesi için gerekli olan Realtime Database örneğine bağlanacak şekilde yapılandırın.

Verilerinizi eşleştirme

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

  • Her sorgu yalnızca tek bir veritabanı örneğinde çalışır. Realtime Database, veritabanı örneklerinde sorguları desteklemez.
  • Veritabanı örnekleri arasında veri paylaşımı veya çoğaltılması (veya minimum düzeyde paylaşım ya da veri yineleme) işlemi yapılmaz.
  • Her uygulama örneği herhangi bir anda yalnızca bir veritabanına bağlanır.

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

"Ana kırık" oluşturma

Verilerinizin veritabanı örnekleri genelinde nasıl depolandığına dair bir harita depolayın. Bu şekilde, hangi veritabanı örneğinin bağlanan istemciye karşılık geldiğini programatik olarak arayabilirsiniz. Bunun, ihtiyacınız olan belirli veritabanı örneğine ihtiyaç duyduğunuz anda doğrudan bağlanmaktan daha fazla ek yük 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 sohbet verilerini benzersiz veritabanı örneklerinde depolayabilirsiniz.

Bu durumda A kuruluşu ve B kuruluşu verileri paylaşmaz, veritabanlarınızda yinelenen veri olmaz ve sorguları yalnızca tek bir veritabanı örneğine karşı 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ğiyle eşlemek için kuruluşun kimliğini kullanabilirsiniz. Örneğin, A kuruluşu Realtime Database A ile eşlenir.

Uygulamanız için verileri eşleme yönteminiz, kullanım alanınıza bağlıdır. Ancak yukarıda açıklanan koşullar ve stratejiler, verileriniz için neyin işe yaradığını tanımlamanıza yardımcı olabilir.

Birden fazla Realtime Database örneği oluşturma

Blaze fiyatlandırma planını kullanıyorsanız aynı Firebase projesinde en fazla 1.000 veritabanı örneği oluşturabilirsiniz.

Firebase konsolunda veritabanları bölümündeki içerik menüsünü kullanarak veritabanı oluşturma

  1. Firebase konsolunda Geliştir > Veritabanı bölümündeki Veri sekmesine gidin.
  2. Realtime Database bölümündeki menüden Create new database'i (Yeni veritabanı oluştur) seçin.
  3. Veritabanı referansınızı ve Güvenlik kurallarınızı özelleştirin, ardından Anladım'ı tıklayın.

İhtiyacınız kadar çok sayıda veritabanı örneği oluşturmak için bu işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Realtime Database Güvenlik Kuralları grubu vardır. Bu sayede verilerinize erişimde ince ayar yapabilirsiniz.

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

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

Realtime Database Güvenlik Kurallarınızın, projenizdeki her veritabanı örneğine uygun erişime izin verdiğinden emin olun. Her veritabanının kendine özgü kuralları vardır. Bu kuralları Firebase konsolundan veya hedefleri dağıtmak için Firebase CLI'yı kullanarak düzenleyip dağıtabilirsiniz.

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

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

    1. Veritabanı örnekleriniz için kural dosyalarındaki kuralları değiştirin (ör. foo.rules.json).
    2. Aynı kural dosyasını kullanan veritabanlarını ilişkilendirmek için dağıtım hedefleri oluşturup 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ğıtım komutunu çalıştırın:

      firebase deploy

Aynı yerden kuralları tutarlı bir şekilde düzenlediğinizden ve dağıttığınızdan emin olun. Kuralların Firebase CLI'dan dağıtılması, Firebase konsolunda yaptığınız düzenlemeleri geçersiz kılar. Kuralları doğrudan Firebase konsolunda düzenlemek, Firebase CLI aracılığıyla dağıttığınız tüm 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. Bir URL belirtmezseniz uygulamanın varsayılan veritabanı örneğinin referansını alırsınız.

Web modüler 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 ad alanı API'si

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ü, App Clip hedefinde kullanılamaz.
// Get the default database instance for an app
var ref: DatabaseReference!

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

self.ref = [[FIRDatabase database] reference];
// URL ile ikincil bir veritabanı örneği alın @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] application];

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 belirtme

Firebase CLI komutu uygulamak istediğiniz Firebase Realtime Database'i belirtmek için --instance seçeneğini kullanın. Örneğin, my-example-shard.firebaseio.com adlı bir veritabanı örneği için profil düzenleyiciyi çalıştırmak amacıyla aşağıdaki komutu kullanın:

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

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

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

Daha fazla tavsiye alın

Verilerinizi birden fazla veritabanı örneği genelinde parçalama konusunda daha fazla yardıma ihtiyacınız varsa Slack kanalımızdan veya Stack Overflow'dan Firebase uzmanlarına ulaşın.