(me doy cuenta de que mi título es pobre. Si después de leer la pregunta tiene una mejora en mente, edítela o dígame y la cambiaré)¿Hay un patrón estándar para escanear una tabla de trabajos ejecutando algunas acciones?
Tengo el escenario relativamente común de un tabla de trabajo que tiene 1 fila para algo que necesita hacerse. Por ejemplo, podría ser una lista de correos electrónicos para enviar. La tabla es como la siguiente:
ID Completed TimeCompleted anything else...
---- --------- ------------- ----------------
1 No blabla
2 No blabla
3 Yes 01:04:22
...
estoy buscando ya sea para una práctica/patrón estándar (o código - C#/SQL Server preferido) de forma periódica "de barrido" (utilizo el término "escaneo" de manera muy informal) esta tabla, encontrar los ítems no completados, realizar la acción y luego marcarlos completados una vez que se hayan realizado correctamente.
Además del proceso básico para llevar a cabo lo anterior, estoy considerando los siguientes requisitos:
- me gustaría algún medio de "escalamiento lineal", por ejemplo, ejecutar múltiples "procesos de trabajo" simultáneamente o enhebrar o lo que sea. (Es sólo una idea específica técnica -. Estoy asumiendo que como resultado de este requisito, necesito algún método de marcar un elemento como "en curso" para evitar la acción de intentar varias veces)
- Cada elemento de la tabla debe solo se ejecutará una vez.
Algunos otros pensamientos:
- no estoy particularmente preocupado por la aplicación que se realiza en la base de datos (por ejemplo, en T-SQL o código PL/SQL) frente a un cierto código programa externo (por ejemplo, un ejecutable independiente o alguna acción provocada por una página web) que se ejecuta contra la base de datos
- ya sea el "hacer la acción" se hace parte sincrónica o asincrónica no es algo que estoy considerando como parte de esta pregunta.
suena como una cola de proceso ... –
a veces llamada cola de productor/consumidor ... –