質問場所がここで良いか少し不安ですが
主にWebで公開するデータベースのシステムを作ろうとしています
自分のスキルの範囲でやろうとしていますが少し分からないことがあるので 教えてください
まず 自分のできること(やっていること)は
・Windows系サーバー(IIS)を使ってVBスクリプト(ASP)で
ローカルにあるMDBファイルにアクセスし商品を紹介する動的ページの作成
です。
今後複数ユーザーでデータベースを使うことになるので システムを変えていく必要がでてきて
MDBはダメだという事になり色々調べた結果、今後のことも考えWebサーバーとは別に
データーベースサーバーを作ってやると言う結論になりました
分からないこと(あやふやな理解になっていること)
1.データベースサーバーとは何か?
これは OSは別として、SQL Server、オラクル、MYSQLといった
RDBMSをインストールしただけのデータベース置き場専用という感じのPCを指すと言うことで良いでしょうか?
例えば Win2000のIISでwebサーバーを作りその中のASPページから
別PCにあるデータベースにアクセスする構成がデータベースサーバーを別に設けると言うことで正しいのかどうかと言うことなのです。
2.データベースは何がよいか?(SQL Serverでよいか?)
本来であれば、webで商品在庫を公開することがメインで更新頻度が少ないデータベース
(300人ぐらいで共有し1万~3万レコードです)です、なおかつ複雑なSQLは発行しません。
ほぼASPからの接続で抽出(ID=** という単純な抽出条件)しか使わない、あとは並び替え位なので
MYSQLが向いているようでしたが、私はLinux系は全く分かりません。
なので メンテナンスの面や勉強する時間の節約からすれば
Windowsで動くSQL Serverが良いと思うのですが(MYSQLもWindowsで
動くけど得意とする高速性はLinux系でないと発揮しないみたいなのでやめようと思っています)
上記のような条件と使い方の場合、そんなに処理時間やマシンの負荷に両者間では大差があるのでしょうか?
MDBの時でもあまり不具合を感じなかったので、それよりは格段にSQL Serverは早いし負荷が少ないと聞いていますので
大丈夫かなと思っています。
3.SQL ServerをインストールするPCは何が最適か?
先も述べたようにデータベース専用として使う予定ですが
Win2000でよいのでしょうか?(XPより2000の方が安定がよいと思うので) それともWin2003Serverに
インストールできるならその方がよいでしょうか?
とにかく安定度が一番なのですが、そもそもWin2003Serverに
インストールできるのでしょうか?(もうすぐ2008?がでるからそれにしようかとも検討中です)
4.最終的に自分の思っていることと実体の構成(理解)は理解は以下のような感じで正しいのでしょうか?
複数でデータベースを共有するため、MDBでなくネットワークに強い
(共有データベースで壊れにくい?壊れない?)データベースに変えるため、windowsで動くSQL Serverを使う
そのSQL ServerはwebサーバーがあるPCとは別のPCにインストールして使う
(データベースサーバーを別に用意する)ことでwebサーバーの負荷も減らし、データベースも快適に動くようにする
最終的にはWin2003Server×2台で1方はwebサーバー1方はSQL Server
をインストールして使うことで上記を実現させる
5.SQL ServerのデータベースはMDBのような最適化というような作業が必要なのでしょうか?
そもそも 似ているようで違う MDBとSQL Serverでその特徴がきちんと理解できていないので
愚問なのかもしれませんが 気になるので教えてください
6.オラクルと違いSQL Serverはレコードの更新や追加の時
その行(レコード)だけロックすると言うことができない?
ようなので、Aさんが自分の商品を更新中にBさんも更新する
と言うようなことが起こった場合(MDBはこれになると壊れると書いているので MDBをやめました)
Aさんの更新が終わるまでBさんは更新できない(更新終了まで待つ)と言うことになるのでしょうか?
また、このとき商品一覧を要求された場合、更新中の情報はどの様になるのでしょうか?(更新終了まで見れない?)
なんか 分かりにくい質問になってしまいましたが、お金をかけて
買ったはいいが、理解不足でやりたいことができなかったと言うことは
避けたいので ご教授下さい。 よろしくお願いします。
No.1ベストアンサー
- 回答日時:
はじめまして。
以下、長文ですが回答いたします。1.データベースサーバーとは何か?
データベースをインストールしたPC = データベースサーバという認識で、概ね問題はないと思います(時によりですが、データベースソフトそのものをデータベースサーバと言う事もあるでしょう。IISというソフトそのものをウェブサーバと呼ぶように)。
ウェブサーバとデータベースサーバを別々のPCに別けるかどうかは、また別の問題です。
よくあるパターンとしては、開発時には1つのPCに IIS とSQL Server をインストールして開発を行い、実稼動時には物理的に別々のPCにウェブとデータベースを別けるなんてやり方があります。
2.データベースは何がよいか?(SQL Serverでよいか?)
質問の内容を拝見する限りでは、機能面的にはどれでも大差ないというのが実感です。
1万~3万レコードというのは、商用RDBで扱うボリュームとしては、かなり小規模な部類に入ると思いますので、高速性云々を気にされているようですが MySQL を選んだために致命的に遅くなったということは無いと思います(当然、ミリSec、マイクロSecの差は出ますが、致命的とは言えないですよね?)。
ですので、選ぶポイントとしては、価格、サポート内容、ネット上のコミュニティーの有無、周りに識者がいるかどうかといった点を考慮された方が良いと思います。
そういった意味で、SQLServer を選択されるというのは、有力な選択肢の一つと考えて良いでしょう。
3.SQL ServerをインストールするPCは何が最適か?
XP よりも 2000 の方が安定しているかどうかというのは、大変難しい問題な気がしますが、2003Server が使えるのであれば、それをお勧めします。セキュリティ、サポート、安定性などを考えて、ウィンドウズ系OSとしては、もっとも有効な選択といえるでしょう。
4.最終的に自分の思っていることと実体の構成(理解)は理解は以下のような感じで正しいのでしょうか?
正しいです。
正しいですが、必ずしもウェブサーバとデータベースサーバを別ける必要はありません。
金銭的に余裕があるなら、別けるべきですが、1台のPCで構成してもとりあえずは問題なく動くでしょう。パフォーマンスの問題も、さほど気にならないと思います。
ただし、障害時復旧という観点から言えば、断然別けるべきです。このあたりの話は、話し出すとかなり長くなるので割愛しますが…。
老婆心ながら1点付け加えるならば、「共有データベースで壊れにくい?壊れない?」との記述がありましたが、壊れないデータベースというものはありえません(また、壊れないと明確に謳っているデータベースも無いでしょう)。ですので、マニュアルなどをきちんと読んで、障害時対応の最低限の知識を得ておくことと、バックアップ運用のルールしっかりと決めておくことをお勧めします。
5.SQL ServerのデータベースはMDBのような最適化というような作業が必要なのでしょうか?
商用RDBはMDBに比べるとだいぶ高級ですので、さほど気にする事はないかと思います。
ただ、delete/insert を繰り返し何度も行うと、パフォーマンスが下がる場合がありますので、1年に1度くらい気にしてあげた方が良いかもしれません。
最適化のやり方は、データベースの実装依存ですので、マニュアルを見るしかありませんが、一般的なTIPSとして、バックアップ⇒TRUNCATE⇒インポートなんてのもあります。
6.SQLServerは行ロックできないか
そんなことはありません。ちゃんと行単位でロックできます。
行単位でデータベースにロック命令を出すことを「悲観的ロック」といいますが、このロックのやり方は、真面目に考え出すと結構むずかしく(ロックしたら必ずロック解除する必要があるが、ユーザが途中で操作をやめてしまったら…?)、採用には一考の必要があります。
ちなみに、提示の例ですと、Aさんが更新を終えるまで、Bさんは「更新画面を見れない」ということになると思います。
一般的に、行ロックされたレコードに対する取得要求は即時エラーになるか、ロックが解除されるまで待つかです。ロック解除まで待つ方法を選択した場合、確実にロック解除されるように実装しないととんでもない目にあいます。
排他制御の方法として、悲観的ロック以外に「楽観的ロック」という方法もありますので、導入を検討してみてください。
MDBとRDB(SQLServer等)は、似ている部分もありつつも、本質的にかなり異なるものですので、導入直後はかなりの想定外トラブルに悩まされると思います。
ただ、システムを大規模化していく以上、避けては通れない道だと思いますので、がんばってください。
大変参考になる回答ありがとうございます。
おおむね自分の理解が正しかったようなので自信になりました
今、win2000にエキスプレスエディションをインストールしてみました
これからが大変ですが、しっかり勉強していこうと思います
ロックについては cgiをやっていたときに すごく悩んだことがあり
やはりこれは複数が使うデータでは避けて通れない問題ですね
自分のシステムにあったロック方法を勉強してやってみようと思います
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- SQL Server PCが悪くなって新しいPCにSSMSのデータを移すよう頼まれたけど移し方が分からない 1 2023/05/18 16:54
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- フリーソフト 色々な形式の個人情報を後で参照しやすいようWindow10で管理したいのですが、どんな方法があるの? 1 2023/04/29 16:46
- MySQL 「utf8mb4_general_ci」はMAMPでは何に当たりますか? 1 2022/06/02 07:45
- SQL Server SQL ServerでDBを構築。これは開発? 4 2022/05/28 14:10
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AndroidからのAccessデータベー...
-
CDの売上枚数を知りたいのですが
-
ACCESS2019でのエラーメッセージ
-
マクロでデータベースの最適化...
-
DB2 UDBって?
-
accessの勉強ができるサイトは?
-
データベースの最適化をマクロ...
-
lotus Notesのメール受信フォル...
-
Accessのレポートで「縦書き」...
-
SQLの文、節、句について
-
アクセスのデータがブッ壊れた...
-
ACCESS2000、データベース破損...
-
アクセスの日付/時刻型で標準...
-
DB2で複数DBからSELECT等
-
oo4oの読み方・・・・。
-
私があるアカウント発行の権利...
-
ADODB.Recordset エラー '800a0...
-
IPアドレスを数値に変換
-
ロータスアプローチのリスト表...
-
JCPDSカードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
Accessのレポートで「縦書き」...
-
accessの勉強ができるサイトは?
-
Microsoft Accessについて
-
データベースのメタ値はどこに...
-
ACCESS2019でのエラーメッセージ
-
「桐」の得手不得手
-
アクセスのデータがブッ壊れた...
-
バッファプールって?
-
DB2 UDBって?
-
【エクセル】自動保存先として...
-
SQLて何ですか!
-
今年亡くなった有名人を一発で...
-
ADODB.Recordset エラー '800a0...
-
AccessとSQL Serverの違い
-
ODBC接続とDBLINK
-
DB2で複数DBからSELECT等
-
NOTESでデータベースを開いたと...
-
oo4oの読み方・・・・。
おすすめ情報