Mamy instrukcję SELECT, która zajmie ok. 3 sekundy do wykonania. Wywołujemy tę kwerendę DB2 w zagnieżdżonej pętli While.
Dawny:
While (hashmap1.hasNext ()) { while (hashmap2.hasNext ()) { Zapytanie SQL } }
Problem polega na tym, że zewnętrzna pętla będzie wykonywanaokoło. 1200 razy i wewnętrzna pętla While wykona 200 razy. Co oznacza, że SQL będzie nazywać się 1200 * 200 = 240 000 razy. Około. każda iteracja zewnętrzna Pętla trwa 150 sekund. Tak więc 1200 * 150 sekund = 50 godzin.
Możemy sobie pozwolić tylko na około 12-15 godzin, zanim rozpoczniemy następny proces.
Czy istnieje sposób na szybkie wykonanie tego procesu? Każda nowa technologia, która może nam pomóc w szybszym pobieraniu tych rekordów z DB2.
Każda pomoc będzie bardzo ceniona.
Uwaga: już przeanalizowaliśmy wszystkie możliwe sposoby zmniejszenia liczby iteracji.
Odpowiedzi:
4 dla odpowiedzi № 1Wydaje mi się, że próbujesz użyć środkowej warstwy dla czegoś, do czego lepiej pasuje sama baza danych. Jest to klasyczny problem z zapytaniem "N + 1".
Naprawię tę logikę, aby wykonać całkowicie nabaza danych jako właściwie indeksowane JOIN. To nie tylko ograniczy tę sieć do iz powrotem, ale także przyniesie optymalizator bazy danych i pozwoli zaoszczędzić na kosztach przetwarzania wszystkich danych w warstwie środkowej.