Tenemos un sistema en el que a los clientes se les asigna un producto por orden de llegada.Solución óptima para una gran cantidad de solicitudes en una tabla de base de datos
Nuestra tabla de productos contiene una clave principal incremento que se inició a cero, lo que utilizamos para realizar un seguimiento de la cantidad de productos que se han asignado es decir, un usuario se reserva un producto y se asigna 1, junto usuario obtiene 2, etc.
El problema es que potencialmente cientos de miles de usuarios accederán al sistema en cualquier momento. Todos los cuales golpearán esta mesa.
Como debemos asegurarnos de asignar un producto a cada cliente y realizar un seguimiento de la cantidad de productos asignados, utilizamos un bloqueo de fila para cada cliente que accede al sistema para asegurarnos de escribir en la mesa antes del próximo cliente golpea el sistema, es decir, haciendo cumplir la regla del primero llegado primero servido.
Nos preocupa el cuello de botella que es el tiempo de procesamiento de cada solicitud entrando en SQL Server 2008 Enterprise Edition y el bloqueo de fila.
No podemos usar varios servidores ya que necesitamos asegurar la integridad de la clave primaria, por lo que cualquier cosa que requiera replicación no funcionará.
¿Alguien sabe de alguna buena solución que sea particularmente eficiente en el manejo de un gran número de solicitudes en una tabla de base de datos?
Un poco más de información: La tabla en cuestión contiene esencialmente dos campos solamente: ID e ID de cliente. La solución es un regalo gratis de un millón de productos; de ahí la expectativa de una gran demanda y por qué el uso de la tecla principal creciente como clave tiene sentido para nosotros: una vez que la clave llega a un millón, no pueden registrarse más clientes. Además, los productos son todos diferentes, por lo que la asignación de la clave correcta es importante, p. los primeros 100 clientes ingresados reciben un producto de mayor valor que los siguientes 100, etc.
Gracias por cualquier ayuda.
¿Puede volver a etiquetar, incluya [sqlserver] y me puede decir la versión y edición, si edita su pregunta y nos dice que tiene 'SQL2008 Enterprise Edition', por ejemplo, podríamos ofrecer soluciones a medida, por ejemplo Table Partitioning está disponible en SQL 2008 EE –
Gracias Jeremy. Se agregó la información adicional. –
Obvia primera pregunta; ¿Has despojado a todo lo demás de la transacción que obtiene la clave? P.ej. ¿Sabes antes de tratar de obtener la clave de todo lo que necesitas saber, ir a la mesa, obtener la llave y desbloquear antes de hacer otras cosas? – Karl