Manipulation et traitement des données des grands fichiers

Résolu
anbariota Messages postés 6 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 19 juillet 2010 - 8 avril 2009 à 17:29
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 10 avril 2009 à 11:33
Slt,
jai deux fichier en entree personnes.csv (personnesID,nom) 3000 lignes et peresfils.csv(pereID,filsID) 60000 
donc chaque personne dans personnes.csv a 30 fils et les fils sont aussis des peres dans certains cas...
la je veux marcher jusquau 5eme generation en comparaison le nom du pere avec les noms de ses fils et pour chaque fils on compare le nom du pere avec ses fils :
pere_nom avec fils_nom avec fils_nom 4 fois  
jai lu les deux fichier .CSv avec csharp et je lai mis dans un BDD access
jen ai a la fin le code suivant :
for i de 0 à 3000(por chaque personnes)
{
tbgeneration1= tabelau resulat de la requette de BDD des fils de i avec chacun son  nom
for j de 0 à tb.count   // 30 fois
{
comparaison des noms avec le nom du pere i  la racine
tbgeneration2= tabelau resulat de la requette de BDD des fils de j avec chacun son  nom
for k de 0 à tbgeneration2.count  // 30 fois
{
comparaison des noms avec le nom du pere i  la racine
tbgeneration3= = tabelau resulat de la requette de BDD des fils de k avec chacun son  nom
for l de 0 à tbgeneration3.count // 30 fois
{
comparaison des noms avec le nom du pere initial i  la racine
tbgeneration4= = tabelau resulat de la requette de BDD des fils de l avec chacun son  nom
for m de 0 à tbgeneration4.count  // 30 fois
{
comparaison des noms avec le nom du pere initial i  la racine;




messagebox.show("job done");


ca prends 3 jours pour faire l'execution  ....
il ya pas une solution pour resoudre le probleme de temps ou il ya pas une autre methode pour arriver au peres_fils qui ont le meme nom ....
crdl

5 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 avril 2009 à 11:33
bonjour,
Pour gérer cette difficulté, mieux serait de créer une bdd relationnelle et d'appliquer ensuite des requêtes SQL ad hoc.

Le gain en rapidité de traitement serait alors considérable.

cantador
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
8 avril 2009 à 19:17
for i de 0 à 3000 {
  for j de 0 à tb.count   /* 30 ? */ {
    for k de 0 à tbgeneration2.count  /* 30 fois ? */ {
      for l de 0 à tbgeneration3.count /* 30 fois ? */ {
        for m de 0 à tbgeneration4.count  /* 30 fois ? */{
        } 
      } 
    } 
  } 
}

3000 * 30 * 30 * 30 * 30 2 430 000 000 iterations!
si 0.5 sec/i 337 500 Heures 14 062.5 jours = 2 008.5 semaines = 38.6 ans!si 1 sec/i 675 000 Heures 28 125 jours = 4 017 semaines = 77,3 ans!

<hr size="2" width="100%" />
0
anbariota Messages postés 6 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 19 juillet 2010
8 avril 2009 à 19:41
et alors ???
il ya une pas autre methode  ??
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
8 avril 2009 à 20:19
0.5sec/iteration, ben dis-donc ! C'est des requêtes escargot ...
Tu peux eventuellement casser la boucle une fois que tu as trouvé ton bonheur, mais bon ... que ce soit 10 ou 20 ans, on est plus à dix ans près :}

Cordialement, Bacterius !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
8 avril 2009 à 20:22
Au fait f0xi tu pourrais activer ma source que j'ai mis cette après-midi/début de soirée ?

Cordialement, Bacterius !
0
Rejoignez-nous