Memcached + Doctrine + Zend Framework
Совмещаем все это вместе, получаем неплохое ускорение работы доктрины.
Ставим memcached
Как Установить Memcached на windows?
- качаем отсюда бинарник http://code.jellycan.com/memcached/
- ложим в c:\memcached (или другой путь)
- из консоли инсталим как сервис c:\memcached\memcached.exe -d install
Установка под *nix ищется на ура в гугли.
bootstrap
(привожу весь код инитера доктрины)
/* * Init Doctrine */ protected function _initDoctrine() { $config=$this->getOption('database'); require_once 'Doctrine.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Doctrine'); try { Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']); } catch (Exception $e) { echo 'FATAL ERROR: MySql is down'; exit; } Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true); Doctrine::loadModels(APPLICATION_ROOT . "/models"); // Install Tables Doctrine::createTablesFromModels(APPLICATION_ROOT . "/models"); // Cache $configCache=$this->getOption('cache'); // Clearer -------------------------------------------------------- $memcache_obj = new Memcache; $con=$memcache_obj->connect($configCache['host'], $configCache['port']); if ($con==FALSE) { echo 'FATAL ERROR: MemCache is down'; exit; } //$memcache_obj->flush(); // отчистка кеша // --------------------------------------------------------------- $servers = array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cacheDriver = new Doctrine_Cache_Memcache(array( 'servers' => $servers, 'compression' => false ) ); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE_LIFESPAN, 3600); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 3600); }
Все проинииализили и сказали Doctrine что нужно использовать memcache при запросах и выдачи результата
Если у вас в проекте есть Zend_Translate то подцепляем и его:
$configCache=$this->getOption('cache'); $backendOptions=array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions); Zend_Translate::setCache($cache);
везде используются данные из конфига (ini) вот кусок:
; cache memcached cache.host = localhost cache.port = 11211
Запросы
1. После тестов, прямые запросы (DQL) выполняются намного шустрей, т.е.:
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories'); $newsCategories= $q->execute()->toKeyValueArray("id","url");
Намного шустрей чем удобное
$newsCategories=Doctrine::getTable("NewsCategories")->findAll()->toKeyValueArray("id","url");
и плюс, в последнем запросе нельзя указывать что нужно использовать кеш (!!!)
теперь все свои запросы приводим в вид «юзай кеш»
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories') ->useCache(); $newsCategories= $q->execute()->toKeyValueArray("id","url");
все =)
Уникальных посетителей темы: 126Удаление дубликатов в MySQL
Все банально =)
DELETE t1 FROM userlogins t1, userlogins t2 WHERE t1.login=t2.login AND t1.ID != t2.ID
Уникальных посетителей темы: 50Zend Server CE установка и настройка для Windows (Windows Zend Server Community Edition)
Установка Zend Server CE
Рассмотрим процедуру установки и настройки сборки Zend Server CE для Windows, напомню я уже делал обзор Zend Server.
И так, мы хотим установить себе Zend Server CE (далее по тексту ZS).
Первое что нам нужно сделать, это скачать последную версию с сайта:
http://www.zend.com/products/server/downloads-all
Там выбираем пакет для Windows, на момент написания это был файл:
![]()
Скачиваем…
Теперь перейдем к настройке и установке
- Запускаем скачанный файл
- Установка доступна в 3-х вариантах: Typical, Full and Custom
Custom - вы сможете сами выбрать что поставить, а что нет =) (ВЫБИРАЕМ ЭТОТ ПУНКТ) - Ставим галочки напротив нужных вещей


- Перейдете в диалог Destination Location где нужно выбрать КУДА ставить сервер, я советую выбирать путь такой c:\zs\ (описание будет данно для этого пути)

- Порт apache выбираем 80
- В итоге будет поставлено:
- PHP 5.2.9 -- Common Extensions -- Additional Extensions -- Zend Optimizer+ -- Zend Debugger -- Zend Data Cache - Zend Framework 1.8.2 -- Zend Framework Base - phpMyAdmin - MySQL Server - Apache Web Server on port 80
- Жмем Install. Будет загруженно дополнительно phpmyadmin (почему то 2.11.9.3 – я обычно потом ставлю ветку 3.x) и mysql сервер.
Настройка Zend Server CE
Заходим в панель управления:
http://localhost/ZendServer/

Вводим свой пароль, входим. Там можете поиграть с GUI =)
Но мы пойдем дальше…
Первое что я меняю, так это делаю vhosts т.к. все таки мы не один сайт разрабатываем, а много, для этого делаем изменения:
1. У меня все сайты лежать в папке c:/www
2. Создаем файл c:/www/vhosts.conf в нем пишем наши сайты:
NameVirtualHost *:80
<VirtualHost 127.0.0.1>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\phpmyadmin»
ServerName 127.0.0.1
ServerAlias www.phpmyadmin
</VirtualHost>
<VirtualHost 127.0.0.2>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\site1″
ServerName 127.0.0.2
ServerAlias www.site1
</VirtualHost>
и т.д., меняем айпи и папку где лежит сайт.
3. Меняем конфиг апача c:/zs/Apache2/conf/httpd.conf
Добавим строку в конце:
Include c:/www/vhosts.conf
Строки:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
переделываем на
<Directory />
# Options FollowSymLinks
# AllowOverride None
# Order deny,allow
# Deny from all
</Directory>
4. Запустим апач, если все запустилось, то при открытии http://127.0.0.1 у нас будет phpMyAdmin (предварительно туда его желательно залить -) )
Собственно это все.
Уникальных посетителей темы: 1 718Советы по оптимизации работы с MySQL
На mysql.com появилась отличная статья по оптимизации работы с MySQL, линка: http://forge.mysql.com/wiki/Top10SQLPerformanceTips
Уникальных посетителей темы: 15Zend Server beta 1
Сегодня Zend выпустил новый продукт, Zend Server beta1 ! Если кратко, то это «подобие» xampp, denwer и т.д. но от самой Zend.
В данный продукт включены следующие компненты:
- Apache 2.2.8
- PHP 5.2.8
- Zend Framework 1.7.4
- PHP optimizer и кучу других продуктов Zend
- Админский интерфейс для быстрой настройки и работы.
Продукт доступен для windows, linux и macOS в двух редакциях:
- Zend Server – после beta он будет выпушен как отдельный коммерческий продукт и будет платным
- Zend Server CE – бесплатный сервер для разработчиков (он не станет платным)
Для получения информации о продукте, перейдите по ссылке.
Уникальных посетителей темы: 4MySQL хранимые процедуры
Хранимые процедуры появились начиная с 5 версии MySQL. Они позволяют автоматизировать сложные процессы на уровне MySQL, нежели использовать для этого внешние скрипты. Это даёт нам наиболее высокую скорость выполнения, т.к. мы не гоняем большое количество запросов, а всего лишь один раз вызываем ту или иную процедуру (или функцию).
Читать дальше: http://blog.kovshenin.com/archives/mysql-stored-procedures
Уникальных посетителей темы: 56