Wpis z mikrobloga

Mirki pomuszcie! Siedzę kolejną godzinę, drugi dzień i ciągle zastanawiam się jak zaimplementować do mojego nowego projektu przechowywanie obrazów na serwerze.
Wytyczne:
Obrazy małe 4 - 10 KB / szt.
Powinny być ukryte przed nieautoryzowanymi użytkownikami (czyli raczej wprost na serwerze w systemie plików nie bardzo)
Będzie ich na początek ponad 20K

Rozwiązania są dwa - wg mojej wiedzy.

1) Trzymać je w katalogu (zablokowanym htaccesem) i poprzez "pośrednika" (skrypt php) opierając się na informacjach z BD wyciągać do nich adresy fizycznej lokalizacji, sprawdzać autoryzacje i printem w PHP "drukować" obraz w locie pobierając jego "zawartość" z pliku.

2) Od razu przechowywać w BLOB plik i skrócić liczbę operacji narażając się na spadek wydajności BD

Niby druga opcja jest prostsza daje większe możliwości itd. Jest dużo zalet (nie chcę się tu licytować) ale może spaść wydajność systemu. Pytanie jednak czy przy tak małych plikach będzie to odczuwalne?

Mam system gdzie zastosowałem opcję 2 ale tam pliki pobierane są na "żądanie" użytkownika dosyć sporadycznie w stosunku do całego ruchu. W tym projekcie odwołań będzie b. dużo. I tu przy okazji rodzi się kolejne pytanie czy przeglądarka mając konkretny adres i nazwę pliku będzie go ciągnęła za każdym razem z BD czy wykorzysta casch?

Co byście wybrali?

#php #programowanie #mysql #sql #webdev
  • 9
  • Odpowiedz
@grzylen: IMHO opcja 1.
Cache kontrolujesz odpowiednimi nagłówkami HTTP w odpowiedzi.

Jedna uwaga tylko do (1.).

Trzymać je w katalogu (zablokowanym htaccesem)


Nie zablokowany htaccessem, tylko poza folderem public po prostu.
  • Odpowiedz
@grzylen: Tak, detal.

Możesz też pominąć bazę, i zamiast tego zrobić odpowiednią strukturę plików. Np. foldery per ID usera. Wtedy jeśli używasz sesji, to ID masz od razu od ręki. Jeśli to stateless api, to w jakimś JWT, czy czymś takim masz.

Korzystam z rowiązań typu 1. w kilku miejscach i dobrze się sprawdza na dość dużej skali.
  • Odpowiedz
@Kmycic: @IdzieGrzesPrzezWies: @Daredzik: @zakopiak: dziękuję vza sugestie. Zdecydowałem się na zrobienie dwóch wariantów i już na produkcji sprawdzić wydajność w praktyce.
Wariant z plikami żywcem w bazie oraz wariant z plikami poza zasięgiem serwisu ale w zasięgu skryptu PHP który zassie i wypluje po autoryzacji odpowiedni obraz. Gdyby to były duże obrazy to bym się nie zastanawiał, ale mówimy o malutkich ikonkach, max 5 KB dlatego korci mnie
  • Odpowiedz