最終更新日: 1998年 12月 18日 金曜日
ここ数年、ネットワーク上のデータベースについて非常に関心が高まってきています。
その中で3層C/Sシステムが提唱されるようになり、以前よりもセキュリティや動作効率、
そしてファイルの保護に非常に優れたアプリケーションやサーバーを構築できる環境が調ってきています。
特にWindows上ではUniversalDataAccessの技術を適切に扱うことで
サーバー部分の大半のコードを書くことなく、3層C/Sシステムを組むことすら可能になって
きています。
以前は2層C/Sシステムとして、アプリケーション層とDBMS層を直接接続、またはDBMS層
自体をアプリケーションに内封したプログラムが主流で、複数のユーザーによる共有・競合について
多くの問題があり適切に処理を行うために多大な時間が取られていました。
DBMS層はドライバーオブジェクトとして独立し、外部に共通のインターフェイスを もち、データーが異なっても共通部分について再インプリメントする必要がなくなってきています。 また、COMオブジェクトやDCOMオブジェクト化されたデバイスのため、特にDCOM対応の ものではデバイスドライバーが処理を行うDBMSファイル処理の分散化など、ネットワーク上で より適切に、効率よく動作するデバイスドライバが与えられています。
中間にあたるビジネス層ではアプリケーション層とDBMS層の中間に立ち、OLEオートメーション やCOM・DCOMなど多くの情報処理技術を中心に適切に操作するように設計することで多くの 異なるアプリケーション作成に共通のインターフェイスを作成できます。しかも、その時々の 最新のDBMSの技術を外部から利用するため、インプリメンテーションの手間がなく、対応ドライバー のインストールをユーザーが行うだけですみます。つまり、ビジネス層プログラムはその処理のみに 全力を尽くせるわけです。
アプリケーション層ではユーザーインターフェイスの表玄関としてユーザー入出力を担当します。 このとき、データへの入出力はビジネス層とのリンクを行うだけですので、共有データにおいては その競合や共有をほとんど意識することなく、アプリケーションを組むことが可能です。また、 ビジネス層と同様にデータベースのドライバーを最新のものに合わせておくだけで常に最新の DBMS技術がアプリケーションの変更もなく利用できるメリットがあります。
さて、実際のアプリケーションを考える際に、DataAccessには多くのやり方があり、 アプリケーションの形態・目的によって大きくインプリメンテーションが変わってきます。ここでは 2種類のインプリメンテーションについて考えてみたいと思います。
Webベースのコンポーネント。Webベースのコンポーネントの場合は通常アプリケーション層 にはIEなどのWebブラウザーがあり、ブラウザーから呼ばれるASPとASPが呼び出す サーバーオブジェクト等で構成されます。この場合DHTMLなどの技術を用いてWebブラウザー をユーザーインターフェイスとして使用することが考えられます。この時には動作速度などの問題も ありますが、ASP上でADOを使用することでスクリプトレベルでのデータアクセスも可能です。 また、インプロセスサーバー/アウトプロセスサーバーを作成することで処理速度を上げることが 考えられます。とくに、このプロセスサーバー作成はスクリプトよりも複雑ですがCPUの占有率 などの問題や、ファイル共有の競合問題に対しては有効です。
ゲーム等のアプリケーションでは直接ADOなどを通じてデータベースをアクセスすることで 効率を上げることも可能ですが、DirectPlayを使用した通信によるデータアクセスの場合、 DirectPlayサーバーはビジネス層・DBMS層のサーバーとなり、クライアントは アプリケーション層・ビジネス層の両方をプログラミングすることになります。
いずれにしてもRemoteDataBaseAccessはここ数年で急速に進歩してきた 技術ですし、なにより設計段階で適切に組まれていなければならないのは周知のとおりです。 幸いなことにインターネット上でのメーカーからのSDK無料配布など以前では考えられないほどの サポートが現在ではされていますのでこれらの技術をもっと有効に使いたいものです。
CDAODBクラスを作成&テストしてDAOの動作とアプリケーションの動作のスレッド速度の差で若干不都合がでることがありますので以下のようにまとめてみました。また、注意する点についてもまとめてみました。
![]() |
アプリケーション側の速度が速く、DAO内部の更新が追いつかず動作が完了する前に次の
作業を指示する場合があるため高速なCPUでアプリケーションを動作させるときには注意する必要がある 例:レコードの連続削除等でループを組んでいるとき |
![]() |
アプリケーション作成&デバッグ時にDAOが内部エラーを発生することがあるが、たいていは
ファイルのオープンエラーで参照不可能なポインター(NULLポインター)を参照している事が多い。 また、テーブルのオープンを行う前にレコードをオープン使用としていたり、テーブルのクローズ後に レコードをクローズしているなどの論理的エラー |
ODBCはOLE DBの最下層にあるDBMSの一つですが、それゆえ多くの制限と大きな
利用価値があります。特に低レベルI/Oの様に使用されてきていますし、C言語からの利用は
すでに広範囲に行われています。その利用において、気をつけたいのはODBC経由でDBMSを
利用する場合は、ODBCに対してデータファイルを登録しておかなければならないと一点です。
システムDSNはネットワーク内で共有するためのもので、他の
コンピュータからリモート参照を可能にします。
ユーザーDSNはローカルマシンのみのアクセスしか許可しないため
ネットワーク内の他のコンピュータからの不法アクセスを防ぎます。これは、外部からのゲートを
一つに絞るだけではなく、マシン固有の情報を個別に保存することに優れています。
Copyright (C) Kitaro 1998