在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

时间:2015-09-12 10:57:23

标签: ruby regex database search

我正在编写一种算法,在某些阶段必须使用正则表达式搜索数百万个字符串。

通常我使用像Mongo或SQL这样的索引数据库来搜索大量数据,但这次我只限于文本文件或哈希/数组。

我想知道是否存在组织搜索此类数据的有效方法,可能类似于数据库中的索引。截至目前,我的想法是将数据拆分成许多单独的文本文件(基于字符串长度等),但也许有更好的方法。

2 个答案:

答案 0 :(得分:3)

一些想法:

  • 如果数据是自由格式文本,那么除了使用像弹性搜索这样的工具并花费大量时间设置它来理解您的数据之外,没有好办法组织它。如果这是一次性工作,那么这一步将抵消任何可能的节省。如果你必须定期/不断地这样做,这可能是一个重大的胜利。
  • 如果您选择使用像Ruby这样的脚本语言来执行此操作,请不要考虑使用readreadlines或使用任何形式的“sl”“数据的任何解决方案,因为这不是可扩展,并且比使用foreach的逐行IO慢得多。
  • 使用Ruby可以轻松地读取包含数百万行的文件而无需任何预处理。 Ruby对正则表达式的支持很好,但写得不好的正则表达式可以大大降低速度。检查是否可以使用子字符串搜索,因为它们是最快的,然后是锚定的正则表达式,后跟未固定的正则表达式。
  • 考虑从命令行使用grepegrep。它们是为了做你想做的事而编写的,并且是每小时在世界各地的数百万个系统中使用的经过强化战斗的工具。将Ruby包裹起来以控制他们将要做的事情并获取结果很容易。

我在SO上有答案显示正则表达式与子字符串搜索的基准,以及对线IO的诽谤。

答案 1 :(得分:0)

你可以运行外部程序吗?我建议您将数据组织为文本文件并使用the_silver_searcher - 它与grep类似,但是much much faster并且完全支持Perl正则表达式。