Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

206
Visualizações
Firestore: lectura de documentos con 11 contadores dentro de transacciones

INTRODUCCIÓN

Tengo el siguiente esquema en mi aplicación

 / users/ user1/ username: "mike", totalFollowers: 500190, lastPosts: { post1: { images: [], totalLikes: 191200, date: ... }, post2: { images: [], totalLikes: 71137, date: ... }, ... post10: { images: [], totalLikes: 59301, date: ... } } posts/ user1/ userPosts/ post1/ images: [], totalLikes: 191200, date: ... ... post637/ images: [], totalLikes: 15029, date: ...

como puede ver, estoy desnormalizando algunos datos, las últimas 10 publicaciones de usuarios. Entonces, cuando un usuario carga una publicación, tengo que ejecutar una transacción, de la siguiente manera:

 function uploadPost(postId, postOwnerId) { const postId = uuidv4(); const postsRef = firestore .collection("posts") .doc(postOwnerId) .collection("userPosts") .doc(postId); const userRef = firestore.collection("users").doc(postOwnerId); return firestore.runTransaction(async (transaction) => { // Get the post owner data const postOwnerData = await getUserData(postOwnerId, transaction); ... }

solo para:

 1. Delete the current oldest post from the user's lastPosts map 2. Add the new post to it

Además, cuando a un usuario le gusta una publicación, también necesitaré una transacción, porque será necesario:

 1. Read the user's lastPosts map to check if it contains the liked post 2. Synchronize the lastPosts' post with the post doc's totalLikes

PROBLEMA

Tengo miedo de no ser escalable en absoluto. Como puede ver, cuando cargue o le guste una publicación, tendré que leer el documento del usuario para obtener el campo lastPosts más actualizado. Pero... como no estoy usando contadores distribuidos para totalLikes y totalFollowers (me parece demasiado caro), creo que si, por ejemplo, 5 de los 11 contadores que tiene el documento se actualizan varias veces en un período corto (5 segundos), mis transacciones fallarán.

¿Es correcto? ¿Debo evitar la desnormalización de las últimas publicaciones para obtener una buena escalabilidad?

Nota: Solo estoy almacenando las últimas 10 publicaciones porque mi interfaz de usuario pagina las publicaciones de los usuarios de 10 en 10, y tener las publicaciones de los usuarios más recientes adjuntas al documento del usuario me ahorraría 10 lecturas cada vez que alguien visita su perfil.

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda