11#!/usr/bin/env python
22
3- import timeit
4-
5-
6- def cprofile_main ():
7- from pymongo import Connection
8- connection = Connection ()
9- connection .drop_database ('timeit_test' )
10- connection .disconnect ()
11-
12- from mongoengine import Document , DictField , connect
13- connect ("timeit_test" )
14-
15- class Noddy (Document ):
16- fields = DictField ()
3+ """
4+ Simple benchmark comparing PyMongo and MongoEngine.
5+
6+ Sample run on a mid 2015 MacBook Pro (commit b282511):
7+
8+ Benchmarking...
9+ ----------------------------------------------------------------------------------------------------
10+ Creating 10000 dictionaries - Pymongo
11+ 2.58979988098
12+ ----------------------------------------------------------------------------------------------------
13+ Creating 10000 dictionaries - Pymongo write_concern={"w": 0}
14+ 1.26657605171
15+ ----------------------------------------------------------------------------------------------------
16+ Creating 10000 dictionaries - MongoEngine
17+ 8.4351580143
18+ ----------------------------------------------------------------------------------------------------
19+ Creating 10000 dictionaries without continual assign - MongoEngine
20+ 7.20191693306
21+ ----------------------------------------------------------------------------------------------------
22+ Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade = True
23+ 6.31104588509
24+ ----------------------------------------------------------------------------------------------------
25+ Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True
26+ 6.07083487511
27+ ----------------------------------------------------------------------------------------------------
28+ Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False
29+ 5.97704291344
30+ ----------------------------------------------------------------------------------------------------
31+ Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False
32+ 5.9111430645
33+ """
1734
18- for i in range (1 ):
19- noddy = Noddy ()
20- for j in range (20 ):
21- noddy .fields ["key" + str (j )] = "value " + str (j )
22- noddy .save ()
35+ import timeit
2336
2437
2538def main ():
26- """
27- 0.4 Performance Figures ...
28-
29- ----------------------------------------------------------------------------------------------------
30- Creating 10000 dictionaries - Pymongo
31- 3.86744189262
32- ----------------------------------------------------------------------------------------------------
33- Creating 10000 dictionaries - MongoEngine
34- 6.23374891281
35- ----------------------------------------------------------------------------------------------------
36- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False
37- 5.33027005196
38- ----------------------------------------------------------------------------------------------------
39- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False, cascade=False
40- pass - No Cascade
41-
42- 0.5.X
43- ----------------------------------------------------------------------------------------------------
44- Creating 10000 dictionaries - Pymongo
45- 3.89597702026
46- ----------------------------------------------------------------------------------------------------
47- Creating 10000 dictionaries - MongoEngine
48- 21.7735359669
49- ----------------------------------------------------------------------------------------------------
50- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False
51- 19.8670389652
52- ----------------------------------------------------------------------------------------------------
53- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False, cascade=False
54- pass - No Cascade
55-
56- 0.6.X
57- ----------------------------------------------------------------------------------------------------
58- Creating 10000 dictionaries - Pymongo
59- 3.81559205055
60- ----------------------------------------------------------------------------------------------------
61- Creating 10000 dictionaries - MongoEngine
62- 10.0446798801
63- ----------------------------------------------------------------------------------------------------
64- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False
65- 9.51354718208
66- ----------------------------------------------------------------------------------------------------
67- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False, cascade=False
68- 9.02567505836
69- ----------------------------------------------------------------------------------------------------
70- Creating 10000 dictionaries - MongoEngine, force=True
71- 8.44933390617
72-
73- 0.7.X
74- ----------------------------------------------------------------------------------------------------
75- Creating 10000 dictionaries - Pymongo
76- 3.78801012039
77- ----------------------------------------------------------------------------------------------------
78- Creating 10000 dictionaries - MongoEngine
79- 9.73050498962
80- ----------------------------------------------------------------------------------------------------
81- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False
82- 8.33456707001
83- ----------------------------------------------------------------------------------------------------
84- Creating 10000 dictionaries - MongoEngine, safe=False, validate=False, cascade=False
85- 8.37778115273
86- ----------------------------------------------------------------------------------------------------
87- Creating 10000 dictionaries - MongoEngine, force=True
88- 8.36906409264
89- 0.8.X
90- ----------------------------------------------------------------------------------------------------
91- Creating 10000 dictionaries - Pymongo
92- 3.69964408875
93- ----------------------------------------------------------------------------------------------------
94- Creating 10000 dictionaries - Pymongo write_concern={"w": 0}
95- 3.5526599884
96- ----------------------------------------------------------------------------------------------------
97- Creating 10000 dictionaries - MongoEngine
98- 7.00959801674
99- ----------------------------------------------------------------------------------------------------
100- Creating 10000 dictionaries without continual assign - MongoEngine
101- 5.60943293571
102- ----------------------------------------------------------------------------------------------------
103- Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade=True
104- 6.715102911
105- ----------------------------------------------------------------------------------------------------
106- Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True
107- 5.50644683838
108- ----------------------------------------------------------------------------------------------------
109- Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False
110- 4.69851183891
111- ----------------------------------------------------------------------------------------------------
112- Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False
113- 4.68946313858
114- ----------------------------------------------------------------------------------------------------
115- """
11639 print ("Benchmarking..." )
11740
11841 setup = """
@@ -131,7 +54,7 @@ def main():
13154for i in range(10000):
13255 example = {'fields': {}}
13356 for j in range(20):
134- example['fields'][" key"+ str(j)] = " value "+ str(j)
57+ example['fields'][' key' + str(j)] = ' value ' + str(j)
13558
13659 noddy.save(example)
13760
@@ -146,17 +69,18 @@ def main():
14669
14770 stmt = """
14871from pymongo import MongoClient
72+ from pymongo.write_concern import WriteConcern
14973connection = MongoClient()
15074
151- db = connection.timeit_test
75+ db = connection.get_database(' timeit_test', write_concern=WriteConcern(w=0))
15276noddy = db.noddy
15377
15478for i in range(10000):
15579 example = {'fields': {}}
15680 for j in range(20):
15781 example['fields']["key"+str(j)] = "value "+str(j)
15882
159- noddy.save(example, write_concern={"w": 0} )
83+ noddy.save(example)
16084
16185myNoddys = noddy.find()
16286[n for n in myNoddys] # iterate
@@ -171,10 +95,10 @@ def main():
17195from pymongo import MongoClient
17296connection = MongoClient()
17397connection.drop_database('timeit_test')
174- connection.disconnect ()
98+ connection.close ()
17599
176100from mongoengine import Document, DictField, connect
177- connect(" timeit_test" )
101+ connect(' timeit_test' )
178102
179103class Noddy(Document):
180104 fields = DictField()
0 commit comments