utiliser une table tempo pour lire un fichier .xls [Résolu] - PHP - Programmation
Marsh Posté le 25-09-2007 à 14:22:58
tu aurai plutot interet a le faire lors de la sauvegarde du xls : tu ecris les données dans une base de données
Marsh Posté le 25-09-2007 à 14:26:24
ce n'est pas viable comme solution non? biensur ça m'arragerait si j'enregistre tous les enregistrements dans une table existante et fixe dans ma bdd, mais il y e tellement de données que par mois, qu'il est impossible de ne pas les supprimer après.
Marsh Posté le 25-09-2007 à 14:31:25
trop gros pour être mis en bdd , mais stockable dans des fichiers excel ?
tu as quel volume ? ( pour te donner un exemple , c'est une base MySQL qui gère tous les messages de ce forum )
Marsh Posté le 25-09-2007 à 14:37:19
Voire 2000 enregistrements par mois et par personne, j'ai un groupe de 20 personnes
Pr le fichier .xls je crée des fichiers par mois.
Marsh Posté le 25-09-2007 à 14:38:05
pour info, une table peut stocker dans les 200 millions de lignes sans problème ....
Marsh Posté le 25-09-2007 à 14:38:47
sabbahh a écrit : Voire 2000 enregistrements par mois et par personne, j'ai un groupe de 20 personnes |
+10 avec flo, c'est une volumétrie ridicule qui sera parfaitement tolérée par mysql ( même avec un serveur toupouri)
edit
weed a écrit : pour info, une table peut stocker dans les 200 millions de lignes sans problème .... |
le stockage n'est jamais un problème, l'utilisation des données oui.
En l'occurence pour que mysql ( ou tout autre sgbd) s'en sorte correctement sur des grosses tables, quelques problèmes vont se poser ( création d'index toussa toussa).
Mais sabbahh, tu n'es vraiment pas dans ce cas la
Marsh Posté le 25-09-2007 à 14:41:15
donc tu as 40 000 enregistrements par mois ...
Ca te laisse de la marge en 5 ans, tu auras 200 000 d'enregistrements.
Marsh Posté le 25-09-2007 à 14:43:12
anapajari a écrit : |
anapajari a écrit : |
On croit toujours MySQL = toute petite base. J'infirme.
Tu as raison, il faut dans ce cas optimiser. Bien placer ses index, bien choisir les types de champs, eclater la tables en plusieurs si besoin ....
Marsh Posté le 25-09-2007 à 14:43:36
c'est quoi ce prob d'index? moi aussi j'ulise un index dans ma table.. il faut le déclarer comment pour éviter tous genrs de prob?
Marsh Posté le 25-09-2007 à 14:45:04
juste pour ce forum
Citation : |
sachant que les messages sont des champs relativement lourd
Marsh Posté le 25-09-2007 à 14:49:02
mais il y a pas un back up tous les ans, ou quelque choses de ce genre?
parceque ces infos (les miennes) doivent être consultées à tout moment, je veux dire il y a pas rique que ça soit lourd ou je sais pas moi? :s
Marsh Posté le 25-09-2007 à 14:50:28
nan, aucun risque
Citation : Affichage des enregistrements 0 - 29 (191 370 total, traitement: 0.0018 sec.) |
testé a l'instant
et avec les requetes que j'ai pu faire, je suis toujours en dessous des 0.5secondes
Marsh Posté le 25-09-2007 à 14:54:17
flo, tu travailles avec marc ?
sabbahh > bien sur, il faut faire des backup régulier (en planifiant automatiquement) avec la commande mysqldump ou un truc dans le genre régulièrement en cas de pb avec la base.
Marsh Posté le 25-09-2007 à 14:55:05
si ça merde un jour, je vous tuerai
Je vais peut être faire ça, avec la validation de mon chef, par contre je garderai qd même l'archivage en .xls par mois, on sait jamais..
Marsh Posté le 25-09-2007 à 14:55:52
weed a écrit : flo, tu travailles avec marc ? |
nan, les chiffres sur le nombre de post et d'user sont diispo en bas de la page d'accueil du forum
la requete que j'ai fait en dessous provient d'une de mes table
Marsh Posté le 25-09-2007 à 14:56:14
ReplyMarsh Posté le 25-09-2007 à 14:56:31
nop pour faire propre, tu fais des back régulier de la base. En cas de souci, tu pourras redéployer.
Rien ne t'empeche de conserveur les fichier excel aussi.
Marsh Posté le 25-09-2007 à 15:02:41
ReplyMarsh Posté le 25-09-2007 à 15:04:39
weed a écrit : nop pour faire propre, tu fais des back régulier de la base. En cas de souci, tu pourras redéployer. |
Régulier càd, à quelle fréquence? et pour les Back, faut que j'utilise la "fonction" Backup en sql ?
Marsh Posté le 25-09-2007 à 15:17:25
tous les jours ou tous les 2-3 jours en taches planifié.
Tu as la commande mysql dump
http://www.google.fr/search?client [...] che+Google
si tu n'a pas acces à cette commande, tu as aussi : load data outfile
http://www.google.fr/search?hl=fr& [...] cher&meta=
Marsh Posté le 25-09-2007 à 15:48:09
weed a écrit : tous les jours ou tous les 2-3 jours en taches planifié. |
donc ok mnt je connais la sythaxe de mysql dump, pour automatiser le back, je dois utiliser une tâche planifier de windows, vu que mon "prog" va être utilisé en intranet. donc peux tu m'éclaircir la dessus? je dois mettre mon instruction avec le dump dans un fic .php puis l'insérer dans la tâche planifiée en preécisant l'heure..??
Marsh Posté le 25-09-2007 à 16:50:22
euhh, non le mysql dump est une commande qui s'execute en ligne de commande comme commande mysql donc plutot dans un fichier shell bash (ou peut etre dans le pire des cas batch)
regarde cette exemple :
http://www.journaldunet.com/develo [...] dump.shtml
Tu parles d'intranet, donc tu dois avoir accès au serveur. Tu devras executer cette commande mysql dump sans planifier sur ton serveur. Des fichiers seront généré. Une fois généré sur le serveur rien ne t'empeche de les déplacer sur une autre machine par exemple. Puis une fois que tu auras réussi, tu le planifiras.
Si ton serveur est sous Linux ca serait le top du top car tu pourras utiliser le shell bash mais malheuresement ton serveur a l'air d'etre sous Windows, je sais pas pourquoi. Je me trompe ?
Marsh Posté le 26-09-2007 à 10:01:43
Non t'as bien raison "c'est sous windows", j'utilise easyphp (serveur apache), je vais mater le lien que tu m'as donné, mais je t'avoue que "shell bach.." ne me dis pas grand chose
Marsh Posté le 26-09-2007 à 11:36:57
lol petité curieux. Je ne passe pas tres souvent sur cette section.
Ce que tu vas faire, tu vas aller dans le repertoire du style (cela peut varier en fonction de la version de Easyphp) :
C:\Program Files\EasyPHP1-7\mysql\bin
et dans ce repertoire, tu as le fameux fichier mysqldump.exe qui va te permettre de dumper/sauvegarder ta base.
Cette commande ne s'execute uniquement en mode dos, dans ce cas tu fais : Demarrer => Executer => tu tapes cmd
Dans l'invite Dos (la fentre noire), tu vas dans le repertoire C:\Program Files\EasyPHP1-7\mysql\bin et tu fais des tests manuels en executant mysqldump.exe avec les bons parametres (utilisateur/mot de passe et nom de la base)
http://www.journaldunet.com/develo [...] dump.shtml
Marsh Posté le 26-09-2007 à 11:51:14
weed a écrit : pour info, une table peut stocker dans les 200 millions de lignes sans problème .... |
Pour info à l'heure actuelle, dans la boite où j'étais avant, ils doivent en être à plusieurs milliards de lignes dans la même table s'ils n'ont pas déporté le stockage des données les plus anciennes dans une table d'archivage. D'ailleurs, on avait même du limiter le nombre d'index pour que le serveur ne prennent pas trop de retard à l'insertion tellement on avait de données à rajouter par minute pendant les heures de pointes.
sabbahh > Même si les 20 personnes rajoutaient toutes les données du mois dans la même demis heure, un vieux PC arriverait à les stocker sans aucun ralentissement. Pour te donner une idée de vitesse, un ordinateur d'il y a deux trois ans aurait besoin de moins d'une minute pour stocker tout ça. En fait, tu peux considérer que mysql mettra 2 à 20 fois moins de temps à stocker les données que ton programme à créer les fichier excell (en gros 2 fois plus rapide par rapport à la création d'un fichier excell sous forme xml et en gros 20 fois plus rapide si tu fais appel à excell pour créer le fichier)
Marsh Posté le 26-09-2007 à 11:53:32
weed a écrit : |
T'infirmes l'égalité sus-citée ou mon propos?
Nan parce que j'ai vaguement l'impression qu'on dit la même chose
flo850 a écrit : nan, aucun risque
|
c'est typiquement pas le genre de requête qui fera ramer ton sgbd dans la mesure ou il remonte toute la table sans faire d'index scan.
Pour faire de "bons" tests essaye plutot avec une jointure et des conditions sur chacune de tes tables. Un truc dans le genre:
Code :
|
et tu verras une dramatique perte de perfomance si tu n'as pas les indexs qui vont bien.
Maintenant mysql est loin d'être parfait non plus, recement j'ai eu besoin de faire un select qui ne prenait pas en compte des doublons. Un truc dans le genre:
Code :
|
table1 contenant 3 millions d'enregistrement et table2 environ la moitié.
Résultat mysql créé une table temporaire dans un fichier, le dit fichier depasse un giga et mysql se viende.
la même requête sous DB2 mets 0.1 seconde
note: oui j'ai également essayé avec un exists ça marche pas mieux.
note2: oui, le problème vient plus de la modélisation initiale du bouzin, malheureusement on fait avec ce qu'on a.
Marsh Posté le 26-09-2007 à 13:32:53
weed a écrit : lol petité curieux. Je ne passe pas tres souvent sur cette section. |
J'ai fais ce que tu m'avais dis, mnt le back je le retrouve où??
Marsh Posté le 26-09-2007 à 13:44:28
weed a écrit : lol petité curieux. Je ne passe pas tres souvent sur cette section. |
ça y est j'ai trouver c bon, j'ai utilisé l'instruction suivante: mysqldump -u .. --database maDBase>backupTest.sql
donc je vais encore être "chiante" et te demander comment automatiser ce backup? genre chaque mois
Marsh Posté le 26-09-2007 à 14:03:49
sabbahh a écrit : |
Bon je te dis honnettement, tu as bien de la chance que je t'aide. Par contre pour mes pb de java avec jdbc. Nada je vais continuer à galerer comme pas possible ... Enfin bon passons ...
Pour info, je n'ai jamais fais auparavant de dump mais j'ai juste entendu parler. Pour ce faire j'ai donc suivi les doc ....
Un exemple, te sera plus parlant. J'ai aussi un easyphp installé sur ma machine. Donc par défaut le user de connexion est root sans mot de passe. J'ai une base de donnée qui s'appelle java.
Pour faire un back, cela donne ceci dans l'invite de commande dos
C:\Program Files\EasyPHP1-7\mysql\bin>mysqldump.exe -u root java > backup.sql
Le fichier est généré dans le repertoire courant, c'est à dire dans C:\Program Files\EasyPHP1-7\mysql\bin mais rien ne t'empeche de préciser le chemin complet avec un nom de fichier.
Petit rapelle pour se déplacer dans un repertoire sous dos :
exemple : cd "C:\Program Files\EasyPHP1-7\mysql\bin"
Marsh Posté le 26-09-2007 à 14:07:56
sabbahh a écrit : |
ouarf, j'étais en train de rediger mon post et tu as trouvé.
Pour automatiser, rien de plus simple. Tu creer un fichier avec l'extension .bat, tu copies/colles par exemple :
C:\Program Files\EasyPHP1-7\mysql\bin>mysqldump.exe -u root java > backup.sql
et tu l'enregistre. Essaie de double cliquer sur le .bat pour tester le backup.
Si c'est oki, il y a plus qu'a le planifier :
Panneau de configuration => tache planifié => et tu selectionnes ton fichier .bat
Marsh Posté le 26-09-2007 à 14:10:57
tout ça j'ai bien réussie à le faire.. je te remercie quand même
j'ai réussie à faire le backup et aussi à présicer le chemin ..
ma question été de savoir s'il ya moyen d'automatiser tout cela. t'aurais dû lire les posts après je suis pas la seule impatiente dans cette section. mais dèjà un grand merci pour toi
Marsh Posté le 25-09-2007 à 14:21:02
Bonjour à tous,
Dans un tableau où j'affiche des champs texte ou numérique à remplir par l'utilisateur par mois (encours et 2 mois suivant).
Si le mois échu, je "delete" les enregistrements correspondants de ma bdd et je les enregistre dans un fichier excel "qui sert d'archivage".
Maintenant, dans une autre partie de mon programme, je dois récupérer ces enregistrements (du mois M-1, M-2, .., M-n).
Donc je voudrais savoir si il y a moyen d'ouvrir ce fichier .xls et de l'enregister dans une table temporaire?
Message édité par sabbahh le 28-04-2008 à 12:09:20