Laravel - Sistema di gestione file BLOB - Possibili ostacoli?

-1

Sto lavorando a questo strano progetto in cui ho bisogno di caricare file enormi (500mb +) e memorizzarli in una tabella postgresql come un blob.

Prima di iniziare a dirmi che la memorizzazione dei file nel database è errata e che dovrei usare il filesystem, ascolta (leggi) i miei motivi:

  1. L'accesso ai file deve essere autorizzato tramite l'app, laddove vengono applicate le autorizzazioni individuali ad essi.
  2. Avrò bisogno di conservare una cronologia (versioning) di ogni file, dando accesso alle precedenti modifiche.
  3. Non posso permettermi il rischio di perdere coerenza tra le relazioni e i file / versioni nel corso degli anni.

Ora, alle domande:

  1. rischio di ottenere timeout durante il caricamento / download o il processo di download conta come un "keep-alive"?
  2. I file sono completamente caricati in memoria per ciascun utente o sono memorizzati nel buffer (in streaming) per l'utente? Devo consentire a migliaia di utenti di scaricare file di grandi dimensioni contemporaneamente.
  3. Ci sono pacchetti che possono aiutarmi con questo?
posta Pedro Moreira 03.03.2015 - 19:57
fonte

1 risposta

1

Questo suona come un dado molto difficile da decifrare, non sono nemmeno sicuro che possa essere incrinato.

Il database diventerà enorme e quindi lento in un breve periodo di tempo, il caching non accadrà a un livello apprezzabile.

Mantenere più copie di tali file di grandi dimensioni per il controllo delle versioni richiederà una quantità eccessiva di spazio su disco (che è economico, scontato, ma si tratta di anni di file di grandi dimensioni).

sicuro hai questi requisiti? Il modo in cui è stato immaginato, questo progetto richiederà enormi risorse hardware (per non parlare dell'ampiezza di banda, sia in entrata che in uscita).

Se il tuo cliente / capo ha un budget da avviare, allora è bello, ma volevo solo farlo notare. Questa è una sfida difficile da un punto di vista ingegneristico, il tipo di sfida che si vuole evitare se possibile.

L'unica cosa che posso pensare per salvare un po 'di spazio su disco è la memorizzazione della prima versione di un file e quindi il calcolo e la memorizzazione dei delta binari su di esso.

Non conoscendo la natura dei file binari con cui hai a che fare, posso solo suggerirti di cercare bsdiff o persino Courgette di Google (che è quello che usano per spingere gli aggiornamenti di Chrome fuori). Hanno il vantaggio aggiuntivo di comprimere oltre a generare un delta binario. Dovrai comunque passare a C o C ++ per quel sottosistema, perché non sono sicuro che PHP lo taglierebbe.

Sia bsdiff che Courgette sono orientati verso gli eseguibili, che possono cambiare selvaggiamente anche per piccole modifiche al codice sorgente, quindi potrebbero funzionare ancora meglio per i file che non cambiano che molto da una versione all'altra successiva.

E questo è tutto ciò che posso suggerire.

    
risposta data 03.03.2015 - 20:53
fonte

Leggi altre domande sui tag