计算大型字符串数据集的最快设置是什么?

时间:2011-07-22 05:19:23

标签: ruby duplicates hardware large-data

对于我的日常工作,我的任务是设置一个计算机系统来在大型字符串数据库上运行计算。我已经建立了概念验证,但没有低级知识来优化硬件和软件环境。我希望在这方面有一些指导。

设定:

  • 包含字符串的数据库中的100,000条记录
  • 我将执行字符串相似度计算以查找近似重复项
    • 即。每个字符串对着其他所有字符串,所以〜50亿次计算
  • 我使用SQLite3作为使用1000个样本行的数据库
  • 在Ruby中编写了概念证明
  • 总工作应该在几天内运行 - 越快越好,但收益递减。这是一次性通行证,所以如果桌面设置可以在几天内完成,我就不需要超级计算机

我在寻找:

  • 如果我正在构建一个自定义框来运行这项工作(以及可能类似性质的未来工作),那么我应该关注哪些硬件进行优化?即我应该把我有限的预算花在一个非常快的GPU上吗?中央处理器?大量的RAM?我不知道Ruby在足够​​低的水平上知道这种操作的瓶颈在哪里
  • 我错过了更好的方法吗?我不会批准任何主要购买的软件或昂贵的硬件,至少在我能证明这种方法适用于此之前。但有人能建议一种更有效的方法来检测不精确的重复吗?

3 个答案:

答案 0 :(得分:4)

首先,100,000个字符串现在不具备大型数据集的资格,因此不必过多担心硬件问题。以下是我之前的工作(与搜索和机器翻译相关)的一些建议,以及当前我一直处理几个100k到数百万个XML记录的建议:

  • 你想要RAM。很多。
  • 正如索伦所说,你想确保你的算法很好。
  • 明智地选择您的数据库。 Postgres例如具有优秀的string functions并且直接在DB中执行某些操作可以非常快。我说你想要很多内存吗?
  • 您的工作听起来很容易划分为可以并行处理的较小子任务。如果确实如此,您可能需要查看MapReduce。在之前的工作中,我们有非常好的工作站(4核,8 GB的RAM)从未关闭,因此我们将其中的一些转变为可以做有用的Hadoop集群。由于这些机器在日常工作中都非常强大,用户甚至没有注意到。将某些内容转换为MapReduce作业通常并不困难,另一个优点是您可以在将来为类似任务保留设置。
  • 对于Ruby特定的瓶颈,MRI中最大的一个通常是垃圾收集,这要归功于它的世界性,它是超级慢的。当我们定期对此进行分析时,结果证明是一个问题。有关Ruby GC的详细信息,请参阅文章The fully upturned bin的原因。如果你开始使用Ruby,你可能想要将MRI与JRuby进行比较,从我对后者的经验以及像JVisualVM这样的分析器,如果JRuby表现得更好,我也不会感到惊讶。

答案 1 :(得分:2)

  

总工作应在几天内完成......
  这是一次性通行证...
  我错过了一个更好的方法......

如果这是一次性任务,你真的应该在亚马逊上运行 - 获得一台超大型(4Core,15GB RAM)机器几个小时,然后在那里运行。

答案 2 :(得分:1)

您的字符串相似性算法远比硬件规格重要。

关于字符串相似性的算法的关键问题是"你什么时候期望字符串相似?"您是否考虑子串,拼写错误,语音,打字错误。

This SO链接对algos进行了很好的讨论。 100,000个记录实际上是非常少的数据(在我的世界中),但为了便于实现,一旦你有一个好的算法,你应该尽量获得尽可能多的RAM。在Ruby中执行它可能不是性能视角的最佳选择。