Isso faz parte da pergunta da entrevista sobre o estacionamento, em que o candidato é solicitado a projetar o sistema de estacionamento. Projetar entidades para estacionamentos é um problema bastante discutido. Mas estou preso em uma parte em que temos que atribuir uma vaga de estacionamento a um veículo.
Digamos que estamos implementando o problema do estacionamento com armazenamento de dados externo. E há muitas solicitações simultâneas, solicitando vaga de estacionamento. A implementação básica é,
Crie uma linha de banco de dados separada para cada vaga de estacionamento, com disponibilidade de coluna verdadeiro/falso.
Sempre que um veículo chegar, encontre um slot disponível (digamos o ID do slot X)
Atualize a disponibilidade do banco de dados como falso com bloqueio otimista (ou seja, UPDATE se slotid=X e disponibilidade =false)
A abordagem acima não funcionará bem em cenários de alta simultaneidade, uma vez que o mesmo slot poderia ser alocado para vários veículos e a etapa 3 falharia para todos esses veículos e teríamos que tentar novamente a partir da etapa 2.
Para processar isso de maneira ideal, devo mesclar as etapas 2, 3 e descarregar a atribuição para o próprio banco de dados. E o novo fluxo deve ficar como abaixo
- Crie uma linha de banco de dados separada para cada vaga de estacionamento, com disponibilidade de coluna verdadeiro/falso.
- Sempre que um veículo chega, acione uma consulta sql para encontrar uma linha e atualize a disponibilidade para falso. E devolver o slotid ao veículo?
É possível fazer isso em bancos de dados SQL? Existem outras abordagens para alcançar essa funcionalidade.
Dependendo do seu SGBD, você pode fazer algo assim:
Outros SGBDs terão outras maneiras de fazer a mesma coisa.
Na pior das hipóteses, você terá que fazer isso da maneira mais difícil, mas isso pode envolver o uso de um valor intermediário para disponibilidade: