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