解决方案 »

  1.   

    那就直接操作DB了。  不用操作文件了。
    当然了,关键是你的文件在你的场景中能存入db中不
      

  2.   

    这些数据可以放到xml文件中吗
      

  3.   

    楼主要求的是文件方式,所以其他方案不应被采用显然第一列是唯一的,因为那是一个序号
    由于列间是制表符分隔的,所以每行长度不会是固定的(如果是定长数据,处理起来要简单些)
    于是你需要创建一个索引文件,方法如下:
    $fp = fopen($filename, ‘r');
    $t = 0;
    while($buf = fgets($fp)) {
      $ind[strtok($buf, "\t")] = $t;
      $t = ftell($fp);
    }
    fclose($fp);
    这样就得到了一个每个序号在文件中的位置的数组,排序后可写入定长记录文件中(索引文件)
    使用时先用二分法在索引文件中找到指定序号在数据文件中的位置
    500万最多折腾22次就找到了
    然后在数据文件中 fseek 定位的查到的位置,fgets 读取对应的行
    500万数据的索引放在数组中也是可接受的,不过 memory_limit 要大于 500M
      
      

  4.   

    可否用linux grep 命令找到該行,然後直接獲取該行數據呢?
    這樣會比php快很多的。
      

  5.   

    都500W数据了还用文件方式?为什么不想办法改善服务器?哪怕用个dbf或mdb的数据库也行啊
      

  6.   

    基于key-value的固定存储,可以用redis实现,
    如果不是那么考虑效率的话,可以试试用awk,不至于特别慢。