Re: Dubbi: immagini nel db (base64) o esterne con url? inoltre SQL o NOSQL?
On 28/10/17 18:23, Lorenzo Breda wrote:
Il sab 28 ott 2017 18:10 maxlinux duemila <maxlinux2000@gmail.com
<mailto:maxlinux2000@gmail.com>> ha scritto:
[...]
ora sono in dubbio se codificare le immagini con base64 e inglobarle
nel db, o se semplicemente registrare la url in un campo, e mettere le
immagini nel filesystem come si è sempre fatto finora.
sono anche in dubbio se usare il classico SQL (mysql/postgres) o un
NOSQL tipo couchdb + pouchdb o similari.
voi che fareste?
Mi pare molto molto OT.
In linea generale le immagini le terrei fuori. Il filesystem è un
database, è fatto apposta e offre molti vantaggi (strutture standard per
l'accesso ai file - syscall comprese, che molti linguaggi usano
direttamente -, nessuna necessità di usare risorse per la decodifica
quando il file viene richiesto...)
Poi però, come sempre, dipende da che deve fare l'applicazione. Ci sono
casi in cui i vantaggi offerti da un sistema di basi dati sono
rilevanti, ad esempio se va garantita la consistenza in ogni momento tra
i dati del db e le immagini (su db ad esempio puoi fare transazioni che
comprendano anche le modifiche all'immagine, mentre se l'immagine è su
filesystem il database e il file non possono essere modificati in
un'unica operazione atomica).
Per quanto riguarda il tipo di database non ti so aiutare, dipende
enormemente dal tipo di applicazione e dalla struttura dei dati, cose su
cui non hai dettagliato abbastanza.
Anche se ci sono casi in cui tenere i dati dell'immagine nel database è
utile, per esempio quando per visualizzare correttamente l'immagine è
comunque richiesta una query al database (per esempio per verificare i
permessi dell'utente, etc.) in generale non è una buona idea perché la
maggior parte dei web server permette di servire dati dal file system in
maniera ottimizzata (per sempio con sendfile() sotto Linux) mentre
passando dall'applicativo il tutto risulta più lento.
Ci sono tutta una serie di vantaggi e svantaggi da pesare:
1) serve distribuire il carico su più server? Se si, tutto dentro al DB
può risultare utile.
2) i dati sono pubblici? Se si, un web server che accede direttamente al
FS è semplice ed utilizza poche risorse (CPU, memoria).
3) Come vengono efettuati i backup?
4) Complessità dell'applicativo: le immagini vanno manipolate,
cancellate, etc.?
In ogni caso ti consiglio di usare PostgreSQL e di salvare le immagini
in formato binario in un campo BYTEA. Il base64 è un inutile spreco di
risorse.
federico
--
Federico Di Gregorio federico.digregorio@dndg.it
DNDG srl http://dndg.it
«Vorremmo una presentazione emozionale... emotiva!» -- il cliente
(Quindi... un pauerpoint che provi emozioni?)
Reply to: