web-dev-qa-db-fra.com

Utilise WP Des transitoires pour sauvegarder les données externes d'un plugin de la meilleure façon?

Je développe un plugin qui repose sur des données externes à récupérer de temps en temps. Pour accélérer les choses, je voudrais mettre en cache les données reçues et les actualiser par intervalles de 10 ou 15 minutes.

Ce ne sera pas un gros problème, car le serveur externe actualisera les données uniquement à intervalles, un peu comme cela.

Mais je pense qu’il faudra, d’une part, prendre un peu de charge du serveur externe et également améliorer la vitesse du site local, car les données sont déjà là.

Au début, j'étais à peu près sûr que WP Les transitoires seraient la meilleure solution, mais je ne suis plus sûr de cela. J'ai toujours vu que de nombreux plugins utilisaient leurs propres tables pour stocker toutes les données, et je me demandais si je devrais transmettre mes données externes via l'API Transients dans la table _options- ou si une structure de table dédiée conviendrait mieux à cela. Cas.

Y a-t-il un point objectif et mesurable dans l'utilisation d'un tableau sur les transitoires ou vice versa?

Mise à jour 1: Les données sont des données structurées de type XML avec un contexte régional. Donc, les utilisateurs pourraient théoriquement avoir besoin d’extraire des dizaines de jeux de données, mais cela ne se produira probablement pas pour beaucoup d’entre eux. Il existe également des ensembles de données "combinés" sur le serveur que vous pouvez extraire, comme dans les "ensembles de données de ville" et les "ensembles de données de zone".

(Demandez-moi n'importe quoi si ce n'est pas clair.)

1
flomei

Si les données que vous extrayez ne représentent qu'une ou plusieurs instances, alors l'API Transients doit faire l'affaire. Gardez à l'esprit qu'il gère également l'auto-expiration pour vous.

Si les données peuvent potentiellement représenter un nombre illimité d'instances (ou au moins de moyennes à grandes), en particulier s'il peut exister des moyens, même légèrement complexes, de trouver l'entrée correcte à extraire (à part juste un ID), un tableau personnalisé est recommandé .

Cela dit, il existe une troisième option potentielle: le système de fichiers. Vous pouvez stocker les données sérialisées/jsonifiées dans un fichier d'un sous-dossier de wp-content. Ceci est bien sûr à condition que les données en question soient effectivement publiques et ne nécessitent aucune protection.

2
Doug Wollison

rafraîchissez-le à intervalles de 10 ou 15 minutes

Les transitoires coûtent cher à créer, aussi les créer et les rincer toutes les 10 à 15 minutes est vraiment une mauvaise idée. Les transitoires ne sont utiles que pour conserver de petites parties de données sur une longue période. Je crois toujours que les personnes en transit ne doivent pas être vidées et recréées plus d'une fois par jour. J'ai tendance à régler mon transitoire sur 30 jours et à ne le vider que lorsque quelque chose se passe, comme publier un nouveau message ou mettre à jour un terme.

Les transitoires ne sont pas non plus destinés à conserver des tonnes de données, comme le stockage de 100 objets post. Vous pouvez vérifier ma réponse ici pour vérifier comment j'ai utilisé mon transitoire, je viens de stocker un tableau d'identifiants d'articles postés au lieu de ma table wp_posts complète. Bien que je reçoive un appel de base de plus par page en raison de mon transitoire, j’économise beaucoup sur l’utilisation de la mémoire en raison du processus de tri.

Je voudrais vraiment envisager une nouvelle table dans votre situation pour traiter ces données externes. Cela nécessiterait toutefois que vous écriviez votre propre processus CRUD pour stocker et gérer les données. Vous pouvez probablement créer votre propre système de cache pour mettre également en cache les données externes, mais cela vous appartient entièrement.

Avant de vous lancer et de créer votre propre table, vous devez lire la réponse de @ tosho à la question suivante

1
Pieter Goosen