IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

fichiers .csv ou sqlite ?


Sujet :

Python

  1. #1
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut fichiers .csv ou sqlite ?
    salut,

    j'aimerai savoir quel est le plus rapide. En fait je fait du filtrage de site mais pour l'instant, je ne vois pas la différence entre les deux.

    est ce que quelqu'un aurait une idée ou un lien a me proposer ?

    merci

  2. #2
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Il faut importer timeit et mesurer. Faire la moyenne de plusieurs tests, en deux séries de tests: sur une petite et grande quantité de données.

    Mais tu dis ne pas voir la différence, à quoi bon se poser la question?

    Les entrées/sorties sont probablement plus rapides. En revanche elles ne permettent pas la flexibilité du langage SQL!

  3. #3
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    pour ceux que ça interesse, j'ai fait deux tests avec un fichier csv contenant 700 000 lignes et une bases de donnees construites avec les memes lignes:
    import apsw,time,csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    import apsw,time,csv
     
    def filtrer1():
    	domain="http://www.google.fr"
    	t=time.time()
    	connection=apsw.Connection("blacklist.db")
    	cursor=connection.cursor()
    	for m in cursor.execute("select x from url"):
    		f=domain.find(str(m),0,len(domain))
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r
     
    def filtrer2():
    	domain="http://www.google.fr"
    	t=time.time()
    	cr = csv.reader(open("/home/black_list.csv","rb"))
    	for row in cr:
    		f=domain.find(str(row[0]),0,len(domain))
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r
    au resultat :
    >>> filtrer1()
    temps mis : 4.91227698326
    >>> filtrer2()
    temps mis : 1.85864496231


    voila

  4. #4
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    C'est très intéressant. L'avantage de fichiers ascii c'est de ne pas avoir à installer de SGBD, pratique pour le déploiement. Par contre le fichier est en clair... Ya du pour et du contre même si on n'est pas à quelques micro-secondes près.

  5. #5
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 863
    Points
    1 863
    Par défaut
    sqlite a pas besoin de serveur hein ...
    puis tu a le temp avant d'avoir 700 000 lignes

  6. #6
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    ca me parraissait curieux de voir que sqlite etait aussi lent, alors j'ai refait des tests.
    principalement j'ai enlevé la méthode rfind qui me parraissait etre la cause:

    voila le resultat du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import apsw,time,csv
     
    def filtrer_porno():
    	domain="http://www.google.fr"
    	t=time.time()
    	connection=apsw.Connection("blacklist.db")
    	cursor=connection.cursor()
    	finded=0
    	for m in cursor.execute("select x from url where x='http://www.google.fr"):
    		finded=finded+1
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r
     
    def filtrer_porno2():
    	domain="http://www.google.fr"
    	t=time.time()
    	cr = csv.reader(open("/home/nfrevol/test/nicguardobject/black_list.csv","rb"))
    	for row in cr:
    		f=domain.find(str(row[0]),0,len(domain))
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r
    voila le resultat à l'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from benchdbmetod import *
    >>> filtrer_porno()
    temps mis :  0.665671110153
    >>> filtrer_porno2()
    temps mis :  1.77958798409
    PS: en ce qui concerne les 700 000 lignes, je les aurai au minimum car ma table contient tous les urls et domaines de la blacklist des sites porno.

  7. #7
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Tu peux encore optimisé plus ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import apsw,time,csv
     
    def filtrer_porno():
    	domain="http://www.google.fr"
    	t=time.time()
    	connection=apsw.Connection("blacklist.db")
    	cursor=connection.cursor()
    	finded=0
    	for m in cursor.execute("select x from url where x='http://www.google.fr"):
                finded+=1 ## a verifier le gain en performance
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r
     
    def filtrer_porno2():
    	domain="http://www.google.fr"
    	t=time.time()
            cr = csv.reader(open("/home/nfrevol/test/nicguardobject/black_list.csv","rb"))
            domainfind = domain.find ## gain non negligeable si la boucle est enorme
            lendomain = len(domain)  ## idem
    	for row in cr:
                f=domainfind(str(row[0]),0,lendomain)
    	t1=time.time()
    	r=t1-t
    	print "temps mis : ", r

  8. #8
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    merci beaucoup pour cette optimisation.
    sur la premire fonction je ne sais pas si il y a un grand changement.
    pour la seconde c'est certains que ça reduit le temps puisqu'il n'y a pas à recalculer à chaque fois la longueur du domaine.

    voici les resultats mais il ne faut pas trop s'y fier en ce qui concerne la différence de temps car ceux ci peuvent varier un peu. c'est pour cela que j'en ai fait plusieurs à la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> filtrer_porno()
    temps mis :  0.427585840225
    >>> filtrer_porno2()
    temps mis :  1.64427495003
    >>> filtrer_porno()
    temps mis :  0.352196931839
    >>> filtrer_porno2()
    temps mis :  1.44673895836
    >>> filtrer_porno()
    temps mis :  0.363066196442
    >>> filtrer_porno2()
    temps mis :  1.44820594788
    >>> filtrer_porno()
    temps mis :  0.359702110291
    >>> filtrer_porno2()
    temps mis :  1.44892120361
    merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Import fichier CSV dans SQLite
    Par lkhalid dans le forum Lazarus
    Réponses: 1
    Dernier message: 08/09/2013, 09h42
  2. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  3. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo