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

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