1 2# Roughly approximates some of Symas microbenchmark. 3 4from time import time 5import random 6import shutil 7import os 8import tempfile 9 10import lmdb 11 12 13val = ' ' * 100 14MAX_KEYS = int(1e6) 15 16t0 = time() 17 18urandom = file('/dev/urandom', 'rb', 1048576).read 19 20keys = set() 21while len(keys) < MAX_KEYS: 22 for _ in xrange(min(1000, MAX_KEYS - len(keys))): 23 keys.add(urandom(16)) 24 25print 'make %d keys in %.2fsec' % (len(keys), time() - t0) 26keys = list(keys) 27 28if os.path.exists('/ram'): 29 DB_PATH = '/ram/dbtest' 30else: 31 DB_PATH = tempfile.mktemp(prefix='nastybench') 32 33if os.path.exists(DB_PATH): 34 shutil.rmtree(DB_PATH) 35 36env = lmdb.open(DB_PATH, map_size=1048576 * 1024, 37 metasync=False, sync=False, map_async=True) 38 39nextkey = iter(keys).next 40run = True 41while run: 42 with env.begin(write=True) as txn: 43 try: 44 for _ in xrange(10000): 45 txn.put(nextkey(), val) 46 except StopIteration: 47 run = False 48 49d = time() - t0 50env.sync(True) 51print 'insert %d keys in %.2fsec (%d/sec)' % (len(keys), d, len(keys) / d) 52 53 54 55nextkey = iter(keys).next 56t0 = time() 57 58with env.begin() as txn: 59 try: 60 while 1: 61 txn.get(nextkey()) 62 except StopIteration: 63 pass 64 65d = time() - t0 66print 'random lookup %d keys in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) 67 68 69nextkey = iter(keys).next 70t0 = time() 71 72with env.begin(buffers=True) as txn: 73 try: 74 while 1: 75 txn.get(nextkey()) 76 except StopIteration: 77 pass 78 79d = time() - t0 80print 'random lookup %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) 81 82 83nextkey = iter(keys).next 84t0 = time() 85 86with env.begin(buffers=True) as txn: 87 try: 88 while 1: 89 hash(txn.get(nextkey())) 90 except StopIteration: 91 pass 92 93d = time() - t0 94print 'random lookup+hash %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) 95 96 97 98nextkey = iter(keys).next 99t0 = time() 100 101with env.begin(buffers=True) as txn: 102 nextrec = txn.cursor().iternext().next 103 try: 104 while 1: 105 nextrec() 106 except StopIteration: 107 pass 108 109d = time() - t0 110print 'seq read %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) 111