Próbuję użyć Dapper do obsługi dostępu do danych dla mojej aplikacji serwera.Prawidłowa metoda usuwania ponad 2100 wierszy (według identyfikatora) za pomocą narzędzia Dapper
Moja aplikacja serwerowa ma inną aplikację, która zapisuje rekordy do mojej bazy danych z szybkością 400 na minutę.
Moja aplikacja pobiera je partiami, przetwarza je, a następnie usuwa z bazy danych.
Ponieważ dane nadal są przesyłane do bazy danych podczas przetwarzania, nie mam dobrego sposobu, aby powiedzieć delete from myTable where allProcessed = true
.
Jednak znam wartość PK wierszy do usunięcia. Tak więc chcę zrobić delete from myTable where Id in @listToDelete
. Problem polega na tym, że jeśli mój serwer nie działa nawet przez 6 minut, to mam ponad 2100 wierszy do usunięcia.
Ponieważ Dapper pobiera moją @listToDelete i zamienia każdą z nich w parametr, moje wywołanie do usunięcia nie powiedzie się. (Powoduje, że moje dane są usuwane, aby uzyskać jeszcze więcej.)
Jaki jest najlepszy sposób radzenia sobie z tym w Dapper?
UWAGI: Przyjrzałem się oznaczonym wartościom parametrów, ale z tego, co widzę, nie są one zbyt liczne: performant. Ta część mojej architektury to szyjka butelki mojego systemu i muszę bardzo szybko uzyskać bardzo.
@marc_s - Nie potrzebuję **, aby przekazać tyle parametrów ... Ale muszę usunąć wiele wierszy według ID PK. Jednak robię to w porządku przeze mnie. Mówię bystrzej, żeby usunąć każdy wiersz z mojej "@ listy". To Dapper tworzy parametry każdego elementu na mojej liście. – Vaccano
Trudno powiedzieć z tej małej informacji, ale dlaczego nie można użyć tych kryteriów selekcji dla partii jako kryteriów usuwania. Lub przetestuj flagę w MyTable, ustaw ją w "przetwarzaniu", a następnie użyj. To nie jest świetne, ale będzie znacznie szybsze niż usuwanie jeden po drugim. To nie będzie szokująco złe, nawet z 10.000 płyt. –
Moje kryteria partii nie są bardzo wydajne. Więc wolałbym tego nie używać. Mogłem dodać przetworzoną flagę, ale w tym celu potrzebowałbym sposobu na wywołanie wierszy, aby dodać przetworzoną flagę do. Jeśli mogę je wezwać, równie dobrze mogę je usunąć. (Mogę dodać flagę do oznaczenia "batched" w wybranym czasie, ale wolałbym nie.) – Vaccano