在PHP中保存和恢复类作为一种优化技术?

时间:2019-02-17 10:18:10

标签: php data-access

我在PHP应用程序中有一个网页,可访问专有格式的数据文件,对其进行解析,并根据用户输入生成结果。完美的作品。

但是,数据文件现在变得越来越大,并且解析时间也越来越长。用户请求也在增加。

在一切消失之前,我想对应用程序进行一些优化,而不必花费太长时间。

目前,数据文件在一个类中进行解析,并且该类知道有关文件的所有信息。

输出仅需要精确到数据文件的4小时之内。

对我而言,最优化的最快方法是每小时在cron事件上加载并解析文件,并将该数据保存在网页可以更快加载的位置,因此意味着每小时解析一次文件,而不是每小时解析一次每个请求。

做到这一点的最佳方法是什么?

我立即想到了“数据库”,但是似乎要进行很多工作来尝试存储所有数据,并且任何数据都可以在文件中更改,因此不必尝试比较数据,而必须尝试删除表每小时并重新填充,这是Web应用程序随后可能向用户返回错误数据的机会。

因此,我认为可以上一堂课,将其保存到磁盘上,然后Web应用程序在需要时将数据重新加载到内存中吗?这意味着对该应用程序的修改很少(并且在cron上运行了一个小的脚本)。

1 个答案:

答案 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秒,当它为空时,将从磁盘加载数据。