• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - sortowanie według listy w kodzie czy w zapytaniu SQL?

0 głosów
90 wizyt
pytanie zadane 17 grudnia 2018 w Java przez andrut Użytkownik (870 p.)
Cześć!

Mam pytanie bardziej dotyczące dobrych praktyk, niż stricte programowania w Javie.
Jestem przekonany, że ma to znaczenie w wielu językach, ale chciałbym tutaj uzyskać odpowiedź stricte pod Javę - bo jej uczę się na co dzień.

Czy mając listę wyników z bazy danych powinienem dokonać sortowania poprzez zapytanie SQL, czy może jednak lepiej zrobić to w kodzie javowym np. przez posortowanie array listy?

Co jest lepsze? I pod jakimi warunkami? Kiedy lepiej sortować w kodzie, a kiedy w zapytaniu SQL?

3 odpowiedzi

+1 głos
odpowiedź 17 grudnia 2018 przez Aisekai Nałogowiec (32,090 p.)
Według mnie, jeżeli istnieje możliwość posortowania czegoś w bazie danych to lepiej posortować to w bazie danych - zwłaszcza jeżeli robisz system serwerowy (np REST API).  Tutaj znalazłem odpowiedź na SO https://stackoverflow.com/questions/1883264/database-sort-vs-programmatic-java-sort . Ale jeszcze jedno ważne pytanie: do czego Ci potrzeba posortować te wyniki? Jeżeli nie potrzebujesz sortowania na serwerze, a w aplikacji klienckiej, to imo lepiej wysłać nieposortowaną Listę obiektów do Klienta, żeby odciążyć serwer/bazę danych.
komentarz 19 grudnia 2018 przez andrut Użytkownik (870 p.)
Dzięki za linka do SO, czytałem już to, jest tam sporo informacji. Ale też niestety odpowiedzi są tam na zasadzie: jeden rabin powie tak, drugi inaczej.

Powyżej doprecyzowałem o co mi chodzi.
+1 głos
odpowiedź 19 grudnia 2018 przez Arkadiusz Sikorski Pasjonat (19,360 p.)

"To zależy". A dokładnie zależy czy zależy nam na prostocie czy na skalowalności i wydajności.

Jeśli będzie wielu użytkowników danej aplikacji, to żeby odciążyć bazę można sortować w aplikacji dostępowej. Zwłaszcza jeśli sortowanie takie nie zaważy na wydajności aplikacji klienckiej (użytkownik nie chciałby czekać 10 sekund na wyświetlenie, dajmy na to, listy wystawionych faktur).

Wyobraźmy sobie sytuację, że mamy 100.000 użytkowników, którzy na raz dokonują dostępu do bazy danych w celu pobrania 100 rekordów każdy. Baza musi dokonać 100.000 100-elementowych sortowań. Możemy też dane wysłać do użytkownika i dopiero wtedy je posortować, dzięki czemu obliczeniowo odciążymy maszynę, na której pracuje baza danych.

Oczywiście 100 i 100.000 to przykładowe liczby, wszystko zależy od projektowanego systemu. Co innego zrobienie małej gry multiplayer, a co innego systemu obsługi stacji paliw :)

W przypadku, kiedy wiemy, że baza danych nie będzie miała dużo pracy lub sortowanie może zaważyć na wydajności aplikacji klienckiej, warto pomyśleć o sortowaniu w bazie czy ewentualnym upgradzie maszyny, na której jest nasza baza danych. Baza wykorzystuje również "przyśpieszacze" w postaci indeksów, dzięki czemu sortowanie może odbyć się szybciej (oczywiście odpowiednie indeksy muszą zostać utworzone).

TLDR: Odpowiedź nie jest jednoznaczna, bo to zależy od projektowanego systemu. Jednakże, jeśli projektujesz aplikacje, które nie będą używane na masową skalę, to myślę, że nie masz co przejmować się za bardzo wydajnością bazy. Sortuj w bazie.

komentarz 20 grudnia 2018 przez andrut Użytkownik (870 p.)
Dzięki za odpowiedź. Trochę się spodziewałem tego "to zależy" ;)

Czyli ogólnie, jeśli nie przeciąża to bazy, to sortujemy w bazie...

Tutaj pojawiło mi się jeszcze trochę bardziej szczegółowe pytanie: Jeśli mam coś do posortowania na widoku, to gdzie lepiej: w bazie czy w aplikacji?
0 głosów
odpowiedź 19 grudnia 2018 przez andrut Użytkownik (870 p.)
Zasadniczo chodzi mi o jakąś garść uporządkowanych zasad:
Kiedy, jak sortujemy - i dlaczego tak a nie inaczej.

np. jeśli mamy małą bazę danych, to lepsze sortowanie X, jeśli dużą, to Y.
Jeśli dane dotyczą widoku, to lepiej tak a tak...

No i przede wszystkim chciałbym zrozumieć też dlaczego tak się powinno robić, a czego się powinno unikać.

A w kontekście nauki programowania, to oczywiście mam świadomość, że powinienem opanować oba sposoby...

Podobne pytania

0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 8 września 2017 w SQL, bazy danych przez Ardzej16 Początkujący (410 p.)
0 głosów
2 odpowiedzi 94 wizyt
pytanie zadane 28 czerwca 2017 w PHP, Symfony, Zend przez Marchiew Mądrala (6,280 p.)
0 głosów
2 odpowiedzi 113 wizyt
pytanie zadane 12 marca 2017 w Java przez Szymon Ciamaga Obywatel (1,980 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

63,199 zapytań

109,436 odpowiedzi

228,620 komentarzy

42,949 pasjonatów

Przeglądających: 75
Pasjonatów: 5 Gości: 70

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...