Wednesday, 15 June 2011

php - Caching large arrays -



php - Caching large arrays -

i have next function:

function f($idx, $arr) { static $a; if ($a == null) { foreach ($arr $v) { $key = $v['key']; if (!isset($a[$key])) { $a[$key] = array(); } $a[$key][] = $v; } } homecoming $a[$idx]; }

and initial conditions are:

function f() called many-many times in 1 request $arr large $arr may differ in different function calls (low cardinality) $idx differs in every function phone call (high cardinality)

and need know, if $arr cached , if not, create "cached version", maintain previous arrays.

according 2. i'm not able utilize md5(serialize($arr)) utilize identifier, need way determine that. have thought how accomplish such hight-performance caching functionality (let's i'm not able changes outside function)?

if it's not imperative $arr not modified, i'd add together optimized key access straight it:

// note argument has been changed &$arr - we're passing reference function f($idx, &$arr) { if (empty($arr['___cached'])) { $arr['___cached'] = array(); foreach ($arr $k => $v) { if ($k === '___cached') continue; if (!isset($arr['___cached'][$v['key']])) { $arr['___cached'][$v['key']] = array(); } $arr['___cached'][$v['key']][] = $v; } } homecoming $arr['___cached'][$idx]; }

php arrays performance caching

No comments:

Post a Comment