จัดทำดัชนีข้อมูลของคุณ

Firebase อนุญาตให้คุณทำการค้นหาเฉพาะกิจกับข้อมูลของคุณโดยใช้คีย์ย่อยตามอำเภอใจ ถ้าคุณรู้ล่วงหน้าว่าดัชนีของคุณจะเป็นคุณสามารถกำหนดให้พวกเขาผ่านทาง .indexOn กฎของคุณในฐานข้อมูลเรียลไทม์ Firebase กฎการรักษาความปลอดภัยในการปรับปรุงประสิทธิภาพการค้นหา

การกำหนดดัชนีข้อมูล

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

การจัดทำดัชนีด้วย orderByChild

วิธีที่ง่ายที่สุดในการอธิบายสิ่งนี้คือผ่านตัวอย่าง พวกเราทุกคนที่ Firebase ต่างเห็นพ้องกันว่าไดโนเสาร์นั้นเจ๋งมาก นี่เป็นตัวอย่างจากฐานข้อมูลตัวอย่างข้อเท็จจริงเกี่ยวกับไดโนเสาร์ เราจะใช้มันเพื่ออธิบายวิธีการ .indexOn ทำงานร่วมกับ orderByChild()

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

ลองนึกภาพว่าในแอปของเรา เรามักจะต้องเรียงลำดับไดโนเสาร์ตามชื่อ ส่วนสูง และความยาว แต่จะไม่เรียงตามน้ำหนัก เราสามารถปรับปรุงประสิทธิภาพการสืบค้นข้อมูลของเราได้โดยแจ้งข้อมูลนี้แก่ Firebase เนื่องจากชื่อของไดโนเสาร์เป็นเพียงกุญแจสำคัญ Firebase จึงปรับการค้นหาตามชื่อไดโนเสาร์ให้เหมาะสมแล้ว เนื่องจากนี่คือกุญแจสำคัญของบันทึก เราสามารถใช้ .indexOn จะบอก Firebase แบบสอบถามเพิ่มประสิทธิภาพสำหรับความสูงและระยะเวลาเช่นกัน:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

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

การสร้างดัชนีด้วย orderByValue

ในตัวอย่างนี้เราจะแสดงให้เห็นว่า .indexOn ทำงานร่วมกับ orderByValue() สมมติว่าเรากำลังสร้างลีดเดอร์บอร์ดของคะแนนกีฬาไดโนด้วยข้อมูลต่อไปนี้:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

เนื่องจากเรากำลังใช้ orderByValue () เพื่อสร้างลีดเดอร์เราสามารถเพิ่มประสิทธิภาพการค้นหาของเราโดยการเพิ่ม .value กฎที่เรา /scores โหนด:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}