Digamos que tengo una tabla de base de datos de SQL Server con X (> 1,000,000) registros que deben procesarse (obtener datos, realizar acciones externas, actualizar el estado en db) uno a uno por algunos procesos de trabajo (ya sean aplicaciones de consola, servicio de Windows, roles de trabajador de Azure, etc.). Necesito garantizar que cada fila solo se procesa una vez. Idealmente, se garantizaría la exclusividad sin importar cuántas máquinas/procesos se formaron para procesar los mensajes. Lo que más me preocupa es que dos SELECT agarren las mismas filas al mismo tiempo.¿Cómo podría diseñar este sistema de procesamiento de mensajes en .NET/SQL Server?
Sé que hay mejores almacenes de datos para hacer cola, pero no tengo tanto lujo para este proyecto. Tengo ideas para lograr esto, pero estoy buscando más.
+1 Necesita una limpieza fuera de banda para el caso en el que la aplicación del consumidor no realiza la transición correcta entre "InProcess" y "Hecho" –
Cualquier motivo por el que @myMachineID no puede ser @@ SPID, por supuesto, asumiendo que ambas consultas se ejecutan en el mismo lote? –
¿ACTUALIZA la ACTUALIZACIÓN las filas seleccionadas mientras las actualiza o podrían varios procesos reclamar las filas simultáneamente? –