当前位置: 首页 > SEO学院网络营销

Python bsddb模块 操作 Berkeley DB数据库介绍

来源:未知 浏览量:132次

bsddb模块是用来操作bdb的模块bdb是著名的Berkeley DB它的性能非常好SEO关键词它的性能非常好mysql的存储后端引擎都支持bdb的方式。这里简单介绍一些关于bsddb的使用方法。

bdb不同于一般的关系数据库它存储的数据只能是以key和value组成的一对数据使用就像python的字典一样它不能直接表示多个字段当要存储多个字段的数据时只能把数据作为一个整体存放到value中。

使用bsddb面临的第一问题是使用什么数据访问方法bdb支持四种:btree, hash, queue, recno。这里先说说它们有什么区别btree是用的树结构来才存储的数据查询速度很快可以存储任意复杂的key和value。hash是用的hash算法速度其实和btree比差不多的但是当数据量特别巨大时应该使用hash。queue是队列操作它有一个限制它只能存储定长的数据也就是说value的长度是固定的!但是queue可以保持数据的先进先出并且对数据的插入做了特殊的优化并且提供行级锁。queue的key必须是数字。recno和queue类似但是它可以支持变长的value它的key同样也是数字。

这里先对这四种数据访问方法分别做打开数据库简单插入一条数据的演示。
对于python的bsddb模块来说打开数据库的操作有两种方式一是使用原始的接口就是先打开一个环境然后从这个环境中打开一个数据库就像下面:
代码如下:
import bsddb

dbenv = bsddb.db.DBEnv()
dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
d = bsddb.db.DB(dbenv)
d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0666)

还有一种方式是python特有的这个是bsddb模块本身对上面的过程做了包装比如打开btree的:
代码如下:
import bsddb

db = bsddb.btopen(‘test.db’, ‘c’)

看起来比上面的简单多了吧。但这种方式提供的接口很有限也只有很简单的功能没有第一种的灵活但是它在python2.5的版本里是线程安全的。这里都介绍一下。
看看一个例子:
代码如下:
#-*- encoding: gb2312 -*-
import os, sys, string
import bsddb, time

home = “db_home”
filename = “test.db”
try:
# 创建home目录
os.mkdir(home)
except:
pass

# 创建数据库环境
dbenv = bsddb.db.DBEnv()
# 打开数据库环境
dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
# 创建数据库对象
d = bsddb.db.DB(dbenv)
# 打开数据库, 这里的第二个参数就是指定使用什么数据访问方法
# btree是 bsddb.db.DB_BTREE hash是bsddb.db.DB_HASH
# queu 是 bsddb.db.DB_QUEUE, recno 是bsddb.db.DB_RECNO
d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0666)
# 插入一条数据注意queue和recno的key不能是字符串的应该是数字
d.put(‘test1’, ‘zhaowei’)
print d.items()
# 关闭这时会把数据写回文件
d.close()
dbenv.close()

下面来个使用queue的注意看有什么区别:
代码如下:
#-*- encoding: gb2312 -*-
import os, sys, string
import bsddb, time

home = “db_home”
filename = “testqueue.db”
try:
os.mkdir(home)
except:
pass

dbenv = bsddb.db.DBEnv()
dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
d = bsddb.db.DB(dbenv)
# queue必须要设置一个value的长度它的value是定长的
d.set_re_len(40)
d.open(filename, bsddb.db.DB_QUEUE, bsddb.db.DB_CREATE, 0666)
# 它的key必须是数字
d.put(1, ‘zhaowei’)
print d.items()

d.close()
dbenv.close()

那简单的第二种方式使用如下 要简洁很多了:
代码如下:
import bsddb

d = bsddb.hashopen(“aaa.db”, “c”)
d[‘test1’] = “zhaowei”
print d.items()
d.close()

展开全部内容