суббота, 1 сентября 2012 г.

Продвинутое кэширование в Opencart

В архиве два измененных файла из версии OpenCart 1.4.9.4. 

1. Поддержка кэширования через Memcached.

Установка:
1. Берете файл cache.php и перезаписываете им файл system/library/cache.php. Эта процедура не нарушит работу сайта - будет использоватся обычный файловый кэшь.
2. Устанавливаете в системе (или на другом сервере) сервер memcached и запускаете его. Это делается просто - без каких-то особенностей. Единственное, что если будете использовать кэширование в memcached совместно с mysql_cached, скорей всего в конфиге memcached нужно будет увеличить размер используемой памяти. На CentOS, например, после установки выделяется 65 Мб.
2. Идете в корень магазина и текстовым редактором дописываете в config.php строки конфигурации (с параметрами своего memcached сервера):

define('CACHE_DRIVER', 'memcached');
define('MEMCACHE_HOSTNAME', 'localhost');
define('MEMCACHE_PORT', '11211');
define('MEMCACHE_NAMESPACE', 'opencart_test');

Если в CACHE_DRIVER установлено другое значение или нет подключения к memcached серверу, будет использоваться стандартный файловый кэш.
Рекомендую эти-же параметры прописать в файле конфигурации админки - admin/config.php. Сейчас это не очень принципиально, но, надеюсь, в будущем в админке добавяться опции управления кэшем.
Параметр MEMCACHE_NAMESPACE нужен для варианта когда одним сервером memcached будут пользоваться разные магазины - для разделения их кэшей.

Проект на GitHub, скачать

Драйвер для БД MySQL с поддержкой кэширования SQL запросов

Нужен для уменьшения нагрузки на БД у магазинов с большим количеством товара и/или трафика.

Дополнительный драйвер БД для Mysql, в котором происходит кэширование всех SELECT запросов. Время кэширования SQL запросов в секундах задается в config.php.

Установка:
1. Копируете файл mysql_cached.php в каталог system/database/.
2. В корне магазина в файле config.php меняете строку
define('DB_DRIVER', 'mysql');
на
define('DB_DRIVER', 'mysql_cached');
и добавляете
define('DB_CACHED_EXPIRE', 120);
НЕ рекомендую ставить этот драйвер в конфигурации админки. Т.к. в админку не встроены средства сброса кэша и это чревато различными "глюками".

Проект на GitHub, Скачать


В качестве общей рекомендации по оптимизации нагрузки на БД, в первую очередь рекомендую сделать индексы в БД. По результатам оптимизации одного из специалистов возник список рекомендованных для добавления индексов (в данном примере все таблицы с префиксом "oc_". Для вашей базы может понадобится другой префикс или его отсуствие):

oc_product:

alter table `oc_product` add KEY `model` (`model`);
alter table `oc_product` add KEY `stock_status_id` (`stock_status_id`);
alter table `oc_product` add KEY `quantity` (`quantity`,`date_available`);
alter table `oc_product` add KEY `tax_class_id` (`tax_class_id`,`weight_class_id`,`length_class_id`);
alter table `oc_product` add KEY `sort_order` (`sort_order`);

oc_product_option_description:

alter table `oc_product_option_description` add KEY `product_id` (`product_id`);

oc_product_option_value:

alter table `oc_product_option_value` add KEY `product_option_id` (`product_option_id`);
alter table `oc_product_option_value` add KEY `product_id` (`product_id`);

oc_url_alias:

alter table `oc_url_alias` add UNIQUE KEY `query` (`query`);
alter table `oc_url_alias` add KEY `keyword` (`keyword`);

oc_zone:

alter table `oc_zone` add KEY `country_id` (`country_id`);


отсюда:

http://forum.opencart.ua/viewtopic.php?f=5&t=79

0 коммент.:

Отправить комментарий

Технологии Blogger.

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Hot Sonakshi Sinha, Car Price in India