Attualmente sto scrivendo un'applicazione web e-learing. Mi dispiace se questo è un eccesso di informazioni, ma penso che sia meglio descriverlo in dettaglio in modo da ottenere l'idea. Ho riflettuto su ogni punto e vorrei solo sapere se il mio approccio è ok o totalmente fuori bersaglio perché questa è la prima volta che gestisco tanti dati "al volo".
I corsi di e-learning contengono file di diverso tipo, ad es. File di Word, PDF, Flash (sì, purtroppo senza alcun senso), video ecc. E 1 o più serie di test, ciascuno contenente domande in cui è possibile allegare le immagini (una per ogni domanda) e le risposte ovviamente (singolo o multiplo -choice), che può anche contenere immagini (una ciascuna) in aggiunta o al posto di testo puro. Al termine, un PDF (certificato) viene creato e memorizzato sul server che l'utente può scaricare in qualsiasi momento.
Flusso di lavoro pianificato:
- La creazione del corso viene gestita in modo analogo a una verifica nei negozi online, significa che fai clic su "Nuovo corso" e una finestra si apre e al in alto vedi un diagramma di flusso che mostra dove ti trovi nel processo di creazione sono in questo momento L'intero processo dovrebbe essere dinamico, quindi le informazioni vengono memorizzate solo nel "checkout" finale. Ogni parte del processo si trova su una "pagina" separata, ma puoi tornare indietro e modificare le cose. Verrà visualizzato in questo modo (aggiungerò descrizioni di testo ai punti ovviamente):
- Laprimapaginacontienesoloinformazionidibase,ades.Nome,versione,brevedescrizioneeunelencodiargomentiinsegnatiinquestocorso.
- Lasecondapaginaèdoveiniziaildivertimento:caricapiùfileconladescrizione.Questicaricamentidifilenondovrebberodisabilitarel'usodelmodulo.Ivideodevonoesserecaricatiecodificatiinbackground.
- Terzapagina:vengonocreatisetditest,ovverocategorie(setditest)consottocategorie(domande)esottocategorie(risposte)ancheconpiùcaricamentidifile(immagini).
- 4apagina:panoramicafinaleeconferma.
Comevogliogestirelecose:
Pre-archiviazionedeidati
Vorreiutilizzareletabelletemporaneeperquestocasoperarchiviareipercorsideifileeidatidibase.Poichéilprocessodicreazionepuòessereannullatoinqualsiasimomento,tuttiifileappartenentiallevociperquestoprocessodicreazionecorrentedevonoesserecancellati.Ciòsignificachelacreazioneinizia->Ilprocessovienecreatonellatabellatemporaneacreation-processes
.Dopoaverriempitolaprimapagina,idativengonoarchiviatiinunatabellatemporaneaconfkperelaborarel'id,lostessovaleperqualsiasifilecaricato.
Codificavideo
Nonappenavienecaricatounfilevideoeseguiròunoscriptphpinbackgroundcheimpostaunavocedidatabasenellatabellatemporaneaperilfilevideoeavvialacodificatramiteffmpeg(3fileperognifilevideo:mp4,ogg,webm).Ifilecaricatipossonoavere4stati:"Caricamento", "Elaborazione", "Fine" e "Errore".
Archiviazione permanente
Al completamento, i dati delle tabelle temporanee vengono trasferiti in tabelle permanenti e quindi eliminati. I file ancora in fase di elaborazione (poiché la codifica video può richiedere del tempo) avranno il loro stato trasferito nella tabella permanente. Lo script di codifica in background controlla il nome del file (che è univoco: timestamp + md5-hash del nome file) prima nella tabella temporanea e poi nella tabella permanente. Se non esiste alcuna voce in entrambi, elimina i file creati.
Garbage collection
Oltre ad usare solo tabelle temporanee avrò una tabella permanente "tmp_files" contenente le informazioni sul percorso di TUTTI i file caricati. Le voci e i file elencati in questa tabella vengono cancellati dopo l'annullamento del processo, anche dopo che le voci sono state cancellate (ma non i file) perché sono ora memorizzate nella tabella normale (file di corso). Quindi, se le cose vanno male posso eseguire un cron job ogni ora che confronta le voci di "tmp_files" con i file nella tabella normale e nella tabella temporanea e se contiene una voce che non è presente in una delle altre tabelle questo significa c'è un file zombie che deve essere cancellato (insieme alla voce ovviamente).
Bene, è così lontano. Non so se le domande sulla pianificazione del software siano benvenute qui, ma mi piacerebbe davvero sapere se questo è un buon modo per affrontare questo processo o meno e se mi manca qualcosa di essenziale.