Bonjour,
j'y connais rien en shell mais il va falloir que je fasse un fichier de maintenance pour un script de stats car en php je saturerais mon serveur plusieurs milliers d'entrées SQL à traiter) :(
Pour infos je suis sous Mysql 3.23.xx
Voici ce que je dois faire :
>je selectionne toutes les entrées de ma table "logs" :
SELECT * FROM logs
et j'envoi le tout dans la table archive_logs avec un INSERT...
ensuite je fais les calculs des logs brut à l'aide de
SELECT count(visites)...
SELECT count(page_vue)...
et j'insère ces résultats dans la table "statisitques"
INSERT visites, page_vue....
Et je vide ma table "logs" une fois que l'envoi des logs brut et les calculs sont fais.
Pour des requêtes en PHP ça passe mais comment faire ça avec un fichier shell exécuté tous les jours par une tache cron ?
Si quelqu'un pourrait me donner un exemple svp pour que je comprenne le principe de mise en oeuvre de cette maintenance que j'ai à faire.
Merci à tous de m'avoir lu et pour vos réponses (j'espère j'ai plus de cheveux à force de cogiter)
# .
Posté par snt . Évalué à 2.
Exemple :
$ mysql -u root -e 'create database toto ;'
man mysql pour plus d'infos.
Sinon je sais pas quel volume de données tu as, mais si c'est des milliers et pas des centaines de milliers, ca ne devrait pas mettre à genoux ton serveur.
- les tables sont correctement indexees ?
- les traitements sont fait sur le serveur de sgbd et pas par php ? ( tu fais bien "insert into toto select * from tata" et non pas "select * from toto" puis "insert into tata" pour chaque enregistrement ? "
- tu peux peut etre passer par une vue
- tu peux peut etre passer par une procedure stockée : ca t'evitera des aller-retour reseau
# ben avec la ligne de commande mysql
Posté par Hardy Damien . Évalué à 1.
et dans cron tu lances le script suivant :
#!/bin/sh
mysql -u login -p password -D base < requetes.sql
Dam
# php-cli
Posté par Skanx (site web personnel) . Évalué à 3.
[^] # Re: php-cli
Posté par Linul . Évalué à 1.
- Non je compte l'automatiser manuellement via un script de maintenance.
>> les tables sont correctement indexees ?
- oui
>> les traitements sont fait sur le serveur de sgbd et pas par php ? ( tu fais bien "insert into toto select * from tata" et non pas "select * from toto" puis "insert into tata" pour chaque enregistrement ? "
- bein le script de maintenance sera surement fais en php, voir en shell ou les 2 je sais pas encore vue qu'en PHP je vais tout plomber et en shell je sais pas faire... Donc j'attends les retours sur les forums avant de faire une bêtise.
>> tu peux peut etre passer par une vue
- cet à dire stp ?
----
>>"tu mets toutes tes requetes les une en dessous des autres séarées par des ; dans un fichier requetes.sql
et dans cron tu lances le script suivant :
#!/bin/sh
mysql -u login -p password -D base < requetes.sql "
- Ca me semble une bonne idée mais il faut que je génère le fichier requete.sql automatiquement donc je me demande si ça reviens pas au même question consommation de ressource lors de l'extraction de mes logs brut > le calcul des données et la création de ces lignes dans le fichier requete.sql
Le but est pour moi que ça soit le plus rapide possible et optimisé pour éviter un mauvais traitement voir une coupure pendant la maintenance ce qui aurait pour incidence de fausser mon système de stats.
----
>> Si ton code de maintenance est déjà fait en php, tu pourrais envisager d'utiliser l'interpréteur php en ligne de commande (package php4-cli pour Debian).
- Cet à dire stp
Sinon non je ne l'ai pas encore fais, je cherche encore le meilleur moyen de faire ça car la seule solution que j'ai trouvé c'est de générer les requêtes et calcul avec en boucle avec un while en php (aïe, aïe...)
Désolé si je percute pas au quart de tour, j'y connais pas grand chose en shell ou ce style de requête gourmande et automatisé.
[^] # Re: oublie
Posté par Linul . Évalué à 1.
>> les traitements sont fait sur le serveur de sgbd et pas par php ? ( tu fais bien "insert into toto select * from tata" et non pas "select * from toto" puis "insert into tata" pour chaque enregistrement ? "
- Oui je compte faire "insert into toto select * from tata"
[^] # Re: oublie
Posté par Linul . Évalué à 1.
Sinon je pensais faire par tranche de 200 entrèes avec PHP :
Je m'explique, je traite les 200 premiers logs brut qui sont dans ma table "logs" puis avec la fonction sleep() j'attends 2 secondes avant de rediriger avec la fonction redirect() vers le même fichier avec $_GET pour reprendre les 200 suivantes etc
La maintenance devrait se faire en 20 minutes pour 100 000 entrées à traiter.
C'est pas la meilleure solution en terme de rapidité de la maintenance mais ça me semble fiable et léger non ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.