Scenario : sto progettando un sistema in cui l'utente carica un file di dati strutturato con dimensioni ~ 0-5 GB. Devo permettere all'utente di analizzare questo file ed eseguire alcune trasformazioni sul file che essenzialmente significano l'esecuzione di funzioni che estraggono le informazioni da questo file e / o cambiano struttura / dati nel file. L'utente può eseguire queste operazioni in qualsiasi ordine il maggior numero di volte possibile. Per cominciare sto valutando se è possibile dare all'utente un'esperienza in tempo reale (eccellente come) nel senso che le azioni stanno accadendo istantaneamente.
Opzione 1 : una semplice opzione consiste nel memorizzare questi dati in un database e convertire le azioni degli utenti in query ed eseguirle contro il database. Ha diversi problemi (1) alcune operazioni non saranno direttamente disponibili nel database (2) I / O costo per operazioni db (3) per operazioni non-db, dovranno portare i dati in memoria, eseguire operazioni, riscrivere . Tutto ciò rimuoverà l'esperienza utente istantanea che sto prendendo di mira.
Opzione 2 : esiste un database in memoria, ad es. memsql, vale la pena considerare in questo caso? L'idea è che tutti i dati siano in memoria e le operazioni sarebbero molto più veloci. Il rovescio della medaglia è che avrò bisogno di un'enorme memoria, se ci sono anche 5-10 clienti puoi immaginare i requisiti di RAM.
Opzione 3 e Domanda : non ho molta esperienza con i docker ma seguo il percorso che vale la pena esplorare: non appena inizia una sessione utente, creo un container mobile (su alcuni IAAS gestiti) con abbastanza RAM e porta i dati dell'utente nella RAM del contenitore. Tutte le operazioni dell'utente avvengono nella RAM (tramite codice) e una volta che l'utente si disconnette, scaricare i dati nel datastore. ha senso? Il tempo di spawn della docker è abbastanza piccolo per un caso come questo?