こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGI(perl)データベースを教えてください。

http://www2.inforyoma.or.jp/~tokaji/cgitech/db.htm
を見てperlで簡易データベースを作ることが可能ということを知ったのですが、いくつか質問があります。
お願い致します。

<状況>
flashから送られてきた「ID」・「パスワード」・「その他のデータ」をサーバのperlデータベースで管理する。

(1)まず、本当にperlでデータベースは作れるのでしょうか?

(2)access等の簡易ではないデータベースと比べると
どんなリスクがあるのでしょうか?

(3)メモ帳でデータの管理をすると思うのですが、セキュリティ面は、大丈夫でしょうか?

(4)どのくらい(仮に1000~10000人)のアクセスに耐えられるのでしょうか?
サーバにかかる負荷は、access等の簡易ではないデータベースと比べると、大きくなるのでしょうか?

(5)Flashからのデータをperlを使い管理する時、
最善の方法があれば教えてください。

長くなりましたが、よろしくお願い致します。

投稿日時 - 2005-07-23 10:01:49

QNo.1532372

すぐに回答ほしいです

質問者が選んだベストアンサー

おそらく、「簡易データベース」と呼んでおられるのは、単にSQLインターフェースを持たないデータベース、ということではないでしょうか?(違ったらすみません)

たとえばAccessだとかOracleだとかMySQLだとかPostgresSQLだとかは、SQLによって操作できるデータベースで、当然、その環境にインストールされている必要があります。

●このようなSQLインターフェースを備えたデータベースは、DBI、DBDを利用して使う。

質問文から推察する限り、それらがインストールされていない環境で、何かしらのデータベースを使いたい、ということですよね。
以下、お使いの環境などが判らないので推測ですが。
その場合の選択肢として、

●テキストファイルをデータベースのように使う(フラットファイルと呼ばれます)。多少強引にだがSQLでアクセスする方法もあることはある。しかしスケーラビリティが低く、データ量に限界があるなど、何かと問題も起きる。

●SQLが不要なら、DBMが有効。多くの環境、特にUNIX系ならほとんど、サポートされているはず。ハッシュDBなどと呼ばれることもある。

このDBMにもいくつか種類があり、質問文のリンクでも、「NDBM」というDBMのひとつを使っています。
あくまでも個人的には、DBMを使うならBerkelyDBが一番良いかと思います。
お使いの環境でBerkelyDBが使えるかどうか調べるには、手っ取り早いのは以下のスクリプトを実行してみることです。

-----------------
#!/usr/bin/perl

use DB_File;
print "Content-type: text/plain\n\n";
print "$DB_File::VERSION\n";
-----------------
※先頭行を適宜変更。「print "Content-type~」はシェルでなくブラウザに表示させる場合用。

これでバージョン番号が表示されれば使えます。
DBMはSQLインターフェースを持ちませんが、非常に簡単で手軽に使えます。各レコードをハッシュ変数として扱えます。

リスクとセキュリティについては、データファイルの管理以外には、特に大きな問題はないと思います。もちろんSQLが使えないのは言うまでもないですが。
パフォーマンスなど細かい違いについては、様々あります。

容量に制限はありません(サーバーのディスクなどは別)。また質問にあるメモ帳で管理するテキストファイルではないので、それよりは圧倒的に速いです。

投稿日時 - 2005-07-23 19:01:25

お礼

ご回答ありがとうございます。
さっそくBerkelyDBが使えるのか試してみたいと
思います。
tasekiさんの回答を拝見していると
私はまだまだ足りない部分が多いなと
思い知らされました。
教えていただいたことをしっかりと理解し
作っていきたいと思います。
ありがとうございました。

投稿日時 - 2005-07-24 15:03:33

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

PostgreSQL の場合のさんぷるソースを張っておきます

$db_name="データーベースの名前";
$db_host="データーベースの接続先";
$db_id="データーベースのユーザー名";
$db_pass="データーベースのパスワード";
$table="データーベースのテーブル名";

&decode;#form からのデコード
$id=$in{'id'};
$pass=$in{'pass'};
$data=$in{'data'};

#DBIを使用してPostgreSQLに接続
use DBI;
$dbh = DBI->connect("dbi:Pg:dbname=$db_name;host=$db_host;","$db_id","$db_pass") or die $DBI::errstr;
#追加するなら
$quary="Insert into $table VALUES('$id','$pass','$data')";
$sth=$dbh->prepare("$quary");
$sth->execute();
$sth -> finish();
$dbh->disconnect;

投稿日時 - 2005-07-28 08:41:15

お礼

ご回答ありがとうございます。
PostgreSQLについて勉強不足の
部分があるので、勉強していき
完成していきたいと思います。

ありがとうございました。

投稿日時 - 2005-07-31 22:08:31

ANo.2

リンクされているページをみましたが、Perlでデータベースを作っているのではなく、簡易データベースとつないでいるのだと思います。

perldoc AnyDBM_File

してみたり、「初めてのPerl」p267あたり読んでみることをおすすめします。

投稿日時 - 2005-07-23 15:35:34

お礼

ご回答ありがとうございます。
さっそくご紹介していただいた本を
買いに行きたいと思います。

投稿日時 - 2005-07-23 16:54:32

ANo.1

(1) 作れます。SQLと絡めることもできます。

(2) 重くなるリスク。データの消去のリスク。
データを大量に扱うということに特化しているわけではないので、作り方によっては非常に重くなります。
また、排他制御を自分で組み込まなくてはいけないので、排他制御の組み方によってはデータが消去しやすいものになる場合もあります。

(3)パスワードを暗号化するとか、保存ファイルの場所をルート以下(一般には表示できない場所)にするとか、拡張子を.cgiにする(CGIと認識されてブラウザでは表示できなくなる)などの対策が必要です。
普通に.txtの拡張子で平文で保存した場合、読み取られるリスクが格段にアップします。

(4)1000くらいならば大丈夫。
作り方によっては多くいけますが、5000くらいになるとちょっと厳しいかもしれません。
記録するだけならばいいのですが、整合性のチェックなどをする場合、工夫が必要です。(IDを半角英数として、頭がAならばA.txtに保存するなどのインデックスの考えでやればある程度負荷が軽減します。)

(5)FlashとPerlを連動さえたことがないので分かりません^^;

投稿日時 - 2005-07-23 10:17:20

お礼

ご回答ありがとうございます。
たくさんの情報をいただき、感謝しております。
まだまだ勉強することはたくさんありますが、
どうにか実現していきたいと思います。
がんばりますね!

投稿日時 - 2005-07-23 14:12:41

あなたにオススメの質問