日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

学习Berkeley DB- 入门

發(fā)布時(shí)間:2024/9/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习Berkeley DB- 入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 導(dǎo)言

首先,我們要了解Berkeley DB的一些基本特性,在IBM的開(kāi)發(fā)網(wǎng)站上有篇文章對(duì)其有比較清晰的介紹;

這篇文章講到了BDB的設(shè)計(jì)思想和核心數(shù)據(jù)結(jié)構(gòu)、以及數(shù)據(jù)訪問(wèn)算法;并有常用函數(shù)使用范例;算是接觸BDB的一個(gè)入門好材料;

進(jìn)入以下url閱讀:

http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html

?

我現(xiàn)在的問(wèn)題是,我們需要使用BDB的話,有以下問(wèn)題需要解決:

如何使用各個(gè)常用操作?

數(shù)據(jù)訪問(wèn)算法的選擇?

性能如何?需要做一個(gè)貼近實(shí)際的性能測(cè)試;

BDB支持多索引,那么多索引是如何建立的?

針對(duì)特定環(huán)境,如何建立合適的索引?

如何封裝,以便于我們方便的使用?

如何將SQL移植為NOSQL?

在接下來(lái)的學(xué)習(xí)中,我將集中解決以上問(wèn)題;

在這篇文章中,我們學(xué)習(xí)BDB的常用操作。

??

2 下載安裝?

Berkeley DB下載

oracle Berkeley DB官網(wǎng):

http://www.oracle.com/us/products/database/berkeley-db/overview/index.html

http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html?ssSourceSiteId=ocomen

下載版本:Berkeley DB 6.0.20.tar.gz

安裝

進(jìn)入對(duì)應(yīng)環(huán)境的安裝目錄:

cd build_unix

../dist/configure --prefix=/opt/app/todeav1/soft/bdb/

環(huán)境變量部署

BDB_HOME=/opt/app/todeav1/colin/db;export BDB_HOME

LIBPATH=$BDB_HOME/bin:$LIBPATH; export LIBPATH

LD_LIBRARY_PATH=$BDB_HOME/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH

編譯

g++ -o test demo.cpp -I$BDB_HOME/include/ -L$BDB_HOME/lib/ -ldb –lpthread

?

3 常用操作

打開(kāi)數(shù)據(jù)庫(kù)

首先調(diào)用db_create()函數(shù)來(lái)創(chuàng)建DB 結(jié)構(gòu)的一個(gè)實(shí)例,然后再調(diào)用DB->open()函數(shù)來(lái)完成真正的打開(kāi)操作。

Berkeley DB 將所有對(duì)數(shù)據(jù)庫(kù)的操作都封裝在名為DB 的結(jié)構(gòu)中。db_create()函數(shù)的作用就是創(chuàng)建一個(gè)該結(jié)構(gòu)。

將磁盤上保存的文件作為數(shù)據(jù)庫(kù)打開(kāi)是由DB->open()函數(shù)來(lái)完成的,其原型如下所示:

int DB->open(DB *db, DB_TXN *txnid, const char *file, const char *database, DBTYPE type, u_int32_t flags, int mode); eg: if ((ret = db_create(&dbp, NULL, 0)) != 0) { fprintf(stderr, "db_create: %s\n", db_strerror(ret)); exit (1); } if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) { dbp->err(dbp, ret, "%s", DATABASE); exit (1); }

參數(shù)“DATABASE”指明對(duì)應(yīng)的磁盤文件名為demo.db;參數(shù)“DB_BTREE”表示數(shù)據(jù)庫(kù)底層使用的數(shù)據(jù)結(jié)構(gòu)是B 樹(shù);而參數(shù)“DB_CREATE”和“0664”則表明當(dāng)數(shù)據(jù)庫(kù)文件不存在時(shí)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)文件,并且將該文件的屬性值設(shè)置為0664。

錯(cuò)誤處理是在打開(kāi)數(shù)據(jù)庫(kù)時(shí)必須的例行檢查,這可以通過(guò)調(diào)用DB->err()函數(shù)來(lái)完成。其中 參數(shù)“ret”是在調(diào)用Berkeley DB 函數(shù)后返回的錯(cuò)誤代碼,其余參數(shù)則用于顯示結(jié)構(gòu)化的錯(cuò) 誤信息。

插入

向Berkeley DB 數(shù)據(jù)庫(kù)中添加數(shù)據(jù)可以通過(guò)調(diào)用DB->put()函數(shù)來(lái)完成,其原型如下所示:

int DB->put(DB *db, DB_TXN *txnid, DBT *key, DBT *data,

??????????????????????????? u_int32_t flags);

在向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)時(shí),如果給定的關(guān)鍵字已經(jīng)存在,大多數(shù)應(yīng)用會(huì)對(duì)于已經(jīng)存在的數(shù)據(jù)。

采用覆蓋原則。也就是說(shuō),如果數(shù)據(jù)庫(kù)中已經(jīng)保存了一個(gè)“sport/basketball”對(duì),再次調(diào)用DB->put()函數(shù)添加一個(gè)“sport/football”對(duì),那么先前保存的那些數(shù)據(jù)將會(huì)被覆蓋。但Berkeley DB 允許在調(diào)用DB->put()函數(shù)時(shí)指定參數(shù)“DB_NOOVERWRITE”,聲明不對(duì)數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)進(jìn)行覆蓋,一旦給出“DB_NOOVERWRITE”標(biāo)記,如果DB->put()函數(shù)在執(zhí)行過(guò)程中發(fā)現(xiàn)給出的關(guān)鍵字在數(shù)據(jù)庫(kù)中已經(jīng)存在了,就無(wú)法成功地把該Key/Data 對(duì)添加到數(shù)據(jù)庫(kù)中,于是將返回錯(cuò)誤代碼 “DB_KEYEXIST”。

檢索數(shù)據(jù)

從Berkeley DB 數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)可以通過(guò)調(diào)用DB->get()函數(shù)來(lái)完成,其原型如下所示:

int DB->get(DB *db, DB_TXN *txnid, DBT *key, DBT *data,

??????????????????????????? u_int32_t flags);

在進(jìn)行數(shù)據(jù)檢索時(shí),對(duì)DB->get()函數(shù)的返回值進(jìn)行處理是必不可少的,因?yàn)樗鼣y帶著檢索操作是否成功完成等信息。下面列出的是DB->get()函數(shù)的返回值:

◆0?? 函數(shù)調(diào)用成功,指定的關(guān)鍵字被找到;

◆DB_NOTFOUND??????? 函數(shù)調(diào)用成功,但指定的關(guān)鍵字未被找到;

◆大于0???? 函數(shù)調(diào)用失敗,可能出現(xiàn)了系統(tǒng)錯(cuò)誤。

刪除

從Berkeley DB 數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)可以通過(guò)調(diào)用DB->del()函數(shù)來(lái)完成,其原型如下所示:

int DB->del(DB *db, DB_TXN *txnid, DBT *key, u_int32_t flags);

刪除數(shù)據(jù)只需給出相應(yīng)的關(guān)鍵字,不用指明與之對(duì)應(yīng)的數(shù)據(jù)。

eg: key.data = "sport"; key.size = sizeof("sport"); if ((ret = dbp->del(dbp, NULL, &key, 0)) == 0) printf("db: %s: key was deleted.\n", (char*)key.data); else dbp->err(dbp, ret, "DB->del");

關(guān)閉數(shù)據(jù)庫(kù)

對(duì)于一次完整的數(shù)據(jù)庫(kù)操作過(guò)程來(lái)說(shuō),關(guān)閉數(shù)據(jù)庫(kù)是不可或缺的一個(gè) 節(jié)。這是因?yàn)锽erkeley DB 需要依賴于系統(tǒng)底層的緩沖機(jī)制,也就是說(shuō)只有在數(shù)據(jù)庫(kù)正常關(guān)閉的時(shí)候,修改后的數(shù)據(jù)才有可能全部寫到磁盤上,同時(shí)它所占用的資源也才能真正被全部釋放。關(guān)閉數(shù)據(jù)庫(kù)的操作是通過(guò)調(diào)用DB->close()函數(shù)來(lái)完成的,其原型如下所示:

int DB->close(DB *db, u_int32_t flags);

刷新緩存到硬盤

Berkeley DB的所有操作都是在內(nèi)存中進(jìn)行,在關(guān)閉數(shù)據(jù)庫(kù)句柄時(shí),會(huì)將所有數(shù)據(jù)寫入到硬盤中;在程序運(yùn)行中,如需要同步數(shù)據(jù)到硬盤,可調(diào)用sync()函數(shù):

注:這個(gè)函數(shù)在4.3之前的版本是無(wú)參的,而在之后的版本增加參數(shù),修改之前的例子需注意兼容;

dbp->sync(dbp,0);

更多

這篇文章對(duì)插入時(shí)每個(gè)操作有個(gè)詳細(xì)的說(shuō)明,并給出了進(jìn)一步學(xué)習(xí)的文檔link;

Berkeley DB示例程序詳解 (1)

http://www.bdbchina.com/2009/02/berkeley-db%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F%E8%AF%A6%E8%A7%A3-1/

?

?

4 更多學(xué)習(xí)資料

Berkeley DB 官方開(kāi)發(fā)者文檔

http://docs.oracle.com/cd/E17076_03/html/index.html

官方主頁(yè):http://www.oracle.com/database/berkeley-db/db/index.html

產(chǎn)品下載:http://www.oracle.com/technology/software/products/berkeley-db/index.html

Berkeley DB中國(guó)研發(fā)團(tuán)隊(duì)博客:

http://www.bdbchina.com/

文檔中心:http://www.oracle.com/technology/documentation/berkeley-db/db/index.html

Berkeley DB官方論壇(貌似已經(jīng)無(wú)人維護(hù)):

https://forums.oracle.com/community/developer/english/berkeley_db_family

?

?

Posted by: 大CC | 17SEP,2013

博客:blog.me115.com

微博:新浪微博

?

轉(zhuǎn)載于:https://www.cnblogs.com/me115/p/3324040.html

總結(jié)

以上是生活随笔為你收集整理的学习Berkeley DB- 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区啪啪啪 | 91精品国产乱码久久久久久久久 | 久久精品视频9 | 久久精品99国产精品日本 | 自拍偷拍国产 | 午夜福利三级理论电影 | 国产精品免费无遮挡无码永久视频 | 成人依依网 | 亚洲欧洲综合在线 | 国产黄在线播放 | 黄色a级网站| 麻豆精品在线播放 | 四虎免费影视 | 成人免费视频一区 | 欧美一区三区二区在线观看 | 黄色网页免费观看 | 国产精品高清网站 | 日韩资源 | 最新黄色av网站 | 亚洲精品成a人在线观看 | 欧美另类日韩 | 超碰人人人人人 | julia一区二区三区中文字幕 | 四虎影院污 | 亚洲国产一区视频 | 欧美一级在线观看视频 | 又色又爽又高潮免费视频国产 | 伊人一区二区三区四区 | 日韩黄色片免费看 | 欧美精品久久久久久久久老牛影院 | 网站一区二区 | 国内少妇毛片视频 | 一级做a免费视频 | 久操视频免费在线观看 | 熟妇人妻精品一区二区三区视频 | 国产xxxx| 久久在线中文字幕 | 国产三级一区二区 | 成人做爰69片免费 | 成人免费在线视频网站 | 福利视频网址 | 亚洲精品第一页 | 欧美熟妇乱码在线一区 | 国产一区二区自拍视频 | 我想看毛片 | 伊人久久久久久久久久久久 | 久久艹在线视频 | 好妞色妞国产在线视频 | 免费看黄色片的网站 | 麻豆成人91精品二区三区 | 夜夜激情 | 久久久久久久久黄色 | 亚洲av无码一区二区三区在线观看 | 9l视频自拍蝌蚪9l视频成人 | 欧美亚洲一区 | 久久久一二三 | 在线观看视频日韩 | 男生和女生差差的视频 | 国产精品二区在线观看 | 国产日韩欧美成人 | 久久人人爽爽 | 娇小的粉嫩xxx极品 国产精品人人爽人人爽 | 午夜视频在线免费播放 | 亚洲欧美日韩精品永久在线 | 国产一级做a爱片久久毛片a | avtt2015 | 精品999www| 日本黄图 | 永久免费不卡在线观看黄网站 | 在线欧美国产 | 日韩r级电影在线观看 | 国产精品乱码久久久久 | 伊人视屏 | 亚洲黄v| 最近中文字幕 | 懂色一区二区三区免费观看 | 久久久久无码精品国产sm果冻 | 日本r级电影在线观看 | 国产成人在线播放视频 | 四虎色网 | 极品91 | 人人妻人人澡人人爽人人精品 | 免费黄色小视频在线观看 | av一级久久 | 精品国产一区二区三 | 亚洲精品无码专区 | 黄色av一级 | 黄色片aaa| 娇妻玩4p被三个男人伺候电影 | 伊人性视频 | 日本熟妇成熟毛茸茸 | 亚洲yy| 看全色黄大色黄大片大学生 | 亚洲AV无码国产成人久久 | 一个色的综合 | 在线观看免费视频 | 久色亚洲 | 亚洲黄色小说视频 | 风流少妇按摩来高潮 |