- PR -

Accessを利用したデータベースについて

投稿者投稿内容
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-12-07 09:39
引用:

BTさんの書き込み (2006-12-07 02:00) より:
では何故聞いたかというと、純粋に知りたいというのもありますし、それをもってXMLは無関係の内容だという確認としたいというのがあります。
また、ACCESSを使いたいという質問が度々あるようなのでそれに対する明快な納得感のある答えが出せればと思ってというのもあります。



端的に言えば、ACCESSには欠格があるから複数スレッドで利用するのに不向きということ
ではないでしょうか?

ACCESSといえど、Windowsアプリケーションなので、OSからみたひとつのプロセスと
して動作します。マルチプロセスなので、処理を開始してからある程度時間が経過する
と処理中であろうと他のプロセスに移動します。この移った先のプロセスが、複数
起動したもう一つのACCESSであり、これらが同じMDBファイルを参照している場合
目も当てられないような結果になってしまう、ということではないでしょうか?
(厳密にはACCESSではなくJETですが)
ですので、ACCESSを*利用するプログラムからの*楽観的ロックや排他制御で
回避できることではないと思います。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-12-08 06:55
引用:

ACCESSといえど、Windowsアプリケーションなので、OSからみたひとつのプロセスと
して動作します。マルチプロセスなので、処理を開始してからある程度時間が経過する
と処理中であろうと他のプロセスに移動します。この移った先のプロセスが、複数
起動したもう一つのACCESSであり、これらが同じMDBファイルを参照している場合
目も当てられないような結果になってしまう、ということではないでしょうか?


いえ・・・そういう話じゃないです。
まずスレッドセーフと言う言葉を理解してください。複数のスレッド間では同じヒープメモリ領域を共有しています。たとえば以下のようなコードがあったとしましょう。この関数を複数のスレッドで呼び出したとき、コメントの位置でスレッドの切り替えが発生したら何が起こるでしょうか?データの整合性を取れなくなりますよね。これがスレッドセーフではない状態です。つまりJETの機能を複数のスレッドから呼び出すと、メモリ上の変数の整合性が取れなくなり、どんな動作を起こすか分からないんです。
コード:
string name;
string value;
void setNameAndValue(string newName, string newValue(
{
    name = newName;
    // ←ここでスレッドの切り替えが発生したら・・・
    value = newValue;
}



でよく言うネットワークでMDBファイルを共有すると、データが壊れますよと言うのは、まったく異なる次元の話です。JETに限らずファイル書き込み中に書き込みを行ってるプロセスが異常終了したらファイルが壊れますよね。2台から同時に利用すれば、そういった事態が起こる可能性は2倍になります。5台なら5倍の確立でトラブルが発生します。
これがSQL Serverなどを使っていれば、Serverのプロセスが異常終了しない限り、ファイルが壊れることはありません。クライアントの数がどれだけ増えても、ファイルが壊れる確立は変わりません。ましてSQLServerならトランザクションログと言う形でファイルの破損に備えているので、実際に困った状況に陥る可能性はもっと低いわけです。

他にも、JETを使った場合には、書き込んだデータが他のプロセスが参照するデータに反映されるまで時間がかかるとか、ネットワークの負荷が極端に高くなると言った欠点もありますけどね・・・。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-12-08 09:21
引用:

BTさんの書き込み (2006-12-07 02:00) より:

誤解されては困るのですが、ACCESSも使えるんじゃない?という事を書きたいのではありません。自分自身はACCESSは使う考えは全くありませんが、かといってSQL Serverも使える環境にないし、規模的にも使うまでもないと思っているのでXMLにしているという状況です。もちろん大規模なものになればSQL Serverも考えると思いますけど。


選択肢としては、SQL Server だけでなく、いろいろな DBMS がありますし、無償のものもあります。
また、DB サーバーをたてることも簡単にできます。

逆に、このような問題がある中でわざわざ XML にするよりは、DB サーバーを立ててしまう方が宜しいのではないでしょうか?
(と言うか、そうしない理由がわかりません^^;)
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-12-08 09:29
引用:

ひらさんの書き込み (2006-12-07 09:39) より:

端的に言えば、ACCESSには欠格があるから複数スレッドで利用するのに不向きということ
ではないでしょうか?


欠陥という表現は適切ではないように思います。
ACCESS は「そういう用途を前提として作られていない」ということですから。

_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-08 10:31
引用:

BTさんの書き込み (2006-12-07 02:00) より:

かといってSQL Serverも使える環境にないし、規模的にも使うまでもないと思っているのでXMLにしているという状況です。

どんな環境だろうね。

_________________
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2006-12-08 12:26
お世話になります。

引用:

R・田中一郎さんの書き込み (2006-12-08 09:21) より:

逆に、このような問題がある中でわざわざ XML にするよりは、DB サーバーを立ててしまう方が宜しいのではないでしょうか?



いや、問題がありそうだとわかったのは今回の件でなので、これまではそれほど気にしてませんでした。頻繁に書き込みしたりする場合やACCESSはまずいだろうとは思ってましたけど・・。逆に問題があるなら今後DBにするかもしれません。それで、一体どこが、またどういったケースにおいてまずいのかを明確にするためにいろいろ質問しているという訳です。

これまでSQL Serverを使ってなかった理由は、ひとつはスキル的に使えない^_^;というのがあります。まあ最終的にはこれが一番なのかもしれませんが。
ASP.NETに移行したのは「マイクロソフト 簡単レシピ」あたりを参考に作り始めたので、とっかかりがXMLというのもありましたし、@ITあたりのサンプルを見てもXMLのが一杯あるし、それで簡単にできるなら・・ということでそれらを少し手直ししてやってるというのもあります。あとは、データソースといってもweb.configファイルに書いたりするような設定ファイル的な内容がほとんどで、たま〜にその修正をウェブ画面から掛けたいということで別のXMLファイルにしているというレベルです。

要は、ウェブアプリというよりは、更新や管理を簡単にしたいのでデザインとデータを分離しているというのがメインの目的で、中身的には個人のホームページに毛が生えた程度なのでDBを使うのは大げさすぎるかなと思っています。また、そういう使い方なのでスキーマはあまりカッチリ決めたくないというのもあります。

環境というのは、IISのみのホスティング環境で運用しているというのが理由です。イントラネットや自前のサーバならExpress Editionという手もありますが(インターネット公開用でExpress EditionはOKなんでしたっけ?)、このホスティングサービスは自分も関与しているのですが、ウェブデザインのおまけみたいなものです。MSのサービスプロバイダ契約(SPLA)ではExpress Editionは使えないはず(といいながら何処かのホスティングサービスでは使っている風なことを掲示しているのでどうもハッキリしないのですが)ですし、ウェブサーバとDBサーバを分離したりしていると、最終的にはコストが10倍以上違うので、先程挙げたような使い方で大丈夫ならXMLを使ってIISのみで運用したいと思っています。それに、関係しているとはいっても勝手にいろんなアプリをインストールするわけにはいきませんし・・。という感じです。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-12-08 12:51
データベースを使ってしまえという流れになっている(なってない?)ようなので、反対意見出してみよう。

何でもかんでも、とりあえずデータストアには Sql Server や Oracle 等の DBMS を使えというのは個人的には感心しません。ガツガツ追加更新しない、検索なんて全くしない、リレーション?いらね、という状況なら単なるテキストファイルでも良いでしょう。「更新なんて FTP でファイル上書きしちゃうよ」なんて運用が良い事もあります。

「InProc なんてなんであるの?」という意見もありますが、これも「そこそこの信頼性でセッション状態が維持できたらそれでよし」という状況で、必ずデータベースを使えなんて選択肢しかないというのは負担が大きいです(保存先はデータベースに限りませんが)。

Access に詳しくないので的外れな意見かもしれませんが、「追加更新は全くしないけど検索ぐらいはやりたい」という状況なら有利に使えると思います。これも「更新なんて FTP でファイル上書きしちゃうよ」なら問題なしです。AccessDataSource はそれに使えます。

要は要件次第でしょうね。選択肢を多く持つ事が大事です。

_________________
囚人のジレンマな日々
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-12-08 20:12
引用:

BTさんの書き込み (2006-12-08 12:26) より:
お世話になります。

これまでSQL Serverを使ってなかった理由は、ひとつはスキル的に使えない^_^;というのがあります。まあ最終的にはこれが一番なのかもしれませんが。


SQL Serverって、ほぼ既定設定のままで普通にテーブル作って参照・更新する分には、
Accessとそんなに使い勝手の面で変わらないと思うのですが…
#テーブルさえ作っちゃえばAccessからもデータいぢれるし
SQL Server 2005 Express Editionなら、Webから無料で入手できるので試してみては?
商用利用もOKみたいだし、こんなモノをフリーで出されると、わざわざXML使って自分で排他制御とかは、
勉強以外の目的ではやる気にならないっす(^^;

スキルアップ/キャリアアップ(JOB@IT)