önbellek mysql sonuçları ve birşeyler değişecek sadece yeniden sorgula

5 Cevap php

Sadece bir kez veritabanını sorgulamak mümkün mü PHP sayfa yükler sırasında. Her nasılsa bu sonuçları saklamak ve daha sonraki raporlarda kullanıcıya görüntüler. Yeni / değişmiş sonuç almak için sadece o DB bağlanmak böylece bir şey veritabanında değişmiş olup olmadığını belirlemek için herhangi bir yolu var mı?

Please give me some idea. Thanks.

5 Cevap

MySQL Query Cache göz atın.

Gerekli herhangi bir değişiklik olduğunda MySQL sadece hafızada saklanan aynı resultset dönecektir.

http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

Bir Cache, APC gibi, memcached veya XCache genellikle bayat alır lifetime önce vardır. Olursa olsun sürece önbellek bayat değil gibi herhangi bir veritabanına çağrıları olmayacak. Hiçbir aramalar tüm gidiş dönüş tasarruf çünkü no çağrıları, veritabanından önbelleğe kayıt kümeleri üzerinden tercih olduğunu unutmayın.

Uygulama veritabanına tek yazma kaynağı ise, manuel birisi veritabanına yazar zaman ve ömür boyu ayarlanır önce süresi dolacak önbelleği zorlayabilir. Sorgu çalıştırıldığında sonraki sorgular sonra önbelleğe olacaktır.

Diğer kaynaklardan olması durumunda, örneğin, uzak sunucuları, sen değişim veritabanı kullanarak tüm uygulamaları bilgilendirir veritabanı içinde bir tetikleyici uygulamak gerekiyor. Bir mesaj kuyruğu Bunun için en iyi kullanılır.

Sonuçları önbelleğe alma, any diğer işlevi sarar bir fonksiyon from here vardır:

function cache_function($buildCallback, array $args= array (), $timeoutMinutes= 60) {
    if (is_array($buildCallback)) {
        $cacheKey= get_class($buildCallback[0]) . $buildCallback[1] . ':' . implode(':', $args);
    } else
        $cacheKey= $buildCallback . ':' . implode(':', $args);

    $file_path= CACHE_PATH . md5($cacheKey);
    @ $file_time= filemtime($file_path);
    $rebuild= $file_time < time() - ($timeoutMinutes * 60);

    //$rebuild= false; // FORCE REBUILD SKIP for WINDOWS

    if ($rebuild or (!$rebuild and !is_readable($file_path))) {
        $build= call_user_func_array($buildCallback, $args);
        file_put_contents($file_path, serialize($build), LOCK_EX);
        return $build;
    }
    return unserialize(file_get_contents($file_path));
}

Ayrıca bakınız:

http://blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/

Siz, örneğin, gösterir veri tablosunda son rekor değişiklik damgası ek alanı kullanabilirsiniz. Sonra memcache (veya başka bir önbellek alt sistemi) kullanın ve içine son değişiklik damgaları ile getirilen veritabanı sonuç kurtarabilir.

Sadece bir veritabanı sorgu size (select deyiminde tanımlanan alanda hafif SQL sorgusu kullanarak) bu alanı seçmek olabilir ve DB değerinden zorlama ile karşılaştırın. Bunlar farklı ise karmaşık sorgu ile DB'den yeni verileri almak için biliyorum.

"Light" SQL sorgusu örneği:

SELECT MAX(last_modification) AS last_modification FROM data_table

Eğer veri depolamak için bir önbellek sistemi kullanabilirsiniz.

Her nesne değişiklik üzerinde, önbellekten silmek veya kullanılacak olması muhtemeldir eğer onun önbellek sürümünü yenileyebilirsiniz.

, Belirtildiği gibi, arasında Memcached PHP, bir önbellek uygulanması çeşitli yolları vardır.