CGI-BBS > データベース > 簡易データベース > データをなんとか軽くするために


カレッヂ
カレッヂ


質問者 むす  投稿日 10/10(水) 16:54:22
簡易データベースにおいて、登録件数が多いために動作が重くなってきました。
そこで、データベースを軽くするために登録内容を英数字などに置き換えれないかと
思い、試行錯誤しています。

サンプルを例にすれば、
都道府県の所に
北海道
青森県
岩手県
・・・
と入っていますが、これをCSVファイル上では
北海道を>01
青森県を>02
岩手県を>03
・・・
と数字に置きかえ、CGIが検索結果を出力するときに再度
01を>北海道
02を>青森県
03を>岩手県
・・・
と置きかえて表示するようにできないものでしょうか?

これが出来れば、それまで1項目につき6バイト〜使用していた
ところを1〜2バイトで済ませられると考えたわけです。

できるだけ自力で出来る範囲は編集しているのですが、ここまで
くると自分の力ではサッパリわからず、どなたか教えていただければ
幸いです。他力本願で申し訳ありませんが、よろしくお願い致します。
回答者 らいらい  [削除]  投稿日 10/14(日) 15:40:33
簡易データベースのソースを詳しく見ていないので
正確なことは言えませんが、むすさんの質問のようなことは
以下のようにすればいいと思います。

フォームからの入力(登録、および検索)を、
<select name="PREF">
   <option value="1">北海道
   <option value="2">青森県
   <option value="3">岩手県
(以下略)
として、CSVに書き込むルーチンの変更はしない。
そうすると、ファイルには数字で情報が記入されます。

読み出すときに、ちょっとした工夫をして表示すれば大丈夫です。
CGIのファイルのメインルーチンより前のほうで
@PREF_ARRAY = ('北海道','青森県','岩手県',・・<省略>・・,'沖縄県');
として配列を作成します。

画面に表示するときに、$PREF_ARRAY[$PREF] としてやれば、
うまく表示されるはずです。

また、過去のデータをそのままにしておきたい場合はもう一工夫必要です。
(北海道、青森県、という文字列データと1、2などの数字データが混在する場合)
# 都道府県(一致)
if ($FORM{'PREF'} ne 'all') {
  if ($PREF eq $FORM{'PREF'}) { ; } else { next; }
}
の部分を、以下のように変更
# 都道府県(一致)
if ($FORM{'PREF'} ne 'all') {
  if (($PREF eq $PREF_ARRAY[$FORM{'PREF'}]) || ($PREF eq $FORM{'PREF'})) { ; } else { next; }
}

こんな感じでどうでしょうか。
質問者 むす  [削除]  投稿日 10/16(火) 09:20:51
ありがとうございます。ちょっと時間がかかるかもしれませんが、
やってみてまたお返事させていただきます!
質問者 むす  [削除]  投稿日 10/17(水) 18:01:50
らいらい様、本当にありがとうございました。
おかげでデータ量を1/3程度に押さえることが出来ました。
検索も幾分か動作が早くなり、大満足です。
重ね重ね、ありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技