[vz-dev] s0vz: Überflüssige Updates bei jedem Insert?

Andreas Goetz cpuidle at gmail.com
Tue Jan 14 09:03:29 CET 2014


Hallo Heiko,

jetzt fällt mir nur noch ein Caching Problem mit Doctrine ein.

On Mon, Jan 13, 2014 at 8:18 PM, Heiko Baumann <hbcs at gmx.de> wrote:

>  Hi Andi
>
>
>
> Ja- Commit 8ac2c5039273b590aec2a9890f87400c08b949a8 liegt dazwischen.
>
>
> Ich kann's nicht mehr nachvollziehen:
>
> SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, p1_.id AS id3,
> p1_.pkey AS pkey4, p1_.value AS value5, e0_.class AS class6, p1_.entity_id
> AS entity_id7 FROM entities e0_ LEFT JOIN properties p1_ ON e0_.id =
> p1_.entity_id WHERE (e0_.uuid = ?) AND e0_.class IN ('channel',
> 'aggregator') ORDER BY p1_.pkey ASC
> START TRANSACTION
> INSERT INTO data (timestamp, value, channel_id) VALUES (?, ?, ?)
> COMMIT
>
>  Bist Du sicher dass der Code den Du siehst auch wirklich der ist der
> ausgeführt wird?
>
>  Ich bin sicher, dass das aktueller Code ist, ja. Zur Sicherheit habe ich
> gerade eben nochmal kurz mitgeloggt:
> ...
>                 118185 Query    UPDATE properties SET value = '1' WHERE id
> = 2
>
> Insofern würde ich schon sagen, dass die updates immer noch heftig
> einprasseln...
>

Sieht so aus. Jetzt kannst Du entweder mal auf meinen Dev-Zweig umsteigen,
oder Du baust Router.php wie unten um:

    public static function createEntityManager($admin = FALSE) {
        $config = new \Doctrine\ORM\Configuration;

        if (extension_loaded('apc')) {
            $cache = new \Doctrine\Common\Cache\ApcCache;

            if (Util\Configuration::read('devmode') == FALSE) {
                $config->setMetadataCacheImpl($cache);
                $config->setQueryCacheImpl($cache);
            }
            else {
                $cache->deleteAll();
            }
        }

        $driverImpl = $config->newDefaultAnnotationDriver(VZ_DIR .
'/lib/Volkszaehler/Model');
        $config->setMetadataDriverImpl($driverImpl);

        $config->setProxyDir(VZ_DIR . '/lib/Volkszaehler/Model/Proxy');
        $config->setProxyNamespace('Volkszaehler\Model\Proxy');

$config->setAutoGenerateProxyClasses(Util\Configuration::read('devmode'));

        $dbConfig = Util\Configuration::read('db');
        if ($admin && isset($dbConfig['admin'])) {
            $dbConfig = array_merge($dbConfig, $dbConfig['admin']);
        }

        return \Doctrine\ORM\EntityManager::create($dbConfig, $config);
    }

Danach bitte die MW einmal im Browser mit ...&devmode=1 aufrufen oder im
Configfile mal devmode=true setzen.

Damit wird Doctrine gezwungen mal alle Daten aus den Caches zu leeren
(insbesondere auch zur Konfiguration der Entities).

@Entwickler: gibts eine Idee wir wir das bei Versionswechseln einmalig
erzwingen könnten? Wie wäre es mit sowas wie einer internen Versionsnummer
die wir ebenfalls in den Cache schreiben und mit der aktuellen
Versionsnummer (z.B. aus bootstrap.php) vergleichen und bei Bedarf den
Cache automatisch leeren?

vg
Andreas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20140114/1f95976d/attachment.html>


More information about the volkszaehler-dev mailing list