Posso supporre che nessuno cancelli il contenuto generato dall'utente dal file system del mio server?

2

Situazione

Attualmente sto sviluppando un servizio web in cui gli utenti possono (in genere) caricare file binari. Questi file sono memorizzati nel file system del sistema operativo host e alcuni metadati aggiuntivi sul file sono archiviati in un altro database SQL, inclusi i relativi identificatori di versione disponibili (un file può esistere in più versioni). Dai metadati nel database è possibile ricavare il percorso del file specifico della versione locale.

Problema

A partire da ora, quando voglio dare informazioni sull'esistenza di una versione specifica del file, controllo solo se c'è una voce corrispondente nel database. Questo semplifica molto codice per casi d'uso più avanzati. Ciò significa che si verificherà un errore se il file è ancora registrato nel database ma non esiste più. Logicamente questo non dovrebbe mai accadere, ma potrebbe essere facilmente eliminato, ad es. l'amministratore.

È una cattiva pratica presumere che il file lato server non verrà mai eliminato da forze esterne?

    
posta Bruno Zell 28.06.2018 - 11:03
fonte

4 risposte

4

Per darti una risposta diretta a

Is it bad practice to assume that server side file will never be deleted by external forces

Non è una cattiva pratica presumere che sia improbabile un file non verrà mai cancellato (nel caso lo sia, cosa che non possiamo dirti, questo dipende da tonnellate di dettagli del caso particolare).

Tuttavia, devi sempre implementare la qualche strategia di gestione degli errori per l'evento improbabile - non lasciare mai che il tuo programma vada in un comportamento indefinito solo perché sei stato pigro ad implementare almeno una minima gestione degli errori.

    
risposta data 28.06.2018 - 12:31
fonte
4

Questo tipo dipende da dove e come ti aspetti che questa applicazione sia implementata.

Se controlli la distribuzione o puoi fare delle regole (come nella forma di una "guida alla manutenzione") che devono seguire coloro che gestiscono l'applicazione, allora è perfettamente OK. Ci sono molti più aspetti che potresti voler considerare:

  • Potrebbe esserci un requisito che questo webservice debba essere eseguito in cluster su più server? In tal caso, come funzionerà l'accesso al file system?
  • È necessario eseguire il backup di questi file e come sarà fatto?
  • Come ti assicuri che ci sia sempre abbastanza spazio libero su disco per archiviare i file? Cosa succede se non c'è?
  • Che cosa succede esattamente se non è possibile trovare un file?

Per lo sviluppo c'è molto di più che scrivere codice ...

    
risposta data 28.06.2018 - 11:15
fonte
1

Come detto da Michael, dipende da chi gestisce il tuo ambiente. Non c'è nulla di sicuro al 100% per prevenire la cancellazione accidentale o intenzionale di file con metadati nel DB.

A meno che tu non abbia davvero bisogno che i file siano accessibili nel filesystem, potresti prendere in considerazione memorizzazione dei file nel database . Ciò potrebbe richiedere alcuni cambiamenti nella tua architettura e / o infrastruttura che potrebbero comportare costi aggiuntivi (server di database più elaborato), ma dal punto di vista delle prestazioni non dovrebbero esserci problemi.

    
risposta data 28.06.2018 - 11:35
fonte
1

La tua preoccupazione consiste di due fattori:

Dati coerenti: è possibile garantire che il codice server assicuri che: la modifica del file e l'aggiornamento del record del DB insieme, è un'operazione atomica. Puoi anche scegliere di salvare il file in db it self, avvolgendo entrambe le operazioni in una transazione.

Errori di Sysops / Devops: ridurre al minimo le eliminazioni accidentali di file o record. Per progetti seri, puoi utilizzare qualsiasi implementazioni di file system distribuite esistenti come soluzione di archiviazione affidabile. Questi gestiscono i metadati e le capacità di archiviazione e interrogazione dei file.

    
risposta data 28.06.2018 - 12:05
fonte

Leggi altre domande sui tag