Моят проблем е основно, че doctrine не използва apc кеширания резултат при повторно изпълнение на същата заявка. Поради това получавам дълго време за изпълнение. Не намерих подобен проблем в нета.
Моята среда:
WAMP (32 бита) с PHP 5.4.16
на Windows7. MySQL база данни на отдалечена база данни със среден ping 87ms
. Laravel4 с пакет laravel-doctrine, инсталиран чрез композитор:
doctrine/dbal - 2.4.x-dev
doctrine/orm - 2.4.x-dev
Моят проблем:
Конструкторът на заявки за кеширани доктрини не използва кешираните apc данни.
Запитване:
$query = Doctrine::createQueryBuilder();
$query->select('e')->from("Persistent\Users\Experts\Expert", "e");
$this->prepareSort($sort, $query);
$query->orderBy($this->sortField, $this->sortVector);
//prepare paginator
$queryPaginator = new DoctrinePaginator($query);
$this->total = $queryPaginator->count();
return $queryPaginator ->getQuery()
->setResultCacheDriver(new ApcCache())
->useResultCache(true, 300, 'expertsearch')
->setFirstResult(0)
->setMaxResults(20)
->getResult();
Резултат:
Изпълнението на заявката отнема около 17 секунди поради разстоянието между моята машина и сървъра на базата данни.
Активирането на кеширането, както е показано по-горе, не влияе на скоростта.
Кешът за използване на APC изглежда по следния начин:
DoctrineNamespaceCacheKey[] 1 584 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 None [Delete Now]
[expertsearch][1] 0 27880 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 300 seconds [Delete Now]
[121cbb9b3c38e7d5a0c0e7b74c59e640][1] 0 3672 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 None [Delete Now]
Webgrind не показва промяна в броя на извикванията към PDO в сравнение с времето, когато не се използва кеша в конструктора на заявки.
Function Invocation Count Total Self Cost Total Inclusive Cost
php::PDOStatement->execute 183 15932 15932
php::PDO->query 7 588 588