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

140
Visualizações
Cómo manejar a los usuarios simultáneamente que intentan llenar "ranuras" limitadas en la base de datos en tiempo real de Firebase

Tengo una situación en la que los usuarios buscan un "elemento" para que haya "ranuras" disponibles. Los usuarios intentarán llenar un espacio si es posible. Soy nuevo en firebase y estoy bastante seguro de que la forma en que tengo las cosas configuradas no escalará. Funciona solo conmigo probando, pero si hay muchos usuarios, creo que se romperá.

Actualmente está implementado así:

El "elemento" es un objeto en firebase realtime db con un observador establecido en él. Cuando el observador dispara, verifica si el objeto "ranuras" dentro de ese elemento está lleno de usuarios o no. Si está lleno, no debería pasar nada. Si no está lleno, la identificación del usuario se coloca dentro del objeto "ranuras".

La plenitud se determina comparando la longitud actual del objeto "ranuras" con una propiedad/entero "maxLength" adjunto al elemento.

Desafortunadamente, estoy bastante seguro de que lo que sucederá es que todos los usuarios intentarán llenar los espacios al mismo tiempo, y todos detectarán que el elemento no está lleno antes de que alguno de ellos realmente llene los espacios. Por lo tanto, accidentalmente tendré más usuarios en el objeto "ranuras" que el número en "maxLength". ¿Cómo puedo garantizar que eso no sucederá?

Pseudocódigo de lo que tengo (reaccionar nativo):

 const item = firebase.database().ref(`item/`); //the item const slots = firebase.database().ref(`item/slots`); //slots within the item item.on('value', (snapshot) => { let data = snapshot.val(); let keys = data.slots ? Object.keys(data.slots) : []; let full = keys.length >= data.maxLength ? true : false; if (!full) { slots.update({ [user.uid]: true }); } });

El ejemplo de base de datos en tiempo real se parece más o menos a:

 item { maxLength: 10, slots: { rj6h5f7sd88s7f6sdfs7f7: true, //user d466df8dfj8dfjd3nkvmdd: true, //another user // etc. } }
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