我希望grep可以处理10 TB文件多长时间?

爆米花

我有一个10 TB的文件,其中包含来自多本书的单词,并且我正在尝试grep某些不常见的字符串(无正则表达式)。例如:

grep "cappucino" filename

我正在尝试估计需要多长时间。我并不是真的在寻找是否正确的方法。我想详细了解调用grep时实际发生的情况。

如果我错了,请纠正我:

我使用读取速度大约为200 MB / s的机械硬盘驱动器,因此大约需要一千万/ 200 = 50000秒= 14小时才能完成。这是一个准确的估计吗?

马特乌斯·戴姆奇克(Mateusz Dymczyk)

最简洁的答案是不。

更长的答案是:这取决于。

更长的答案是:grep的性能取决于很多因素:

  • 您是否在运行固定的字符串搜索(-F,fgrep)-grep使用的是Boyer-Moore算法,其本身无法找到正则表达式,因此grep会(或至少曾经用来)先找到一个在您的正则表达式中固定字符串,尝试使用文本中的BM查找它并进行正则表达式匹配(不确定当前实现是使用NFA还是DFA实现,可能是混合实现)
  • 您的图案多长时间-BM对于较长的图案工作更快
  • 您将有多少场比赛-比赛越少,比赛就会越快
  • 您的CPU和内存是多少-硬盘将仅在读取期间为您提供帮助,而在计算期间不会为您提供帮助
  • 您在grep上还有哪些其他选择
  • 14小时甚至可能不是您的下限,因为Boyer-Moore足够聪明,可以计算可能发生下一次匹配的偏移量,因此不需要读入整个文件。但是,这确实取决于实现,这只是我的猜测以更长的模式重新运行下面的测试后,我可以降至0.23sec,我认为我的磁盘没有那么快。但是可能会涉及一些缓存。

例如,我在500MB / s的SSD上运行(至少这是制造商所说的),并以非常短的模式(很少的字符)对200MB的文件进行grep操作,可以得到:

808320点击

real    0m1.734s
user    0m1.334s
sys 0m0.120s

随着0点击:

real    0m0.059s
user    0m0.046s
sys 0m0.016s

@Edit:简而言之,了解Boyer-Moore :-)

@ Edit2:很好地检查grep的工作方式,而应该检查源代码,我在上面描述了非常通用的工作流程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文件名可以使用多长时间?

来自分类Dev

文件名可以使用多长时间?

来自分类Dev

处理请求需要多长时间

来自分类Dev

我的Ubuntu支持多长时间?

来自分类Dev

如果我只有一个工作节点,则处理文件需要多长时间?

来自分类Dev

我可以检索签名文档多长时间?

来自分类Dev

我可以保留EBS快照多长时间?

来自分类Dev

类型构造函数的名称可以保留多长时间?

来自分类Dev

Android Wear DataMap条目可以保持多长时间

来自分类Dev

Nest OAuth令牌可以使用多长时间?

来自分类Dev

WSAPI 1.42可以使用多长时间

来自分类Dev

PostgreSQL表名可以使用多长时间?

来自分类Dev

RSocket连接可以持续多长时间?

来自分类Dev

ARP表项可以缓存多长时间?

来自分类Dev

类型构造函数的名称可以保留多长时间?

来自分类Dev

WSAPI 1.42可以使用多长时间

来自分类Dev

准备的语句可以使用多长时间?

来自分类Dev

延迟的数据包可以持续多长时间?

来自分类Dev

Tweepy - API 会话可以保持打开多长时间

来自分类Dev

bash 命令可以使用多长时间?

来自分类Dev

我的Linux系统已经运行了多长时间?

来自分类Dev

安装的RAM,我要等待多长时间?

来自分类Dev

我的appWidget实例存在多长时间

来自分类Dev

我的Cookie令牌应保留多长时间?

来自分类Dev

我可以在不激活的情况下使用Windows 10多长时间?

来自分类Dev

我可以看到我在Xcode项目上工作了多长时间吗?

来自分类Dev

我的数据可以在Ubuntu One上保留多长时间

来自分类Dev

我的数据可以在Ubuntu One上保留多长时间

来自分类Dev

Python httplib [多个请求]-我可以保持多长时间打开连接?

Related 相关文章

热门标签

归档