开发者社区> 问答> 正文

请教各位PHP如何提高文件查询效率?

要从一个文件中查出以唯一字符串 a 开头的那一行,怎么能提高查询效率。
我现在的方法很笨:
1.按行把文件内容存入一个数组
2.用正则去match数组中的每一个元素直到找到为止
这样感觉效率很低,因为文件有17万行,所以最低也要循环17万次...
初学者希望得到大家的帮助,谢谢。

展开
收起
落地花开啦 2016-06-13 13:24:16 2129 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    把这个文件处理成一个用字典树(trie)或者B树存储的结构,然后就可以快速查询了。
    前面说得可能太抽象,给你一个容易实现的算法吧。效率虽然比trie/b-tree略低,但是也很够用。
    预处理

    1. 遍历这个文件,记录每行的offset记录下来,作为int的数组。
    2. 对这个数组进行间接排序。注意,所谓间接,指的是排序时比较的是这个数组元素指向的行。
    3. 将这个数组保存起来(17w个int,也就不到700KB,随便什么地方保存)。
      查询
    4. 读取这个数组。
    5. 使用"间接"二分查找。注意,查找时比较的是对应行的前n个字符,n == strlen(a)
    2019-07-17 19:35:41
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载