Mysql
 sql >> Database >  >> RDS >> Mysql

Archiviare i file di immagine nel database di Mongo, è una buona idea?

Il problema non è tanto che il database diventa grande, i database possono gestirlo (sebbene MongoDB non sia buono come molti altri in questo senso). Il problema è che per inviare i dati al client, questi devono prima essere spostati nella RAM dal database, quindi copiati nella memoria dell'applicazione, quindi consegnati al kernel per essere inviati tramite il socket. Sta sprecando un sacco di cicli di RAM e CPU. Il motivo per cui è meglio avere file di grandi dimensioni nel filesystem è che è più facile copiarlo, puoi chiedere al kernel di eseguire lo streaming del file dal disco al socket direttamente.

Lo svantaggio di archiviare file di grandi dimensioni nel filesystem è che è molto più difficile da distribuire. L'uso di un database e qualcosa come GridFS di Mongo rende possibile la scalabilità orizzontale. Devi solo assicurarti di non copiare l'intero file nella memoria dell'applicazione in una volta, ma un pezzo alla volta. La maggior parte dei framework di app Web ha un supporto per l'invio di risposte HTTP in blocchi al giorno d'oggi.