Sto permettendo agli utenti di caricare un file .csv relativamente grande (circa 1 MB): conterrà migliaia di record che rappresentano ciascuno uno dei miei oggetti di business. Voglio che gli utenti caricino il file e poi vengano visualizzati i risultati paginati (dopo che il mio server lo analizza, aggiungi i messaggi di convalida, ecc.). Possono rivedere / modificare i risultati pagina per pagina finché non sono soddisfatti. A questo punto, farebbero clic su un pulsante Salva e tutti i dati verrebbero salvati nel mio database. In alternativa, potrebbero fare clic su un pulsante Annulla: in questo modo verranno rilasciati tutti i dati caricati e nessuno di essi verrebbe a contatto con il mio database.
Preferirei non utilizzare le tabelle di "staging" nel mio database. E con questo intendo memorizzare i dati caricati nel mio db quando viene caricato e successivamente cancellarlo se l'utente sceglie di annullare l'intera operazione. Inoltre, la mia situazione è tale che dovrei eliminarla dalla tabella "staging" anche se l'utente ha scelto di salvare i dati (lavorando con i sistemi legacy).
Il mio ragionamento iniziale per NON utilizzando tabelle di staging è il seguente: questa funzione potrebbe essere solo un piccolo sottoinsieme delle mie esigenze. Potrei realisticamente avere diverse funzionalità estremamente simili del mio sito che potrebbero richiedere la necessità per le tabelle di "staging". Preferirei non avere il mio database disseminato (per mancanza di una parola migliore) con tali tabelle.
Preferirei anche evitare di salvare il file su disco in quanto tale tipo di soluzione è IMHO non scalabile quanto la memorizzazione del file all'interno del database.
Inoltre, va notato che tutta la convalida e l'analisi dei dati devono (nelle mie circostanze) essere eseguite su server.
La mia domanda è questa: per evitare tabelle di "staging" apparentemente eccessive / non necessarie nel mio database, è una cattiva pratica archiviare TUTTI i dati del file caricato (cioè in una matrice di byte o in una stringa codificata base64) in un proprietà sul mio modello di vista? L'intento è di mantenere questo valore di grandi dimensioni sul mio modello di vista mentre l'utente sfoglia le pagine e le revisiona / modifica.
Anche se penso che questa domanda sia abbastanza indipendente dalla tecnologia, se aiuta, sto usando ASP.Net MVC / Web API e un database MSSQL.