Wpis z mikrobloga

Czołem #programowanie #programista15k #java #sql

Co wybieracie: złożone zapytanie SQL, które serwuje gotowe dane. Czy może proste zapytanie, które zwraca zdecydowanie większą pulę a potem dokonujecie filtrowanie w Javie?

Co i dlaczego z punktu widzenia wydajności i łatwości utrzymania?

Jakieś źródła do opracowań w różnicy w wydajności?
  • 23
  • Odpowiedz
  • 5
@Ancro to zależy, pamiętaj też że większość baz danych ma cache więc zapytanie pierwsze może być wykonywane tylko raz a później brane z cache'a. Ja bym wolał mieć bardziej skomplikowane zapytanie niż obrabiać dane w programie.
  • Odpowiedz
@budyn: Nie jestem architektem baz danych, niestety. Szukam więc rzeczowych argumentów i opracowań dlaczego warto iść jedną a nie drugą ścieżką i w jakich sytuacjach. To co znalazłem na Stack Overflow wiele mi nie daje - różne opinie.

Sam uważałem, że wszystko co związane z danymi, powinniśmy zwalać na bazę DANYCH. Jednak u mnie w zespole panuje nieco inne przekonanie. Nie byłem w stanie podać żadnych konkretnych faktów dlaczego lepiej zrzucić
  • Odpowiedz
Jednak u mnie w zespole panuje nieco inne przekonanie


@Ancro: to nie jest przekonanie tylko tak jest prościej, oni pewnie wiedzą, że powinni dane przygotować ale mają to w dupie. Gdyby sami musieli to ogarniać po obu stronach to zrobili by tak jak trzeba
  • Odpowiedz
@Ancro:
- przesyłasz mniej danych przede wszystkim
- nad bazą danych pracują dziesiątki/setki inżynierów więc po prostu #!$%@?
- jeśli krzyżowanie = joinowanie to już w ogóle po co to robić wiele zapytań do bazy jak można w 1; to ma sens jako taki w bazach NoSQL gdzie dane są często płaskie
- Java jest wolniejsza niż bazy danych, które zazwyczaj pisane są w C/C++
  • Odpowiedz
Jeżeli nie używasz bazy do filtrowania to po co Ci baza? Wtedy ładuj obiekty do pliku i z powrotem do pamięci. Jeden system odpada do obsługi :)
  • Odpowiedz
@Ancro: Zwyczajowo tyle ile się da zrzuca się na bazę, ale kontrargumentem jest rozsmarowanie domeny aka logiki biznesowej po wielu warstwach i językach, co skutkuje niestrawnym spagetti. Jeżeli to nie będzie bottleneck i nie musi #!$%@?ć, za to powinno czytelne i łatwe do zrozumienia oraz utrzymania to jak najbardziej może pozostać w javie
  • Odpowiedz
Jednak u mnie w zespole panuje nieco inne przekonanie


@Ancro: stawiam worek cebuli, że tacy programiści a wymiękają przy prostej obróbce danych na bazie/napisaniu lepszego zapytania z zagnieżdżonymi warunkami itp... Łatwiej zrobić raz SELECTa a później kilka pętli (i pewnie mocno nieoptymalnie) przefiltrować to.

A co do pytania - sam sobie odpowiedz. Lepiej jak Ci Pani w sklepie przyniesie 62 pary spodni i sobie z tego wybierzesz sam, czy jak podasz
  • Odpowiedz
Java jest wolniejsza niż bazy danych, które zazwyczaj pisane są w C/C++


@budyn: tu jak zwykle można by polemizować (zależnie od zastosowania, choć jestem zdania że gdyby chcieć to da się wszystko w tym drugim napisać szybciej), ale warto zwrócić uwagę, że systemy zarządzania bazami danych często potrafią zoptymalizować zapytanie lepiej, niż jesteśmy w stanie to zrobić my ręcznie.
  • Odpowiedz
@WykopowyProgramista15k: Tak, to raczej oczywiste, że jestem jedyną osobą, która cokolwiek ogarnia SQL. Jednak to co mówisz, nie jest takie oczywiste i na słowo nikt nie wierzy. Kolega, od którego zaczęła się dyskusja, nie jest też w 100% pewny swego, ale on przynajmniej testował różnicę w czasie wykonywania pracy na DB vs JVM na podobnych operacjach i różnicy podobno nie było. Stąd moja prośba: źródła do opracowań na ten temat. W
  • Odpowiedz
@plushy: @WykopowyProgramista15k: Widzę, że Panowie eksperci.

Przykro mi, nie macie racji. Pracowałem przy kilku większych systemach finansowych. Zazwyczaj jest w nich tylko kilka, bardzo nisko położonych, core'owych modułów, dla których wydajność jest bardzo ważna. A w przypadku ingerencji w nie, i tak potrzebna jest akceptacja głównego architekta systemu. Obecnie pracuję przy systemie z milionami użytkowników w kilkunastu krajach. W kilku przypadkach, naszym klientem jest bezpośredni kraj. Nikogo nie boli, że
  • Odpowiedz