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

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"
    }
  }
}