Stocke des donnes temporairement

Eléphant du PHP | 59 Messages

17 nov. 2010, 19:10

Bonjour,

Je voudrais savoir si il est possible avec mysql de stocker les résultats d'une requête temporairement. Je m'explique:

J'ai 3 tables
Produits : produit_id, nom
Liens : produit_id_from,produit_id_to
Code : produit_id, code

Je voudrais à partir d'un produit_id A , retrouver dans la table lien tous les produits qui sont en rapport avec A, et ensuite tous les produits qui sont en rapport avec un de ces produits .
Ensuite pour toute cette liste il faudrait que je récupère le nom dans la table produits, et tous les codes en rapport (plusieurs lignes possible par produits) dans la table code.

A chaque connexion d'un utilisateur sur mon site j'aurais besoin de stockée ces données. les données seront différentes pour chaque utilisateurs. Ces données serviront à leur tour à effectuer plusieurs autres requêtes avec aussi beaucoup de jointure.

Donc pour alléger mes requêtes je souhaiterais stockées ces données.

Le mieux serait dans la base de donnée, j'ai fait quelques recherches, mais pour le moment j'ai rien trouvé d'extraordinaire, à part les vues matérialisé, mais indisponible avec mysql.
Ou sinon je stocke tous dans une session mais ça m'oblige à faire beaucoup de manip avec php pour utiliser mes données dans les requêtes.

D'après vous qu'elle serait la meilleur solution?

MErci

ViPHP
ViPHP | 1136 Messages

17 nov. 2010, 19:43

Salut ,

Pour sauvegarder des données "volatiles" , qui sont souvent modifiées ou remontées j'utilise le moteur mysql "Memory" , qui stock les données en mémoire Ram .
Ce qui permet d'avoir des accès tres rapides , mais disparaissent au redémarrage du serveur ( s'il y a redémarrage ).

Il faut tout de même faire attention à la quantité de données stockées dans ce genre de tables , afin de ne pas saturer la mémoire ...

Good luck ,
Ch.

ViPHP
AB
ViPHP | 5818 Messages

17 nov. 2010, 19:52

Salut ,

Pour sauvegarder des données "volatiles" , qui sont souvent modifiées ou remontées j'utilise le moteur mysql "Memory" , qui stock les données en mémoire Ram .
J'y avais pensé mais cela ne stocke des données que pour le script courant et non pour la durée d'une session (me semble-t-il )

ViPHP
ViPHP | 1136 Messages

17 nov. 2010, 20:00

Non non , le stockage perdure tant que l'on ne l'a pas supprimé ou redémarré le serveur ..

C'est exactement comme une table standard , sauf que le stockage des données se fait ailleurs .. et reste sous la main .

plus d'infos ici

Eléphant du PHP | 59 Messages

17 nov. 2010, 20:23

Merci stopher pour ton conseil.

Je vais tester ça ce soir.
Pour la suppression de la table tu passe par un cron, ou est ce qu'il y a une suppression automatique à partir d'un certain délai d'inactivité.

Ca va pas poser de problème si je crée une table par utilisateur? Pour le départ le nombre d'utilisateur sera limité, mais dans le futur... si je me retrouve avec beaucoup d'utilisateur en simultané? Il suffira juste d'augmenter l'espace disque?

Merci

ViPHP
ViPHP | 1136 Messages

17 nov. 2010, 20:29

Merci stopher pour ton conseil.

Je vais tester ça ce soir.
Pour la suppression de la table tu passe par un cron, ou est ce qu'il y a une suppression automatique à partir d'un certain délai d'inactivité.

Ca va pas poser de problème si je crée une table par utilisateur? Pour le départ le nombre d'utilisateur sera limité, mais dans le futur... si je me retrouve avec beaucoup d'utilisateur en simultané? Il suffira juste d'augmenter l'espace disque?

Merci
A toi de gérer la validité des données , tel un cache , c'est à toi de supprimer les données ...
Pour ce qui est de la limite , Même 500Mo de Ram , avec uniquement du texte ( données sérialisés par exemple ), c'a fait déjà pas mal d'utilisateurs en simultané , donc pas d'inquiétude , si tu nettoies les données qui n'ont plus lieu d'être dans la table de façon régulière tu as largement de quoi voir venir .

Si malgré la quantité d'utilisateurs gigantesque nécessaire pour saturer XMo , tu peux ajouter de la Ram ( pas de disque dur , c'est en ram ... ) .