208 lines
5.7 KiB
Python
208 lines
5.7 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
Simple benchmark comparing PyMongo and MongoEngine.
|
|
|
|
Sample run on a mid 2015 MacBook Pro (commit b282511):
|
|
|
|
Benchmarking...
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - Pymongo
|
|
2.58979988098
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - Pymongo write_concern={"w": 0}
|
|
1.26657605171
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - MongoEngine
|
|
8.4351580143
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries without continual assign - MongoEngine
|
|
7.20191693306
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade = True
|
|
6.31104588509
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True
|
|
6.07083487511
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False
|
|
5.97704291344
|
|
----------------------------------------------------------------------------------------------------
|
|
Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False
|
|
5.9111430645
|
|
"""
|
|
|
|
import timeit
|
|
|
|
|
|
def main():
|
|
print("Benchmarking...")
|
|
|
|
setup = """
|
|
from pymongo import MongoClient
|
|
connection = MongoClient()
|
|
connection.drop_database('timeit_test')
|
|
"""
|
|
|
|
stmt = """
|
|
from pymongo import MongoClient
|
|
connection = MongoClient()
|
|
|
|
db = connection.timeit_test
|
|
noddy = db.noddy
|
|
|
|
for i in range(10000):
|
|
example = {'fields': {}}
|
|
for j in range(20):
|
|
example['fields']['key' + str(j)] = 'value ' + str(j)
|
|
|
|
noddy.save(example)
|
|
|
|
myNoddys = noddy.find()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - Pymongo""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
from pymongo import MongoClient
|
|
from pymongo.write_concern import WriteConcern
|
|
connection = MongoClient()
|
|
|
|
db = connection.get_database('timeit_test', write_concern=WriteConcern(w=0))
|
|
noddy = db.noddy
|
|
|
|
for i in range(10000):
|
|
example = {'fields': {}}
|
|
for j in range(20):
|
|
example['fields']["key"+str(j)] = "value "+str(j)
|
|
|
|
noddy.save(example)
|
|
|
|
myNoddys = noddy.find()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - Pymongo write_concern={"w": 0}""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
setup = """
|
|
from pymongo import MongoClient
|
|
connection = MongoClient()
|
|
connection.drop_database('timeit_test')
|
|
connection.close()
|
|
|
|
from mongoengine import Document, DictField, connect
|
|
connect('timeit_test')
|
|
|
|
class Noddy(Document):
|
|
fields = DictField()
|
|
"""
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
for j in range(20):
|
|
noddy.fields["key"+str(j)] = "value "+str(j)
|
|
noddy.save()
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - MongoEngine""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
fields = {}
|
|
for j in range(20):
|
|
fields["key"+str(j)] = "value "+str(j)
|
|
noddy.fields = fields
|
|
noddy.save()
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries without continual assign - MongoEngine""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
for j in range(20):
|
|
noddy.fields["key"+str(j)] = "value "+str(j)
|
|
noddy.save(write_concern={"w": 0}, cascade=True)
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}, cascade = True""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
for j in range(20):
|
|
noddy.fields["key"+str(j)] = "value "+str(j)
|
|
noddy.save(write_concern={"w": 0}, validate=False, cascade=True)
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False, cascade=True""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
for j in range(20):
|
|
noddy.fields["key"+str(j)] = "value "+str(j)
|
|
noddy.save(validate=False, write_concern={"w": 0})
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - MongoEngine, write_concern={"w": 0}, validate=False""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
stmt = """
|
|
for i in range(10000):
|
|
noddy = Noddy()
|
|
for j in range(20):
|
|
noddy.fields["key"+str(j)] = "value "+str(j)
|
|
noddy.save(force_insert=True, write_concern={"w": 0}, validate=False)
|
|
|
|
myNoddys = Noddy.objects()
|
|
[n for n in myNoddys] # iterate
|
|
"""
|
|
|
|
print("-" * 100)
|
|
print("""Creating 10000 dictionaries - MongoEngine, force_insert=True, write_concern={"w": 0}, validate=False""")
|
|
t = timeit.Timer(stmt=stmt, setup=setup)
|
|
print(t.timeit(1))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|