2011-09-28 12 views
6

Ho uno script ruby ​​che legge una tabella enorme (~ 20m righe), esegue alcune elaborazioni e lo invia a Solr per scopi di indicizzazione. Questo è stato un grosso collo di bottiglia nel nostro processo. Sto pensando di velocizzare le cose qui e mi piacerebbe raggiungere un qualche tipo di parallelismo. Sono confuso sulla natura multithreading di Ruby. I nostri server hanno ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]. Da this blog post e this question at StackOverflow è visibile che Ruby non ha un approccio "reale" multi-threading. I nostri server hanno più core, quindi usare parallel gem sembra un altro approccio per me.Ruby Parallel/Multithread Programmazione per leggere un enorme database

Quale approccio devo seguire? Inoltre, qualsiasi input su sistemi di lettura parallela del database sarebbe molto apprezzato.

+0

Come si accede al database? Puoi mostrarci un codice? –

+0

Io uso mysql gem per recuperare N (~ 500) record alla volta usando il limite di MySQL, i parametri di offset. I batch li elaborano e li alimentano in batch a Solr. Sono necessarie più informazioni? –

risposta

1

Qualche possibilità di aggiornamento a Ruby 1.9? Di solito è più veloce di 1.8.7.

È vero che Ruby soffre di un numero GIL ma se il multithreading risolverebbe il tuo problema, allora puoi dare un'occhiata a JRuby poiché supporta il vero threading.

Inoltre, è meglio assicurarsi che sia la CPU il collo di bottiglia perché se il multithreading I/O potrebbe non comprarti molto.

4

È possibile parallelizzare questo a livello di sistema operativo. Modificare lo script in modo che possa richiedere un intervallo di righe dal file di input

$ reader_script --lines=10000:20000 mytable.txt 

Quindi eseguire più istanze dello script.

$ reader_script --lines=0:10000 mytable.txt& 
$ reader_script --lines=10000:20000 mytable.txt& 
$ reader_script --lines=20000:30000 mytable.txt& 

Unix li distribuirà automaticamente a diversi core.

+0

Questo sembra un approccio ragionevole. Abbiamo 8 core, quindi posso eseguire fino a 8 istanze molto facilmente. –

+0

Qualsiasi documentazione su 'reader_script'? Non riesco a trovarne. – Chamnap

Problemi correlati