Page 1 sur 1

Type de base

Posté : 17 août 2006, 11:41
par Anakinn
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

Posté : 17 août 2006, 13:48
par ouckileou
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

Posté : 17 août 2006, 15:03
par Anakinn
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

Posté : 17 août 2006, 15:23
par Anakinn
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
?>

Posté : 17 août 2006, 15:30
par ouckileou
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 ;)

Posté : 17 août 2006, 15:56
par Anakinn
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

Posté : 17 août 2006, 16:07
par ouckileou
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