Qual è il vantaggio di scrivere in una posizione temporanea e quindi copiarlo nella destinazione prevista?

46

Sto scrivendo un'applicazione che funziona con immagini satellitari, e il mio capo mi ha chiesto di guardare alcune delle applicazioni commerciali e vedere come si comportano. Ho trovato un comportamento strano e poi, come stavo cercando, l'ho trovato anche in altre applicazioni standard.

Questi programmi prima scrivono nella cartella Temp e quindi li copiano nella destinazione prevista.

Esempio: 7zip estrae innanzitutto nella cartella temp, quindi copia i dati estratti nella posizione in cui gli hai chiesto di estrarre i dati.

Vedo diversi problemi con questo approccio:

  1. La cartella temp potrebbe non avere spazio sufficiente, mentre quella prevista la posizione potrebbe avere molto spazio.

  2. Se è un file di grandi dimensioni, può richiedere una quantità di tempo non trascurabile per l'operazione di copia.

Ci ho pensato molto, ma non ho potuto vedere un solo punto positivo per farlo. Mi sto perdendo qualcosa, o c'è un vero vantaggio nel fare questo?

    
posta Devdatta Tengshe 16.06.2012 - 16:48
fonte

3 risposte

92

Alcune ragioni per cui posso pensare:

  • Sulla maggior parte delle piattaforme, le mosse di file sono atomiche, ma le scritture di file non lo sono (specialmente se non è possibile scrivere tutti i dati in una volta sola). Quindi, se si ha il modello tipico produttore / consumatore (un processo produce file, l'altro guarda una directory e raccoglie tutto ciò che trova), scrivendo prima in una cartella temporanea e solo dopo spostandosi nella posizione reale significa che il consumatore non può mai vedere un file non finito.
  • Se il processo che scrive il file muore a metà, sul disco è presente un file danneggiato. Se si trova in una posizione reale, devi occuparti di ripulirlo da solo, ma se si trova in una posizione temporanea, il sistema operativo si prenderà cura di esso.
  • Se il file viene creato durante l'esecuzione di un processo di backup, è possibile che il lavoro rilevi un file incompleto; le directory temporanee sono generalmente escluse dai backup, quindi il file verrà incluso solo dopo essere stato spostato nella destinazione finale.
  • La directory temp può trovarsi su un file system veloce ma volatile (ad esempio un ramdisk), che può essere utile per cose come il download di diversi blocchi dello stesso file in parallelo o l'elaborazione sul posto di un file con un sacco di ricerca. Inoltre, le directory temporanee tendono a causare più frammentazione delle directory con letture, scritture ed eliminazioni meno frequenti e mantenere la directory temporanea su una partizione separata può aiutare a mantenere la frammentazione delle altre partizioni.

TL; DR - per lo più si riduce all'atomicità, cioè, vuoi farlo in modo che (nella posizione finale) il file sia completo o non ci sia affatto in un dato momento.

    
risposta data 16.06.2012 - 17:12
fonte
15

Questo sembra essere un problema in Windows, in particolare per quanto riguarda la gestione del drag-drop.

Gli sviluppatori del client WINSCP hanno sviluppato la propria estensione della shell, che sovrascrive questo comportamento di trascinamento e consente di rilasciare il file nella cartella giusta immediatamente. Spiegano il trucco nella loro documentazione e, cosa più interessante, qual è il problema e come lo hanno risolto.

Ecco la parte interessante:

Windows drag&drop mechanics does not allow source application of drag&drop operation to find out easily, where the files are dropped. It is up to target application (Windows Explorer usually) to transfer files to destination. It is rather reasonable, because source application can hardly transfer files to all possible destinations. Keep in mind that you can drop files not only to a directory, but even to ZIP file (or any other archive), remote directory (via FTP, SFTP, SCP, …), trash, …

Obviously even Windows Explorer (or any other target application, like WinZip) cannot download files from any possible source (particularly it does not know SFTP/SCP).

Inoltre, specificamente per 7Zip: l'utente ray023 risponde a questa domanda nel SuperUser Stack Q & A: link

In sostanza, se invece di trascinare il file si utilizza il metodo "estrai qui" disponibile in bith 7-ZIP e Winrar, i file sono direttamente nella directory giusta.

    
risposta data 16.06.2012 - 17:06
fonte
0

Se devi eseguire qualsiasi tipo di elaborazione dei dati sul file (decodifica / converti / ecc.), allora è meglio usare un file temporaneo e una volta completato, e solo se completato, trasferisci il risultato alla destinazione finale .

Vantaggi:

  1. Solo i file completati raggiungono la destinazione
  2. Il file temporaneo potrebbe (dovrebbe) risiedere nel media veloce
  3. Evita la frammentazione sul file finale
  4. Permette l'uso di altri media come destinazione finale (ftp, cloud, qualunque cosa)
  5. I file temporanei interrotti sono più facili da pulire

Non vedo i reali benefici della scrittura diretta sulla destinazione durante l'elaborazione dei dati.

    
risposta data 10.01.2017 - 16:55
fonte

Leggi altre domande sui tag