Ho bisogno di costruire un indice per un file di testo ASCII molto grande (50 GB +), che mi permetterà di fornire veloce accesso in lettura casuale di file (ottenere la linea n-esima, ottenere ennesima parola in linea ennesima). Ho deciso di utilizzare List<List<long>> map
, dove l'elemento map[i][j]
è la posizione della parola jth di ith nel file.struttura dei dati per l'indicizzazione grande file
Costruirò l'indice in modo sequenziale, ovvero leggo l'intero file e l'indice di popolamento con map.Add(new List<long>())
(nuova riga) e map[i].Add(position)
(nuova parola). Quindi recupererò la posizione della parola specifica con map[i][j]
.
L'unico problema che vedo è che non posso prevedere il conteggio totale delle linee/parole, quindi mi imbattersi in O (n) su ogni List
riallocazione, nessuna idea di come posso evitare questo.
Ci sono altri problemi con la struttura dati che ho scelto per l'attività? Quale struttura potrebbe essere migliore?
UPD: il file non verrà modificato durante il runtime. Non ci sono altri modi per recuperare il contenuto tranne quello che ho elencato.
Giusto per chiarire: questo file cambierà? Inoltre, hai solo intenzione di accedervi tramite la linea X Word Y, o dovrai cercare per parola ad esempio? – Haedrian
@Haedrian, vedi upd. – vorou