Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. ใน Firebase คอนโซลไปที่แท็บ Data ใน การพัฒนา> ฐานข้อมูล ส่วน
  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 ของเรา ช่องหย่อน หรือบน กองมากเกิน