Não podemos serializar registros, pois existem milhões de usuários registrando ao mesmo tempo. Registros paralelos precisam acontecer.
Digamos que o banco de dados não contenha o nome de usuário 'user1'. Quando dois usuários tentam se registrar no mesmo momento com 'user1', ele aceita. Mas depois causará problemas. Isso não deveria acontecer.
Estou procurando uma solução lógica. Não é nada específico. Apenas uma idéia para resolver isso.
database
multithreading
Addzy K
fonte
fonte
Respostas:
Por que aceitaria isso? É simples aplicar uma restrição exclusiva, usar o nome de usuário como chave primária ou simplesmente executar o código do aplicativo de check-in dentro de uma transação.
Você absolutamente deve poder usar uma transação de banco de dados para usá-lo para impedir que isso ocorra. Caso contrário, nenhum aplicativo seria capaz de manter invariantes nos dados do banco de dados.
Em termos de escala, os bancos de dados já inventaram as tecnologias necessárias, como vários modos de bloqueio, dependendo exatamente de que tipo de consistência você precisa, bancos de dados distribuídos para vários servidores de banco de dados, etc.
fonte
Existe uma solução padrão para isso. Crie vários trabalhadores para fazer os registros. Cada solicitação possui um hash aplicado ao nome de usuário e o hash determina qual trabalhador processa a solicitação. Dessa forma, não é possível processar duas solicitações para o mesmo nome de usuário simultaneamente.
Para esse tipo de volume de solicitações, considere um armazenamento de valor de chave distribuído, como risco, em vez de um banco de dados all como o armazenamento de dados.
fonte
Isso é um problema ?
Permitir que dois usuários concluam seu registro com um nome de usuário não exclusivo não é aceitável se o nome de usuário (e não o email do usuário) for usado para o logon.
Se o nome de usuário não for usado para autenticação, você poderá usar algum processo em segundo plano para identificar e sinalizar as duplas (por exemplo, com base no carimbo de data / hora) e forçar o usuário a alterar seu nome de usuário no próximo logon
Sim é um problema
Como você está perguntando, suponho que o nome de usuário seja um ID exclusivo. As seguintes abordagens podem ser usadas:
fonte
Reconsidere o que você considera o identificador exclusivo de um usuário. Cada usuário já possui um endereço de email exclusivo, para que o problema já tenha sido resolvido para você. Obviamente, isso significa que vários usuários poderão registrar o mesmo nome, como "Mike Nakis". Existe algum problema com isso? Você tem certeza? Não é um problema para o facebook, por exemplo. Existem vários usuários do Facebook chamados "Mike Nakis". Veja a página de login do facebook: ele pede "email ou telefone" e "senha".
fonte
Com milhões de usuários registrados ao mesmo tempo, você apenas usa servidores de registro 26 x 26, um para usuários começando com aa, outro para usuários começando com ab e assim por diante. Como resultado, existem apenas milhares de usuários registrados em cada servidor ao mesmo tempo. Se você ainda não conseguir lidar com isso, use servidores 26 x 26 x 26.
fonte