La trampa del JOIN en Firestore

Te enfrentas a un problema común de Firestore. Tu función de Firebase lanza un error de tamaño máximo de lote (maximum batch size error). Necesitas unir pedidos y clientes para un panel de control. Normalmente duplicas datos para solucionar esto. Pero ahora tus datos están desactualizados e inconsistentes.

Google anunció la Pipelines API para resolver esto. Permite realizar operaciones de JOIN entre colecciones sin duplicar datos. Algunos desarrolladores informan tiempos de consulta rápidos en pruebas pequeñas.

Pasé una semana probando esta API bajo una carga pesada. Esto es lo que la documentación no te dice.

  1. Costos elevados Cada ejecución de pipeline lee de todas las colecciones involucradas. Un JOIN entre dos colecciones te factura lecturas en ambas. Si unes dos colecciones de 50,000 documentos, tus costos escalan de forma deficiente. No es un costo lineal simple.

  2. Límites de rendimiento En mis pruebas, un pipeline contra 10,000 documentos tardó 380 ms. Cuando probé con 100,000 documentos, la consulta agotó el tiempo de espera a los 30 segundos. No estás solucionando el problema. Solo estás convirtiendo un error de lote en un error de tiempo de espera.

  3. Problemas de arranque en frío (Cold Start) Los pipelines crean un contexto de ejecución separado. En entornos serverless como Cloud Functions, esto añade entre 2 y 4 segundos de retraso. Tus usuarios pensarán que tu aplicación es lenta.

La Pipelines API es una herramienta para prototipado o colecciones pequeñas de menos de 5,000 documentos. No es un reemplazo para una base de datos relacional. Google ofrece esto para ayudarte a permanecer en el ecosistema de Firebase en lugar de mudarte a PostgreSQL o Spanner.

Si usas Pipelines, sigue estas reglas:

• Audita el tamaño de tu colección. Si una colección supera los 20,000 documentos, calcula primero el costo del JOIN. • Limita la complejidad. Un JOIN a través de tres o más colecciones es una mala señal. • Realiza un seguimiento semanal de los costos de lectura. Las lecturas de Pipeline aparecen de forma distinta en tu factura. • Mantén tus datos desnormalizados. Usa Pipelines como un complemento, no como un reemplazo total. • Prueba con tráfico real. Los benchmarks en colecciones inactivas no reflejan la realidad de producción.

No uses un parche para evitar una decisión arquitectónica real.

¿Cómo manejas las relaciones en Firestore? ¿Usas desnormalización o joins en el lado del cliente? Cuéntame en los comentarios.

Fuente: https://dev.to/xu_xu_b2179aa8fc958d531d1/the-firestore-join-trap-what-googles-new-pipelines-api-costs-you-that-nobodys-talking-about-an7