Nous ne pouvons pas sérialiser les enregistrements car des millions d'utilisateurs s'enregistrent en même temps. Des enregistrements parallèles doivent avoir lieu.
Disons que la base de données ne contient pas le nom d'utilisateur 'user1'. Lorsque deux utilisateurs essaient de s'enregistrer en même temps avec 'user1', il l'acceptera. Mais cela causera plus tard des problèmes. Cela ne devrait pas arriver.
Je cherche une solution logique. Rien de précis. Juste une idée pour résoudre ce problème.
database
multithreading
Addzy K
la source
la source
Réponses:
Pourquoi l'accepterait-il? Il est simple d'appliquer une contrainte unique, d'utiliser le nom d'utilisateur comme clé primaire ou d'exécuter simplement le code d'application d'intégration dans une transaction.
Vous devez absolument pouvoir utiliser une transaction de base de données pour utiliser la base de données pour éviter que cela ne se produise. Sinon, aucune application ne serait en mesure de conserver des invariants dans les données de la base de données.
En termes de mise à l'échelle, les bases de données ont déjà inventé les technologies dont vous avez besoin, comme divers modes de verrouillage selon exactement le type de cohérence dont vous avez besoin, des bases de données distribuées pour plusieurs serveurs de bases de données, etc.
la source
Il existe une solution standard à cela. Créez plusieurs employés pour effectuer les enregistrements. Chaque demande a un hachage appliqué au nom d'utilisateur, et le hachage détermine quel travailleur traite la demande. De cette façon, il n'est pas possible de traiter simultanément deux demandes pour le même nom d'utilisateur.
Pour ce type de volume de demandes, envisagez un magasin de valeurs de clé distribué tel que risque au lieu d'une base de données tout comme magasin de données.
la source
C'est un problème ?
Laisser deux utilisateurs terminer leur inscription avec un nom d'utilisateur non unique n'est pas acceptable si le nom d'utilisateur (et non l'e-mail de l'utilisateur) est utilisé pour la connexion.
Si le nom d'utilisateur n'est pas utilisé pour l'authentification, vous pouvez utiliser un processus d'arrière-plan pour identifier et signaler les doublons (par exemple en fonction de l'horodatage) et forcer l'utilisateur à changer son nom d'utilisateur lors de la prochaine connexion.
Oui c'est un problème
Comme vous le demandez, je suppose que le nom d'utilisateur est censé être un identifiant unique. Les approches suivantes pourraient être utilisées:
la source
Reconsidérez ce que vous pensez comme l'identifiant unique d'un utilisateur. Chaque utilisateur possède déjà une adresse e-mail unique, ce problème a donc déjà été résolu pour vous. Bien sûr, cela signifie que plusieurs utilisateurs pourront enregistrer le même nom, comme "Mike Nakis". Y a-t-il un problème avec ça? Êtes-vous sûr? Ce n'est pas un problème pour Facebook, par exemple. Il existe plusieurs utilisateurs de Facebook appelés "Mike Nakis". Regardez la page de connexion facebook: elle demande "email ou téléphone" et "mot de passe".
la source
Avec des millions d'utilisateurs s'inscrivant en même temps, vous utilisez simplement 26 x 26 serveurs d'enregistrement, un pour les utilisateurs commençant par aa, un pour les utilisateurs commençant par ab, etc. Par conséquent, seuls des milliers d'utilisateurs s'enregistrent simultanément sur chaque serveur. Si vous ne pouvez toujours pas gérer cela, utilisez des serveurs 26 x 26 x 26.
la source