BerkeleyDB的使用
2015-11-16 15:31
881 查看
#BerkeleyDB的性能之高就不用说,性能优越在于用人之上,用得好性能自然很棒,用得不好,适得其反。
class Queue(object): """docstring for Bqueue""" def __init__(self,dbFile): #创建DB home = C["DB_PATH"] self.dbFile = home + os.sep + dbFile self.lock = threading.Lock() self.dbenv=bsddb.db.DBEnv() self.dbenv.open(home,bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL) self.mydb = bsddb.db.DB(self.dbenv) self.mydb.set_re_len(1024) self.mydb.open(self.dbFile,dbtype = bsddb.db.DB_QUEUE, flags = bsddb.db.DB_CREATE) def put(self,item): """ 写入队列,注意用json把item(字典类型)转为字符串 """ try: itemStr = json.dumps(item) self.lock.acquire() self.mydb.append(itemStr) self.lock.release() #self.mydb.sync() except Exception, e: raise e def get(self): """ 出队列,注意把字符串转回字典 """ try: self.lock.acquire() itemStr = self.mydb.consume() self.lock.release() except Exception, e: raise e if itemStr: return json.loads(itemStr[1]) def qsize(self): """ 获取队列大小 """ try: self.lock.acquire() dbStat = self.mydb.stat() ndata = dbStat['ndata'] except Exception, e: ndata = -1 finally: self.lock.release() return ndata #return -2 def close(self): "TODO:关闭数据库,队列不再可用" print "CLOSING QUEUE.." self.mydb.close() self.dbenv.close() class HighCache(object): """docstring for HighCache""" def __init__(self, cachefilename): home = C["DB_PATH"] self.cachefilename=home+os.sep+cachefilename self.lock = threading.Lock() self.dbenv=bsddb.db.DBEnv() self.dbenv.open(home,bsddb.db.DB_CREATE|bsddb.db.DB_INIT_MPOOL)#启用共享内存缓存池子系统 DB_INIT_MPOOL缓存 self.mydb=db.DB(self.dbenv) self.mydb.open(self.cachefilename,dbtype=db.DB_RECNO,flags=db.DB_CREATE) def putdata(self,item): ''' 进入缓存的数据 ''' try: db=json.dumps(item) self.lock.acquire() self.mydb.append(db) self.lock.release() except Exception, e: raise e def getdata(self): ''' 从缓存中获取的数据 ''' try: self.lock.acquire() db=self.mydb.items() self.lock.release() return db except Exception, e: raise e if db: return json.loads(db[1]) def getOne(self): self.lock.acquire() #val = self.mydb.get() #self.mydb.delete(1) cur = self.mydb.cursor() val = cur.first() if val: print self.mydb.stat() cur.delete() self.lock.release() return val #清空缓存 def sync(self): self.lock.acquire() self.dbenv.memp_sync()#full flush #self.mydb.sync() self.lock.release() #关闭缓存队列 def close(self): self.mydb.close() self.dbenv.close() #测试代码 if __name__ == '__main__': # MyQueue = Bqueue("queue.db") # a = {"name":"wh"} # b = {"name":"zrf"} # MyQueue.put(a) # MyQueue.put(b) # print MyQueue.get() mycache=HighCache("cachefile.db") a = {"name":"wh"} b = {"name":"zrf"} #mycache.putdata(a) #mycache.putdata(b) #print mycache.getdata() print mycache.getOne() mycache.sync() mycache.close()
#代码还有待进一步优化和改进......
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法