web-dev-qa-db-fra.com

transitoire ou non transitoire

J'ai un capteur de vent connecté à une base de données dédiée.

Les données du capteur sont envoyées à la base de données toutes les minutes.

Je n'ai aucun problème pour me connecter à la deuxième base de données et imprimer les données sur une page wp à l'aide de


    $meteodb = new wpdb('xx','xx','xx','xx');
$meteoValues = $meteodb->get_results( 
    "
    SELECT average, min, max, direction, timestamp 
    FROM wind
    ORDER BY timestamp 
    "
);

Je suis totalement nouveau dans le concept transitoire. J'essaie d'être efficace en utilisant des requêtes de base de données au minimum

Au lieu de se connecter directement à la deuxième base de données chaque fois qu'un utilisateur consulte la page, j'ai pensé qu'il serait peut-être judicieux de créer un transitoire, toutes les 5 minutes, en extrayant un nouvel ensemble de données d'une deuxième base de données directement vers la base de données wp à l'aide d'un cron. Je ne garderais que les données de la journée en cours (de 6h à 20h) et les effacerais automatiquement après 24 heures

Pensez-vous que c'est une bonne idée?

serait-il plus intelligent d’avoir 1 ° un nouveau transitoire enregistré toutes les 5 min avec seulement les nouvelles données et d’appeler ensuite tous les transitoires disponibles (moins de 24 heures)

2 ° un seul transitoire rafraîchi toutes les 5 min avec un tableau contenant toutes les données des 24 dernières heures?

avec une validité de 5 min seulement (ou même 2 minutes), cela semble-t-il intelligent d'utiliser transitoire?

Merci d'avance

Steffy

1
Steffy Kristiensen

Les transitoires constituent un moyen simple de stocker temporairement les données en cache dans la base de données en lui attribuant un nom personnalisé et un délai après lequel elles expireront et seront supprimées. Alors oui, ce sera une bonne idée d’obtenir des données de la deuxième base de données et de les stocker en tant que données transitoires.

La première chose à retenir est que:

Tout le monde semble mal comprendre le fonctionnement de l'expiration transitoire. Son résumé est donc bref: les délais d'expiration transitoires sont des durées maximales. Il n'y a pas d'âge minimum. Les transitoires peuvent disparaître une seconde après les avoir définies ou 24 heures plus tard, mais ils ne seront jamais là après la date d'expiration.

Et bien sûr, il sera assez difficile de sélectionner tous les transitoires des dernières 24 heures par votre nom - les noms des transitoires sont suffixés avec des valeurs aléatoires (ou peut-être des hachages - ce n'est pas important dans ce cas).

Compte tenu de ces deux faits, je crains que vos deux méthodes ne fonctionnent pas.

Il ne sert à rien de régler les transitoires avec cron - ils peuvent disparaître juste après. Et vous ne pouvez pas stocker les valeurs des dernières 24 heures et les sélectionner toutes dans DB.

Alors, comment pourrais-je utiliser des transitoires dans ce cas?

Supposons qu’une fonction récupère toutes les données de la deuxième base de données en tant que tableau. Appelons cette fonction get_remote_db_data(). Mon code ressemblerait à ceci:

$data = get_transient('my_transient_name');
if ( ! $data ) {
    $data = get_remote_db_data();
    set_transient('my_transient_name', $data, 5*60);
}
// ... do your stuff with $data

Et combien de temps le délai d'expiration devrait être? Cela dépend de la fréquence à laquelle les données doivent être actualisées.

1
Krzysiek Dróżdż