ปรับขนาดด้วยหลายฐานข้อมูล

วิธีที่ดีที่สุดในการเพิ่มประสิทธิภาพและปรับขนาดข้อมูลของคุณในฐานข้อมูลเรียลไทม์ของ Firebase คือการแบ่งข้อมูลของคุณในอินสแตนซ์ฐานข้อมูลเรียลไทม์หลายรายการ หรือที่เรียกว่าการแบ่งส่วนฐานข้อมูล sharding ช่วยให้คุณมีความยืดหยุ่นในการขนาดเกินกว่าที่ ข้อ จำกัด ที่ใช้กับกรณีฐานข้อมูลของแต่ละบุคคลนอกเหนือไปจากการโหลดสมดุลและเพิ่มประสิทธิภาพการทำงาน

เมื่อใดควรแบ่งข้อมูลของคุณ

คุณอาจต้องการแบ่งข้อมูลของคุณในหลายฐานข้อมูล หากคุณกำลังใช้ฐานข้อมูลเรียลไทม์และเหมาะสมกับสถานการณ์ใดๆ ต่อไปนี้:

  • คุณต้องการขนาดเกินขีด จำกัด ของ 200,000 เชื่อมต่อพร้อมกันที่ 1,000 การดำเนินการเขียน / วินาทีหรืออื่น ๆ ของ ข้อ จำกัด สำหรับอินสแตนซ์ฐานข้อมูลเดียว
  • คุณมีชุดข้อมูลที่ไม่ต่อเนื่องหลายชุด และต้องการเพิ่มประสิทธิภาพ (เช่น แอปแชทที่ให้บริการกลุ่มผู้ใช้ที่แยกจากกัน)
  • คุณต้องการปรับสมดุลการโหลดในหลายฐานข้อมูล เพื่อปรับปรุงเวลาทำงานและลดความเสี่ยงของการโอเวอร์โหลดอินสแตนซ์ฐานข้อมูลเดียว

วิธีแบ่งข้อมูลของคุณ

หากต้องการแบ่งข้อมูลของคุณ ให้ทำตามขั้นตอนเหล่านี้ (อธิบายรายละเอียดเพิ่มเติมด้านล่าง):

  1. จับคู่ข้อมูลของคุณกับหลายฐานข้อมูลตามความต้องการเฉพาะของแอป
  2. สร้างอินสแตนซ์ฐานข้อมูลหลายรายการ
  3. กำหนดค่าแอปของคุณเพื่อเชื่อมต่อกับอินสแตนซ์ฐานข้อมูลเรียลไทม์ที่จำเป็นสำหรับชุดข้อมูลแต่ละชุด

แมปข้อมูลของคุณ

เมื่อคุณจับคู่ข้อมูลของคุณกับหลายฐานข้อมูล ให้พยายามปฏิบัติตามเงื่อนไขต่อไปนี้:

  • แต่ละคิวรีทำงานกับอินสแตนซ์ฐานข้อมูลเดียวเท่านั้น ฐานข้อมูลเรียลไทม์ไม่รองรับการสืบค้นข้ามอินสแตนซ์ฐานข้อมูล
  • ไม่มีการแบ่งปันหรือทำซ้ำข้อมูลระหว่างอินสแตนซ์ฐานข้อมูล (หรือการแบ่งปันหรือทำซ้ำน้อยที่สุด)
  • อินสแตนซ์ของแอปแต่ละรายการจะเชื่อมต่อกับฐานข้อมูลเดียวเท่านั้นในช่วงเวลาที่กำหนด

ขณะที่คุณกำลังจับคู่ข้อมูลของคุณ ให้พิจารณาใช้กลยุทธ์ต่อไปนี้:

สร้าง "ส่วนหลัก"

จัดเก็บแผนที่ว่าข้อมูลของคุณถูกจัดเก็บไว้ในอินสแตนซ์ฐานข้อมูลอย่างไร ด้วยวิธีนี้ คุณสามารถค้นหาโดยทางโปรแกรมว่าอินสแตนซ์ฐานข้อมูลใดที่สอดคล้องกับไคลเอ็นต์ที่เชื่อมต่อ โปรดทราบว่าสิ่งนี้อาจมีโอเวอร์เฮดมากกว่าการเชื่อมต่อโดยตรงกับอินสแตนซ์ฐานข้อมูลเฉพาะที่คุณต้องการ เมื่อคุณต้องการ

ข้อมูลฝากข้อมูลตามหมวดหมู่หรือตามลูกค้า

จัดเก็บข้อมูลในอินสแตนซ์ฐานข้อมูลแบบแบ่งกลุ่มตามผู้ใช้หรือประเภทข้อมูล ตัวอย่างเช่น หากคุณสร้างแอปพลิเคชันแชทที่ให้บริการหลายองค์กร คุณสามารถสร้างอินสแตนซ์ฐานข้อมูลสำหรับแต่ละองค์กรและจัดเก็บข้อมูลการแชททั้งหมดในอินสแตนซ์ฐานข้อมูลที่ไม่ซ้ำกัน

ในกรณีนี้ องค์กร A และองค์กร B จะไม่แชร์ข้อมูล ไม่มีข้อมูลที่ซ้ำกันในฐานข้อมูลของคุณ และคุณดำเนินการค้นหากับอินสแตนซ์ฐานข้อมูลเดียวเท่านั้น นอกจากนี้ ผู้ใช้ในแต่ละองค์กรจะเชื่อมต่อกับฐานข้อมูลขององค์กรเมื่อใช้แอปแชทเท่านั้น

จากนั้นคุณสามารถสร้างอินสแตนซ์ฐานข้อมูลได้หลายรายการล่วงหน้า และใช้ ID ขององค์กรเพื่อแมปทีมกับอินสแตนซ์ฐานข้อมูล ตัวอย่างเช่น องค์กร A แมปกับ Realtime Database A

วิธีที่คุณแมปข้อมูลสำหรับแอปของคุณขึ้นอยู่กับกรณีการใช้งานเฉพาะของคุณ แต่เงื่อนไขและกลยุทธ์ที่ระบุไว้ข้างต้นสามารถช่วยคุณกำหนดสิ่งที่เหมาะกับข้อมูลของคุณได้

สร้างอินสแตนซ์ฐานข้อมูลเรียลไทม์หลายรายการ

ถ้าคุณอยู่ใน แผน Blaze การกำหนดราคาที่ คุณสามารถสร้างฐานข้อมูลหลายกรณีในโครงการ Firebase เดียวกัน

สร้างฐานข้อมูลในคอนโซล Firebase ด้วยเมนูบริบทในส่วนฐานข้อมูล

  1. ใน Firebase คอนโซลไปที่แท็บข้อมูลใน การพัฒนา> ฐานข้อมูล ส่วน
  2. เลือกสร้างฐานข้อมูลใหม่จากเมนูในส่วนของฐานข้อมูลเรียลไทม์
  3. ปรับแต่งการอ้างอิงฐานข้อมูลของคุณและ กฎการรักษาความปลอดภัย จากนั้นคลิก Got มัน

ทำซ้ำขั้นตอนเพื่อสร้างอินสแตนซ์ฐานข้อมูลได้มากเท่าที่คุณต้องการ อินสแตนซ์ฐานข้อมูลแต่ละรายการมีชุดกฎฐานข้อมูลเรียลไทม์ของ Firebase คุณจึงปรับแต่งการเข้าถึงข้อมูลได้

คุณสามารถสร้างและจัดการกรณีฐานข้อมูลในคอนโซล Firebase หรือการใช้ เรียลไทม์การจัดการฐานข้อมูล REST API

แก้ไขและปรับใช้กฎฐานข้อมูลแบบเรียลไทม์สำหรับแต่ละอินสแตนซ์

ตรวจสอบให้แน่ใจว่ากฎฐานข้อมูลเรียลไทม์ของคุณอนุญาตให้เข้าถึงแต่ละอินสแตนซ์ฐานข้อมูลในโครงการของคุณอย่างเหมาะสม ฐานข้อมูลแต่ละคนมีชุดของตัวเองของกฎซึ่งคุณสามารถแก้ไขและปรับใช้จากคอนโซล Firebase หรือใช้ Firebase CLI ในการปรับเป้าหมาย

  • ในการแก้ไขและปรับใช้กฎจากคอนโซล Firebase ให้ทำตามขั้นตอนเหล่านี้:

    1. ไปที่ แท็บกฎ ในการพัฒนา> ฐานข้อมูลส่วน
    2. เลือกฐานข้อมูลที่คุณต้องการแก้ไข จากนั้นแก้ไขกฎ
  • ในการแก้ไขและปรับใช้กฎจาก Firebase CLI ให้ทำตามขั้นตอนเหล่านี้:

    1. การปรับเปลี่ยนกฎระเบียบในแฟ้มกฎสำหรับกรณีฐานข้อมูลของคุณ (เช่น foo.rules.json )
    2. สร้างและปรับใช้เป้าหมายเพื่อเชื่อมโยงฐานข้อมูลที่ใช้ไฟล์กฎเดียวกัน ตัวอย่างเช่น:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. อัพเดท firebase.json แฟ้มการกำหนดค่าที่มีเป้าหมายการปรับใช้:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. เรียกใช้คำสั่งปรับใช้:

      firebase deploy

ตรวจสอบให้แน่ใจว่าคุณแก้ไขและปรับใช้กฎจากที่เดียวกันอย่างสม่ำเสมอ การปรับใช้กฎจาก Firebase CLI จะแทนที่การแก้ไขใดๆ ที่คุณได้ทำไว้ในคอนโซล Firebase และการแก้ไขกฎในคอนโซล Firebase โดยตรงจะแทนที่การเปลี่ยนแปลงล่าสุดที่คุณทำให้ใช้งานได้ผ่าน Firebase CLI

เชื่อมต่อแอพของคุณกับอินสแตนซ์ฐานข้อมูลหลายตัว

ใช้การอ้างอิงฐานข้อมูลเพื่อเข้าถึงข้อมูลที่จัดเก็บไว้ในอินสแตนซ์ฐานข้อมูลรอง คุณสามารถรับข้อมูลอ้างอิงสำหรับอินสแตนซ์ฐานข้อมูลเฉพาะโดย URL หรือแอพ หากคุณไม่ระบุ URL คุณจะได้รับข้อมูลอ้างอิงสำหรับอินสแตนซ์ฐานข้อมูลเริ่มต้นของแอป

เว็บรุ่น 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);

เว็บรุ่น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);
Swift
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// รับเช่นฐานข้อมูลรองตาม URL var Ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com") .reference()
วัตถุประสงค์-C
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// รับเช่นฐานข้อมูลรองตาม URL @property (แข็งแรง nonatomic) FIRDatabaseReference * เตะ; self.ref = [[ฐานข้อมูล FIRDatabaseWithURL:@"https://testapp-1234.firebaseio.com"] อ้างอิง];

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

คอตลิน+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

ใช้ --instance ตัวเลือก เพื่อระบุฐานข้อมูลเรียลไทม์ Firebase คุณต้องการใช้คำสั่ง Firebase CLI ไป ตัวอย่างเช่นใช้คำสั่งต่อไปในการทำงานรวมข้อมูลเช่นฐานข้อมูลชื่อ my-example-shard.firebaseio.com :

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

เพิ่มประสิทธิภาพการเชื่อมต่อในแต่ละฐานข้อมูล

หากไคลเอนต์แต่ละรายจำเป็นต้องเชื่อมต่อกับฐานข้อมูลหลาย ๆ ฐานข้อมูลในระหว่างเซสชัน คุณสามารถลดจำนวนการเชื่อมต่อพร้อมกันกับอินสแตนซ์ฐานข้อมูลแต่ละรายการได้โดยการเชื่อมต่อกับแต่ละอินสแตนซ์ฐานข้อมูลให้นานเท่าที่จำเป็น

รับคำแนะนำเพิ่มเติม

หากคุณต้องการความช่วยเหลือเพิ่มเติม sharding ข้อมูลของคุณในกรณีฐานข้อมูลหลายยื่นมือออกไปผู้เชี่ยวชาญ Firebase ของเรา ช่องหย่อน หรือบน กองมากเกิน