หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

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

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

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

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

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

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

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

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

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

สร้าง "ชิ้นส่วนต้นแบบ"

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

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

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

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

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

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

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

หากคุณใช้ แผนการกำหนดราคาของ Blaze คุณสามารถสร้างอินสแตนซ์ฐานข้อมูลหลายอินสแตนซ์ในโครงการ Firebase เดียวกันได้

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

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

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

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

ตรวจสอบให้แน่ใจว่ากฎฐานข้อมูลแบบเรียลไทม์ของคุณอนุญาตให้เข้าถึงอินสแตนซ์ฐานข้อมูลแต่ละรายการในโครงการของคุณได้อย่างเหมาะสม แต่ละฐานข้อมูลจะมีชุดกฎของตัวเองซึ่งคุณสามารถแก้ไขและทำให้ใช้งานได้จากคอนโซล 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. รันคำสั่ง deploy:

      firebase deploy

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

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

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

เว็บ
// 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);
รวดเร็ว
// 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 (strong, nonatomic) FIRDatabaseReference * ref; self.ref = [[FIRDatabase databaseWithURL: @ "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 ตัวอย่างเช่นใช้คำสั่งต่อไปนี้เพื่อรัน profiler สำหรับอินสแตนซ์ฐานข้อมูลชื่อ my-example-shard.firebaseio.com :

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

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

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

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

หากคุณต้องการความช่วยเหลือเพิ่มเติมในการแบ่งข้อมูลของคุณในอินสแตนซ์ฐานข้อมูลหลาย ๆ อินสแตนซ์โปรดติดต่อผู้เชี่ยวชาญ Firebase ใน ช่องทาง Slack ของเราหรือที่ Stack Overflow