Oracle Berkeley DBのストレージレイヤー

Oracle Berkeley DBは、小さなサイズの効率的なソフトウェア・ライブラリであり、どのようなデータ・ストレージ・ソリューションにも適した基本的な構成要素となります。Berkeley DBをソフトウェア・アプリケーションに組み込むことで、アプリケーション・データを、XQueryでアクセス可能なXMLドキュメントとして、Javaオブジェクトの永続グラフとして、またはシンプルなget/put操作やカーソル・ポジショニング操作を使用してアクセス可能なキー/バリューペアのOPAQUE型非構造化データとして、SQLを使用して迅速かつ簡単にリレーショナルテーブルに保存できます。

以下では、Oracle Berkeley DBストレージエンジンが提供する機能について説明します。私たちは構成オプションを提示しますが、2つとして同じアプリケーション・シナリオはありません。お客様のアプリケーションにとって最適なトレードオフは、お客様が選択できます。決定はお客様に委ねられています。

Spaces

  • データアクセス

    Berkeley DBで最も一般的に使用されるデータアクセスのストレージオプションは、Bツリーです。Berkeley DB Bツリーは、基本的にソートされた順序で、キーおよびそのキーに関連する値を保存します。Bツリーの内部ページには、データページをポイントするキーのソートされたリストが含まれ、そこにデータが保存されます。Berkeley DBのBツリーは、キー/バリューAPI、および高レベルのすべてのAPIの基本的なストレージ方法です。たとえば、XML APIによってXQueryがXMLデータにアクセスできるようになり、このXMLデータは、アプリケーション定義の索引を自動的に維持するドキュメントコンテナに保存されます。これらのドキュメントコンテナと索引は、実際にはBerkeley DB Bツリーであり、基礎になるデータに対して、高パフォーマンスで信頼性が高く、同時実行が可能でスケーラブルな索引付きアクセスを可能にします。同様に、Java Direct Persistence Layer APIを使用しているかSQL APIを使用しているかにかかわらず、アプリケーション・データはBerkeley DB Bツリーに保存されます。アプリケーションの中には、Bツリーが最適とは言えないものもあります。アプリケーションによっては、キュー(FIFOまたはLIFOデータアクセスの場合)またはハッシュテーブル(固有の順序付けがない大規模なデータセットの場合)を使用する必要があります。これらのアプリケーションでは、Berkeley DBは、キー/バリューAPI経由で使用可能な代替のデータアクセス方法であるキューおよびハッシュを提供します。

    XMLコンテンツは、ドキュメントコンテナに含まれます。Berkeley DBは、XMLコンテンツ上の任意の索引をサポートし、ドキュメントの必要な部分に効率的にアクセスするためのXQueryを提供します。テーブル、行、索引などのリレーショナル・コンテンツもBツリーです。Berkeley DBでは、リレーショナル・データ、グラフデータ、または階層データを格納する際に、これらの索引を使用してBerkeley DBのBツリー内からデータを特定し選択します。

    ほとんどのお客様が、Bツリーを最も役立つ汎用性の高いアクセス方法と見なしています。キーの編成を最適化するカスタム比較関数を作成して、その結果得られるパフォーマンスを評価するところから始めることをお薦めします。

  • ロック

    Oracle Berkeley DBは、非常に高度で構成可能なロックシステムを使用して、データへの同時アクセスを管理します。同時実行ストレージシステムで、ロックをせずに一貫性を維持することは不可能です。Berkeley DBでは、同時実行型またはトランザクション型のデータアクセスが構成されている場合、進行中のさまざまな操作の性質に基づき、すべてのロックを自動的に管理します。ほとんどの場合、アプリケーション開発者にとって、ロックは一度構成してしまえば簡単に機能します。ロックを獲得して解放するためのプログラムは必要はありません。Berkeley DBが代わりに実行します。

    マルチバージョン並行性制御(MVCC)は、同時実行性が高く競合の多いアプリケーションにおいて特に有益です。MVCCは、トランザクションに関連するページのスナップショットを維持することによって、リーダーによるライターのブロックを防ぎます。MVCCを使用するアプリケーションは、通常、アカウントに対してサイズの大きなキャッシュを構成するか、スナップショットに使用されるメモリを増やします。

  • トランザクション、事前書き込みロギング、リカバリ

    Berkeley DBは、詳細な構成が可能なフィールドテスト済みのトランザクションおよびデータベースリカバリを提供します。トランザクションは、「原子性、一貫性、独立性、永続性」特性(ACID特性)を備えています。事前書き込みのトランザクションログは、トランザクションによって保護されるすべてのアクション(ファイルシステム操作を含む)に関するUNDOおよびREDO情報を維持します。

    Berkeley DBを使用すると、アプリケーション・プログラマーは、トランザクションごとにBerkeley DBのトランザクション動作(独立性と永続性)を詳細に調整できます。Berkeley DBは、シリアライズ可能な分離レベル(デフォルト)、コミット読み取り分離レベル、および非コミット読み取り分離レベルをサポートしています。任意のトランザクションに対して、分離レベルの変更を選択できます(またはすべてのトランザクションにデフォルトを設定)。あるトランザクションに実行された読み取りが書き込みをブロックしないようにするには、スナップショット分離としても知られるマルチバージョン並行性制御(MVCC)を有効化します。

    分離と同様に、アプリケーションの制御下にあるトランザクションの永続性は、トランザクションごとに柔軟に設定できます。トランザクションがストレージメディアに完全に書き込まれるまで、オペレーティング・システムに書き込まれるまで、または単純にアプリケーション・バッファに書き込まれるまで、トランザクションが永続的だと見なされないように指定できます。ストレージメディアの場合は、たとえオペレーティング・システムが予期せずに停止しても(停電、システム障害など)、リカバリが可能です。オペレーティング・システムの場合は、アプリケーションが終了してもデータはオペレーティング・システムのバッファ内にとどまるため、アプリケーション障害の影響を受けません。アプリケーション・バッファの場合は、トランザクション・データがログに完全に書き込まれる前にアプリケーション障害またはシステム障害が発生すると、新しいトランザクションがロールバックされる可能性がありますが、それでもデータベースはトランザクションの一貫性を保証します。

ツール

  • SQL Developer

    Oracle SQL Developerは、データベース開発のための無償かつサポート対象のグラフィカルツールです。SQL Developerを使用すると、データベース・オブジェクトの参照、SQL文およびSQLスクリプトの実行、スキーマオブジェクトの編集とデバッグを実行できます。提供されているODBCドライバおよびOracle Database Gateway for ODBC(DG4ODBC)を使用することで、SQLデータベースとしてOracle Berkeley DB 11gとともにSQL Developerを使用することが可能です。

  • Oracle JDeveloper

    Oracle JDeveloperは無償の統合開発環境であり、JavaベースのSOAアプリケーションおよびユーザー・インタフェースの開発を簡素化し、開発ライフサイクル全体をサポートします。JDeveloperは、Berkeley DB XMLもサポートするようになりました。Berkeley DB XMLコンテナの参照、XQuery文の実行、XMLコンテンツの編集が可能です。

  • Eclipse

    Oracle Berkeley Database 11gを、Eclipse IDEと組み合わせて使用できます。Javaオブジェクトをデータベースに保存するための最も簡単な方法は、Direct Persistence Layer(DPL)を使用することです。開発速度を上げ、DPL APIを適切に使用するには、Direct Persistence Layer Assistant for Eclipseを使用します。このプラグインは、JavaソースコードのDPL注釈の検証を実行します。Javaソースコードへの変更を保存するたびに、エバリュエータが注釈(@Entity@Persistentなど)を分析し、IDEがJavaコンパイルエラーを報告するのと同様の方法で、検知したエラーや警告を報告します。これにより、開発者は開発サイクルの早い時期に課題を発見でき、アプリケーションの構築に必要な時間を短縮できます。

  • SQLiteツール、アドオン、拡張機能

    Berkeley DBのSQLサポートはSQLiteのAPIと互換性があるため、SQLiteで動作するほぼすべてのツール、アドオン、拡張機能、および他のアプリケーション開発ツールは、そのツールがBerkeley DBライブラリを使用する限り、Berkeley DBでも機能します。

  • Apache Maven

    オブジェクト指向のプログラミングにおいて、特にJavaを使用する場合に、再利用が可能になりました。プログラマーが多数のコンポーネントを組み合わせて単一のソリューションを構築するのを支援するツールの1つが、Apache Mavenです。Oracle Berkeley DB 11gはMavenから利用することができるため、複雑なプロジェクトへの統合が容易です。

プラットフォーム

  • Solaris、Linux、Mac OS/X、BSD

    Berkeley DBは、POSIXオペレーティング・システムのインタフェースの標準セットを使用しています。ほとんどのUNIX系のプラットフォームで機能し、何の変更も加えることなく、あるいはわずかな変更を加えるだけで使用できます。Oracle Berkeley DBは、ほとんどのUNIXオペレーティング・システムの標準コンポーネントとして出荷されます。通常、ライブラリはlibdb.[so,a]と呼ばれる/usr/libに、ヘッダーファイルは/usr/include/db.hにインストールされます。すでにインストールされているかどうか、システムを確認してください。ほとんどのUNIXオペレーティング・システムには自動ソフトウェア・インストーラが備わっており(RedHatのRPM、DebianおよびUbuntuシステムのAPT、BSD PORTSシステムなど)、Berkeley DBがシステムに自動的にインストールされます。もちろん、任意のタイミングで最新バージョンをダウンロードして、ソースからライブラリを構築することもできます。デフォルトのインストール場所は/usr/local/BerkeleyDB[version]です。ライブラリを構築することで、どの機能を有効化するかをほぼ制御できるため、特定のユースケースに合わせてサービスをカスタマイズできます。

  • Microsoft Windows

    Microsoft WindowsアプリケーションにOracle Berkeley DB 11gを統合することは簡単です。Windowsインストーラ・パッケージには、事前構築済みの、Berkeley DBの動的リンクライブラリ(DLL)が含まれています。Berkeley DBのソースコードには、Microsoft Visual Studioを使用してライブラリを構築するためのサポートが含まれます。Berkeley DBには、.NETランタイムのサポートとC#言語APIが含まれています。このAPIは、すべての共通言語ランタイム(CLR)アプリケーションに利用可能なマネージド・インタフェースです。永続標準テンプレート・ライブラリ(STL)クラスがサポートされることで、C++アプリケーションは恩恵を受けます。Berkeley DBはMicrosoft Windows Embedded、Windows CE、およびWindows Mobileプラットフォームもサポートしており、デプロイされる場所を問わず、Windowsアプリケーションにとって理想的なデータベースとなっています。

  • Android、iPhone OS、VxWorks、QNX

    Oracle Berkeley DB 11gは、一般消費者向けのモバイルデバイスに非常に適しています。一般消費者のデバイスにデプロイされるアプリケーションには、小型で機能的なデータベースが必要です。このような一般消費者向けのデバイス・プラットフォームを多数サポートするBerkeley DBは、何百万もの携帯電話、モバイル通信インフラストラクチャ、医療監視機器、およびその他の業界固有のモバイルデバイスにデプロイされています。これらのデバイスには機密情報や重要な情報が含まれており、そのほとんどが電池駆動であるため、予期しないときや都合の悪いときに稼働しなくなる可能性があります。このようなモバイルデバイスでは、電源喪失後のデータ整合性、不正アクセスを防ぐためのデータの暗号化、データの同期、データ圧縮や消費電力削減のためのフラッシュ・ストレージの最適化といったことが新たな要件となります。

  • コンパイラ

    Sun Studio、Intel Pro*C/C++、GNUコンパイラ・コレクション(GCC)、Microsoft Visual Studio、低レベル仮想マシン(LLVM)C言語(Clang)、およびPOSIXライブラリを備えたその他ほとんどの標準準拠コンパイラを使用できます。

  • プラットフォームの移植性

    Berkeley DBの設計は、オペレーティング・システム、チップセット、およびコンパイラ間での移植性に優れています。この慎重な設計により、Oracle Berkeley DBチームが検証したことがない場合であっても、ターゲット・プラットフォーム環境でほぼ問題なく動作します。Berkeley DB Reference Guideにはポーティング・ガイドが含まれています。別のプラットフォームへのBerkeley DBの移植を希望しているお客様およびパートナーの皆様のお役に立てることができれば大変光栄です。