Estoy tratando de utilizar Dapper para admitir mi acceso a datos para mi aplicación de servidor.Método correcto para eliminar más de 2100 filas (por ID) con Dapper
Mi aplicación de servidor tiene otra aplicación que coloca registros en mi base de datos a una velocidad de 400 por minuto.
Mi aplicación los saca en lotes, los procesa y luego los elimina de la base de datos.
Como los datos continúan fluyendo en la base de datos mientras estoy procesando, no tengo una buena manera de decir delete from myTable where allProcessed = true
.
Sin embargo, sé el valor PK de las filas para eliminar. Así que quiero hacer un delete from myTable where Id in @listToDelete
El problema es que si mi servidor cae por 6 minutos, entonces tengo más de 2100 filas para eliminar.
Dado que Dapper toma mi @listToDelete y convierte cada una en un parámetro, mi llamada para eliminar falla. (Causando que mi depuración de datos se retrase aún más.)
¿Cuál es la mejor manera de lidiar con esto en Dapper?
NOTAS: He examinado los parámetros de tabla de valores, pero por lo que puedo ver, no son muy performant. Esta pieza de mi arquitectura es el cuello de botella de mi sistema y necesito ser muy muy rápido.
@marc_s - No ** necesito ** para pasar esos muchos parámetros ... Pero sí tengo que eliminar tantas filas por PK Id. Sin embargo, yo hago eso está bien por mí. Le digo a Dapper que elimine todas las filas de mi '@ list'. Es Dapper que está haciendo los parámetros de cada elemento en mi lista. – Vaccano
Difícil de decir a partir de esta pequeña información, pero ¿por qué no puede utilizar los criterios de selección para el lote como sus criterios para una eliminación. O tener un indicador procesado en MyTable, configurarlo en el "procesamiento" y luego usarlo. No es brillante, pero será mucho más rápido que eliminarlos uno por uno. No va a ser terriblemente malo incluso con 10.000 registros. –
Mis criterios de lote no son muy efectivos. Entonces preferiría no usar eso. Podría agregar un indicador procesado, pero para hacer eso necesitaría una forma de llamar las filas para agregar el indicador procesado. Si puedo llamarlos, puedo borrarlos. (Podría agregar una bandera para decir "batched" en el horario seleccionado. Pero preferiría no hacerlo) – Vaccano