Doctrine 2
Není cache jako cache
Jsem Tomáš :)
programátor
školitel
rodič
Kdo zná Doctrine?
Kdo používá Doctrine?
V čem nám pomáhá Doctrine?
-
odstiňuje programátora od komunikace s databáz
-
automaticky řeší běžné operace (čtení/zápis/mazání
-
automaticky provádí konverzi datových typů
-
poskytuje programátorovi objektový přístup k datům pomocí entit
-
řeší základní výkonnostní optimalizace
Kdo už řešil optimalizaci Doctrine?
Život bez cache...
Život s cache...
Proč zapnout cache?
Proč zapnout cache?
- Odstranění opakující se práce
- Rychlejší odezva aplikace
- Snížení zátěže databáze
- Další point of failure
- Problémy s invalidací
- Zvýšení zátěže cache
Co máme k dispozici?
- Metadata cache
- Query cache
- Result cache
- Second Level Cache
a bonus...
Dokumentace radí!
Metadata Cache
<?php
/** @Entity */
class User
{
/**
* @ManyToOne(targetEntity="Address")
* @JoinColumn(name="address_id", referencedColumnName="id")
*/
private $address;
}
Co to jsou metadata?
Metadata Cache
Jak cache zapnout?
<?php
$config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
Query Cache
<?php
$query = $em->createQuery(
'SELECT u FROM MyProject\Model\User u WHERE u.age > 20'
);
$users = $query->getResult();
Co je to query?
Query Cache
Jak cache zapnout?
<?php
$config = new \Doctrine\ORM\Configuration();
$config->setQueryCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
Result Cache
<?php
$query = $em->createQuery(
'SELECT u FROM MyProject\Model\User u WHERE u.age > 20'
);
$users = $query->useResultCache(true)
->setResultCacheLifetime(3600)
->getResult();
Co je to result?
Result Cache
Jak cache zapnout?
<?php
$config = new \Doctrine\ORM\Configuration();
$config->setResultCacheImpl(new \Doctrine\Common\Cache\ApcuCache());
Second Level Cache!
Second Level Cache
<?php
/**
* @Entity
* @Cache("NONSTRICT_READ_WRITE")
*/
class State
{
/**
* @Column(unique=true)
*/
protected $name;
/**
* @Cache("NONSTRICT_READ_WRITE")
* @OneToMany(targetEntity="City", mappedBy="state")
*/
protected $cities;
}
Co to je Second level Cache?
Second Level Cache
Různé způsoby ukládání dat
Způsob | Editace? | Rychlost? | Zámky? |
---|---|---|---|
READ_ONLY | NE | +1 | NE |
NONSTRICT_READ_WRITE | ANO | 0 | NE |
READ_WRITE | ANO | -1 | ANO |
Second Level Cache
Podporuje regiony!
Second Level Cache
Podporuje regiony!
<?php
/**
* @Entity
* @Cache("NONSTRICT_READ_WRITE", region="state_region")
*/
class State
{
/**
* @Column(unique=true)
*/
protected $name;
/**
* @Cache("NONSTRICT_READ_WRITE")
* @OneToMany(targetEntity="City", mappedBy="state")
*/
protected $cities;
}
Second Level Cache
Jak cache zapnout?
<?php
$config = new \Doctrine\ORM\Configuration();
$cache = new \Doctrine\Common\Cache\Cache();
$factory = new \Doctrine\ORM\Cache\DefaultCacheFactory($config, $cache);
$config->setSecondLevelCacheEnabled();
$config->getSecondLevelCacheConfiguration()
->setCacheFactory($factory);
TY!
Shrnutí...
- Metadata a Query cache jsou nutnost!
- Result cache se hodí ;)
- Second Level Cache je kamarád :)
- Zapnutí cache je většinou jeden řádek kódu :D
- Šetříme zdroje a zrychlujeme odezvu aplikace
- Pozor na přetěžování cache!
- Doctrine dokumentace - palec nahoru!
Díky za pozornost!
Nějaké otázky?
tomaspilar.cz | @tomaspilaru
Doctrine ŠKOLENÍ
již tento měsíc
26. 11. 2018
Doctrine - Není cache jako cache
By tomaspilar
Doctrine - Není cache jako cache
- 1,785