我有一个ruby脚本读取一个巨大的表(约20米行),进行一些处理并将其馈送到Solr以进行索引。这是我们流程中的一大瓶颈。我打算在这里加快速度,我想实现某种并行性。我对Ruby的多线程性质感到困惑。我们的服务器有
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
。从this blog post和this question at StackOverflow可以看出Ruby没有“真正的”多线程方法。我们的服务器有多个核心,因此使用parallel gem似乎是另一种方法。
我应该采用什么方法?此外,对并行数据库读取系统的任何输入都将受到高度赞赏。
答案 0 :(得分:4)
您可以在操作系统级别对此进行并行化。更改脚本,以便它可以从输入文件中获取一系列行
$ 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会自动将它们分发到不同的核心。
答案 1 :(得分:1)