青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

Berkeley DB 簡單入門

Development Environment

Windows XP ProfessionVisual Studio C++ 2005

Concept

1  Berkeley DB是嵌入式數據庫系統,支持幾乎所有的現代操作系統。

2  由一個個文件組成,文件名為XXX.DB,一個文件中可以含有一個到多個DB

3  Berkeley DB不支持SQL、存儲過程和觸發器等關系數據庫的高級特性。

4  DatabaseDBT)就相同于關系數據庫中的Table,它的key/data 對就相當于關系數據表的主鍵和其它n-1列,因為你可以在data中存入任意類型的數據,比如一個結構體。

5  游標(CursorDBC),就是一個關于特定記錄的遍歷器,在處理多重記錄(duplicate record,多條記錄key相同,而data不同)時使用它尤為方便,且效率高(稱為bulk get,一次獲取一批記錄)。

6  數據庫環境(DB_ENV),為Berkeley DB的高級特性,就是多個Database的包裝器,它提供諸如日志恢復、多線程、事務處理和高性能支持等服務。

7  數據訪問算法(Database Access Method)——數據在硬盤上存儲和操作的方法。Berkeley DB支持B+樹、HashRecnoQueue算法。

Begin to Use Berkeley DB

添加Berkeley dbinclude目錄為Applicationinclude路徑,添加其lib目錄為Applicationlib引用路徑,這樣將Berkeley DBlib和我們的Application編譯為一個程序,令其“嵌入”我們的程序中。

Choose Database Access Method

Access Method

Description

Choosing Occasion

B+

關鍵字有序存儲,并且其結構能隨數據的插入和刪除進行動態調整。為了代碼的簡單,Berkeley DB沒有實現對關鍵字的前綴碼壓縮。B+樹支持對數據查詢、插入、刪除的常數級速度。關鍵字可以為任意的數據結構。

1  Key為復雜類型時。

2  Key有序時。

Hash

DB中實際使用的是擴展線性HASH算法(extended linear hashing),可以根據HASH表的增長進行適當的調整。關鍵字可以為任意的數據結構。

1  Key為復雜類型。

2  當數據較大且key隨機分布時。

 

Recno

要求每一個記錄都有一個邏輯紀錄號,邏輯紀錄號由算法本身生成。相當于關系數據庫中的自動增長字段。Recho建立在B+樹算法之上,提供了一個存儲有序數據的接口。記錄的長度可以為定長或不定長。

1  key為邏輯記錄號時。

2  當非高并發的情況下。

Queue

Recno方式接近, 只不過記錄的長度為定長。數據以定長記錄方式存儲在隊列中,插入操作把記錄插入到隊列的尾部,相比之下插入速度是最快的。

1  1、當key為邏輯記錄號時。

2  定長記錄。

3  高并發的情況下。

 

 

Open Database

使用Db.open來打開一個數據庫。打開數據庫有多種方式,常用的有:

Open Flag

Description

DB_CREATE

如果數據庫不存在,則創建之。

DB_EXCL

如果數據庫存在,則返回失敗。只和DB_CREATE一起使用才有意義。

DB_RDONLY

以只讀的方式打開數據庫。

 

代碼示例:

#include <db_cxx.h>

 

...

 

Db db(NULL, 0);               // Instantiate the Db object

 

u_int32_t oFlags = DB_CREATE; // Open flags;

 

try {

    // Open the database

    db.open(NULL,                // Transaction pointer

            "my_db.db",          // Database file name

            NULL,                // Optional logical database name

            DB_BTREE,            // Database access method

            oFlags,              // Open flags

            0);                  // File mode (using defaults)

// DbException is not subclassed from std::exception, so

// need to catch both of these.

} catch(DbException &e) {

    // Error handling code goes here    

} catch(std::exception &e) {

    // Error handling code goes here

}

 

如果需要使用Berkeley DB的高級功能,可以在DbEnv(環境)中打開Database

#include <db_cxx.h>

...

u_int32_t env_flags = DB_CREATE;  // If the environment does not

                                  // exist, create it.

u_int32_t db_flags = DB_CREATE;   // If the database does not

                                  // exist, create it.

std::string envHome("/export1/testEnv");

std::string dbName("mydb.db");

DbEnv myEnv(0);

Db *myDb;

 

try {

    myEnv.open(envHome.c_str(), env_flags, 0);

    myDb = new Db(&myEnv, 0);

    myDb->open(NULL,

               dbName.c_str(),

               NULL,

               DB_BTREE,

               db_flags,

               0);

} catch(DbException &e) {

    std::cerr << "Error opening database environment: "

              << envHome

              << " and database "

              << dbName << std::endl;

    std::cerr << e.what() << std::endl;

    exit( -1 );

} catch(std::exception &e) {

    std::cerr << "Error opening database environment: "

              << envHome

              << " and database "

              << dbName << std::endl;

    std::cerr << e.what() << std::endl;

    exit( -1 );

}

 

Close Database

關閉數據庫很簡單,只需要使用Db.close(0)來關閉db

#include <db_cxx.h>

 

...

 

Db db(NULL, 0);

 

 // Database open and access operations happen here.

 

try {

    // Close the database

    db.close(0);

// DbException is not subclassed from std::exception, so

// need to catch both of these.

} catch(DbException &e) {

    // Error handling code goes here    

} catch(std::exception &e) {

    // Error handling code goes here

}

 

當在DbEnv中打開數據庫時,關閉此DbEnv中的所有的Db后,必須關閉此DbEnv

try {

    if (myDb != NULL) {

        myDb->close(0);

    }

    myEnv.close(0);

    

} catch(DbException &e) {

    std::cerr << "Error closing database environment: "

              << envHome

              << " or database "

              << dbName << std::endl;

    std::cerr << e.what() << std::endl;

    exit( -1 );

} catch(std::exception &e) {

    std::cerr << "Error closing database environment: "

              << envHome

              << " or database "

              << dbName << std::endl;

    std::cerr << e.what() << std::endl;

    exit( -1 );

}

 

在操作數據(添加、修改和刪除數據)時,都是在內存中進行的,并沒有寫到磁盤中,而只有當我們調用Db.close(0)方法后,才將內存中的數據寫入磁盤中。如果不想關閉數據庫而又想把數據寫入磁盤的話,可以調用Db.sync(0)方法,及時將數據寫入磁盤可以降低發生DB crash而導致數據丟失的危險的幾率。

 

posted on 2012-06-01 16:20 肥仔 閱讀(3578) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜激情| 亚洲一区二区影院| 免费黄网站欧美| 亚洲伊人久久综合| 亚洲啪啪91| 久久久精品国产99久久精品芒果| 日韩视频免费观看高清完整版| 在线观看欧美一区| 在线欧美日韩精品| 在线观看精品一区| 亚洲精品黄网在线观看| 午夜免费电影一区在线观看| 一区二区三区欧美在线观看| 亚洲每日更新| 日韩午夜一区| 国产精品综合| 老鸭窝91久久精品色噜噜导演| 久久成人免费网| 国产日韩欧美在线看| 国产精品区二区三区日本| 国产模特精品视频久久久久 | 欧美护士18xxxxhd| 欧美国产欧美亚州国产日韩mv天天看完整| 久久综合色婷婷| 亚洲二区视频| 亚洲精品久久嫩草网站秘色| 日韩午夜黄色| 亚洲欧美日韩天堂一区二区| 蜜臀av性久久久久蜜臀aⅴ| 欧美福利一区| 国产欧美日韩一区| 一区二区三区欧美| 免费观看亚洲视频大全| 亚洲婷婷综合久久一本伊一区| 久久国产加勒比精品无码| 欧美电影免费观看大全| 国产精品推荐精品| 亚洲精品一区二区网址| 午夜欧美不卡精品aaaaa| 亚洲精品视频在线| 亚洲国产视频一区二区| 欧美一级艳片视频免费观看| 欧美日本在线| 亚洲国产精品va在线观看黑人| 亚洲欧美日韩网| 日韩视频专区| 欧美成人网在线| 激情久久五月| 欧美亚洲视频在线观看| 亚洲大胆在线| 久热精品视频在线观看| 国产一区在线免费观看| 亚洲新中文字幕| 亚洲人成网站在线播| 免费看亚洲片| 亚洲黄色视屏| 美女精品自拍一二三四| 亚洲一二三区在线观看| 欧美成人精品一区| 国产美女搞久久| 日韩一级精品视频在线观看| 噜噜爱69成人精品| 免费永久网站黄欧美| 久久久97精品| 久久精品欧洲| 欧美激情亚洲综合一区| 一区二区三区视频在线观看| 亚洲欧美中文字幕| 久久综合五月| 免费亚洲电影在线| 亚洲一区二区三区四区五区午夜| 亚洲另类自拍| 久久精品国产清高在天天线| 欧美日韩高清区| 国产一区在线看| 亚洲精品在线免费| 亚洲欧美在线网| 欧美www视频在线观看| 亚洲午夜久久久| 美女被久久久| 国产精品久久久久av免费| 欧美欧美全黄| 久久一区二区三区国产精品| 久久香蕉国产线看观看网| 国产精品国产馆在线真实露脸 | 欧美亚洲视频| 亚洲午夜一区| 欧美成人黑人xx视频免费观看| 国产精品视频免费| 99这里有精品| 猛干欧美女孩| 亚洲在线一区二区| 欧美精品一级| 亚洲精品自在在线观看| 欧美在线亚洲一区| 最新日韩在线视频| 先锋亚洲精品| 麻豆成人综合网| 亚洲私人影院| 日韩天天综合| 欧美电影资源| 亚洲二区免费| 玖玖在线精品| 久久欧美中文字幕| 极品av少妇一区二区| 久久久www| 亚洲欧美激情四射在线日| 欧美一区二区三区在线| 国产欧美日韩麻豆91| 亚洲欧美激情诱惑| 亚洲午夜精品17c| 国产精品蜜臀在线观看| 先锋资源久久| 午夜日韩激情| 精品不卡一区二区三区| 亚洲免费视频观看| 欧美成人黑人xx视频免费观看| 欧美三级免费| 中文av字幕一区| 亚洲精品乱码久久久久久| 欧美 日韩 国产精品免费观看| 亚洲国产老妈| 亚洲国内精品在线| 亚洲欧美日韩国产综合| 国产视频在线观看一区二区三区| 国产欧美va欧美va香蕉在| 伊人成人在线| 久久不射2019中文字幕| 亚洲精品视频免费观看| 在线视频精品一| 国产毛片精品国产一区二区三区| 久久精品国产亚洲高清剧情介绍| 国产精品99久久久久久人| 国产精品一区二区在线观看不卡| 欧美一区午夜视频在线观看| 欧美在线国产精品| 中文在线不卡| 国产综合色一区二区三区| 亚洲国产精品专区久久| 国产精品av一区二区| 久久精品最新地址| 欧美精品免费播放| 香蕉久久久久久久av网站| 午夜精品久久久久久久男人的天堂| 欧美日韩大片| 久久全国免费视频| 欧美成人精品三级在线观看 | 午夜亚洲激情| 今天的高清视频免费播放成人| 欧美顶级艳妇交换群宴| 欧美午夜精品久久久久久孕妇 | 亚洲欧洲综合另类在线| 欧美波霸影院| 欧美日韩一区二区在线视频| 欧美一区二区日韩一区二区| 欧美www视频在线观看| 欧美在线视频观看| 欧美精选午夜久久久乱码6080| 欧美日韩国产999| 久久精品视频在线播放| 欧美极品aⅴ影院| 久久免费黄色| 国产精品日日摸夜夜摸av| 亚洲高清成人| 亚洲国产视频一区二区| 国产精品99久久99久久久二8| 国产精品卡一卡二卡三| 久久精品国产99国产精品澳门| 亚洲香蕉视频| 免费不卡欧美自拍视频| 久久亚洲私人国产精品va| 国产私拍一区| 亚洲一区二区三区精品视频| 亚洲毛片视频| 国产日本欧美一区二区三区| 国产农村妇女精品| 老司机久久99久久精品播放免费 | 国产日本亚洲高清| 一区二区三区四区国产| 亚洲精品美女久久7777777| 国产精品毛片a∨一区二区三区|国 | 亚洲福利av| 国产亚洲欧洲997久久综合| 欧美一区二区三区免费视| 欧美成人自拍| 久久精品国产亚洲精品| 国产精品美女诱惑| 在线亚洲精品| 一本久道久久久| 欧美日韩国产三级| 最新日韩在线视频| 在线一区二区三区四区| 欧美日韩在线影院| 亚洲一区综合| 久久噜噜噜精品国产亚洲综合| 永久555www成人免费| 久久久噜噜噜久久| 欧美国产日韩一区二区| 激情丁香综合| 久久精品国产精品亚洲|