MongoTemplate, długie wyszukiwanie

Odpowiedz Nowy wątek
2019-03-14 09:36
0

Korzystamy z MongoDB i org.springframework.data.mongodb.core.MongoTemplate;do tworzenia zapytań do tej bazy. Od jakiegoś czasu zgłaszano nam z produkcji, że wyszukiwarka wolno działa, sprawdziłem na środowisku dev gdzie mam w sumie około 700 dokumentów w bazie - to samo. Sama encja którą wyszukuję wygląda mniej więcej tak

public class Document {
    private String id;
    private SubDocumentOne one;
    private SubDocumentTwo two;
}

public class SubDocumentOne {
    private DateTime date;
    private String type;
    private String xmlContent;
        private List<BusinessData> businessData;
}

public class BusinessData {
       private String key;
       private String value;

W sumie w każdym z dokumentów jest 5-10 pól.

Query wygląda tak

Query query = new Query((Criteria.where("subdocumentone.type").is("someType")));
result = mongoTemplate.find(query, Document.class);

Z tego co widziałem to do mongo leci

{ "subdocumentone.type" : { "$eq" : "someType" }

Wynikiem jest ok 600 dokumentów. Zapytanie trwa około 15 sekund. Z tym, że samo query na mongo wykonuje się <5ms. Resztę czasu prawdopodobnie trwa konwertowanie tej odpowiedzi do obiektów Javowych. Pytanie więc, jak to przyśpieszyć? Jest inne rozwiązanie niż wprowadzenie pageowania?

Pozostało 580 znaków

2019-03-14 09:45
1

Zamiast zgadywać odpal profiler i zobacz co faktycznie zabiera czas.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-03-14 09:46
0

Resztę czasu prawdopodobnie trwa konwertowanie tej odpowiedzi do obiektów Javowych.

A sprawdzałeś to? https://visualvm.github.io/startupprofiler.html

Pozostało 580 znaków

2019-03-16 10:21
0

Odpaliłem profilera jak radziliście. Widać po nim to co już wiedziałem, 10 sekund na wykonanie metody find w mongoTemplate.
W załączniku wynik profilera.

Coś jeszcze mogę sprawdzić z profilerem? Jakieś pomysły czemu to tyle trwa? Przypomnę że mowa o środowisku dev gdzie 10 sekund zajęło zwrócenie <700 rekordów.

edytowany 1x, ostatnio: AngryProgrammer, 2019-03-16 10:21

Pozostało 580 znaków

2019-03-16 10:40
0

Odpal to zapytanie z konsoli mongo i zobacz ile trwa.


"Gdy się nie wie, co się robi, to się dzieją takie rzeczy, że się nie wie, co się dzieje"


Pozostało 580 znaków

2019-03-16 10:44
0

Z tym, że samo query na mongo wykonuje się <5ms.

Tak jak pisałem, to samo query odpalone bezpośrednio w shellu wykonuje się <5 ms.
Odpalałem też profilera na bazie i przechwytywałem strzały ze swojej aplikacji - to samo, czyli <5 ms.

edit#
dokopałem się głębiej w profilerze, praktycznie cały czas zabiera InputStream.read

edytowany 2x, ostatnio: AngryProgrammer, 2019-03-16 16:21

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0