面试题,关于处理大量数据的问题

李先生
  • 22

有50万个URL在一个文件中,每一行有一个URL,请写出简单的流程图抓取这些网页中的内容,并把页面里面的a标签中的链接提出保存到数据库

我一开始想的是存到数据库再分批取出处理,但是面试官一听就不再和我讨论了, 不知道有没有问题?希望大佬们解答一下

回复
阅读 1.1k
4 个回答

看题目,我觉得面试官的意图应该是想考察php读取大文件。后面的内容我只能想到file_get_contents + 正则,然后insert到数据库

回到php读取大文件,大概有以下办法:

1、gets逐行读取
2、利用php的yield特性,也就是迭代器

PHP读取大文件,我觉得也是用yield

<?php
function readTxt()
{
    $handle = fopen("./test.txt", 'rb');
    while (feof($handle)===false) yield fgets($handle);
    fclose($handle);
}

foreach (readTxt() as $key => $value) {
    echo $value;
}

可以了解下mapReduce,这就是搜索引擎的一部分,谷歌和百度肯定有过解决方案的。顺着mapReduce了解下吧。可以看下这个MIT的公开课了解系统了解一下:https://www.bilibili.com/vide...

可能是希望你把这些待采集URL放到消息队列里,比如Kafka之类

宣传栏