我在PHP应用程序中有一个网页,可访问专有格式的数据文件,对其进行解析,并根据用户输入生成结果。完美的作品。
但是,数据文件现在变得越来越大,并且解析时间也越来越长。用户请求也在增加。
在一切消失之前,我想对应用程序进行一些优化,而不必花费太长时间。
目前,数据文件在一个类中进行解析,并且该类知道有关文件的所有信息。
输出仅需要精确到数据文件的4小时之内。
对我而言,最优化的最快方法是每小时在cron事件上加载并解析文件,并将该数据保存在网页可以更快加载的位置,因此意味着每小时解析一次文件,而不是每小时解析一次每个请求。
做到这一点的最佳方法是什么?
我立即想到了“数据库”,但是似乎要进行很多工作来尝试存储所有数据,并且任何数据都可以在文件中更改,因此不必尝试比较数据,而必须尝试删除表每小时并重新填充,这是Web应用程序随后可能向用户返回错误数据的机会。
因此,我认为可以上一堂课,将其保存到磁盘上,然后Web应用程序在需要时将数据重新加载到内存中吗?这意味着对该应用程序的修改很少(并且在cron上运行了一个小的脚本)。
答案 0 :(得分:1)
您可以序列化该类,但实际上不建议这样做。
由于您使用的是php,并且只对结果集感兴趣,因此最简单的方法是使用uapc存储数据,这只是内存中的键/值存储。
示例:
function GetData() {
$cached = apc_fetch('myParsedData');
if(!empty($cached)) {
return $cached;
}
$data = file_get_contents(...);
$result = Parse($data);
apc_store('myParsedData', $result, 3600);
return $result;
}
function Parse($data) {
//do something
return $result;
}
这将存储数据3600秒,当它为空时,将从磁盘加载数据。