2010-02-03 9 views
4

Est-il possible d'interroger la base de données qu'une seule fois pendant le chargement de la page en PHP. Conservez d'une manière ou d'une autre ces résultats et affichez-les à l'utilisateur sur les rapports suivants. Existe-t-il un moyen de déterminer si quelque chose est modifié dans la base de données afin que nous puissions nous connecter uniquement à la base de données pour extraire les résultats nouveaux/modifiés?cache résultats mysql et requery seulement si quelque chose change

S'il vous plaît donnez-moi une idée. Merci.

+0

Qu'est-ce que cache utilisez-vous? –

+0

Je n'en utilise pas. 'cache' dans mon point de vue est le magasin – JPro

Répondre

0

Vous pouvez utiliser le champ supplémentaire dans votre tableau de données qui montre, par exemple, l'horodatage dernière modification d'enregistrement. Ensuite, vous pouvez utiliser memcache (ou un autre sous-système de mise en cache) et enregistrer dans le résultat de la base de données récupérée avec les horodatages de dernière modification.

Dans la seule requête de base de données, vous pouvez sélectionner ce champ (en utilisant une requête SQL légère avec le champ décrit dans l'instruction select) et le comparer avec récupéré à partir de la valeur DB. Si elles sont différentes, vous savez obtenir les nouvelles données de la base de données avec des requêtes complexes.

Exemple de "lumière" requête SQL:

SELECT MAX(last_modification) AS last_modification FROM data_table 
1

Un cache, comme APC, memcached ou Xcache a généralement une durée de vie avant qu'il ne devienne obsolète. Il n'y aura aucun appel à la base de données tant que le cache n'est pas périmé. Notez que les appels sont préférables aux jeux d'enregistrements mis en cache de la base de données, car aucun appel n'enregistre l'intégralité de l'aller-retour. Si votre application est la seule source d'écriture dans votre base de données, vous pouvez forcer manuellement le cache à expirer avant de définir la durée de vie à chaque fois que quelqu'un écrit dans la base de données. Les requêtes suivantes sont ensuite remises en cache lorsque la requête est exécutée.

S'il existe d'autres sources, par ex. serveurs distants, vous devez implémenter un déclencheur dans la base de données qui informe toutes les applications utilisant la base de données du changement. Une file d'attente de messages est mieux utilisée pour cela.

0

Vous pouvez utiliser un système de mise en cache pour stocker vos données.

À chaque modification d'objet, vous pouvez le supprimer du cache ou actualiser sa version de cache s'il est susceptible d'être utilisé.

Il existe de nombreuses façons d'implémenter un cache en PHP, parmi lesquels, comme mentionné, Memcached.

1

Il y a une fonction from here, qui enveloppe toute autre fonction, la mise en cache des résultats:

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)); 
} 

Voir aussi:

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

Questions connexes