国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python bsddb模塊操作Berkeley DB數(shù)據(jù)庫介紹

2020-02-23 00:37:04
字體:
供稿:網(wǎng)友

bsddb模塊是用來操作bdb的模塊,bdb是著名的Berkeley DB,它的性能非常好,mysql的存儲后端引擎都支持bdb的方式。這里簡單介紹一些關(guān)于bsddb的使用方法。

bdb不同于一般的關(guān)系數(shù)據(jù)庫,它存儲的數(shù)據(jù)只能是以key和value組成的一對數(shù)據(jù),使用就像python的字典一樣,它不能直接表示多個字段,當(dāng)要存儲多個字段的數(shù)據(jù)時,只能把數(shù)據(jù)作為一個整體存放到value中。

使用bsddb面臨的第一問題是使用什么數(shù)據(jù)訪問方法,bdb支持四種:btree, hash, queue, recno。這里先說說它們有什么區(qū)別,btree是用的樹結(jié)構(gòu)來才存儲的數(shù)據(jù),查詢速度很快,可以存儲任意復(fù)雜的key和value。hash是用的hash算法,速度其實(shí)和btree比差不多的,但是當(dāng)數(shù)據(jù)量特別巨大時,應(yīng)該使用hash。queue是隊(duì)列操作,它有一個限制,它只能存儲定長的數(shù)據(jù),也就是說value的長度是固定的!但是queue可以保持?jǐn)?shù)據(jù)的先進(jìn)先出,并且對數(shù)據(jù)的插入做了特殊的優(yōu)化,并且提供行級鎖。queue的key必須是數(shù)字。recno和queue類似,但是它可以支持變長的value,它的key同樣也是數(shù)字。

    這里先對這四種數(shù)據(jù)訪問方法分別做打開數(shù)據(jù)庫,簡單插入一條數(shù)據(jù)的演示。
對于python的bsddb模塊來說,打開數(shù)據(jù)庫的操作有兩種方式,一是使用原始的接口,就是先打開一個環(huán)境,然后從這個環(huán)境中打開一個數(shù)據(jù)庫,就像下面:
代碼如下:
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:
    # 創(chuàng)建home目錄
    os.mkdir(home)
except:
    pass

# 創(chuàng)建數(shù)據(jù)庫環(huán)境
dbenv = bsddb.db.DBEnv()
# 打開數(shù)據(jù)庫環(huán)境
dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
# 創(chuàng)建數(shù)據(jù)庫對象
d = bsddb.db.DB(dbenv)
# 打開數(shù)據(jù)庫, 這里的第二個參數(shù)就是指定使用什么數(shù)據(jù)訪問方法
# 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)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 耿马| 东丽区| 汕头市| 钦州市| 金塔县| 麟游县| 碌曲县| 凤阳县| 普定县| 龙泉市| 忻城县| 吉林市| 稻城县| 河间市| 广东省| 冕宁县| 宝丰县| 临武县| 通城县| 桂林市| 灵川县| 临海市| 大化| 海丰县| 筠连县| 枣庄市| 新营市| 志丹县| 宁阳县| 蓬溪县| 海口市| 德保县| 炎陵县| 靖西县| 会同县| 慈溪市| 丘北县| 平果县| 乌拉特中旗| 巫山县| 滕州市|