Ускорение пока цикл в php - PullRequest
0 голосов
/ 19 октября 2011

верно, проблема небольшая, но надеюсь, что кто-то может помочь.В основном мы используем memcache для кэширования некоторых наших запросов mysql, а затем сохраняем результаты в массиве для memcache.Затем, когда запрос выполняется снова, он получает массив результатов из memcache и обрабатывает результаты, как обычно.Таким образом, код выглядит следующим образом.

$query = "SELECT x,y,z FROM a WHERE b = 3";
$result = mysql_query_run($query,'memcache_name');
while($row = mysql_mem_fetch_array($result,'memcache_name')) {

 //do processing

}

mysql_query_run в основном просто выполняет запрос или возвращает массив из memcache.Mysql_mem_fetch_array либо обрабатывает результаты из mysql, либо пересекает массив.

Этот элемент использует этот код.

if(is_array($result)) {
            $return = current($result);
            //get the current result - based on the internal pointer
            next($result);//increment pointed
            return $return;//return result
        }
        else {

            //mysql result tab
            //so get the array from the mysql_fetch_array
            $array = mysql_fetch_array($result);

            if(is_array($MEMCACHE_SERVER_RESULTS[$memcache])==false) {
                //if there is no results then just set the results as array
                $MEMCACHE_SERVER_RESULTS[$memcache] = array();
            }
            //push the array onto the end of the current array - from memcache

            //if there are some results then push them on
            if($single_row == 1) {
                //only one row so just combine the 2 steps and store
                array_push($MEMCACHE_SERVER_RESULTS[$memcache],$array);
                $MEMCACHE_SERVER->set($memcache, $MEMCACHE_SERVER_RESULTS[$memcache],0,$memcache_time);
            }
            else if($array!==false) {

                array_push($MEMCACHE_SERVER_RESULTS[$memcache],$array);
                //and set it
            }
            else {
                //set the memcache to the array that it has been making.
                $MEMCACHE_SERVER->set($memcache, $MEMCACHE_SERVER_RESULTS[$memcache],0,$memcache_time);
            }

            //return array
            return $array;

        }

Проблема заключается в текущей и следующей командах - в больших массивах (которыеочень редко) это вызывает некоторое зависание.В настоящее время мы находимся в php версии 5.1.6, и мы собираемся к 5.3, проблема будет решена?Или есть лучший способ обработать массив?Спасибо за вашу помощь.Ричард

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

в больших массивах (которые очень редки) вызывает некоторое зависание.

Легко.Просто избегайте хранения больших массивов в memcache.

1 голос
/ 19 октября 2011

Если вы делаете:

if (is_array($result)) {
  $return = each($result); //get the current result and advance the array pointer
  return $return['value']; //return result
} else // ...and so on

... это лучше?

...