from bsddb import db from random import random import time # this is the counter value def getNodeID(key, data): return str(data[0]) env = db.DBEnv() flags = db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | db.DB_INIT_LOG | db.DB_INIT_TXN env.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 = 1000 samples = [] num_samples = 100 for 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()