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
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
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!
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
au resultat :
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
>>> filtrer1()
temps mis : 4.91227698326
>>> filtrer2()
temps mis : 1.85864496231
voila![]()
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.
sqlite a pas besoin de serveur hein ...
puis tu a le temp avant d'avoir 700 000 lignes
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:
voila le resultat à l'execution:
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
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.
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
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
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.
merci encore
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![]()
Partager