Pergunta

O que são boas maneiras de simultaneidade de entrada do usuário pega?

Como as respostas para esta questão já descarta bloqueio de banco de dados , como você lida com entradas de usuários simultâneos em geral?

está travando sempre uma má idéia, mesmo que não é implementado por bloqueio de linha? Existem melhores práticas que não são o uso dependente caso? Quais foram suas experiências com suas estratégias?

EDIT: Estou ciente de lidar com a concorrência em um nível de dados por meio de operações: Se dois usuários simultanteously desencadear uma mudança de dados complexos, a transação vai lidar com isso.

Mas eu estou interessado em manipulação ou pelo menos reagir a eles sobre a camada de GUI. E se a alteração de dados é parte de uma operação demorada com interação do usuário?

digamos dois ou mais usuários de Let está editando o mesmo arquivo através de uma interface web. Em algum momento um dos usuários bate no botão Salvar. O que happes aos outros usuários?

  • Será que eles vão ser notificado e / ou forçado a recarga? Ou será que o eventualmente, substituir as alterações do primeiro usuário?
  • Shall I bloquear o arquivo e impedir que vários usuários editando o mesmo arquivo?
  • Posso colocar todo o processo de edição em uma transação (Eu duvido, mas quem sabe ...)

Qual é a melhor maneira de lidar com isso e situações semelhantes? Existem outras estratégias?

Foi útil?

Solução

Melhor estratégia depende do que deve acontecer a partir de (negócio) perspectiva do processo - também questões importantes são o que os usuários normalmente esperar eo que iria surpreendê-los menos, e, é claro, se é viável para implementar o que eles esperam.

Seu exemplo de editar um arquivo sobre web pode ser dividido da seguinte forma:

  1. cheques user1 out / recebe / download / abre arquivo v0
  2. cheques user2 out / recebe / download / abre arquivo v0
  3. user1 faz alterações à sua cópia do arquivo v0
  4. user2 faz alterações à sua cópia do arquivo v0
  5. user1 salva versão do arquivo v1 ao servidor
  6. user2 salva versão do arquivo v2 ao servidor

Note, que é típico para aplicações web, e na verdade para programas normais de escritório desktop, também, que os mais recentes mudanças que o usuário só torna se tornam disponíveis (para os outros) depois de salvar-los, o que significa que não é um caso de ter digitação colega aparecer no topo de sua no cópia do arquivo que você está editando.

A abordagem clássica de controle de versão para isso é que para nada muda user1, em comparação com a edição de desktop Normal / processo de poupança.

Para user2, no entanto, quando ele tenta salvar v2 para o servidor, o aplicativo deve verificar se houve quaisquer alterações ao arquivo da versão v0 desde usuários o download do mesmo. Uma vez que este é o caso, um sistema de controle de versão normalmente mostrar-lhe as duas versões (V1 e V2) no lado da tela a lado, e deixá-lo misturar-los e salvar a versão resultante (v3) para o servidor.

Para arquivos de texto existem uma série de ferramentas e sistemas, tanto em Unix e Windows que tentar automatizar o processo de modo que se as áreas de arquivo editado não se sobrepõem, as alterações são mescladas automaticamente.

A alternativa é bloqueio de arquivos para user2 até user1 tenha terminado de editá-lo.

Pondo edição em operação normalmente é de nenhuma relevância. É a operação final que tenta substituir ficheiro existente com a nova versão, que é importante. Edição acontece de forma independente em cada estação de trabalho usuários e não toca o servidor até o último ponto (economia).


Seu exemplo é, aliás, bem diferente de outra situação como a reserva de bilhetes de avião ou reservar uma consulta com um médico.

Quando a reserva de bilhetes, há um número limitado de assentos em um avião. É possível, devido ao fato de que a transferência de dados não é realmente instanteous para mais de uma pessoa para colocar uma reserva para o mesmo último assento em um avião.

Portanto, reserva deve ser pelo menos um processo de 2 etapas:

  1. mostra o sistema slots livres;
  2. user pede um dos slots livres (S1);
  3. sistema informa usuário se o slot é realmente ainda está livre, e se assim for, reservas para você.
  4. usuário conclui reserva.

O passo "realmente ainda livre" é porque a informação sobre usuário visualiza páginas web normalmente não é atualizada em tempo real, de modo que entre os passos 1 e 2, é possível que outro usuário solicitou o slot livre.

Outras dicas

Procure como lidar com "operações" em qualquer API idioma / banco de dados você está usando. Se você projetar estes corretamente ele vai lidar com isso para você.

E para entender a teoria, eu recomendo Sistemas de Couloris et al Distribuído mas existem muitos outros bons livros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top