За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Кеширование запросов DESCRIBE при работе с моделями в Zend Framework

Март5

Добрый всем день!

Если вы пишите свой сайты с использованием ZendFramework и при этом используете модели для работы с БД, то вы должны знать, что сам фреймворк первым запросом будет получать информации о таблицы с которой работает:

DESCRIBE `table_name`;

следовательно каждый раз фреймворк делает чтение её структуры, что приводит к лишнему запросу и когда таблиц много или посетителей ресурса — тормозам.

На самой странице документации к зенду описана такая ситуация.

Я создал абстрактный класс от которого должны наследоваться все мои модели, назвал его AbstractTableModel, вот его код:

<?php
/**
 * Class fot caching describe table query
 *
 * @filesource
 * @author maxnag
 */
abstract class AbstractTableModel extends Zend_Db_Table_Abstract
{
	public function __construct($config = array())
	{
		parent::__construct($config);
		
		if (Zend_Db_Table_Abstract::getDefaultMetadataCache() === null)
		{
			$frontendOptions = array('automatic_serialization' => true);

			$zendCacheDir = './cache/'; // directory for caching

			if (!file_exists($zendCacheDir))
			{
				mkdir($zendCacheDir, 0777);
			}

			$backendOptions  = array('cache_dir' => $zendCacheDir);

			$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
			Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
		}
	}
}

В корне проекте будет создаваться папка cache и в ней будет храниться описание затронутых таблиц, зенд сам следит за временем кеша, единственное я после изменения структуры таблицы удаляю весь кеш, дабы все шло гладко.

Удачи, Максим.

Статья просмотренна 75948 раз, зашло посетителей 11381

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Сентябрь 2017
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 123
45678910
11121314151617
18192021222324
252627282930  

Сейчас на сайте