[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: