Attualmente sto affrontando un problema di grattacapo, sto lavorando con un set di dati di grandi dimensioni (quando dico grande, intendo miliardi di righe di dati) e sono preso tra velocità e scalabilità.C# - Memoria di grandi dimensioni
È possibile memorizzare i miliardi di righe di dati nel database, ma la mia applicazione deve controllare costantemente se una nuova riga di dati esiste nel set di dati, in caso contrario, inserirla, altrimenti recuperarla.
Se dovessi utilizzare una soluzione di database, valuto ogni chiamata al database per recuperare una riga di dati da 10 ms (stima ottimistica), ho bisogno di recuperare circa 800k record per ogni file che elaboro nella mia applicazione , che significa (10ms x 800k = 2.22 hours)
per file da elaborare. Tale intervallo è troppo lungo per analizzare ed elaborare 1 file, considerando che la quantità di tempo necessaria per recuperare una riga di dati dal database aumenterà quando il database crescerà a miliardi e miliardi di righe.
ho pensato anche di memorizzare un List
o HashSet
nella memoria locale per confrontare e recuperare, ma non è andare a lavorare fuori come non sarò in grado di memorizzare miliardi di record (oggetti) in memoria.
Pls un consiglio su cosa dovrei fare per la mia situazione.
Edit: Oh ya, ho dimenticato di dire che ho già implementato un semi-cache, una volta che un record viene recuperato, verrà memorizzato nella cache nella memoria, quindi se lo stesso record ha bisogno di essere recuperato ancora una volta, sarà essere recuperato dalla memoria, invece, ma mi trovo ad affrontare lo stesso problema, raggiungerò un punto nel tempo in cui la memoria non può più contenere altri dati memorizzati nella cache.
Esiste un modo per determinare in modo ragionevole quali righe saranno probabilmente necessarie per il recupero, ad es. più recente, cioè implementare una capacità di memorizzazione nella cache parziale? – StuartLC
Oh ya, ho dimenticato di dire che ho già implementato una semi-cache, una volta che un record è stato recuperato, sarà memorizzato nella cache, quindi se lo stesso record deve essere recuperato nuovamente, verrà recuperato dalla memoria invece, ma devo affrontare lo stesso problema, raggiungerò un punto nel tempo in cui la memoria non può più contenere altri dati memorizzati nella cache. – Dan
Usando un HASH per confrontare ogni file che si crea, associare i file con il codice hash, quindi è necessario confrontare HASH non FILE? –