Domanda

L'app Web Java che sto sviluppando consente agli utenti di caricare file (immagini e documenti) ai loro profili e definire le regole di accesso per tali file (definire quale degli altri utenti è in grado di visualizzare / scaricare il file). Il sistema di controllo dell'accesso / autorizzazione è realizzato su misura e le regole sono archiviate in MongoDB insieme al profilo dell'utente e alla voce effettiva del file.

Sapendo che ho bisogno che l'applicazione e l'archiviazione siano distribuiti e tolleranti ai guasti, devo capire qual è la migliore strategia per l'archiviazione dei file.

Devo archiviare i file all'interno di MongoDB nella raccolta di file in cui si trovano il documento file contenente la descrizione e le regole di accesso?

O dovrei archiviare i file all'interno del file system del server e mantenere il percorso nel documento MongoDB? Con l'approccio del filesystem sarò comunque in grado di far rispettare le autorizzazioni di accesso definite dall'utente e come? Infine nell'approccio del filesystem come si distribuiscono i server ACCROSS? Devo usare server dedicati per questo o posso archiviare i file sui server WebApp o sui server MongoDB?

Grazie mille per tutte le tue intuizioni! Qualsiasi aiuto o feedback apprezzato.

Alex

È stato utile?

Soluzione

Ci sono diverse alternative:

  • Metti i file in un servizio di archiviazione (ad esempio S3): facile e molto spazio ma cattivo perf
  • Metti i file in un filesystem locale: veloce ma non scala
  • Metti i file in documenti MongoDB: facile, potente e scalabile ma limitato a 16 MB
  • Usa lo strato GRIDFS di MongoDB. Le funzionalità sono limitate ma è fatta per la scalabilità (grazie a frammenti) ed è anche abbastanza veloce. Nota È possibile inserire informazioni sul file (autorizzazione ecc.) Nell'oggetto metadati del file.

Nel tuo caso sembra che l'ultima opzione possa essere la migliore, ci sono alcuni utenti che sono passati da FS a GRIDFS e ha funzionato molto bene per loro. Cose da tenere a mente:

  • GRIDFS Sharding funziona ma non è perfetto: di solito solo i dati sono frastagliati, non i metadati. Non è un grosso problema, ma il frammento con i metadati deve essere molto sicuro.
  • Può essere utile utilizzare GRIDF in un cluster MongoDB separato dai dati core, poiché i requisiti (archiviazione, backup, ecc.) sono generalmente diversi.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top