oracle berkeley db開発者向け情報 · 暗号化なしソースコード(tar.gz版, zip版)...
TRANSCRIPT
1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Oracle Berkeley DB開発者向け情報
日本オラクル株式会社Java Embedded Global Business Unit2012年2月3日
2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Agenda
Berkeley DBのビルド
Berkeley DBを使用した開発
Javaプラットフォームでの活用
4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBサポート対象プラットフォーム
• ほとんどのLinux (x64, x86)– Oracle Linux 4 / 5 / 6, Red Hat, Ubuntu, Wind River, MontaVista Embedded
Linux version 6.0
• Oracle Solaris 9 / 10 (x64, x86, SPARC)
• FreeBSD
• Microsoft Windows (x64, x86)– XP (SP2 / SP3), Vista, 7, Server 2008, Mobile (6.x)
• Apple Mac OS X 10.5 / 10.6
• IBM AIX 5 / 6
• VxWorks 6.x
• QNX Neutrino/POSIX version 6
• Android
• Apple iOS
上記以外でもPOSIX準拠のシステムにインストール可能
5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
ダウンロードhttp://www.oracle.com/technetwork/jp/database/berkeleydb/downloads/
BDB ダウンロード 検索
ADO.NET用SQLアドオンモジュール
Ant後継のプロジェクト管理ツールMaven
XML版ソースコード(tar.gz版, zip版)
または
AES暗号化対応ソースコード(tar.gz版, zip版)
Windows用バイナリ
暗号化なしソースコード(tar.gz版, zip版)
Java Editionソースコード(tar.gz版, zip版)
Windows用バイナリ
6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBソースコード構成
• build_xxx: OSごとのビルド用ディレクトリ
• dist: ビルド環境構成ファイル
• docs: ドキュメント
• examples: プログラミング言語ごとのサンプルソース
• lang: プログラミング言語ごとのAPIソース
• src: Berkeley DBライブラリのソース
• test: テストツール
• util: コマンドユーティリティのソース
7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBドキュメント
• ソース内docsフォルダ、make install先のdocsフォルダ、または製品ページのDocumentationタブにPDF/HTMLで提供
• Getting Started Guides– Getting Started with Data Storage / Transaction Processing /
Transactional Java Collections / Replication
Berkeley DBの重要な概念と導入方法を解説
– Berkeley DB SQL API
SQL APIの基本、SQLiteとの差異情報
– Berkeley DB Porting Guide
新規プラットフォームへの移植に関する情報
• Referencesアプリの設計・実装に役立つ詳細情報
• Programmatic APIsC/C++/C#/STL/Java/TCLのpublicインタフェースリファレンス
• Build, Installation, and Upgrade Guideビルド、インストール、アップグレードに関する段階的説明、プラットフォームごとの詳細
8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
その他の基本コマンド
ファイルの展開
makeのやり直し
prefixへの(アン)インストールデフォルトは/usr/local/BerkeleyDB.5.3
configureからやり直し
• まずはbuild_unixディレクトリに移動
• Berkeley DBライブラリlibdb
• + SQLite互換Cライブラリlibdb_sql
• + SQLite置換用wrapperライブラリlibsqlite3
• ライブラリとユーティリティのビルド
UNIX/POSIX上でのビルド方法
../dist/configure
cd build_unix
../dist/configure --enable-sql
../dist/configure –-enable-sql_compatmake install
make uninstall
make clean
make realclean
tar xfz db-5.*.tar.gz
make
GNU autoconfとlibtoolの標準オプションを利用可能
9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
configureオプション
configureオプション 内容
--disable-shared, --disable-static 共有ライブラリ、スタティックライブラリの無効化
--enable-debug, --enable-debug_rop,
--enable-debug_wop,
--enable-diagnostic
デバッグ用オプション
--enable-java, --enable-cxx,
--enable-stl, --enable-tclJava, C++, C++ STL, Tcl APIの有効化
--enable-smallbuild 小メモリフットプリント版のビルド
--with-cryptography=[yes|no|ipp] 暗号化のカスタマイズ
--enable-jdbc JDBCドライバのビルド
--enable-load-extension BFILE拡張のビルド(デフォルトはSQLのみ)
--enable-pthread_apiPOSIX pthreadの使用。replicationマネージャで必要
--enable-posixmutexes, --enable-
unimutexes, --with-mutex=MUTEX
mutex実装の指定。MUTEXに指定可能なオプションはdist/aclocal/mutex.m4参照
その他のオプションについてはドキュメント参照
10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
make install生成物
• 場所:デフォルトは/usr/local/BerkeleyDB.5.3
• lib
• bin
• include:ヘッダファイル
• doc:ドキュメント
libdb.so → Berkeley DB標準ライブラリlibdb_sql.so → SQLite互換Cライブラリlibsqlite3.so → SQLite置換用wrapperライブラリ
db_archive db_checkpoint db_deadlock db_dump db_hotbackup
db_load db_log_verify db_printlog db_recover db_replicate
db_stat db_tuner db_upgrade db_verify → ユーティリティdbsql → libdb_sqlにアクセスするコマンドsqlite3 → libsqlite3にアクセスするコマンド
11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBコマンドラインユーティリティコマンド名 機能
db_archive ログファイルのパス名出力と削除
db_checkpoint トランザクション・チェックポイントdaemon
db_deadlock Deadlock検出
db_dump データベースのダンプ
db_hotbackup データベース環境のホットバックアップやホットフェイルオーバー作成
db_load データベースのロード
db_log_verify ログファイルの検証
db_printlog データベース環境のログ表示
db_recover データベース環境のリカバリ
db_replicate トランザクション環境のreplication/HAサービスdaemon
db_sql_codegen SQLデータ定義言語(DDL)スキーマをC言語に変換
dbsql libdb_sqlにアクセスするコマンド
db_stat データベース環境の統計表示
db_tuner btreeデータベースの最適なページサイズを解析
db_upgrade データベースファイルのアップグレード
db_verify データベースファイルの構造を検証
sqlite3 wrapperライブラリlibsqlite3にアクセスするコマンド
12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBテストツールビルドしたバイナリの動作検証
• C Tests for Berkeley DB
– Berkeley DBの認定、および異なるリリース間のベンチマーク用途
• Berkeley DB Test Suite
– Berkeley DB全コードのテスト実施(要Tcl 8.5以上)
sh ./db-5.3.15/test/micro/test_micro → テスト実施sh ./db-5.3.15/test/micro/report → hostname.htmlへのレポート出力
../dist/configure --enable-test –with-tcl=/usr/lib
make
$ tclsh
% source ../test/tcl/test.tcl
% run_std → 主な機能のみをテスト% run_all → 複数回実施、暗号化、replication、複数ページサイズでのテスト
13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Agenda
Berkeley DBのビルド
Berkeley DBを使用した開発
Javaプラットフォームでの活用
14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DB API
Berkeley DB
C API
C++ & C# API
Berkeley DB
XML
C++ API Java APIJava Collections &
Direct Persistence Layer (DPL)
API
Perl, Python, PHP, Ruby, Tcl, Eiffel, Erlangなどからもアクセス可能
Java API
Berkeley DB
Java Edition
SQL API
15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: 基本コンセプトオブジェクト指向設計の非RDB高速ストレージエンジン
• オブジェクト指向設計のライブラリ群
• オブジェクトはハンドルごとに制御する– データベース:DBハンドル
– キーとデータ:DBTハンドル
– カーソル:DBCハンドル
– DB環境:DV_ENVハンドル
– トランザクション:DB_TXNハンドル
• APIの操作はハンドルに対するメソッドとして提供
16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: DBハンドルDBハンドルを使い、データベースアクセスが可能
API 機能
db_create DBハンドル作成
DB->open() DBをオープン(DBと接続)
DB->close() DBをクローズ(DBから切断)
DB->get() DBからキーを使って検索
DB->put() DBにキー/データ・ペアを挿入/変更
DB->del() DBからキー/データ・ペアを削除
DB->associate()プライマリデータベースにセカンダリインデックスを関連付ける
DB->join()複数のセカンダリインデックスの論理積(AND)で検索
17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: データベースアクセス手順
DBハンドル作成db_create
データベースオープンDB->open
データ挿入・更新DB->put
データ検索DB->get
データ削除DB->del
データベースクローズDB->close
18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: データベースアクセス基本操作-DBハンドル作成
DB *pDb = NULL;
/* DBハンドルを作成*/
db_create(&pDb, NULL, 0);
/* ファイル名を指定してデータベースをオープン。ファイルがない場合新規作成*/
pDb->open(pDb, NULL, “student.db”, DB_CREATE | DB_BTREE);
/* ここからDBハンドルを使ってデータベースをアクセス*/……
/* 使用後DBハンドルをクローズ*/pDb->close(pDb, 0);
DB環境機能を利用する場合db_createメソッドのdbenvパラメータにDB_ENVハンドルを設定します。トランザクション機能を利用する場合openメソッドのflagsパラメータにDB_AUTO_COMMITを設定します。マルチスレッドでご利用になる場合openメソッドでのflagsパラメータDB_THREADを設定します。HASHアクセスメソッドを利用する場合openメソッドのflagsパラメータでDB_BTREEの代わりにDB_HASHを設定します。
コード例(データベースアクセス処理フロー)
ヒント
db_create関数でDBハンドルを作成します。
19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: データベースアクセス基本操作-データ挿入
DBT dbtk, dbtd;
/* 保存するキー/データペア*/char *key = “0001”;
struct student_data data = {“JOHN”, “SMITH”, „M‟, 32};
/* DBT構造体をクリア*/memset(&dbtk, 0, sizeof(DBT));
memset(&dbtd, 0, sizeof(DBT));
/* キーとデータを格納するDBT構造体を設定します。dataメンバーはポインタ、sizeメンバーはバイト数を設定*/
dbtk.data = key, dbtk.size = strlen(key);
dbtd.data = &data, dbtd.size = sizeof(data);
/* キー/データペアを保存します*/pDb->put(pDb, NULL, &dbtk, &dbtd, 0);
トランザクション機能を利用する場合putメソッドのtxnidパラメータを設定します。データを新規追加する場合putメソッドのflagsパラメータにDB_NOOVERWRITEを設定します。
コード例(データ挿入)
ヒント
DBハンドルのputメソッドを使って、キー/データペアを挿入します。
キーとデータはDBT構造体を使ってputメソッドに渡します。
20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: データベースアクセス基本操作-データ検索
DBT dbtk, dbtd;
/* 検索するキー*/char *key = “0001”;
memset(&dbtk, 0, sizeof(DBT));
/* キーを格納するDBT構造体を設定します*/dbtk.data = key, dbtk.size = strlen(key);
/* 指定されたキーのデータを検索します*/pDb->get(pDb, NULL, &dbtk, &dbtd, 0);
/* ここからデータを処理します。*//* データはdbtdに保存されます。dataメンバーはポインタ、sizeメンバーはバイト数になります。*/
トランザクション機能を利用する場合getメソッドのtxnidパラメータを設定します。
コード例(データ検索)
ヒント
DBハンドルのgetメソッドを使って指定されたキーのデータを検索します。
キーとデータはDBT構造体を使ってgetメソッドに渡します。
21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
KVS: データベースアクセス基本操作-データ削除
DBT dbtk;
/* 削除するキー*/char *key = “0001”;
memset(&dbtk, 0, sizeof(DBT));
/* キーを格納するDBT構造体を設定します*/dbtk.data = key, dbtk.size = strlen(key);
/* 指定されたキーのデータを削除します*/pDb->del(pDb, NULL, &dbtk, 0);
トランザクション機能を利用する場合delメソッドのtxnidパラメータを設定します。
コード例(データ削除)
ヒント
DBハンドルのdelメソッドで指定されたキーのデータを削除します。
キーはDBT構造体を使ってdelメソッドに渡します。
22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
SQL: データベースアクセス手順
データベースオープンsqlite3_open()
SQL文の処理sqlite3_exec()
データベースクローズsqlite3_close()
23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
SQL: データベースアクセス基本操作-DBオープン
sqlite3 *db= NULL;
char *zErrMsg = 0;
int rc = 0;
/* データベース名の設定 */
char dbname[10]=“test.db” ;
/* SQL文の設定 */
char strSQL[20]=“Select * from employee”;
/* データベースをオープンする */
rc = sqlite3_open(dbname, &db);
if( rc ){
fprintf(stderr, "Can't open database: %s¥n", sqlite3_errmsg(db));
}
/* データベースをクローズする */
sqlite3_close(db);
コード例(データベースアクセス処理フロー)
sqlite3_open()関数でDBをオープンします。
24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
SQL: データベースアクセス基本操作-SQL文処理
/* SQLを処理する */
rc = sqlite3_exec(db, strSQL, callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){; /* エラーチェック */
fprintf(stderr, "SQL error: %s¥n", zErrMsg);
}
sqlite3_close(db); /* データベースをクローズする */
/* Recordごとに呼ばれる */
static int callback(void *NotUsed, int argc, char **argv, char
**azColName){
int i;
for(i=0; i<argc; i++){ /* Columnごとデータ値を読み込む */
printf("%s = %s¥n", azColName[i], argv[i] ? argv[i] : "NULL");
}
}
コード例(SQL文処理)
sqlite3_exec()関数でSQL文を処理し、Resultセットを読み込みます。
25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Agenda
Berkeley DBのビルド
Berkeley DBを使用した開発
Javaプラットフォームでの活用
26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java EE
Java SE
Java ME CDC Java ME CLDC Java Card
FP
JVM JVM CVM KVM Card VM
Optional
Packages
Optional
Packages
Optional
Packages
Optional
Packages
Optional
Packages
PBP
PP
Security
JDBC
RMI
AGUI
Oracle Javaプラットフォーム
GlassFish (CDDL/GPLv2) PhoneME (GPLv2)
オープンソース
OpenJDK (GPLv2)
Oracle Java ME
Embedded Client
(OJEC)
Java SE
SDK / JRE /
Embedded
バイナリ製品
テクノロジ
WebLogic
Application
Server
Oracle Java
Wireless Client
(OJWC)
MIDP
JavaFX
27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java SE Embedded
組み込みデバイス向けJava SE
• ヘッドレス構成のサポート– キーボード・マウス入出力やディスプレイ描画不要なデバイス向けに、不要な機能を削除したヘッドレス版を提供
• 小フットプリントのJRE– ヘッドレス構成で不要なファイル、ツール、文字コード変換、64-bit JITなどを削除し、通常のJava SEの約半分のフットプリントを実現
– Java SE仕様に100%互換
• メモリ最適化– 小メモリ環境での起動時に、デフォルト割り当てサイズを削減
• 32MBの場合 PermGen:16MB, Java Heap:16MB, Code Cache:4MB
– JARファイルロード時のMMAP削減とスレッド静的テーブル削除により12MB節約
• 組み込みデバイス向けプラットフォームをサポート– x86に加え、ARMやPowerPCプラットフォームをサポート
Java SE EmbeddedJRE
RAM: 32~64MB, ROM: 37~46MB
Linux
x86
Linux
ARM
Linux
PowerPC
XP Emb
x86
標準Java SEJRE + JDK
RAM: 64~128MB, ROM: 58~98MB
Windows
x86/x64
Linux
x86/x64
Solaris
SPARC
Solaris
x86/x64
こんな場合に最適 高速なスループットが必要 完全なSE APIを利用したい
28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Oracle Java ME Embedded Client
業界クラス最高のCDC JVM製品
• 小メモリフットプリントでの高いパフォーマンスと信頼性– CDC HotSpot Implementation
– 高速なVM起動時間– Romizationによるクラスのプリロード
• バイナリを無償ダウンロード提供– ターゲットデバイス用実行環境
• ARM v5/v6/v7, MIPS, PowerPC Linux
• RAM: 8MB必要、• ROM: 約5MB必要
– 国際化サポートにはさらに1.5MB必要
– ホスト用SDK• LinuxまたはWindows(x86)
• IDEへの統合– NetBeansではアプリケーション開発、エミューレーション、デバッグ、プロファイリングが可能
– Eclipseではアプリケーション開発とエミュレーションのみ• PBPを使用したGUIアプリケーションの作成も可能
– ただし、OJEC 1.0ではターゲットデバイス向けPBPなし
Connected Device Configuration (CDC)
Foundation Profile (FP) Security (SecOP)
Personal Basis Profile (PBP)
RM
I
JD
BC
We
b S
erv
ice
s
AM
S
こんな場合に最適 静的フットプリント(ROM)が小さい 動的メモリを多用しない 広範なプロセッサ&OS対応
29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
SE Embedded 7 / 6 & OJEC 1.0
ターゲットデバイスの必要システム構成CPU OS FP GUI RAM ROM
SE E
mb
ed
ded
7u
2 (
6u
30
)
x86Linux kernel 2.6.28以降glibc 2.9以降
- 32MB以上 41(37)MB以上
ARM v5Linux kernel 2.6.28以降glibc 2.9以降
Soft Float - 32MB以上 41(37)MB以上
ARM v6/v7Linux kernel 2.6.28以降glibc 2.9以降
Hard Float(VFP)
- 32MB以上 41(37)MB以上
ARM v7Linux kernel 2.6.28以降glibc 2.9以降
Hard Float(VFP)
X11R6以降 64MB以上 48(37)MB以上
e600(Power PC)
Linux kernel 2.6.28以降glibc 2.9以降
Classic HW FP - 32MB以上 37MB以上
e500v2 core(Power PC)
Linux kernel 2.6.23以降glibc 2.5以降
Embedded FP - 32MB以上 37MB以上
OJE
C 1
.0(J
ava
ME
CD
C)
ARM v5Linux kernel 2.6.22以降glibc 2.9以降
Soft Float - 8MB以上 5MB以上
ARM v6/v7Linux kernel 2.6.35以降glibc 2.12.1以降
Soft Float - 8MB以上 5MB以上
464FP(Power PC)
Linux kernel 2.6.32以降glibc 2.10.2以降
Hard Float - 8MB以上 5MB以上
MIPS32 74K(MIPS)
Linux kernel 2.6.22以降glibc 2.8以降
Soft Float - 8MB以上 5MB以上
詳細はhttp://www.oracle.com/technetwork/java/embedded/参照
30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
JavaFX 2.0
軽量なリッチクライアントプラットフォーム
Java Virtual Machine
Quantum Toolkit
Prism
JavaFX Public APIs and Scene Graph
Java2D D3D OpenGL
GlassWindowing
Toolkit
MediaEngine
WebEngine
ウィンドウ、タイマー、表面などのネイティブ操作サービスを提供
Java FX APIが利用できるようにPrismとGlassを結びつけ
ハードウェアとソフトウェアのレンダラー上で実行可能なグラフィックスパイプライン
JavaFXで書かれた、アニメーション、グラフ、コントロールなどの各種JavaFX機能のギャラリー Swingアプリ内のJavaFXコンポーネント(グラフ、表、ブラウザ)
JavaFXで書かれたブロック崩しゲーム
31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Berkeley DBの活用(Java MEの場合)
Native OS
Java ME
CDC/FP
PBP JDBC
Java ME
アプリケーション
Berkeley DB
(共有ライブラリ)
SQLite互換SQL API
Java Object
API (Direct
Persistence)
JDBCドライバ(Werner同梱)
32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
ホームゲートウェイの一般的なアーキテクチャ
ハードウェア
Linux
Berkeley
Database
+ JDBC
(デバイス上ストレージ)
Java SE Embedded / Java ME
Foundation Profile シリアルI/F
OSGiフレームワーク
JSSE
ヘルスケア セキュリティエンターテイメント
ホームコントロール
アプリケーションバンドル 照明 温度
標準サービスバンドル
ホームゲートウェイ
UPnP USB ZigBee セキュリティ
33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
OSGiバンドル
Smart Gatewayデモ アーキテクチャ
バックアップ・同期マネージャ
電力消費マネージャ
温度センサー 照度センサースマートメーター
Oracle Database
Mobile Server
スマートゲートウェイ
Linux / ARM
Berkeley
DB
OSGi
FrameworkSync Client
Java ME CDC (OJEC)
18 ℃
7円
5000 lm 6573 lm
28 ℃暖房
単価
照明
設定値 測定値
マン・マシン・インタフェース
空調制御サービス
照明制御サービス
USB USB
34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Smart Gatewayデモ UI
35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
関連リンク
• Berkeley DB ダウンロードhttp://www.oracle.com/technetwork/database/berkeleydb/downloads/
• Berkeley DB ドキュメントhttp://www.oracle.com/technetwork/database/berkeleydb/documentation/
• Java Embeddedhttp://www.oracle.com/technetwork/java/embedded
• Java SE / JavaFX ダウンロードhttp://www.oracle.com/technetwork/java/javase/downloads/
37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.