rendered paste bodyfrom bsddb import dbfrom random import randomimport timeenv = db.DBEnv()flags = db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | db.DB_INIT_LOG | db.DB_INIT_TXNenv.open("/tmp/tmpflum/", flags)dbp = db.DB(env)dbp.open("primary.db", None, db.DB_HASH, db.DB_CREATE | db.DB_AUTO_COMMIT)dbs = db.DB(env)dbs.open("secondary.db", None, db.DB_RECNO, db.DB_CREATE | db.DB_AUTO_COMMIT)def insert(key): # check if the key is available, global counter t = env.txn_begin() try: t_val = dbp.get(key, txn=t) # the key is not found, register a new value for it if t_val is None: counter = "%s" % dbs.append(key, t) dbp.put(key, counter, txn=t) t.commit(0) except Exception, e: print e t.abort()def get(key): t = env.txn_begin() try: val = dbp.get(key, txn=t) t.commit(0) return val except Exception, e: print e t.abort()t_start = t_delta = time.time()num_inserts = 1000samples = []num_samples = 100for i in range(0,num_inserts): r = str(random()) if i % (num_inserts/num_samples) == 0: t = time.time()-t_delta print "registering sample: %s, %s" % (i,t) samples.append((r,t)) t_delta = time.time() insert(r)print "%s inserts took %s" % (num_inserts, time.time()-t_start)t_start = time.time()[get(k) for (k,t) in samples]print "%s gets took %s" % (num_samples, time.time()-t_start)insert("hello")combine = zip(range(0, num_inserts, num_inserts/num_samples),[t for (k,t) in samples])f = file('out.csv', 'w')f.write('samples, time\n')f.write("\n".join([str(s) + ", " + str(t) for s,t in combine]))f.close() dbs.close()dbp.close()env.close()