diff --git a/benchmark.py b/benchmark.py deleted file mode 100644 index 8e93ee40..00000000 --- a/benchmark.py +++ /dev/null @@ -1,207 +0,0 @@ -#!/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() diff --git a/benchmarks/test_inserts.py b/benchmarks/test_inserts.py new file mode 100644 index 00000000..29410ea5 --- /dev/null +++ b/benchmarks/test_inserts.py @@ -0,0 +1,154 @@ +import timeit + + +def main(): + 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 xrange(10000): + example = {'fields': {}} + for j in range(20): + example['fields']["key"+str(j)] = "value "+str(j) + + noddy.insert_one(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 '{}s'.format(t.timeit(1)) + + stmt = """ +from pymongo import MongoClient, WriteConcern +connection = MongoClient() + +db = connection.timeit_test +noddy = db.noddy.with_options(write_concern=WriteConcern(w=0)) + +for i in xrange(10000): + example = {'fields': {}} + for j in range(20): + example['fields']["key"+str(j)] = "value "+str(j) + + noddy.insert_one(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 '{}s'.format(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 xrange(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 '{}s'.format(t.timeit(1)) + + stmt = """ +for i in xrange(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 '{}s'.format(t.timeit(1)) + + stmt = """ +for i in xrange(10000): + noddy = Noddy() + for j in range(20): + noddy.fields["key"+str(j)] = "value "+str(j) + noddy.save(write_concern={"w": 0}) + +myNoddys = Noddy.objects() +[n for n in myNoddys] # iterate +""" + + print "-" * 100 + print """Creating 10000 dictionaries - MongoEngine - write_concern={"w": 0}""" + t = timeit.Timer(stmt=stmt, setup=setup) + print '{}s'.format(t.timeit(1)) + + stmt = """ +for i in xrange(10000): + noddy = Noddy() + for j in range(20): + noddy.fields["key"+str(j)] = "value "+str(j) + noddy.save(write_concern={"w": 0}, validate=False) + +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 '{}s'.format(t.timeit(1)) + + stmt = """ +for i in xrange(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 '{}s'.format(t.timeit(1)) + + +if __name__ == "__main__": + main()