• 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?

VPS Starter Arubacloud
0 głosów
353 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 (42,190 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 (20,160 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ź 352 wizyt
pytanie zadane 30 lipca 2020 w Java przez lucyliu Początkujący (370 p.)
0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 8 września 2017 w SQL, bazy danych przez Ardzej16 Początkujący (450 p.)
0 głosów
2 odpowiedzi 161 wizyt
pytanie zadane 28 czerwca 2017 w PHP przez Marchiew Dyskutant (7,690 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...