Ich versuche zu verwenden Dapper Unterstützung meines Datenzugriffs für meine Server-App.Korrekte Methode zum Löschen von mehr als 2100 Zeilen (nach ID) mit Dapper
Meine Server-App verfügt über eine andere Anwendung, die Datensätze mit einer Rate von 400 pro Minute in meine Datenbank löscht.
Meine App zieht sie in Stapeln, verarbeitet sie und löscht sie dann aus der Datenbank.
Da Daten während der Verarbeitung weiterhin in die Datenbank fließen, habe ich keine gute Möglichkeit, delete from myTable where allProcessed = true
zu sagen.
Allerdings kenne ich den PK-Wert der Zeilen zu löschen. Also ich möchte ein delete from myTable where Id in @listToDelete
Problem ist, dass, wenn mein Server für noch 6 Minuten ausfällt, dann habe ich über 2100 Zeilen zu löschen.
Da Dapper meine @listToDelete übernimmt und jede in einen Parameter verwandelt, schlägt mein Aufruf zum Löschen fehl. (Verursacht, dass meine Daten bereinigt werden, um noch weiter zurück zu kommen.)
Was ist der beste Weg, damit in Dapper umzugehen?
NOTES: Ich habe Tabled bewertete Parameter angeschaut, aber von dem, was ich sehen kann, sind sie nicht sehr performant. Dieses Stück meiner Architektur ist der Flaschenhals meines Systems und ich muss sehr schnell sein sehr.
@marc_s - Ich brauche ** nicht, um so viele Parameter zu übergeben ... Aber ich muss diese vielen Zeilen durch PK Id löschen. Wie dem auch sei, das ist für mich in Ordnung. Ich sage adrett, jede Zeile in meiner @ -Liste zu löschen. Es ist Dapper, der Parameter von jedem Gegenstand in meiner Liste macht. – Vaccano
Aus diesen wenigen Informationen ist das schwer zu ersehen, aber warum können Sie die Auswahlkriterien für Batch nicht als Kriterium für ein Löschen verwenden? Oder habe eine verarbeitete Markierung in MyTable, setze sie in der "Verarbeitung" und verwende sie dann. Es ist nicht brillant, aber es wird viel schneller sein, als sie nacheinander zu löschen. Es wird nicht erschreckend schlecht sein, selbst mit 10.000 Datensätzen. –
Meine Batch-Kriterien sind nicht sehr performant. Also würde ich es vorziehen, das nicht zu benutzen. Ich könnte ein verarbeiteter Flag hinzufügen, aber dazu müsste ich die Zeilen aufrufen, denen das verarbeitete Flag hinzugefügt werden soll. Wenn ich sie anrufen kann, kann ich sie auch löschen. (Ich könnte eine Flagge hinzufügen, um zu sagen, "Batched" zur ausgewählten Zeit. Aber ich würde lieber nicht.) – Vaccano