Bagaimana cara kerja indexOn di database firebase?

Basis data saya terlihat seperti berikut:

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

Saya ingin melakukan pengurutan peringkat sederhana berdasarkan "skor" tetapi saya memiliki banyak pengguna dan saya harus menambahkan indexOn dalam aturan untuk mengoptimalkan:

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

Apakah pengoptimalan 100% berfungsi hanya saat menambahkan aturan indexOn? Bagaimana dengan pengguna yang dibuat sebelum menambahkan indexOn?

Terima kasih sebelumnya!


person Joyco Games    schedule 03.04.2017    source sumber


Jawaban (1)


Saat Anda memperbarui file aturan (baik melalui Firebase Database console atau melalui CLI), Firebase Database (kembali) membuat semua indeks yang ditentukan dalam aturan. Hal ini dilakukan untuk semua data yang ada dan kemudian terus memperbarui indeks tersebut untuk setiap perubahan data.

Namun Anda telah menetapkan indeks pada level yang salah. Anda ingin mengizinkan kueri node users pada skor masing-masing pengguna. Jadi, Anda harus mendefinisikan indeks pada users:

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

Anda akan melihat bahwa saya juga memindahkan aturan .read Anda ke users. Karena tanpa itu, Anda tidak akan memiliki izin membaca di /users dan karenanya tidak dapat menanyakannya.

person Frank van Puffelen    schedule 03.04.2017
comment
Terima kasih atas balasan cepatnya! Proses rekreasi akan memakan waktu beberapa detik. Apakah akan ada masalah jika database menerima permintaan modifikasi pengguna pada saat itu? - person Joyco Games; 03.04.2017
comment
Jika Anda mengalami masalah, harap berikan langkah-langkah yang mereproduksi masalah tersebut. - person Frank van Puffelen; 03.04.2017
comment
Saya meminta untuk mencegah masalah dari pengguna saat ini. Tidak ada masalah saat ini. Terima kasih! - person Joyco Games; 04.04.2017
comment
Bagaimana jika Anda memiliki [skor] yang disarangkan lebih dari satu kali, di tempat berbeda di dalam pengguna? Bagaimana cara FB mengetahui di mana menempatkan indeks? - person GuyC; 31.08.2017
comment
Setiap node anak dari users hanya dapat memiliki satu properti anak score. Itulah nilai indeks Firebase dengan aturan di atas. - person Frank van Puffelen; 31.08.2017