Problema: Ho un enorme file di testo grezzo (assumere dei 3gig), ho bisogno di passare attraverso ogni parola nel file e scoprire che una parola compare quante volte nel file .lavorazione enorme file di testo
La mia soluzione proposta: Dividere il file enorme in più file e ogni file diviso avrà le parole in un modo ordinato. Ad esempio, tutte le parole che iniziano con "a" verranno memorizzate in un file "_a.dic". Quindi, in qualsiasi momento non eseguiremo più di 26 file.
Il problema in questo approccio è,
posso utilizzare i flussi di leggere il file, ma ha voluto utilizzare i thread per leggere alcune parti del file. Ad esempio, leggi 0-1024 byte con un thread separato (almeno 4-8 thread basati sul numero di processori presenti nella casella). È possibile o sto sognando?
Qualche approccio migliore?
Nota: dovrebbe essere una soluzione basata su C++ o c pura. Nessun database ecc., Sono ammessi.
Puoi essere più specifico su come verrà cercato il file di testo? Il file è relativamente statico e devi eseguire molte ricerche sul file statico? Dovrai effettuare la ricerca di molte parole diverse o è fondamentale che la ricerca di una singola parola termini il più rapidamente possibile? Ci sarà di solito uno schema nelle parole che stai cercando - I.E. alcune parole costituiscono la maggior parte delle tue ricerche. – jthg
Si desidera evitare di caricarlo in memoria in una volta, i flussi sono stati creati per la situazione. –
Qual è lo scopo dell'utilizzo dei thread per leggere diverse parti del file? Supponendo che il tuo file sia su un hard-disk convenzionale, lo streaming diretto attraverso il file è il modo più veloce per andare. Se hai più thread che richiedono più parti del file contemporaneamente, la testina del tuo hard disk salterà dappertutto, il che più che compenserà qualsiasi vantaggio ottenuto con il multi-threading. – StriplingWarrior