我正在建立一个网站,其中的基本前提是有两个文件。index.php和file.txt。
File.txt有(目前)10兆的数据,这可能高达500mb。这个网站的想法是,人们去index.php,然后可以搜索到文件的任何位置。另一个特点是它们可以从搜索点读取高达10kb的数据。所以:
index.php?pos=432将获取文件上位置423处的字节。
index.php?pos=555&len=5000将从位置555开始从文件中获取5kb的数据
现在,想象一下这个网站一天会有成千上万的点击量。
我目前使用fseek和fread来提供数据。有没有更快的方法来做这件事?或者我的使用率太低,没有考虑高级优化,比如缓存每个请求的结果,或者将文件加载到内存中并从内存中读取它?
发布于 2013-08-03 03:03:36
每天数以千计的点击量,就像每隔几秒钟就有一个点击率?这肯定太低了,在这一点上不需要优化,所以如果这对你来说是最简单的,那么就使用fseek和fread。
发布于 2013-08-03 03:08:17
如果将所有数据保存到一个文件中很重要,我建议您将文件拆分为较小的文件块。
例如,您可以决定文件大小不应超过1MB。这意味着你必须将你的file.txt文件分成10个独立的文件:file-1.txt,file-2.txt,file-3.txt等等。
在处理请求时,您需要通过文件大小的分区pos参数确定要拾取的文件,并显示适当的数据量。在这种情况下,fseek函数的工作速度会更快,也许...
但不管怎样,你必须坚持使用fseek和fopen函数。
发布于 2013-08-03 03:15:32
编辑:考虑到这一点,只要您使用fseek()来获取字节偏移量,然后使用fread()来获取一定数量的字节,这应该不是问题。出于某种原因,我将您的问题理解为一个文件中有X行,这将是非常糟糕的。
问题是,您绝对是在用IO操作重创磁盘,而且您不仅会导致这一个文件/脚本的性能问题,而且还会导致任何需要该磁盘的性能问题。其他用户,操作系统等,如果你在共享主机上,我保证其中一个系统管理员正在试图找出你是谁,这样他们就可以关闭你。我会是
你需要找到一种方法来实现这两个目标:
在服务器上设置一个守护进程,该守护进程将文件加载到内存中,并在request.
您已经在按顺序提供数据,例如: 466到476行,从表中检索数据会快得多,如下所示:
创建表mydata (行INTEGER NOT NULL AUTO_INCREMENT,data VARCHAR(2048) )主键(行);
出自:
SELECT data FROM mydata WHERE 466和476之间的行;
https://stackoverflow.com/questions/18024175
复制相似问题