Birden Fazla Veritabanı ile Ö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. Parçalama, yük dengeleme ve performans optimizasyonuna ek olarak, tekil veritabanı örnekleri için geçerli olan sınırların ötesine ölçeklendirme esnekliği sağlar.

Verileriniz ne zaman parçalanır?

Realtime Database kullanıyorsanız ve aşağıdaki senaryolardan birine uyuyorsanız verilerinizi birden fazla veritabanına bölmek isteyebilirsiniz:

  • Tek bir veritabanı örneği için 200.000 eş zamanlı bağlantı, saniyede 1.000 yazma işlemi veya diğer sınırlardan herhangi birinin üzerine ölçeklendirme yapmak istiyorsunuz.
  • Birden fazla 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ı örneğini aşırı yükleme riskini azaltmak için birden fazla veritabanı arasında yükü dengelemek istiyorsunuz.

Verilerinizi nasıl kırabilirsiniz?

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

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

Verilerinizin haritasını çıkarma

Verilerinizi birden fazla veritabanına 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 kopyalanması gerekmez (ya da minimum düzeyde paylaşım veya yineleme).
  • Her uygulama örneği, herhangi bir zamanda yalnızca bir veritabanına bağlanır.

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

"Ana kırık" oluşturma

Verilerinizin veritabanı örneklerinde nasıl depolandığını gösteren bir harita depolayın. Bu şekilde, bağlanan istemciye hangi veritabanı örneğinin karşılık geldiğini programlı bir şekilde bulabilirsiniz. Bunun, ihtiyacınız olduğunda belirli bir veritabanı örneğine doğrudan bağlanmaktan daha fazla ek yükü olabileceğini unutmayın.

Verileri kategorilere veya müşteriye göre gruplayın

Verileri, kullanıcıya veya veri türüne göre gruplandırılmış, ayrı halde tutulan veritabanı örneklerinde depolayın. Örneğin, birden fazla kuruluşa hizmet veren bir sohbet uygulaması derlerseniz 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 veri paylaşmaz, veritabanlarınızda yinelenen veri yoktur ve sorguları yalnızca tek bir veritabanı örneğinde yaparsınız. 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, özel kullanım alanınıza 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 fazla Realtime Database örneği oluşturma

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

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

  1. Firebase konsolunda Geliştirme > Veritabanı bölümündeki Veri sekmesine gidin.
  2. Realtime Database'deki 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 veritabanı örneği oluşturmak için bu işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Realtime Database Güvenlik Kuralları kümesi vardır. Böylece verilerinize erişim konusunda hassas ayarlar yapabilirsiniz.

Veritabanı örneklerini Firebase konsolunda veya Realtime Database Management REST API'yi kullanarak 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 kendi kuralları vardır. Bunları Firebase konsolundan düzenleyip dağıtabilir veya hedefleri dağıtmak için Firebase CLI'yı kullanabilirsiniz.

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

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

    1. Veritabanı örneklerinizin kural dosyalarında bulunan kuralları değiştirin (örneğin, 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

Kuralları tutarlı bir şekilde aynı yerden düzenleyip 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. Kuralları doğrudan Firebase konsolunda düzenlemek ise Firebase CLI üzerinden dağıttığınız son değişiklikleri geçersiz kılar.

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

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

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ü, 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 @property (güçlü, atomik olmayan) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

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

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 oluşturucuyu çalıştırmak üzere aşağıdaki komutu kullanın:

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

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

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

Daha fazla tavsiye alın

Verilerinizi birden fazla veritabanı örneği arasında parçalara ayırma konusunda daha fazla yardıma ihtiyaç duyarsanız Slack kanalımız veya Stack Overflow üzerinden Firebase uzmanlarıyla iletişime geçin.