android - leer - Anidar estrellas en la base de datos de Firebase
query firebase android (1)
Creo que la base de datos de Firebase es muy útil, pero noté algo que me preocupa un poco.
Me refiero a que en este ejemplo el usuario puede asignar una estrella a la publicación, algo así como "Me gusta" en Facebook. En la muestra proporcionada, anidaron estrellas en publicaciones, por lo que tenemos un objeto de muestra como este:
"post_id" : {
"author": "username",
"body": "Some content",
"starCount": 1
"stars" : {
"user_id_who_gave_star" : "true"
}
"title": "Some title",
"uid": "author_id"
}
Dicha solución tiene muchas ventajas, como por ejemplo, podemos verificar si ya hemos dado la estrella y ocultar o cambiar el ícono, o podemos hacer una transacción para cambiar "starCount" y agregar el siguiente valor a "estrellas".
Pero el problema es cuando tenemos una gran aplicación y 1000 usuarios dieron estrella, por lo que cada vez que descargamos datos de publicaciones, descargamos 1000 usuarios que pueden no ser la mejor solución.
Pregunta
Mi pregunta es, ¿cuál es el mejor enfoque para esas aplicaciones y que alguien haya probado cómo funciona Firebase en esta situación?
firebaser aquí
Al escribir los ejemplos para nuestra documentación, siempre debemos equilibrar la necesidad de tener suficiente contexto, mantener el ejemplo lo suficientemente pequeño y seguir nuestras mejores prácticas.
De hecho, este es uno de los casos en que violamos una de nuestras mejores prácticas "datos que no anidan". Como dijiste: esto significa que un usuario que descarga una publicación obtiene todos los UID de usuarios a los que les gustó esa publicación.
A medida que el uso de la aplicación escala, eso puede convertirse en una preocupación. Si ese es el caso para su aplicación, debe modelar los "usuarios que votaron por correo ascendente" como un nodo de nivel superior separado:
"posts": {
"post_id" : {
"author": "username",
"body": "Some content",
"starCount": 1
"title": "Some title",
"uid": "author_id"
}
},
"upvotes": {
"post_id" : {
"user_id_who_gave_star" : "true"
}
}