es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Google Firestore: Obtener eficientemente un único documento y realizar una consulta puntual dentro de una subcolección.

Supongamos que estoy diseñando una nueva base de datos Firestore. Supongamos que me gusta la idea de un diseño jerárquico y, como ejemplo inventado, cada Año tiene una secuencia de hijos Semanas, cada una con Días.

¿Cuál es la forma más eficiente en términos de rendimiento para obtener un único documento para hoy? Es decir, 2021-W51-Jueves.

Se permite que las respuestas incluyan cambios en el modelo, por ejemplo, “denormalizando” el modelo del día para que incluya los campos year, week y dayName (y consultándolos).

En caso contrario, la forma más rápida puede ser una simple referencia de documento, como:

C#
DocumentReference ref = db
.Collection("years").Document("2021")
.Collection("weeks").Document("51")
.Collection("days").Document("Thursday");

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Si desea recuperar un solo documento para hoy utilizando el diseño jerárquico que mencionó, la forma más eficiente sería desnormalizar el modelo de día de manera que incluya los campos year, week y dayName. Esto le permitiría consultar el documento específico que necesita con la menor cantidad de lecturas posibles.

    Por ejemplo, si desnormaliza su modelo de día para que se vea así:

    {
      "year": "2021",
      "week": "51",
      "dayName": "Thursday",
      ...
    }
    

    Podría consultar el documento que necesita con una sola lectura, de la siguiente manera:

    C#
    DocumentReference ref = db
    .Collection("days")
    .WhereEqualTo("year", "2021")
    .WhereEqualTo("week", "51")
    .WhereEqualTo("dayName", "Thursday")
    .Limit(1)
    .GetSnapshotAsync()
    .Result
    .Documents
    .FirstOrDefault();

    Este enfoque es más eficiente porque requiere solo una operación de lectura para recuperar el documento que necesita, en lugar de requerir múltiples lecturas para recorrer la jerarquía de colecciones Year, Week y Day.

Comments are closed.