Buka konsol
Coba Cloud Firestore: Lihat database yang skalabel dan fleksibel dari Firebase dan Google Cloud Platform. Pelajari Cloud Firestore lebih lanjut.

Menskalakan dengan Beberapa Database

Cara terbaik untuk mengoptimalkan performa dan menskalakan data Anda di Firebase Realtime Database adalah membagi data Anda di beberapa instance Realtime Database, yang juga disebut sebagai database sharding. Sharding memberi Anda fleksibilitas untuk menskalakan di luar batas yang berlaku untuk instance database individual, selain untuk load balancing dan pengoptimalan performa.

Kapan sharding data perlu dilakukan

Sharding data di beberapa database perlu dilakukan jika Anda menggunakan Realtime Database dan cocok dengan skenario berikut:

  • Anda ingin menskala di luar 100.000 koneksi simultan, 1.000 operasi tulis/detik, atau salah satu batas lainnya untuk instance database tunggal.
  • Anda memiliki beberapa kumpulan data terpisah dan ingin mengoptimalkan performa (misalnya, aplikasi chat yang melayani beberapa kelompok pengguna terpisah dan independen).
  • Anda ingin menyeimbangkan beban di beberapa database guna meningkatkan masa aktif dan mengurangi risiko kelebihan beban pada instance database tunggal.

Cara melakukan sharding data

Untuk melakukan sharding data, ikuti langkah-langkah berikut (diuraikan lebih detail di bawah ini):

  1. Petakan data ke beberapa database sesuai dengan kebutuhan khusus aplikasi Anda.
  2. Buat beberapa instance database.
  3. Konfigurasikan aplikasi agar terhubung ke instance Realtime Database yang diperlukan untuk setiap kumpulan data.

Memetakan data Anda

Saat Anda memetakan data ke beberapa database, upayakan untuk memenuhi kondisi berikut:

  • Setiap kueri hanya bertemu dengan satu instance database. Realtime Database tidak mendukung kueri lintas instance database.
  • Tidak ada pembagian atau penggandaan data di semua instance database (atau pembagian atau penggandaan minimal).
  • Setiap instance aplikasi hanya terhubung ke satu database dalam satu waktu.

Saat memetakan data, pertimbangkan untuk menerapkan strategi berikut:

Membuat "sharding master"

Simpan peta penyimpanan data Anda di instance database. Dengan cara ini, Anda dapat secara terprogram mencari instance database mana yang sesuai dengan klien yang menghubunginya. Ingatlah bahwa cara ini mungkin memiliki lebih banyak overhead daripada menghubungkan langsung ke instance database tertentu yang Anda butuhkan, saat Anda membutuhkannya.

Data bucket menurut kategori atau pelanggan

Simpan data dalam instance database silo yang dikelompokkan menurut tipe pengguna atau data. Misalnya, Anda mengembangkan aplikasi chat yang melayani beberapa organisasi. Anda dapat membuat satu instance database untuk setiap organisasi dan menyimpan semua data chat di instance database yang unik.

Dalam kasus ini, organisasi A dan organisasi B tidak berbagi data, tidak ada data ganda di database Anda dan Anda hanya menjalankan kueri yang bertemu instance database tunggal. Selain itu, pengguna di setiap organisasi hanya terhubung ke database organisasinya saat mereka menggunakan aplikasi chat.

Anda kemudian dapat membuat beberapa instance database lebih awal dan menggunakan ID organisasi itu untuk memetakan suatu tim ke instance database-nya. Misalnya, organisasi A memetakan ke Realtime Database A.

Cara pemetaan data untuk aplikasi Anda tergantung pada kasus penggunaan tertentu, tetapi ketentuan dan strategi yang diuraikan di atas dapat membantu Anda untuk menetapkan apa yang berhasil untuk data Anda.

Membuat beberapa instance Realtime Database

Jika Anda menggunakan paket harga Blaze, Anda dapat membuat beberapa instance database di project Firebase yang sama.

buat database di Firebase console dengan menu konteks di bagian database

  1. Di Firebase console, buka tab Data di bagian Develop > Database.
  2. Pilih Buat database baru dari menu di bagian Database.
  3. Sesuaikan Referensi database dan Aturan keamanan, lalu klik Oke.

Ulangi proses tersebut untuk membuat instance database sebanyak yang Anda butuhkan. Setiap instance database memiliki kumpulan Aturan Firebase Realtime Database sendiri, sehingga Anda dapat menyempurnakan akses ke data Anda.

Mengedit dan menerapkan Aturan Realtime Database untuk setiap instance

Pastikan Anda telah menyiapkan Aturan Realtime Database untuk memberikan akses yang sesuai ke setiap instance database dalam project. Setiap database memiliki kumpulan aturan tersendiri yang dapat Anda edit dan terapkan dari Firebase console atau menggunakan Firebase CLI untuk menerapkan target.

  • Untuk mengedit dan menerapkan aturan dari Firebase console, ikuti langkah berikut:

    1. Buka tab Aturan di bagian Develop > Database.
    2. Pilih database yang ingin Anda edit, lalu ubah aturannya.
  • Untuk mengedit dan menerapkan aturan dari Firebase CLI, ikuti langkah berikut:

    1. Ubah aturan dalam file aturan untuk instance database Anda (misalnya, foo.rules.json ).
    2. Buat dan terapkan target penerapan untuk mengaitkan database yang menggunakan file aturan yang sama. Misalnya:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Perbarui file konfigurasi firebase.json dengan target penerapan:

      {
        "database": [
          {"target": "main", "rules", "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Jalankan perintah penerapan:

      firebase deploy

Pastikan Anda mengedit dan menerapkan aturan secara konsisten dari tempat yang sama. Menerapkan aturan dari Firebase CLI akan menggantikan semua pengeditan yang telah Anda buat di Firebase console, dan mengedit aturan secara langsung di Firebase console akan menggantikan perubahan terbaru yang telah Anda terapkan melalui Firebase CLI.

Menghubungkan aplikasi Anda ke beberapa instance database

Gunakan referensi database untuk mengakses data yang tersimpan dalam instance database sekunder. Anda bisa mendapatkan referensi untuk instance database tertentu menurut URL atau aplikasi. Jika Anda tidak menentukan URL, Anda akan mendapatkan referensi untuk instance database default aplikasi.

Web
// init
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 database1 = firebase.database(app2);
Swift
// Get the default database instance for an app
var ref: DatabaseReference!
ref = Database.database().reference()
// Get a secondary database instance by URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;
self.ref = [[FIRDatabase database] reference];
// Get a secondary database instance by URL @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

Java
Android

// 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
Android

// Get the default database instance for an app
val primary = FirebaseDatabase.getInstance().reference

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

Menentukan instance saat menggunakan Firebase CLI

Gunakan opsi --instance untuk menentukan Firebase Realtime Database yang ingin Anda terapkan perintah Firebase CLI. Misalnya, gunakan perintah berikut untuk menjalankan profiler untuk instance database bernama my-example-shard.firebaseio.com:

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

Mengoptimalkan koneksi pada setiap database

Jika setiap klien perlu terhubung ke beberapa database dalam satu sesi, Anda dapat mengurangi jumlah koneksi simultan ke setiap instance database dengan terhubung ke setiap instance database hanya selama diperlukan.

Dapatkan lebih banyak saran

Jika membutuhkan bantuan lebih lanjut tentang sharding data di beberapa instance database, hubungi pakar Firebase melalui saluran Slack atau di Stack Overflow.