Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取大型数据库的Ruby并行/多线程编程_Ruby_Multithreading_Multicore - Fatal编程技术网

读取大型数据库的Ruby并行/多线程编程

读取大型数据库的Ruby并行/多线程编程,ruby,multithreading,multicore,Ruby,Multithreading,Multicore,我有一个ruby脚本,读取一个巨大的表(约2000万行),进行一些处理,并将其提供给Solr,以便进行索引。这一直是我们过程中的一大瓶颈。我计划在这里加快速度,我想实现某种并行性。我对Ruby的多线程特性感到困惑。我们的服务器有 ruby 1.8.7(2009-06-12修补级别174)[x86\u 64-linux]。从中可以看出,Ruby没有“真正的”多线程方法。我们的服务器有多个核心,所以对我来说使用似乎是另一种方法 我应该采用什么方法?同时,我们也非常感谢在并行数据库读馈送系统上的任何输

我有一个ruby脚本,读取一个巨大的表(约2000万行),进行一些处理,并将其提供给Solr,以便进行索引。这一直是我们过程中的一大瓶颈。我计划在这里加快速度,我想实现某种并行性。我对Ruby的多线程特性感到困惑。我们的服务器有
ruby 1.8.7(2009-06-12修补级别174)[x86\u 64-linux]
。从中可以看出,Ruby没有“真正的”多线程方法。我们的服务器有多个核心,所以对我来说使用似乎是另一种方法


我应该采用什么方法?同时,我们也非常感谢在并行数据库读馈送系统上的任何输入。

有机会升级到Ruby 1.9吗?它通常比1.8.7快

Ruby确实有一个问题,但如果多线程可以解决您的问题,那么您可以看看,因为它支持真正的线程


另外,您最好确保CPU是瓶颈,因为如果是I/O多线程,可能买不到多少钱。

您可以在操作系统级别并行化这一点。更改脚本,使其可以从输入文件中获取一系列行

$ reader_script --lines=10000:20000 mytable.txt
然后执行脚本的多个实例

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

Unix将自动将它们分发到不同的内核。

如何访问数据库?你能给我们看一些代码吗?我使用mysql gem,使用mysql的limit,offset参数一次获取N(~500)条记录。分批处理并分批将其送入Solr。是否需要更多信息?这似乎是一个合理的方法。我们有8个内核,所以我可以很容易地运行多达8个实例。