在变量中缓存mysql查询,并为每个请求提供

时间:2014-04-13 21:17:17

标签: php mysql caching

我刚刚开始维护浏览器游戏并优化其代码。我可以看到一些函数运行超过一百次。我想过如何优化代码。

1-修改游戏编程的整个平台。 (它没有意义,因为它需要至少9个月的时间来修改它。也许可能会导致意外的错误而且我不想阻碍它。)

2-致力于缓存以提高效率。

我将使用第二种方式。为了更清楚,我在这里放了一个游戏功能。

function modifyResource($vid, $wood, $clay, $iron, $crop, $mode) {

    if($wood<0)$wood=0;
    if($clay<0)$clay=0;
    if($iron<0)$iron=0;
    //if($crop<0)$crop=0;

    $q = "SELECT * from " . TB_PREFIX . "vdata where wref = $vid";
    $result = $this->query($q,__FILE__,__LINE__);
    $res=$this->mysql_fetch_all($result);

    if($wood+$res[0]['wood']>$res[0]['maxstore'] && $mode)$wood=$res[0]['maxstore']-$res[0]['wood'];
    if($clay+$res[0]['clay']>$res[0]['maxstore'] && $mode)$clay=$res[0]['maxstore']-$res[0]['clay'];
    if($iron+$res[0]['iron']>$res[0]['maxstore'] && $mode)$iron=$res[0]['maxstore']-$res[0]['iron'];
    if($crop+$res[0]['crop']>$res[0]['maxcrop'] && $mode)$crop=$res[0]['maxcrop']-$res[0]['crop'];

    if($res[0]['wood']<$wood && !$mode)$wood=$res[0]['wood'];
    if($res[0]['clay']<$clay && !$mode)$clay=$res[0]['clay'];
    if($res[0]['iron']<$iron && !$mode)$iron=$res[0]['iron'];
    if($res[0]['crop']<$crop && !$mode)$crop=$res[0]['crop'];

    if(!$mode) {
        $wood = -$wood;
        $clay = -$clay;
        $iron = -$iron;
        $crop = -$crop;
    }
    $q = "UPDATE " . TB_PREFIX . "vdata set wood = wood + $wood, clay = clay + $clay, iron = iron + $iron, crop = crop + $crop where wref = $vid";
    $r = $this->query($q,__FILE__,__LINE__);
    if($r){
        // $this->logging->addResourceLog($vid, $wood, $clay, $iron, $crop, $log);
    }
    return true;
}

如您所见,函数select vdata table以获取必要的信息,然后修改它,最后更新表。在此函数中运行两个查询。 vdata是一个真正的大表,例如在80,000行的情况下超过500MB。对于用户的每个请求,该函数运行88次。这意味着88个大表选择和更新。它需要花费很多硬件资源并且还会增加加载时间。

我想到了一个想法,在变量中存储选择查询然后更新它如果函数第一次运行。而对于其他时间只更新变量,直到数据库类被销毁,然后应用所有更改。这将导致保存2x87查询。

注意: 这个缓存在变量中只是持久直到用户请求完成。然后销毁所有存储(缓存)的数据。

这只是一个想法,我不知道它是如何运作的,或者如果我编码它会有用。或者是否有任何替代方式或任何具有相同功能的建议插件或类?

因此我的问题有三个部分:

1-这个想法会有用吗?

2-如果是的话!是否有任何类或插件我使用它或获得更多想法?

3-如果没有!你有什么建议来优化游戏?

0 个答案:

没有答案