我在PHP应用程序中有一个网页,它访问专有格式数据文件,解析它,并根据用户输入生成结果。它完美无缺。
但是,数据文件现在变得越来越大,并且需要更长的时间来解析。用户请求也在增加。
在它完全失控之前,我想要一点点地优化应用程序而不用花太长时间去做。
此时,数据文件在类中解析,该类知道该文件的所有内容。
输出只需要精确到数据文件的4小时内。
对我进行优化的最快方法是每小时在cron事件上加载和解析文件,并将该数据保存在网页加载速度更快的地方,这意味着每小时解析一次文件而不是每次请求。
这样做的最佳方式是什么?
我立即想到了“数据库”,但这似乎是很多工作试图存储所有数据,并且任何数据都可以在文件中发生变化,因此我不得不每小时丢弃表格而不是尝试比较数据。重新填充,Web应用程序可能会向用户返回不正确的数据。
那么我认为有可能把一个类,保存到磁盘,并且Web应用程序在需要时将这些数据重新加载到内存中?意思是对应用程序的修改很少(以及在cron上运行的小脚本)。
您可以序列化该类,但这不是真正推荐的。
当你使用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秒的数据,当它为空时,它将从磁盘加载它。