Spring - jak zoptymalizować zaciąganie danych z bazy SQL

Spring - jak zoptymalizować zaciąganie danych z bazy SQL
D4
  • Rejestracja:ponad 7 lat
  • Ostatnio:11 miesięcy
  • Postów:33
0

Hej.
Mam pewien problem.
Jestem w trakcie budowania aplikacji do e-czasopisma gdzie uprawniony użytkownik będzie mógł dodawać pisma, publikować na stronie głównej i takie tam...
Poszukuje wiedzy jak rozwiązać sprawę dużej ilości zapytań SQL które generuje serwer (appka webowa).
Obecnie działa to tak że jak zwykły użytkownik wejdzie na strone główną, serwer SELECTem pobierze rekord który jest opublikowany (tylko jeden może być na raz) i z kolumny przechowującej byte[] pobierze zdjęcia które następnie wyświetli.
To samo na innej podstronie - archiwum - użytkownik może tu odczytać archiwalne numery których boolean archived w DB jest na true.
Tu również zostaje wykonane zapytanie które zwróci X rekordów i zostają wyświetlone w pętli.

Trochę obawiam się takiego rozwiązania przy dużej ilości danych.
Już teraz zaczyna zacinać gdy serwer ma pobrać jakiś rekord z dużą paczką zdjęć...

Jak to obejść?

Myślałem żeby połączyć przechowywanie danych w pamięci aplikacji + w bazie danych i np w @Scheduled synchronizować dane co jakiś czas ale operacyjnie pracować na pamięci.
Minus jest taki że trzeba pobierać wszystkie dane z bazy do pamięci...

Ktoś mógłby coś doradzić?

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
3

Pytanie zasadnicze - czemu chcesz obrazki trzymać w bazie danych?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Postów:1875
3

Jw. obrazki powinna dociągać przeglądarka. Ten myczek z flagą „archive” też odbije się czkawką - lepiej to trzymać w jakimś osobnym storage’u, bo masz na tym w zasadzie tylko odczyt i to relatywnie niezbyt częsty


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2
  1. Trzymanie blobów w bazie to raczej słaby pomysł. Jeśli nie chcesz tego serwować z jakiegoś CDNa to trzymaj w bazie tylko metadane, tzn lokalizacje w filesystemie i odczytuj je z dysku i tak serwuj. Od biedy trzymanie ich w /static starczy

Myślałem żeby połączyć przechowywanie danych w pamięci aplikacji + w bazie danych i np w @Scheduled synchronizować dane co jakiś czas ale operacyjnie pracować na pamięci.
Minus jest taki że trzeba pobierać wszystkie dane z bazy do pamięci...

Tak się robi jak chcesz mieć low-latency, ale nie z dużymi blobami raczej, bo nie ma to sensu.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.