cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 2008
-
25 nov. 2008 à 16:52
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 2010
-
27 nov. 2008 à 11:18
Bonjour (ou bonsoir suivant les cas...)
Je viens vous voir car je dois developper une application ayant pour but l'importation de données sous format .txt (suite des données, séparées par un caractère spécial) dans une base de données Access.
Les données sont très volumineuses (l'une de mes tables comportera environs 2 000 000 d'occurences) et je dois donc traiter ca en C#.
Je voulais savoir quel etait le meilleur objet à utiliser selon vous pour faire cela (DataSet, DataReader, etc...), sachant qu'il faut bien entendu que j'essaie de rendre ce traitement le plus rapide possible.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 27 nov. 2008 à 07:22
Hello,
Même si c'est une boîte "poubelle", ne le mets pas sur des forum, ça vaut toujours mieux.
Si tu voulais vraiment me la faire parvenir, tu aurais pu m'envoyer un message privé (bouton MP sous chaque post).
Pour le code, je vais le mettre ici, ça pourra toujours servir à d'autres.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 nov. 2008 à 08:57
Hello,
Tout d'abord, je te déconseille vivement Access pour une quantité de données pareilles.
Access est limité à des fichiers de 2Gb, et encore, les performance baisse très rapidement à partir de 1Gb.
Avec tes 2'000'000 d'entrées pour une table, tu n'atteindras peut-être pas 2Gb, mais si tu peux éviter Access, fais-le.
Si tu peux passer sur une base de données de type SQL server, tu peux utiliser la commande bulk insert, qui permet justement de faire des insertions de fichiers dans une table.
Si Access est vraiment requis, tu peux faire une importation directement depuis Access, ou alors, il ne te reste plus qu'à parcourir tes ficheirs ligne par ligne pour faire les insertions.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 20082 26 nov. 2008 à 09:42
Salut SharpMao!
Alors malheureusement, je ne peux pas eviter l'utilisation d'Access, ça fait partie des contraintes imposées. Sinon, c'est sur que je n'aurais pas choisi ce SGBD.
Tu dis qu'il est possible de faire une importation directe depuis Access?? Comment fais-tu cela?
Jusqu'a maintenant, je lis effectivement mon fichier ligne par ligne, mais les premiers résultats sont peu concluant car le temps d'execution est bien trop long! Saurais-tu quelle structure est la meilleure pour un cas comme celui-ci?
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 nov. 2008 à 12:30
Désolé, je n'ai pas cette version sous la main.
Si je me rappelle bien, tu dois pouvoir faire un clic droit sur la table, et choisir importer dans le menu qui apparaît.
Après, il y a une combobox quelque part dans le dialogue pour préciser que tu veux un fichier txt, et tu n'as plus qu'à suivre l'assistant.
Si ce n'est pas avec le clic droit, ça doit se trouver dans les menu en haut.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 nov. 2008 à 12:33
P.S.
Je te conseille d'essayer d'abord avec de plus petit fichiers.
Un autre problème d'access, c'est qu'il faut régulièrement utiliser la commande "Compact and Repair", sous peine de voir les performace devenir catastrophiques.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 20082 26 nov. 2008 à 14:16
Tout d'abord, je te dis deja merci pour les informations que tu m'as donné, ça va m'aider!
Pour ce qui concerne l'importation dans Access depuis un fichier txt, ça marche effectivement très bien et c'est très rapide (quelques erreurs de type tout de même, mais rien d'insurmontable). Mon souci est que je dois developper une solution qui ne doit pas faire appel à une manipulation d'Access. Est-il possible de faire cette importation en C#? J'ai des doutes (ce serait pourtant tellement pratique...).
J'ai fait egalement des tests avec des petits fichiers (environs 1000 entrées) de la solution que j'ai developpée, mais c'est encore trop long. Si le taux reste le même, j'en aurais pour plus d'une journée pour importer mon fichier, donc il faut que je trouve une autre solution (actuellement, j'ouvre le fichier txt, je le lis ligne par ligne et je l'insere dans ma base à l'aide d'un objet ADODB.Connection et de la methode Execute qui execute la requete SQL passée en parametre).
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 nov. 2008 à 15:10
Hello,
Si Access est installé sur le poste, tu peux essayer d'automatiser Access, pour exécuter l'importation.
Autrement, il ne te reste que la méthode brute.
Après un petit essai, j'arrive à une vitesse de 10'000 enregistrements en 5 sec, ce qui fait tout de même environ 1000 secondes (~16 minutes) pour 2'000'000 d'enregistrements. Je ne pense pas qu'il y ait moyen d'aller beaucoup plus vite avec un fichier Access.
Bon courage
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 20082 26 nov. 2008 à 17:31
Voila des temps deja beaucoup plus acceptable!
Mais quelle architecture utilises-tu pour arriver à ce résultat? Pourrais-tu m'envoyer ton code source (soit ici, soit par mail si cela demande trop de portion de code pour comprendre...), parce que passer d'une journée à un gros quart d'heure, je suis plus qu'interessé!! Tu me sauverais la vie!
PS : j'ai une boite mail poubelle (spam a gogo), tu peux me l'envoyer dessus ([mailto:hasen90@caramail.com hasen90@caramail.com])