DBISAMの概要

DBISAM Ver.4.0について

03年11月末にリリースされたDBISAM Ver.4.0について弊社にて動作を検証致しました。結果はこちら
です。(03/12/31)

概要

  • BDEを使用することなく、DelphiアプリケーションにSQLデータベースアクセス機能を提供するコンポーネントです
  • ランタイムライセンス・フリーのため、SQLエンジンを組み込んだアプリケーションを、無制限に配布できます
  • ローカルファイルアクセス、ファイルサーバによる共有アクセス、クライアント・サーバ型アクセスの、三つのアーキテクチャモデルに対応しており、最小限の作業(ほぼコーディングゼロ)でスケールアップが可能

   

対応環境

こちら をご覧下さい

Delphi体験版および、Personal版ではご利用いただけません。

アプリケーション導入・配布

  • SQLエンジンおよびデータアクセスコンポーネントはアプリケーションプログラムに静的リンクでき、プログラムサイズへの影響も数百キロバイトと軽量です。ターゲットマシンにBDEのインストールやエリアス設定の必要がなく、実行プログラムをコピーするだけでインストールが完了するため、Windows NT プラットフォームでのCGIプログラムなどにも活用できます
  • ランタイムライセンスフリーのため、SQLデータベースアクセス機能を組み込んだパッケージソフトウェアの開発が可能
  • リードオンリー・データベースに対応。CD-ROMでデータを配布するのが容易です。

SQLエンジン

  • BCD, Blob, Memo, Graphic, AutoIncを含むBDEのすべてのフィールド型をサポート
  • ファイルサイズは128GBまで拡張可能。デフォルトは4GB(各テーブルは、本体、インデックス、Blobの最大3ファイルで構成されます)。大量データに耐えます。
  • オンメモリ・データベースをサポート。プログラムでメモリ上に作業用テーブルを簡単に作成し、SQLで操作することが可能です。ディスク上のテーブルとオンメモリ・テーブル間のJOINも可能なため、デコードテーブルをメモリ上に置く高速化手法が有効です。オンメモリテーブルは、SaveToSteram/LoadFromStreamで保存・復元が可能です。バイナリストリーム化したテーブルを、他のテーブルのBlobフィールドに格納して、テーブルの入れ子も実現できます
  • リードオンリー・データベースをサポート。バッファリングにより読み込みを高速化します。CD-ROMなどによるデータの配布に便利
  • レコード単位の自動ロック。手動によるテーブルロック。セマフォロック
  • 進行中のトランザクションをメモリ上に保持し、コミット時にディスク上のテーブルデータを更新。
  • 解放されたブロックを自動的に再利用。クラスタリングが進んだ場合、特定インデックスに基づく最適化が可能
  • パスワードによるテーブルの暗号化、ユーザベースのアクセス制御(C/Sバージョンのみ)
  • テキストファイルのインポート、テキストファイルからのエキスポート

三つのアーキテクチャモデル

  • BDE/Paradoxと同様の、ローカルファイルアクセス、ファイルサーバによる共有アクセス。BDEの設定が不要であるため、手軽に使えます
  • (DBISAM C/S版のみ) コンポーネントの小数のプロパティ設定を変更するだけで、C/Sアプリケーションへのスケールアップが可能
  • DBISAM Client/Server(C/S)バージョンは、インターネットやダイヤルアップ回線など遅い回線越しのアクセスでも最善のパフォーマンスが得られます

SQL機能

  • SELECT, INSERT, UPDATE, DELETE CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, DROP INDEX をサポート。JOIN, UNION, 副問合せ、SELECT INTOも使えます
  • SUM, MIN, MAX, AVG の集計関数
  • SUBSTRING, TRIM, LOWER, UPPER, LENGTH, POS, OCCURS, REPLACE, EXTRACT, CAST, ABS, ROUND, IFの各関数
  • IN, LIKE, IS NULL, BETWEEN の各比較演算子

BDEとの主な相違点

BDE
DBISAM
トランザクションの安全性  
トランザクション中は、データファイルを更新すると同時に、トランザクションログを書き出します。ロールバック時には、トランザクションログを元に、データファイルを元の状態に復元します。

BDEの環境パラメータのLOCAL SHAREがデフォルト値(False)の場合、データファイルの書き出しをメモリ上にキャッシュし、コミットしてもなお書き込みが遅延されることがあり、予期せぬアプリケーション強制終了によってコミット済みデータが消失するという信じられないことが起こります

トランザクション中の更新はオンメモリのバッファに対して行われ、データファイルの更新は、トランザクションのコミット時にまとめて行われます。予期せぬアプリケーション強制終了などが発生しても、コミットの最中でない限りデータは守られるため、データ消失の恐れは小さくなっています

なお、テーブルを排他モードで開く場合は、BDE同様に更新をオンメモリでキャッシュしますが、メソッドにより適宜バッファをフラッシュ可能です。

複数ユーザによるデータベース共有のセットアップ  
データベースをネットワークで共有するためには、すべてのクライアントマシンのBDE環境設定を適切なものに統一する必要があり、この実現は難解かつ困難。
「他の.NETファイルがこのディレクトリをコントロールしています。」
「複数の.NETファイルが使われています。」
「LCKファイルが大きくなりすぎています。」
「ディレクトリは使用中です。」
など様々なエラー、突然のデータ消失やインデックス破壊に絶えず悩まされます
データベースファイルをファイルサーバの共有ディレクトリにコピーするだけで、シングルユーザアプリケーションが、マルチユーザアプリケーションになります。(多少の設計上の考慮は必要ですが...)

データベースアクセスに必要なのはパス名のみ。レジストリ設定は一切不要です

オンメモリ・テーブル  
DbiCreateInMemTableなど極めて難解な低水準APIでオンメモリ・テーブルを作成可能ですが、インデックスが全く利用できないことをはじめ、テーブルサイズやフィールド型に厳しい制約が課せられます。実質的に使えません。 ディスク上のテーブルと、メモリ上のテーブルは本来的に同質です。CREATE TABLE / CREATE INDEX やSELECT ... INTO 文などにより簡単に作成できます。
オンメモリ・テーブルは、異なるクエリ(TQuery)の間で共有できません 異なるクエリ間で共有可能。一方で書き込み、他方で読み出すことができます
テーブル間のデータ転送  
TBatchMoveコンポーネントによって、テーブル間のデータ転送の実装を支援していますが、このコンポーネントはあまり使われません TBatchMoveに相当するコンポーネントはありませんが、SELECT ..INTO 文が使えます
Cached Updates  
  DBISAMは、CachedUpdatesをサポートしませんが、Delphi標準の TDataSetProviderとTClientDataSetを利用できます(Delphi6ではProfessional版以上、Delphi5ではEnterprise版)。TClientDataSetが利用できない環境ではオンメモリテーブルやトランザクションを用いて下さい。

これでもまだ、BDEを使いますか?

BDEの代わりに何を使っていますか?

Survey Results - STARTED: (October,15, 2001)
      ENDED: (October 25, 2001) -
www.delphipages.com調べ
Which BDE replacement do you use?     
Apollo 30.62 % (353)
DBISAM 24.63 % (284)
FlashFiler 20.99 % (242)
Advantage 12.06 % (139)
ADO 6.07 % (70)
IBX 2.52 % (29)
その他: 3.12 % (36) 総投票数 1153