Aktywne Wpisy
Fifth_Element +961
Jeśli ten wpis osiągnie dzisiaj 243 plusy, to dorysuję kolejny poziom trójkąta sierpińskiego. Będę to robił codziennie (ale nie w weekend) aż do momentu, kiedy nie zbierze się odpowiednia liczba plusów lub wyrzucą mnie z roboty.
#glupiewykopowezabawy #informatyka #matematyka #trojkatsierpinskiego
#glupiewykopowezabawy #informatyka #matematyka #trojkatsierpinskiego
kantek007 +35
#warszawa
Ide do urzędu
Numerki nie dzialają
wolna_amerykanka.gif
Do okienka dopycha się obcokrajowiec ze źle wypełnionym drukiem
urzędniczka tłumaczy mu po polsku bo nie zna ani słowa po angielsku xD
obcokrajowiec nipanimaju.exe coś się pyta po angielsku ale bez skutku
pani w okienku powtarza 10-razy to samo po polsku xDDDDD
Wreszcie jakiś facet tłumaczy o co chodzi i wszyscy się rozchodza z niczym xD
URZĄD PAŃSTWOWY W STOLICY KRAJU W JEDNEJ Z
Ide do urzędu
Numerki nie dzialają
wolna_amerykanka.gif
Do okienka dopycha się obcokrajowiec ze źle wypełnionym drukiem
urzędniczka tłumaczy mu po polsku bo nie zna ani słowa po angielsku xD
obcokrajowiec nipanimaju.exe coś się pyta po angielsku ale bez skutku
pani w okienku powtarza 10-razy to samo po polsku xDDDDD
Wreszcie jakiś facet tłumaczy o co chodzi i wszyscy się rozchodza z niczym xD
URZĄD PAŃSTWOWY W STOLICY KRAJU W JEDNEJ Z
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Kod na 1 corowym z 2GB RAM VPSie i bazą w pgsql działa ok 6-10 minut i jest dla mnie nie akceptowalny szczególnie dla takiej ilości danych.
Niestety z zewnętrznego źródła dostaję zawsze komplet UIDów (teraz ok 100 tys.) nieważnych dokumentów bez żadnych dodatkowych znaczników.
Chcę wyfiltrować dokumenty do usunięcia i je usunąć skoro trafiły na czarna listę i zapisać czarną listę dla rozpropagowania dalej identyfikatory dokumentów, które zostały usunięte.
- albo zmapujesz sobie Set do zbióru Uid i w nim będziesz szukał
- albo do contains przekażesz new InvalidDocument(document.getUid())
return invalidDocuments.contains(new InvalidDocument(document.getUid()));
Jak nie takie szybkie pytanie: jak wygląda metoda: invalidDocumentRepository.saveAll(toAddInvalidDocuments)?
Wd mnie powinien iść sql który wygląda tak: delete * from documents d where d.id in (i tutaj id wszystkich documentów do wywalenia). Druga rzecz invalidDocumentRepository.saveAll(toAddInvalidDocuments) powinna być batchem.
@saquas: serio?
@JacobTheLiar: > Pobieranie z bazy trwało niecałą sekundę.
Raczej nie. Operacje bazodanowe są tutaj najbardziej czasochłonne. Najprawdopodobniej źle mierzysz czas wykonania, nie bierzesz pod uwagę tego co jest dociągane lazy itp...
Zmiana, którą wprowadziłeś na pewno przyspieszyła samo wyszukiwanie. Jedyne co mogło pogorszyć wydajność to tworzenie nowego obiektu i to tylko jeśłi masz jakiś kod w konstruktorze o
ogólnie każde repository jest springowe/hibernate. podobnie saveall i delete all z JpaRepository.
rozdzieliłem pobieranie i filtrowanie na dwa kroki
List documents = documentList.getAllDocuments();
Set toDelete = documents
.stream()
.filter(document -> isDocumentInvalid(document, invalidDocuments))
.collect(Collectors.toSet());
przed każdym krokiem dałem sdouta i wynik mam taki
step 1 - get 2020-11-02 19:55:42
step 2 - filter 2020-11-02 19:55:43
step - done 2020-11-02 20:08:15
choć kolejne wywołanie wygląda bardziej obiecująco
step 1 -
@saquas: Dokładnie... tylko, że tu mamy Set!. Wyszukiwanie w nim tak jakby to była lista to o wiele gorsza złożoność. Tym bardziej, że ze sprawdzanych 50k obiektów znajduje kilka/kilknaście obiektów w zbiorze 100k. Oznacza to, że ok 50k razy iterujesz po wszystkich 100k obiektów... a to już strasznie dużo.
dzięki sugestii @63274682374
zabrałem się za dokładne analizowanie serwera i to on okazał się winny całemu zamieszaniu (założę osobny wątek, na jego temat). Okazało się, że po ostatnim włamie na mój serwer VPS ktoś coś zostawił co żarło całe zasoby. Pewnie
średnie pobieranie danych z bazy - 11ms
średnie czasy filtrowania
invalidDocuments.contains(new InvalidDocument(document.getUid()));
- 14msinvalidDocuments.stream().anyMatch(invalidDocument -> document.getUid().equals(invalidDocument.getUid()));
- 2m45sektakże dzięki wielkie @63274682374