Así que tengo un caso de uso bastante simple:
Tengo una aplicación simple con preguntas (almacenadas en Firestore) y quiero que los usuarios puedan filtrar las preguntas antes de comenzar un ejercicio.
En este momento son solo 100 preguntas (pero eventualmente podría crecer a más de 1000) Algunos días tengo más de 100 usuarios (pero eventualmente podría crecer a más de 1000)
Para filtrar las preguntas, recibo todas las preguntas de firestore:
const fetchAllQuestions = async (): Promise<Question[]> => { const q = query(collection(fireStore, "questions")); const querySnapshot = await getDocs(q); const questions: any = []; querySnapshot.forEach((doc) => questions.push(doc.data())); return questions as Question[]; };y luego aplico el filtro.
Pero este es un documento leído por usuario y pregunta, por lo que 100 preguntas y 100 usuarios se convierten en 10000 lecturas de documentos, consumiendo la cuota en solo 5 días. Y ese es el mejor de los casos sin recargas de página o invalidaciones de caché.
Y menos viable aún si la página crece en contenido y uso.
Dado que "filtrar solo un subconjunto de preguntas" no es una opción, veo algunas formas de evitar esto:
a) Almacenar en caché el resultado en el almacenamiento local, esto cubriría las recargas de página y los visitantes que regresan, pero necesitaría invalidar la clave de almacenamiento al actualizar las preguntas, y aún alcanzaría la cotización después de 500 visitantes únicos.
Además, se siente como un "truco".
b) Simplemente ponga TODAS las preguntas en un solo documento, o córtelas y tenga 100 por documento o algo similar. Básicamente, esto resolvería el problema, ya que de todos modos no busco preguntas individuales. Cargar preguntas sería un poco más engorroso ya que necesito buscar todo el grupo, luego actualizar la pregunta y luego cargar todo como un gran documento.
Aún así, también se siente un poco como un "truco".
Entonces, no puedo evitar sentir que hay algo que me estoy perdiendo aquí, ¿alguna forma "idiomática" de Firestore de manejar este caso de uso que debo haber perdido?
Quizás deberías