Question

Je suis curieux de savoir ce qui serait "le plus efficace" mettre en cache la génération d'un flux RSS, par exemple? Ou une réponse API (comme la réponse à / api / films / info / a12345 ).

Par exemple, devrais-je mettre en cache l'intégralité du flux et essayer de le renvoyer sous forme de code psuedo:

id = GET_PARAMS['id']
cached = memcache.get("feed_%s" % id)
if cached is not None:
    return cached
else:
    feed = generate_feed(id)
    memcache.put("feed_%s" % id, feed)
    return feed

Ou mettre en cache le résultat des requêtes et générer le document à chaque fois?

id = sanitise(GET_PARMS['id'])
query = query("SELECT title, body FROM posts WHERE id=%%", id)

cached_query_result = memcache.get(query.hash())
if cached_query_result:
    feed = generate_feed(cached_query_result)
    return feed
else:
    query_result = query.execute()
    memcache.put("feed_%s" % id, query_result)
    feed = generate_feed(query_result)

(Ou, d'une autre manière, je manque?)

Était-ce utile?

La solution

En ce qui concerne mon expérience, vous devez utiliser plusieurs niveaux de cache. Implémentez les deux de vos solutions (à condition que ce ne soit pas le seul code qui utilise & SELECT; le titre SELECT, le corps de FROM publie WHERE id = %% " . S'il est uniquement utilisé le premier).

Dans la deuxième version du code, vous memcache.get (query.hash ()) , mais memcache.put ("feed_% s",% id, query_result) . Cela pourrait ne pas fonctionner comme vous le souhaitez (sauf si vous avez une version inhabituelle de hash ();)).

J'éviterais query.hash () . Il vaut mieux utiliser quelque chose comme posts-title-body-% id. Essayez de supprimer une vidéo lorsqu'elle est stockée dans le cache en tant que query.hash () . Il peut rester pendant des mois sous forme de vidéo zombie.

Au fait:

id = GET_PARMS['id']
query = query("SELECT title, body FROM posts WHERE id=%%", id)

Vous prenez quelque chose dans GET et vous le mettez directement dans la requête SQL? C'est mauvais (cela provoquera des attaques par injection SQL).

Autres conseils

Dépend du modèle d'utilisation, mais toutes choses égales par ailleurs, je voterais pour la première façon, car vous ne ferez que générer le flux 1 fois.

Cela dépend vraiment de ce que votre application fait ... La seule façon de répondre à cette question est d'obtenir des chiffres de performance de votre application existante. Ensuite, vous pouvez trouver le code qui prend le plus de temps et travailler à l’améliorer.

Comme d'autres l'ont suggéré ici, je profilerais votre code et déterminerais quelle est la partie la plus lente ou la plus coûteuse de l'opération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top