indexOn ทำงานอย่างไรในฐานข้อมูล firebase

ฐานข้อมูลของฉันมีลักษณะดังนี้:

"users": {
    "2387653478": {
        "score": 1000,
        ...
    },
    "8456756547": {
        "score": 2000,
        ...
    },
    ...
}

ฉันต้องการเรียงลำดับการจัดอันดับแบบง่ายๆ ตาม "คะแนน" แต่ฉันมีผู้ใช้จำนวนมาก และฉันควรเพิ่ม indexOn ในกฎเพื่อปรับให้เหมาะสม:

"rules": {
    "users": {
        "$user": {
            ".read": "auth != null",
            ".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
            ".indexOn": ["score"]
        }
    }
}

การเพิ่มประสิทธิภาพทำงานได้ 100% เมื่อเพิ่ม indexOn ในกฎหรือไม่ แล้วผู้ใช้ที่สร้างขึ้นก่อนที่จะเพิ่ม indexOn ล่ะ?

ขอบคุณล่วงหน้า!


person Joyco Games    schedule 03.04.2017    source แหล่งที่มา


คำตอบ (1)


เมื่อคุณอัปเดตไฟล์กฎ (ไม่ว่าจะผ่านทาง คอนโซลฐานข้อมูล Firebase หรือผ่าน CLI) ฐานข้อมูล Firebase (ใหม่) จะสร้างดัชนีทั้งหมดที่กำหนดไว้ในกฎ โดยจะทำเช่นนี้กับข้อมูลที่มีอยู่ทั้งหมด จากนั้นจึงอัปเดตดัชนีเหล่านั้นต่อไปสำหรับการเปลี่ยนแปลงข้อมูลใดๆ

แต่คุณกำหนดดัชนีผิดระดับ คุณต้องการอนุญาตการสืบค้นโหนด users ในคะแนนของผู้ใช้แต่ละราย ดังนั้นคุณต้องกำหนดดัชนีบน users:

"rules": {
    "users": {
        ".read": "auth != null",
        ".indexOn": ["score"]
        "$user": {
            ".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user",
        }
    }
}

คุณจะสังเกตเห็นว่าฉันย้ายกฎ .read ของคุณไปที่ users ด้วย เพราะหากไม่มีสิ่งนั้น คุณจะไม่มีสิทธิ์อ่านบน /users และไม่สามารถสืบค้นได้

person Frank van Puffelen    schedule 03.04.2017
comment
ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว! กระบวนการพักผ่อนหย่อนใจจะใช้เวลาไม่กี่วินาที จะมีปัญหาหรือไม่หากฐานข้อมูลได้รับคำขอแก้ไขจากผู้ใช้ในขณะนั้น? - person Joyco Games; 03.04.2017
comment
หากคุณประสบปัญหา โปรดระบุขั้นตอนที่ทำให้เกิดปัญหาเหล่านั้นซ้ำ - person Frank van Puffelen; 03.04.2017
comment
ฉันขอให้ป้องกันปัญหาจากผู้ใช้ปัจจุบัน ไม่มีปัญหาในขณะนี้ ขอบคุณ! - person Joyco Games; 04.04.2017
comment
จะเกิดอะไรขึ้นถ้าคุณมี [score] ซ้อนกันมากกว่าหนึ่งครั้งในสถานที่ต่างๆ ภายในผู้ใช้? FB รู้ได้อย่างไรว่าดัชนีใดอยู่ในตำแหน่งใด - person GuyC; 31.08.2017
comment
แต่ละโหนดย่อยของ users สามารถมีคุณสมบัติย่อย score ได้เพียงรายการเดียวเท่านั้น นั่นคือค่าดัชนี Firebase ที่มีกฎข้างต้น - person Frank van Puffelen; 31.08.2017