- - PR -
Accessを利用したデータベースについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-07 09:39
端的に言えば、ACCESSには欠格があるから複数スレッドで利用するのに不向きということ ではないでしょうか? ACCESSといえど、Windowsアプリケーションなので、OSからみたひとつのプロセスと して動作します。マルチプロセスなので、処理を開始してからある程度時間が経過する と処理中であろうと他のプロセスに移動します。この移った先のプロセスが、複数 起動したもう一つのACCESSであり、これらが同じMDBファイルを参照している場合 目も当てられないような結果になってしまう、ということではないでしょうか? (厳密にはACCESSではなくJETですが) ですので、ACCESSを*利用するプログラムからの*楽観的ロックや排他制御で 回避できることではないと思います。 | ||||||||
|
投稿日時: 2006-12-08 06:55
いえ・・・そういう話じゃないです。 まずスレッドセーフと言う言葉を理解してください。複数のスレッド間では同じヒープメモリ領域を共有しています。たとえば以下のようなコードがあったとしましょう。この関数を複数のスレッドで呼び出したとき、コメントの位置でスレッドの切り替えが発生したら何が起こるでしょうか?データの整合性を取れなくなりますよね。これがスレッドセーフではない状態です。つまりJETの機能を複数のスレッドから呼び出すと、メモリ上の変数の整合性が取れなくなり、どんな動作を起こすか分からないんです。
でよく言うネットワークでMDBファイルを共有すると、データが壊れますよと言うのは、まったく異なる次元の話です。JETに限らずファイル書き込み中に書き込みを行ってるプロセスが異常終了したらファイルが壊れますよね。2台から同時に利用すれば、そういった事態が起こる可能性は2倍になります。5台なら5倍の確立でトラブルが発生します。 これがSQL Serverなどを使っていれば、Serverのプロセスが異常終了しない限り、ファイルが壊れることはありません。クライアントの数がどれだけ増えても、ファイルが壊れる確立は変わりません。ましてSQLServerならトランザクションログと言う形でファイルの破損に備えているので、実際に困った状況に陥る可能性はもっと低いわけです。 他にも、JETを使った場合には、書き込んだデータが他のプロセスが参照するデータに反映されるまで時間がかかるとか、ネットワークの負荷が極端に高くなると言った欠点もありますけどね・・・。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2006-12-08 09:21
選択肢としては、SQL Server だけでなく、いろいろな DBMS がありますし、無償のものもあります。 また、DB サーバーをたてることも簡単にできます。 逆に、このような問題がある中でわざわざ XML にするよりは、DB サーバーを立ててしまう方が宜しいのではないでしょうか? (と言うか、そうしない理由がわかりません^^;) _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2006-12-08 09:29
欠陥という表現は適切ではないように思います。 ACCESS は「そういう用途を前提として作られていない」ということですから。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2006-12-08 10:31
_________________ | ||||||||
|
投稿日時: 2006-12-08 12:26
お世話になります。
いや、問題がありそうだとわかったのは今回の件でなので、これまではそれほど気にしてませんでした。頻繁に書き込みしたりする場合や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のみで運用したいと思っています。それに、関係しているとはいっても勝手にいろんなアプリをインストールするわけにはいきませんし・・。という感じです。 | ||||||||
|
投稿日時: 2006-12-08 12:51
データベースを使ってしまえという流れになっている(なってない?)ようなので、反対意見出してみよう。
何でもかんでも、とりあえずデータストアには Sql Server や Oracle 等の DBMS を使えというのは個人的には感心しません。ガツガツ追加更新しない、検索なんて全くしない、リレーション?いらね、という状況なら単なるテキストファイルでも良いでしょう。「更新なんて FTP でファイル上書きしちゃうよ」なんて運用が良い事もあります。 「InProc なんてなんであるの?」という意見もありますが、これも「そこそこの信頼性でセッション状態が維持できたらそれでよし」という状況で、必ずデータベースを使えなんて選択肢しかないというのは負担が大きいです(保存先はデータベースに限りませんが)。 Access に詳しくないので的外れな意見かもしれませんが、「追加更新は全くしないけど検索ぐらいはやりたい」という状況なら有利に使えると思います。これも「更新なんて FTP でファイル上書きしちゃうよ」なら問題なしです。AccessDataSource はそれに使えます。 要は要件次第でしょうね。選択肢を多く持つ事が大事です。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-12-08 20:12
SQL Serverって、ほぼ既定設定のままで普通にテーブル作って参照・更新する分には、 Accessとそんなに使い勝手の面で変わらないと思うのですが… #テーブルさえ作っちゃえばAccessからもデータいぢれるし SQL Server 2005 Express Editionなら、Webから無料で入手できるので試してみては? 商用利用もOKみたいだし、こんなモノをフリーで出されると、わざわざXML使って自分で排他制御とかは、 勉強以外の目的ではやる気にならないっす(^^; |