A Armadilha do JOIN no Firestore

Você enfrenta um problema comum no Firestore. Sua função Firebase lança um erro de tamanho máximo de lote (batch size). Você precisa fazer o JOIN de pedidos e clientes para um dashboard. Geralmente, você duplica dados para corrigir isso. Mas agora seus dados estão desatualizados e inconsistentes.

O Google anunciou a Pipelines API para resolver isso. Ela permite operações de JOIN entre coleções sem duplicar dados. Alguns desenvolvedores relatam tempos de consulta rápidos em testes pequenos.

Passei uma semana testando esta API sob carga pesada. Aqui está o que a documentação não te diz.

  1. Custos Elevados Cada execução de pipeline lê de todas as coleções envolvidas. Um JOIN entre duas coleções cobra por leituras em ambas. Se você fizer um JOIN entre duas coleções de 50.000 documentos, seus custos escalarão mal. Não é um custo linear simples.

  2. Limites de Desempenho Nos meus testes, um pipeline contra 10.000 documentos levou 380ms. Quando testei 100.000 documentos, a consulta deu timeout em 30 segundos. Você não está resolvendo o problema. Você está apenas transformando um erro de lote em um erro de timeout.

  3. Problemas de Cold Start Pipelines criam um contexto de execução separado. Em ambientes serverless como Cloud Functions, isso adiciona de 2 a 4 segundos de atraso. Seus usuários acharão que seu aplicativo está lento.

A Pipelines API é uma ferramenta para prototipagem ou coleções pequenas com menos de 5.000 documentos. Não é um substituto para um banco de dados relacional. O Google oferece isso para ajudar você a permanecer no ecossistema Firebase em vez de mudar para PostgreSQL ou Spanner.

Se você usar Pipelines, siga estas regras:

• Audite o tamanho da sua coleção. Se uma coleção exceder 20.000 documentos, calcule o custo do JOIN primeiro. • Limite a complexidade. Um JOIN entre três ou mais coleções é um mau sinal. • Acompanhe os custos de leitura semanalmente. As leituras de Pipeline aparecem de forma diferente na sua fatura. • Mantenha seus dados desnormalizados. Use Pipelines como um complemento, não como um substituto total. • Teste com tráfego real. Benchmarks em coleções silenciosas não refletem a realidade da produção.

Não use um curativo para evitar uma decisão arquitetural real.

Como você lida com relacionamentos no Firestore? Você usa desnormalização ou joins no lado do cliente? Conte-me nos comentários.

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