如何从大数据文件中取出符合条件的数据
【问题】
I how to make PHP script for large data scraping
【回答】
用 php 读取并计算大文件,需要用函数 fseek 设置文件指针,用 fread 函数每次将一段数据读入内存,然后循环处理。读取的过程还不算复杂,但计算的步骤就很难写了,比如:多条件查询、汇总分组、动态条件。 对于大文件,往往还需要用多线程并行计算来提高性能,代码会更难实现。
这种情况下可以试试 SPL 来实现,其相较于 php 代码更加简洁,效率也不错。比如:从大文件 emplyee.txt 中查询出 1981 年 1 月 1 日(含)之后出生的女员工,代码如下:
A |
|
1 |
=file("D:/employee.txt").cursor@t() |
2 |
=A1.select(BIRTHDAY>=date(1981,1,1) && GENDER=="F") |
3 |
=A2.fetch() |
如果条件是不定的,可以将 A2 的代码改为:A1.select(${where}),这样就可以将查询条件写在参数里,实现动态查询。
如果查询结果较多,内存放不下,还可以将 A3 改为:file(“D:/result.txt”).export(A2),这可以将计算结果直接输出到文件中。
如果想提高性能,还可以使用多线程并行查询,具体内容可以参考集算器教程并行计算小节