No podemos serializar registros ya que hay millones de usuarios que se registran al mismo tiempo. Se deben realizar registros paralelos.
Digamos que la base de datos no contiene el nombre de usuario 'usuario1'. Cuando dos usuarios intentan registrarse en el mismo momento con 'user1', lo aceptará. Pero luego causará problemas. Esto no debería suceder.
Estoy buscando una solución lógica. No hay nada específico. Solo una idea para resolver esto.
database
multithreading
Addzy K
fuente
fuente
Respuestas:
¿Por qué lo aceptaría? Es simple aplicar una restricción única, usar el nombre de usuario como clave principal o simplemente ejecutar el cheque en el código de la aplicación dentro de una transacción.
Absolutamente debería poder usar una transacción de base de datos para usar la base de datos para evitar que esto ocurra. De lo contrario, ninguna aplicación podría mantener invariantes en los datos de la base de datos.
En términos de escala, las bases de datos ya inventaron las tecnologías que necesita, como varios modos de bloqueo dependiendo de exactamente qué tipo de consistencia necesita, bases de datos distribuidas para múltiples servidores de bases de datos, etc.
fuente
Hay una solución estándar para esto. Crear múltiples trabajadores para hacer los registros. Cada solicitud tiene un hash aplicado al nombre de usuario, y el hash determina qué trabajador procesa la solicitud. De esta manera, no hay forma posible de que dos solicitudes para el mismo nombre de usuario puedan procesarse simultáneamente.
Para este tipo de volumen de solicitudes, considere un almacén de valores clave distribuido, como el riesgo, en lugar de una base de datos completa como el almacén de datos.
fuente
Es un problema ?
Permitir que dos usuarios finalicen su registro con un nombre de usuario no único no es aceptable si se utiliza el nombre de usuario (y no el correo electrónico del usuario) para el inicio de sesión.
Si el nombre de usuario no se usa para la autenticación, puede usar un proceso en segundo plano para identificar y marcar los dobles (por ejemplo, según la marca de tiempo) y obligar al usuario a cambiar su nombre de usuario en el próximo inicio de sesión
Si, es un problema
Como está preguntando, supongo que se supone que el nombre de usuario es una identificación única. Se pueden utilizar los siguientes enfoques:
fuente
Reconsidere lo que considera el identificador único para un usuario. Cada usuario ya tiene una dirección de correo electrónico única, por lo que ese problema ya está resuelto. Por supuesto, esto significa que múltiples usuarios podrán registrar el mismo nombre, como "Mike Nakis". ¿Hay algún problema con eso? ¿Estás seguro? No es un problema para Facebook, por ejemplo. Existen múltiples usuarios de Facebook llamados "Mike Nakis". Mire la página de inicio de sesión de Facebook: pide "correo electrónico o teléfono" y "contraseña".
fuente
Con millones de usuarios que se registran al mismo tiempo, solo usa servidores de registro de 26 x 26, uno para usuarios que comienzan con aa, otro para usuarios que comienzan con ab y así sucesivamente. Como resultado, solo hay miles de usuarios que se registran en cada servidor al mismo tiempo. Si aún no puede manejar eso, use servidores de 26 x 26 x 26.
fuente