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