• 締切済み

DBIについて教えてください

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

  • CGI
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

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

chie-ko
質問者

お礼

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

関連するQ&A

  • CGI でDBI->connectするとエラー発生

    お世話になります。 CGIでORACLEに接続しようとしたところ、Internal Server Errorが発生し 困っております。 環境: ORACLE:10.2.0 DBI:1.48 DBD:DBD-Oracle1.16 PERL:5.8.0 APACHE:2.2.0 OS:RED HAT LINUX ES 3.0 プログラム上落ちる場所: DBI->connectのところ エラーの発生する傾向: APACHEでCGIを実行した時だけ コマンドライン上で実行するとエラーは発生しない また、CGIでもDBI->connectを外すとエラーは起きない APACHEのエラーログ: install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread- multi/auto/DBD/Oracle/Oracle.so' for module DBD:: Oracle: libnnz10.so: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.0/i386-linux-thread- multi/DynaLoader.pm line 229 今までに試した事: ・環境変数の定義確認(LD_LIBRARY_PATH等、cgiに記述) ・環境変数の取得確認(cgi実行時に画面に表示) ・/etc/ld.so.confに$ORACLE_HOME/libを追記&ldconfig実行 ・httpd.confに環境変数のセットを記述(SetEnv) ・libclntsh.so.10.0が$ORACLE_HOME/lib以下にある事を確認 ・DBDをSTATICオプションをつけてインストール ・/usr/libや/libにOracle.soをコピー ・環境変数LD_RUN_PATH(Oracle.soのパス)を追加 一体どこが悪くて動かないのか、途方にくれております。 原因として何が考えられるか、その場合どう対処すれば良いか、 ご教示いただければ幸いです。 他にも必要な情報や、試すべき事がありましたら遠慮なくどうぞ。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • perlでDBアクセスする際にapache設定

    本日、DBI->CONNECTで返ってこないと質問をしたものです。 色々と調べているうちに、もしかしたらDBアクセスはおわり、その後のCGIが表示できなくなっているかもしれないと思うようになりました。 ORCLE9iがあるあとで、PERL,Apacheをインストールしました。 DBアクセスをしない状況ですと、CGIのプログラムは何の問題も無く、動きます。 ただ、DBアクセスしようとするとエラーもでない状況で、画面に何も出ません。 ApacheのORACLEに関する環境設定が必要なのでしょうか? 環境は、Windows XP      Active Perl 5.8.7.813        DBI 1.602 ,DBD-Oracle 1.17      Apache 2.0.54 どなたか、わかる方いらっしゃいますでしょうか? この件で2日悩んでおります。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • DBIによるまとめて実行

    現在、PerlのDBIを使用し、MySQLの処理をするバッチ プログラムを開発しております。 データが1万件ほどあるのですが、1万データに対して、 1日1回ステータス等の反映処理を行わなければいけま せん。 これを現在ではfetchrowを使用し1万データを回して 各種updateをかけているのですが、非常に時間がかかるため、 何かまとめてupdateがかけられる方法がないかと質問さ せていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • perlのdbi-connect処理のエラー

    active perlでdbi-connect処理から戻ってきません。教えてください。 以下のテスト的なプログラムで試しました。 Xには、数字が入ります。(会社のファイルサーバーになります) DBI->connectから戻ってきていないようです。(hhhhhhhhが表示されません) ちなみにDBI->connectをコメントにすれば表示されます。 申し訳ありませんが、どなたかご存知の方いらっしゃらないでしょうか? エラーがかえってこないと、何が悪いかわかりません。 困っています、宜しくお願いします。 ちなみにPerlは、Ver. 5.8.7.813でdbi,dbd-oracleは、昨日ppmでダウンロードしました。 # DBへコネクトする my $datasource = 'dbi:oracle:usrDB:xxx.xxx.x.xx:8080' ; my $usr = 'usrname' ; my $pass = 'usepass' ; my $dbh = DBI->connect($datasource,$usr,$pass) ; print "hhhhhhhhhhhh\n" ; if( ! $dbh ){ print "gggggggggggg\n" ; } $dbh->disconnect();

    • ベストアンサー
    • Perl
  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • perlからDBIを使用したpostgresへの接続でエラー

    perlからDBIを使用して、データベースにアクセスしたいと思っていますが、connectで下記のようなエラーが出力され接続できません。 ↓↓↓↓↓↓apacheのエラーログ↓↓↓↓↓↓↓ DBI connect('dbname=[mscdb]','[postgres]',...) failed: FATAL: database "[mscdb]" does not exist at /web/member/cgi-bin/dbitest.pl line 8 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ mscdbがないとエラーが出力されているように思いますが、mscdbは存在します。どういった原因が考えられるでしょうか? プログラムには以下のように記述しています。 #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=[mscdb]'; use constant DBUSER => '[postgres]'; use constant DBPASS => '[××××]'; DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; 環境は以下の通りです。    perl v5.8.2    postgres v8.1.2 vine linux dbd v1.49

    • ベストアンサー
    • Perl
  • perlのDBIからmysqlにINSERTINTOをやっても追加されない。help!!

    助けてください、お願いします。 phpadminで管理しているmysqlのDBへ、perlのDBIモジュールを使ってレコードの追加(INSERTINTO)をやっても、phpadminでDBをみてみると追加されていません。 DBIを組み込んだCGIを実行してみてもエラーはでないのですが、DBへの追加ができていません。 色々とやってみたのですが、どうしても追加ができません。考えられる要因があれば教えてください、お願いします。ソースは以下の通りです。 use DBI; $dbh=DBI->connect('DBI:mysql:データベース名:サーバホスト','ユーザ名','パスワード') or die $DBI::errstr; $sthandler = $dbh->prepare("INSERT INTO `table名` (`姓`, `名`, `メールアドレス`, `年齢`) VALUES ('名字', '名前', 'mailaddress', '0')"); $sthandler->execute; $sthandler->finish(); $dbh->commit; $dbh->rollback; $dbh->disconnect; 本当に困っています。どうかお助けください。

    • ベストアンサー
    • MySQL
  • perlプログラムから定期的にデータベースの調査をする方法

    perlからSQL文を発行してoracleのテーブル毎のレコード件数を 調査して結果はテキストファイルに出すというプログラムを 考えました。 perlのプログラムを定期的に実行するのに windowsのタイムスケジューラーを使って行おう と思ったのですが、 windowsの時間がずれていると決まった時間に実行できない のではないか、というところで悩んでいます。 宜しければ、何か解決の為のヒントをいただけないでしょうか。

    • ベストアンサー
    • Perl
  • perlを使ってレコード件数を取り出してみると、すごい数が・・・。

    perlのDBIモジュールを使って、mysqlのレコード件数を表示させてみると、すごい数が表示されました。ソースは以下の通りです。 use DBI; $dbh=DBI->connect("DBI:mysql:データベース名:サーバ名", "ユーザ名", "パスワード") || die $DBI::errstr; if(!$dbh){ print "エラーです。入力を確認してください。"; exit; }else{ #接続成功 # SELECT文発行 $sth=$dbh->prepare("SELECT sei, mei, mail FROM table"); #実行 $sth->execute; $num_rows = $sth->rows; print "該当 $num_rows, 件\n"; # 開放 $sth->finish; # AUTO COMMITがOFFの場合はCOMMITが必要 $dbh->commit; # 切断 $dbh->disconnect; } 実行すると該当 4294967294, 件 とブラウザに表示されました。僕はレンタルサーバを使っているわけですが、僕のデータベースにはレコードは3件しかないのです。これはレンタルサーバのデータベースすべての件数が表示されているのでしょうか? なんだかSQLを実行するのが怖いので、考えられる原因を教えてください。よろしくお願いします。 プログラムを初めてまだ、数ヶ月しか経ってない初心者なので、みなさんの知恵を貸していただけると幸いです。

    • ベストアンサー
    • MySQL
  • PerlからのCSV出力

    Perl初心者です。 PerlでOracleに接続し、結果をCSVを出力したいのですが 下記プログラムだとなにも出力されません。 Oracle10g OS:Linux *** #!/user/bin/perl # # # DBI モジュールの読み込み use DBI; #接続 my $hDb = DBI->connect("dbi:Oracle:dbname", "user/pass") or die "CONNECT ERROR $DBI::errstr"; #SELECT # $hSt = $hDb->prepare("SELECT ID,NAME FROM MASTER"); open(OUT, ">data.dat"); #実行 $nRes = $hSt->execute; #データの取得 while($raRes = $hSt->fetchrow_arrayref) { print OUT join(",", @$raRes), "\n"; } # ファイルクローズ close(OUT); $hSt->finish; $hDb->disconnect;

専門家に質問してみよう