PHP文件寻求性能优化

时间:2013-08-02 18:54:32

标签: php performance caching fread fseek

我正在建立一个网站,其基本前提是有两个文件。 index.php和file.txt。

File.txt有(目前)10megs的数据,这可能高达500mb。网站的想法是,人们去index.php,然后可以寻找文件的任何位置。另一个特点是它们可以从寻找点读取多达10kb的数据。所以:

index.php?pos=432将获取文件位置423处的字节。

index.php?pos=555&len=5000将从位置555开始从文件中获取5kb的数据

现在,想象一下该网站每天会有数千次点击。

我目前使用fseekfread来提供数据。有没有更快的方法呢?或者我的使用率太低而无法考虑高级优化,例如缓存每个请求的结果或将文件加载到内存中并从那里读取它?

4 个答案:

答案 0 :(得分:0)

每天有数千次点击,就像每隔几秒一次?这肯定太低了,不需要在此时进行优化,所以只要使用fseek和fread,如果这对你来说最简单。

答案 1 :(得分:0)

如果您将所有数据保存到文件中至关重要,我建议您将文件拆分为一小块较小的文件。

例如,您可以做出决定,文件大小不应超过1 MB。这意味着您必须将file.txt文件拆分为10个单独的文件:file-1.txtfile-2.txtfile-3.txt等等......

当您处理请求时,您需要确定要通过文件大小的pos分区来获取的文件,并显示适当的数据量。在这种情况下,fseek函数可以更快地工作,也许......

但无论如何,你必须坚持使用fseekfopen函数。

答案 2 :(得分:0)

编辑 :现在我认为,只要您使用fseek()转到字节偏移量然后使用fread()获取一定数量的字节它应该不是问题。出于某种原因,我把你的问题看作是从一个非常糟糕的文件中提供X个的。


问题是你绝对使用IO操作锤击磁盘,并且你不仅仅是因为这个文件/脚本导致性能问题,而是因为任何需要它的东西都会导致性能问题磁盘。其他用户,操作系统等,如果你在共享主机上我保证其中一个系统管理员试图找出你是谁,这样他们就可以拒绝你。 [我会]

你需要找到一种方法:

  1. 将此内容卸载到内存中 在服务器上设置一个守护程序,该守护程序将文件加载到内存中并根据请求提供块。
  2. 将其卸载到更高效的地方,例如mySQL 您已经在顺序块中提供数据,例如:第466行到第476行,从表中检索数据要快得多:

    CREATE TABLE mydata (
      line INTEGER NOT NULL AUTO_INCREMENT,
      data VARCHAR(2048)
    ) PRIMARY KEY (line);
    

    由:

    SELECT data FROM mydata WHERE line BETWEEN 466 AND 476;
    

答案 3 :(得分:0)

如果文件永远不会更改,并且真正受限于最大大小,我只需安装ramdisk,并拥有一个启动脚本,将文件从永久存储器复制到RAM存储器。

这可能需要在Linux上托管网站,如果你还没有。

这样可以保证文件段是从内存中提供的,而不依赖于OS文件系统缓存。