Firebase ช่วยให้คุณทำการค้นหาเฉพาะกิจในข้อมูลได้โดยใช้คีย์ย่อยที่กำหนดเอง หากทราบล่วงหน้าว่าดัชนีจะเป็นอะไร คุณสามารถกำหนดดัชนีผ่านกฎ .indexOn ในกฎความปลอดภัยของ Firebase Realtime Database เพื่อปรับปรุงประสิทธิภาพการค้นหา
การกำหนดดัชนีข้อมูล
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"
}
}
}