Type de base

Eléphanteau du PHP | 23 Messages

17 août 2006, 11:41

Bonjour,

J'ai easyPHP 1.8, MySQL 4.1.9 et phpmyadmin 2.6.1.

J'ai une base de données qui comporte 400 000 entrées. Ces entrées sont générées automatiquement chaque jours.
J'effectue des requetes simple sur cette base.

J'ai besoin de savoir quel type de base sera la plus rapide afin d'enregistrer les 400 000 entrées.

Pour l'instant je suis en MyISAM et cela me prend environ 3H pour les enregistrées.

Quel type/format de base de données est le plus performant dans mon cas ?

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 août 2006, 13:48

Salut,

avant de regarder le type de base, comment est-ce que tu enregistres tes données ?

Si c'est une suite d'INSERT, c'est sûr que ça doit être long, mais il y a d'autres moyens plus rapides

Eléphanteau du PHP | 23 Messages

17 août 2006, 15:03

re,

Voila mon code :

Code : Tout sélectionner

"INSERT INTO file (NomFich,DirFich,DateFich,SizeFich) values('$NomFile','$DirFich','$DateFich','$SizeFich')"
voila ce que j'en fais après :

Code : Tout sélectionner

$id_connexion=mysql_connect("","root",""); mysql_select_db("serveur",$id_connexion); $requete2 = "SELECT `NomFich`,`DirFich`,`DateFich`,`SizeFich` FROM FILE GROUP BY `NomFich` HAVING count(`NomFich`)>1"; $execution2 = mysql_db_query("serveur",$requete2); while ($tableau2=mysql_fetch_array($execution2,MYSQL_ASSOC)){ $Taille = $tableau2['SizeFich']; $Nom = $tableau2['NomFich']; $Date = $tableau2['DateFich']; $requete3 = "SELECT `DirFich`, `SizeFich`,`DateFich` FROM FILE WHERE `NomFich` = '$Nom' AND `SizeFich`= '$Taille' AND `DateFich` = '$Date' "; $execution3 = mysql_db_query("serveur",$requete3); if (mysql_num_rows($execution3)>=2){
Ensuite j'affiche les noms, etc.

J'utilise ce code pour rechercher et afficher les doublons présents dans une liste MySQL.

Merci

Eléphanteau du PHP | 23 Messages

17 août 2006, 15:23

pour etre un peu plus clair dans le code :
<?
$id_connexion=mysql_connect("","root","");
mysql_select_db("serveur",$id_connexion);
$requete2 = "SELECT `NomFich`,`DirFich`,`DateFich`,`SizeFich` FROM FILE GROUP BY `NomFich` HAVING count(`NomFich`)>1";
$execution2 = mysql_db_query("serveur",$requete2);
while ($tableau2=mysql_fetch_array($execution2,MYSQL_ASSOC)){
	$Taille = $tableau2['SizeFich'];
	$Nom = $tableau2['NomFich'];
	$Date = $tableau2['DateFich'];
	$requete3 = "SELECT `DirFich`, `SizeFich`,`DateFich` FROM FILE WHERE `NomFich` = '$Nom' AND `SizeFich`= '$Taille' AND `DateFich` = '$Date' ";
	$execution3 = mysql_db_query("serveur",$requete3);
	if (mysql_num_rows($execution3)>=2){  // Pour voir que les fichiers présent plus de deux fois
?>

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 août 2006, 15:30

Je ne comprends, tu parlais de problème au niveau des insertions qui était lentes, et là tu nous donnes des requêtes SELECT...

Mais effectivement c'est normal que ce soit long, puisque pour chaque ligne obtenues dans le premier SELECT tu exécutes une autre autre requête, ce qui te fait "nb résultats + 1" requêtes

Si c'est bien là ton problème, au niveau des sélection, tu devrais présenter ta table et dire ce que tu souhaites obtenir exactement. Je pense qu'il est possible de limiter le nombre de requêtes effectuées, quand des requêtes sont effectuées dans une boucle c'est rarement pertinent ;)

Eléphanteau du PHP | 23 Messages

17 août 2006, 15:56

Re,

J'ai déjà expliquer mon problème auparavant.

J'ai une base de données, alimentées par un script en php qui scanne 2 disque durs d'un PC distant (serveur de données).

Mon script se divise en 2 :

o un qui enregistre les données (nom de fichier, date de création, taille, repertoire ,id auto incrémenté)

o un autre qui vas recherché les doublons dans la base. Un doublons est définie par un fichier qui possède le même nom, la même taille (à l'octet près) ainsi que la même date de création.

Le premier script marche correctement. Même si il est long (environ 3 heures cela ne me dérange pas puisque j'en ai fait une tache planifiées qui s'exécute la nuit.

En revanche le deuxième plante régulièrement lorsque je scan un disque dur en particulier.

Le deuxième script est celui que je vous ai copier/coller.

Je pensais que le plantage pouvait venir du serveur mySQL, car je ne comprend pas pourquoi il plante en particulier, et surtout a un moment precis.

Il faut savoir que les script sont identiques seul la lettre du disque dur change.

S'il vous manque encore des info n' hésité pas ;)

merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 août 2006, 16:07

Tu n'avais pas déjà posté des questions sur ce problème ? Rechercher des doublons dans une liste de fichier ça me dit quelquechose et il me semble qu'il y avait eu des solutions de trouvées ?

Si c'est pas toi, cherche sur le forum, il y a eu le même problème récemment