Показать сообщение отдельно
Старый 01.10.2008, 15:46   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Оценка "быстрее" конечно чисто умозрительная. Так как испробовать 1-й вариант я не могу и соответственно сравнить тоже.

Но мои плюсы таковы:
1. Так как, например, в cache_pages храниться не 1000+ страниц (=1000*50 Кб), а только одна (= 50Кб), то выборка из такой таблицы будет быстрее. И таблица большая и в кэш mysql маловероятно попадет. В целом уменьшение размера cache_pages полезнее для всего сайта.

2. На сервере проц быстрый, поэтому накладные расходы на выполнение USER_INT с учетом php-акселераторов минимальны.

3. Положить/взять из memcached - это всего одна очень быстрая функция php. Ключ делается например путем md5(serialize($this->piVars)). Если надо привызываться к выводу single, то можно использовать $this->extKey.$recordID.'single'. И по этому же ключу чистить кэш при изменении записи в БД.
Модуль закрытый - но все это очень даже просто:

PHP код:
...
    
// соединяемся с Memcache если есть
    
if (class_exists('Memcache')) {
        
$this->memcache = new Memcache;
        if (! @
$this->memcache->connect('localhost'11211)) {
            
$this->memcache null;
        }
    }
...

    function 
cache_set ($key, &$data$time 300$force_caching false)
    {
        if (! 
$force_caching && intval(t3lib_div::_GP('no_cache'))) return false;
        if (! 
is_object($this->memcache)) return false;

        return 
$this->memcache->set($key$dataMEMCACHE_COMPRESSED$time);
    }

    function 
cache_get ($key$force_caching false)
    {
        if (! 
$force_caching && intval(t3lib_div::_GP('no_cache'))) return false;
        if (! 
is_object($this->memcache)) return false;

        
$data $this->memcache->get($key);
        return 
$data;
    } 
В итоге имеем 50Кб в mysql + 1000*(10-20 Кб чистого контента) в memcached (а еще можно включить сжатие gzip в memcached) - вместо 50 Мб в mysql. И все таки cpu+ram быстрее чем cpu+hdd во много-много раз.
dmartynenko вне форума   Ответить с цитированием