Berkeley DB-入門を勉強します.
6686 ワード
1ガイド
まず、Berkeley DBのいくつかの基本的な特性を理解したいです.IBMの開発サイトで、比較的明確な紹介があります.
この記事は、BDの設計思想とコアデータ構造、およびデータアクセスアルゴリズムについて述べている.また、一般的な関数の使用例があります.BDBに接触する一つの入門の良い材料と言えます.
以下のurlに入って読みます.
http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html
今の問題は、私たちがBDBを使う必要があるなら、以下の問題を解決する必要があります.
各常用操作はどう使いますか?
データアクセスアルゴリズムの選択?
性能はどうですか?実際に近い性能テストが必要です.
BDBは複数のインデックスをサポートしていますが、複数のインデックスはどのように作成されますか?
特定の環境に対して、どのように適切なインデックスを作成しますか?
どのように包装すれば、私たちが便利に使うことができますか?
どのようにSQLをNOSQLに移植しますか?
次の学習では、以上の問題を集中的に解決します.
この文章では、BDの一般的な動作を学びます.
2ダウンロードインストール
Berkeley DBダウンロード
oracle Berkeley DB公式サイト:
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
インストール
対応環境のインストールディレクトリに入ります.
cd build_unix
./dist/configure--prefix=/opt/ap/todeav 1/soft/bdb/
環境変数の配置
BB_.ホーム=/opt/ap/todeav 1/colin/dbexport BDB_ホーム?ム
LIBPATH=$BBBB_HOME/bin:$LIBPATH;export LIBPATH
LD_リブラアルPATH=$BDB_HOME/lib:$LD_リブラアルPATH;export LD_リブラアルPATH
コンパイル
g++-o test demo.cpp-I$BDB_HOME/include/-L$BDB_HOME/lib/-ldb–lpthread
3通常の操作
データベースを開く
まずdb_を呼び出しますcreate()関数はDB構造の一例を作成し、DB->open()関数を呼び出して本格的なオープン操作を完了します.
Berkeley DBは全てのデータベースに対する操作をDBという構造にパッケージ化しています.db_クリアー関数の役割は、この構造を作成することです.
ディスクに保存されているファイルをデータベースとして開くのはDB->open()関数で行います.その原型は以下の通りです.
エラー処理は、データベースを開く際に必要な定期的なチェックです.DB->err()関数を呼び出して行うことができます.なお、パラメータ「ret」はBerkeley DB関数を呼び出して戻ってくるエラーコードであり、残りのパラメータは構造化エラー情報を表示するために使用される.
挿入
Berkeley DBデータベースにデータを追加するとDB->put()関数を呼び出して完成できます.その原型は以下の通りです.
int DB->put(DB*db、DB_TXN*txnid、DBT*key、DBT*data、
uguint 32_tflags);
データベースにデータを追加する場合、指定されたキーワードが既に存在する場合、ほとんどのアプリケーションは既に存在するデータに対して使用されます.
カバー原則を採用する.つまり、データベースに「sport/baskeetball」のペアが保存されている場合、DB-put()関数を再起動して「sport/football」のペアを追加すると、以前に保存されていたデータが上書きされます.しかし、Berkeley DBはDB->>put()関数の呼び出し時にパラメータ「DB NOOVERWRITE」を指定することができます.データベースに既に存在しているデータを上書きしないと宣言しました.DB->put()関数が実行中に与えられたキーワードがデータベースに存在している場合、このKey/Dataをデータベースに追加することができません.エラーコード「DB KEYES XIST」に戻ります.
データの検索
Berkeley DBデータベースからのデータ検索はDB->get()関数を呼び出して行うことができますが、その原型は以下の通りです.
int DB->get(DB*db、DB_TXN*txnid、DBT*key、DBT*data、
uguint 32_tflags);
データ検索を行うには、DB->get()関数の戻り値を処理する必要があります.検索操作が成功したかどうかなどの情報を持っています.以下にはDB->get()関数の戻り値が表示されます.
◆0 関数コールに成功しました.指定されたキーワードが見つかりました.
◆DB_NOTFOUND 関数コールは成功しましたが、指定されたキーワードが見つかりませんでした.
◆0より大きい 関数の呼び出しに失敗しました.システムエラーが発生したかもしれません.
削除
Berkeley DBデータベースからデータを削除することはDB->del()関数を呼び出して行うことができます.その原型は以下の通りです.
int DB->>del(DB*db、DB_TXN*txnid、DBT*key、uuint 32_tflags);
データを削除するには、該当するキーワードを与えるだけで、対応するデータを指定する必要はありません.
完全なデータベース操作プロセスにとって、データベースを閉じることは不可欠なセクションです.これは、Berkeley DBはシステムの下のバッファ機構に依存している必要があります.つまり、データベースが正常に閉じられている時だけ、修正後のデータはディスクに全部書き込む可能性があります.データベースを閉じる操作はDB->close()関数を呼び出して行われますが、その原型は以下の通りです.
int DB->close(DB*db、uuint 32_tflags);
キャッシュをハードディスクに更新
Berkeley DBのすべての操作はメモリで行います.データベースのハンドルを閉じる時、すべてのデータをハードディスクに書き込みます.プログラム実行中に、データをハードディスクに同期させる必要がある場合は、sync()関数を呼び出すことができます.
注:この関数は4.3前のバージョンは無参ですが、その後のバージョンはパラメータを追加します.修正前の例は互換性に注意してください.
dbp->sync(dbp,0)
詳細
この文章は挿入時の操作ごとに詳細な説明があり、さらに勉強する文書の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より多くの勉強資料
Berkeley DB公式開発者文書
http://docs.oracle.com/cd/E17076_03/html/index.
公式ホームページ:http://www.oracle.com/database/berkeley-db/db/index.html
製品ダウンロード:http://www.oracle.com/technology/software/products/berkeley-db/index.html
Berkeley DB中国研究開発チームブログ:
http://www.bdbchina.com/
文書センター:http://www.oracle.com/technology/documentation/berkeley-db/db/index.html
Berkeley DB公式フォーラム(もはや誰も守っていないようです):
https://forums.oracle.com/community/developer/english/berkeley_db_family
Posted by:大CC 124 SEP、2013
ブログ:blog.me115.com
微博:新浪微博
まず、Berkeley DBのいくつかの基本的な特性を理解したいです.IBMの開発サイトで、比較的明確な紹介があります.
この記事は、BDの設計思想とコアデータ構造、およびデータアクセスアルゴリズムについて述べている.また、一般的な関数の使用例があります.BDBに接触する一つの入門の良い材料と言えます.
以下のurlに入って読みます.
http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html
今の問題は、私たちがBDBを使う必要があるなら、以下の問題を解決する必要があります.
各常用操作はどう使いますか?
データアクセスアルゴリズムの選択?
性能はどうですか?実際に近い性能テストが必要です.
BDBは複数のインデックスをサポートしていますが、複数のインデックスはどのように作成されますか?
特定の環境に対して、どのように適切なインデックスを作成しますか?
どのように包装すれば、私たちが便利に使うことができますか?
どのようにSQLをNOSQLに移植しますか?
次の学習では、以上の問題を集中的に解決します.
この文章では、BDの一般的な動作を学びます.
2ダウンロードインストール
Berkeley DBダウンロード
oracle Berkeley DB公式サイト:
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
インストール
対応環境のインストールディレクトリに入ります.
cd build_unix
./dist/configure--prefix=/opt/ap/todeav 1/soft/bdb/
環境変数の配置
BB_.ホーム=/opt/ap/todeav 1/colin/dbexport BDB_ホーム?ム
LIBPATH=$BBBB_HOME/bin:$LIBPATH;export LIBPATH
LD_リブラアルPATH=$BDB_HOME/lib:$LD_リブラアルPATH;export LD_リブラアルPATH
コンパイル
g++-o test demo.cpp-I$BDB_HOME/include/-L$BDB_HOME/lib/-ldb–lpthread
3通常の操作
データベースを開く
まずdb_を呼び出しますcreate()関数はDB構造の一例を作成し、DB->open()関数を呼び出して本格的なオープン操作を完了します.
Berkeley DBは全てのデータベースに対する操作をDBという構造にパッケージ化しています.db_クリアー関数の役割は、この構造を作成することです.
ディスクに保存されているファイルをデータベースとして開くのはDB->open()関数で行います.その原型は以下の通りです.
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
",
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);
}
パラメータ「DATABASE」は対応するディスクファイル名をdemo.dbと指定します.パラメータ「DB_BTREE」は、データベースの底に使用されるデータ構造がBツリーであることを示します.パラメータ「DB_CREATE」と「064」は、データベースファイルが存在しない場合に新しいデータベースファイルを作成し、このファイルの属性値を0644に設定することを示している.エラー処理は、データベースを開く際に必要な定期的なチェックです.DB->err()関数を呼び出して行うことができます.なお、パラメータ「ret」はBerkeley DB関数を呼び出して戻ってくるエラーコードであり、残りのパラメータは構造化エラー情報を表示するために使用される.
挿入
Berkeley DBデータベースにデータを追加するとDB->put()関数を呼び出して完成できます.その原型は以下の通りです.
int DB->put(DB*db、DB_TXN*txnid、DBT*key、DBT*data、
uguint 32_tflags);
データベースにデータを追加する場合、指定されたキーワードが既に存在する場合、ほとんどのアプリケーションは既に存在するデータに対して使用されます.
カバー原則を採用する.つまり、データベースに「sport/baskeetball」のペアが保存されている場合、DB-put()関数を再起動して「sport/football」のペアを追加すると、以前に保存されていたデータが上書きされます.しかし、Berkeley DBはDB->>put()関数の呼び出し時にパラメータ「DB NOOVERWRITE」を指定することができます.データベースに既に存在しているデータを上書きしないと宣言しました.DB->put()関数が実行中に与えられたキーワードがデータベースに存在している場合、このKey/Dataをデータベースに追加することができません.エラーコード「DB KEYES XIST」に戻ります.
データの検索
Berkeley DBデータベースからのデータ検索はDB->get()関数を呼び出して行うことができますが、その原型は以下の通りです.
int DB->get(DB*db、DB_TXN*txnid、DBT*key、DBT*data、
uguint 32_tflags);
データ検索を行うには、DB->get()関数の戻り値を処理する必要があります.検索操作が成功したかどうかなどの情報を持っています.以下にはDB->get()関数の戻り値が表示されます.
◆0 関数コールに成功しました.指定されたキーワードが見つかりました.
◆DB_NOTFOUND 関数コールは成功しましたが、指定されたキーワードが見つかりませんでした.
◆0より大きい 関数の呼び出しに失敗しました.システムエラーが発生したかもしれません.
削除
Berkeley DBデータベースからデータを削除することはDB->del()関数を呼び出して行うことができます.その原型は以下の通りです.
int DB->>del(DB*db、DB_TXN*txnid、DBT*key、uuint 32_tflags);
データを削除するには、該当するキーワードを与えるだけで、対応するデータを指定する必要はありません.
eg:
key.data = "sport";
key.size = sizeof("sport");
if ((ret = dbp->del(dbp, NULL, &key, 0)) == 0)
printf("db: %s: key was deleted.
", (char*)key.data);
else
dbp->err(dbp, ret, "DB->del");
データベースを閉じる完全なデータベース操作プロセスにとって、データベースを閉じることは不可欠なセクションです.これは、Berkeley DBはシステムの下のバッファ機構に依存している必要があります.つまり、データベースが正常に閉じられている時だけ、修正後のデータはディスクに全部書き込む可能性があります.データベースを閉じる操作はDB->close()関数を呼び出して行われますが、その原型は以下の通りです.
int DB->close(DB*db、uuint 32_tflags);
キャッシュをハードディスクに更新
Berkeley DBのすべての操作はメモリで行います.データベースのハンドルを閉じる時、すべてのデータをハードディスクに書き込みます.プログラム実行中に、データをハードディスクに同期させる必要がある場合は、sync()関数を呼び出すことができます.
注:この関数は4.3前のバージョンは無参ですが、その後のバージョンはパラメータを追加します.修正前の例は互換性に注意してください.
dbp->sync(dbp,0)
詳細
この文章は挿入時の操作ごとに詳細な説明があり、さらに勉強する文書の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より多くの勉強資料
Berkeley DB公式開発者文書
http://docs.oracle.com/cd/E17076_03/html/index.
公式ホームページ:http://www.oracle.com/database/berkeley-db/db/index.html
製品ダウンロード:http://www.oracle.com/technology/software/products/berkeley-db/index.html
Berkeley DB中国研究開発チームブログ:
http://www.bdbchina.com/
文書センター:http://www.oracle.com/technology/documentation/berkeley-db/db/index.html
Berkeley DB公式フォーラム(もはや誰も守っていないようです):
https://forums.oracle.com/community/developer/english/berkeley_db_family
Posted by:大CC 124 SEP、2013
ブログ:blog.me115.com
微博:新浪微博