2009-11-24 5 views
0

J'ai une grande table et j'aimerais stocker les résultats dans Memcache. J'ai Memcache mis en place sur mon serveur, mais il ne semble y avoir aucune documentation utile (que je peux trouver) sur la façon de transférer efficacement de grandes quantités de données. La seule façon que je peux actuellement penser est d'écrire une requête mysql qui saisit la clé et la valeur de la table, puis enregistre dans Memcache. Ce n'est pas une solution particulièrement évolutive (surtout quand ma requête génère quelques centaines de milliers de lignes). Des conseils sur la façon de faire cela?Transférer la table à Memcache

EDIT: il y a une certaine confusion sur ce que j'essaie de faire, disons que j'ai une table avec deux champs (clé et valeur), je tire l'information à la volée et je dois la faire correspondre au Je voudrais éviter d'avoir à exécuter ~ 1000 requêtes par chargement de la page Memcache semble être une alternative parfaite parce qu'elle est configurée pour utiliser la valeur de la clé, disons que cette table a 100K lignes. savoir pour obtenir ces données de la table db à memcache est d'exécuter une requête qui boucle à travers chaque ligne de la table et crée une ligne individuelle memcache

Questions: Est-ce un bon moyen d'utiliser memcache? Si oui, est là un meilleur moyen de transférer ma table?

+3

S'il vous plaît rappelez-vous que vous ne pouvez pas interroger memcache, seulement tirer des données existantes si vous savez qu'ils sont stockés clé. –

+0

memcache est un * cache *, vous ne devriez pas y importer de données. –

Répondre

0

Russ,

Il semble presque comme si vous utilisez une table MySQL avec le moteur de stockage mis à MEMORY pourrait être votre chemin à parcourir. Une table basée sur la RAM vous offre la flexibilité d'utiliser SQL et empêche également le débordement de disque en raison d'une grande quantité de lectures/écritures (comme Memcached). Cependant, une table basée sur la RAM est très volatile.

Si quelque chose est stocké dans la table et non vidée dans une table sur disque, et que vous perdez de la puissance ... eh bien, vous venez de perdre vos données. Cela étant dit, assurez-vous de vider vers une vraie table sur disque de temps en temps.

Un autre avantage de l'utilisation de tables de mémoire est que vous pouvez stocker tous les types de données MySQL typiques, il n'y a donc pas de limite de taille de 1 Mo.Memcache est le stockage de valeur clé.

1

vous pouvez réellement tirer toutes les lignes d'un tableau et stocker le tableau dans memcache

memcache_set($memcache_obj, 'var_key', $your_array); 

mais vous devez vous rappeler quelques petites choses

  • PHP linéariser/désérialiser le tableau de memcache donc si vous avoir beaucoup de lignes, il peut être plus lent alors en fait interroger le DB
  • vous ne pouvez pas faire de filtrage (NO SQL), si vous voulez filtrer certains éléments, vous devez implémenter ce filtre vous-même et il serait probablement pire que la DB moteur.
  • memcache ne stockera pas plus de 1 méga-octet ...

Je ne sais pas ce que vous essayez de réaliser, mais l'utilisation générale de memcache est:

  • magasin le résultat de SQL/temps de traitement, mais le nombre de lignes qui en résulte doit être petit
  • stocker des blobs HTML (X) pré créés pour éviter l'accès DB.
  • stockage de session utilisateur
+0

Salut, merci beaucoup pour la réponse. J'ai édité ma question pour donner plus de clarté à ce que j'essaie de faire.Il semble être une application parfaite pour memcache mais je peux me tromper totalement Aussi, quand vous dites que Memcache ne stocke pas plus de 1 Mo, vous signifie que je ne peux pas avoir une valeur> 1 Mo. Je suppose que je peux avoir plus de 1 Mo stocké dans Memcache sur mon serveur .... – Russ