お世話になります。
Perlと、DBIを使って、オラクルに接続したときに
実用的に使える(ストレス少なめで)レコード件数は何件ぐらいでしょうか?
☆データ件数100万件
☆更新は毎日
☆検索などのプログラム
のEコマースのページを作ろうと思っています。
JAVAは使用したことがないので、できればCGIを使えたらと考えています。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

その質問は、Oracleの性能の問題だと思いますよ。


DBのスキーマをどう設計するとか、インデックスをどうするとか、
DBサーバのリソースとか。
Oracleは使ったことがないのでその性能に関することはお答えし
兼ねますが、全件検索しなければいけない、といったどうしても
時間の掛かることを避けてうまく設計すれば、数100万でも問題
ないのではないか、と思います。

DBIはCGIプログラムとDBとのただのインタフェースです。まとめて
検索結果すべて取り出すような無茶はする必要がありません。検索
条件を送信し、結果を1レコードずつfetchすることができますので、
Perl側のメモリについても、まともな設計なら気にすることは無い
でしょう。
CGIも、凝ったことをやればそのページ作成に時間が掛かるということも
あるかもしれませんが、DBを使うのでしたらおそらく複雑なデータ
の扱いはDBにお任せして、CGIではフォーム入力内容を解析したり
検索した中身を右から左に表にして出す程度のことになるでしょうし、
あまり気にならないと思います。

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
CGIはプログラムが毎回実行されるので、重くなると思ったのですが、
プログラムの中身次第ということなんですね~♪
とりあえず挑戦してみようと思います♪
大変参考になりました!

お礼日時:2001/05/21 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPerlのCGIでフォームのテキスト配列をPerlで取得するには?

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが配列になった場合、
#<input type="text" name ="namae">
#<input type="text" name ="namae">
#<input type="text" name ="namae">
# のような場合、3件取得する場合

exit;

__END__

フォームで通常は同じ名前のデータを取得することは無いのですが
表計算のように同じ名前の場合、データの取り出し方がわかりません。
以下、通常の1件の場合のソースです。


#!/usr/bin/perl

$| = 1;

use strict;
our %in;

use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
require 'jcode.pl';
require 'cgi-lib.pl';
#

#-----分岐-----

&ReadParse;

# 配列でない場合
my $namae = $in{'namae'}
print "$namaeで名前が1件表示される";
# これをフォームで namaeが...続きを読む

Aベストアンサー

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
------------------------------------------------

例) CGI.pmを使う場合 --------------------------------
use CGI;

$query = new CGI; # 新しいCGIオブジェクトの作成
@hoge = $query->param('hoge'); # パラメータhogeの内容の受け取り
------------------------------------------------

参考URL:http://www.futomi.com/lecture/form/cgilib.html#3.2,http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_THE_VAL

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。

cgi-lib.pl :
 対象のパラメータが収納された変数を \0 を区切り文字として分割する。

CGI.pm :
 リストコンテキストで値を受け取る。


例) cgi-lib.plを使う場合 ----------------------------
require "cgi-lib.pl";

&ReadParth; # デコード処理
@hoge = split(/\0/, $in{hoge}); # \0 で分割
---------------------------------------...続きを読む

QPerlでDBIを使いますが、結果セットをフィールド名でアクセスするには?

OSはWindowsでAccess2002のデータベースをODBC経由でDBIを用いて、Perlからアクセスします。
以下のように、結果セットをフィールド名でアクセスしたいです。
可能でしょうか?


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

use DBI;

# create the DSN connection
$dsn = "dbi:odbc:test";
$dbh = DBI->connect($dsn) or die "接続エラー";

$query = "select * from goods;";

# execute the query
$sth = $dbh->prepare($query);
$sth->execute();

print "no name price\n";
print "--------------------------------------\n";
while(@item = $sth-> fetchrow) {
#print "@item[0] @item[1] @item[2]"; #----- 通常はこうだが、
print "$item{'goods_name'} $item{'goods_price'} $item{'auto_no'}"; #----こんな感じで利用したい。
print ("\n");
}

# disconnect
$sth->finish();
$dbh->disconnect();

exit;

__END__

OSはWindowsでAccess2002のデータベースをODBC経由でDBIを用いて、Perlからアクセスします。
以下のように、結果セットをフィールド名でアクセスしたいです。
可能でしょうか?


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

use DBI;

# create the DSN connection
$dsn = "dbi:odbc:test";
$dbh = DBI->connect($dsn) or die "接続エラー";

$query = "select * from goods;";

# execute the query
$sth = $dbh->prepare($query);
$sth->execute();

print "no name price\n";
print "--------...続きを読む

Aベストアンサー

my @names{@{$sth->{'NAME_lc'}}} = (0..scalar @{$sth->{'NAME_lc'}});
while (my $aref = $sth->fetchrow_arrayref ()) {
$aref->[$names{'hogehoge'}],$aref->[$names{'hugahuga'}];
}
とか
while (my $href = $sth->fetchrow_hashref ()) {
$href->{'hogehoge'},$href->{'hugahuga'};
}
見たいな感じでアクセスします。

詳しくは参考URLをご覧ください。
#サンプルが少なくてちょっと分かりにくいですが。

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm

Qファイル(件数不定)の中身を変更するcgi

お世話になります。
英字で名前と点数を持ったファイルがあります。

yamada<>100<>
yoshida<>96<>
ueda<>76<>
sakurai<>77<>
のような。

保有件数は分かりません。

この英字を漢字に直すcgiを
考えたいのですが。

例えば
yamada()100
yoshida()96
ueda()76
のように表示して、()(input-boxのイメージです)に漢字を入れさせる。

どのように考えればよいのでしょうか。

サンプルを表示して貰えると有難いです。
宜しくお願いします。

Aベストアンサー

仕様の詳細が書かれていないので、不明な点は想像で書いてみました。
新規ファイルを作成し、以下のように末尾に漢字名が入るようにしました。

yamada<>100<>山田
yoshida<>96<>吉田
ueda<>76<>上田
sakurai<>77<>桜井

以下、そのコードです。
ファイル名は、質問者さんの環境に合わせて適宜変えてください。

use CGI;
use Fcntl qw(:flock);

my $org_file = 'score.txt'; # オリジナルファイル(漢字名なし)
my $new_file = 'new_score.txt'; # 新規作成ファイル(末尾に漢字名あり)

my @students;

open my $fh, -f $new_file ? $new_file : $org_file or die $!;
flock $fh, LOCK_SH;

while ( my $line = <$fh> ) {
chomp $line;

my %data;
@data{ qw(name score kanji) } = split /<>/, $line, -1;

push @students, \%data;
}

close $fh;

my @kanji_names = CGI->new->param('kanji');
if (@kanji_names) {
open my $out, '>', $new_file or die $!;
flock $out, LOCK_EX;

for my $i ( 0..$#students ) {
print {$out} "$students[$i]{name}<>$students[$i]{score}<>$kanji_names[$i]\n";
$students[$i]{kanji} = $kanji_names[$i];
}

close $out;
}

print "Content-Type: text/html\n\n";
print qq{<form method="post"><p>\n};

for my $student (@students) {
print qq{$student->{name}<input type="text" name="kanji" value="$student->{kanji}">$student->{score}<br>\n};
}

print q{<input type="submit" value="送信"></p></form>};

仕様の詳細が書かれていないので、不明な点は想像で書いてみました。
新規ファイルを作成し、以下のように末尾に漢字名が入るようにしました。

yamada<>100<>山田
yoshida<>96<>吉田
ueda<>76<>上田
sakurai<>77<>桜井

以下、そのコードです。
ファイル名は、質問者さんの環境に合わせて適宜変えてください。

use CGI;
use Fcntl qw(:flock);

my $org_file = 'score.txt'; # オリジナルファイル(漢字名なし)
my $new_file = 'new_score.txt'; # 新規作成ファイル(末尾に漢字名あり)

my ...続きを読む

Qデータ件数が多いことによってログが消えたりしますか?

1500件ほどのログデータがあります。(.txt)
このログデータに追加をしたり、修正を加えています。
(cgiを使って)

最近気づいたのですが、以前入力したはずのものが消えていたりするんです。
でも全部が消えるわけではなく、一部が消えるので、プログラムのミスではなさそうなんですが。

このログデータ+cgiは社内のサーバーにアップデートして使用しています。
以前はWeb用のサーバーにおいてあり、使用していましたが、データが消えた?というようなことはなかったのですが、
社内の方においてからそのようなことがおきているのではないかと思うようになりました。

社内の人はそこへは入らない(入れない)ので、もし攻撃を受けているとしたら外部からなのかな?と思い、ログをコピーし、
ローカルに保存しておき、数日たってから中身を照合しようとは思っています。

ですが、あんまりその可能性は考えられないので、それ以外に理由があるのかな?と思ってます。
件数が多いことでログデータが勝手に削除されたりすることはあるのでしょうか?

※cgiはperlでかいています。

1500件ほどのログデータがあります。(.txt)
このログデータに追加をしたり、修正を加えています。
(cgiを使って)

最近気づいたのですが、以前入力したはずのものが消えていたりするんです。
でも全部が消えるわけではなく、一部が消えるので、プログラムのミスではなさそうなんですが。

このログデータ+cgiは社内のサーバーにアップデートして使用しています。
以前はWeb用のサーバーにおいてあり、使用していましたが、データが消えた?というようなことはなかったのですが、
社内の方においてか...続きを読む

Aベストアンサー

基本的にロック処理は読み込み時に行なうものではなく書き込み時に行なうものです。

今のままだとロックの意味がありません。

それにflock関数は全てのサーバで使えるものではありません。お使いのサーバが使えるか確認した方がいいでしょう。

QPerlとPHP・・・・

初歩的な質問で申し訳ないのですが
これからプログラムをはじめようとおもっているのですがPerlとPHPどっちから手をつけるべきだと思われますか?最終的にはmySQLなどでデータベースを構築したいと思っています・・・

Aベストアンサー

実際、それほどの差があるものでは無いですね。

・ライブラリに関しては、perl の方が一日の長があります。
XML 関連のライブリや、DBI などのデータベースライブラリ、グラフィック関連のライブラリ
その数は、眩暈がします。

参考URL:http://http://search.cpan.org/

・環境が枯れているというのであれば、perl です。使われたいる実績も長いです。

・使いやすさであれば php です、html にコードを入れることができて、かなり簡単です。
(しかし、お手軽な分、分かりにくくもなりやすいです。)

・実行速度は、mod_perlを使うと、perl の方が速いかと思います。
(mod_perl は、php のようにperl を使うことができるapache のモジュールです。)

・perl は、非常に短いコードを書くために様々な省略ができますが、非常に分かり難いコードを書きやすくもあります。

・テキストの操作は、perl の方が楽に感じます。

自分で、環境を作るのであれば、php の方が楽かな。

参考URL:http://y-kit.jp/saba/xp/phpsetup.htm

実際、それほどの差があるものでは無いですね。

・ライブラリに関しては、perl の方が一日の長があります。
XML 関連のライブリや、DBI などのデータベースライブラリ、グラフィック関連のライブラリ
その数は、眩暈がします。

参考URL:http://http://search.cpan.org/

・環境が枯れているというのであれば、perl です。使われたいる実績も長いです。

・使いやすさであれば php です、html にコードを入れることができて、かなり簡単です。
(しかし、お手軽な分、分かりにくくもなりやす...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報