WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:リンク集の作成法

0:[投稿] atusi [2002/04/26 23:48 ][環境:WIN+IE UNIX系+Perl]

今Perlでリンク集を作成しているのですが、

egroupsで共有フォルダという項目がありまして、
http://www.egroups.co.jp/

ここで色々とフォルダを作成して、その下層にフォルダを
作成して、フォルダ毎にリンクだったり情報を格納できる、
とシステムがありますが、

これはどのようにして実現されているのでしょうか?

また、様々な考えかたと申しましょうか、実現の仕方が
あると思うのですが、一番スマートな解決方法をご存知の方は
ぜひご提案願いたく存じます。

私が今考えているのは、

0_general
1_html
2_program

のような形で数値をジャンルの前に割り当てて、

その下層フォルダを表す時は

2_0_program_perl
2_1_program_C++

のような形でフォルダを実際に、
mkdir
コマンドを通じて作成していこうというものなのですが、
いかがでしょうか?

何か他に必要な情報があれば教えてください。

なお、リンクの件数は500件くらいを想定していますが、
もし件数が多くなってくるとやはり
PHP + PostgreSQL
などで処理、でしょうか?


1:[回答] B-Cus [2002/04/27 02:11 ]

> フォルダを実際に、mkdir コマンドを通じて作成していこうというものなのですが、

ファイル+ディレクトリというシステムは高機能で柔軟性もあり、
充分検討する価値はあると思います。

メリットをあげると、
 ・最終更新時刻はタイムスタンプで保持できる
 ・フォルダ間の移動が簡単
 ・シンボリックリンクで別名も作成できる
 ・リンクの内容はファイル内に好きな形で保持すればよい
 ・OS が提供する機能なので、壊れにくい
 ・アクセスが簡単 (opendir, readdir, open)
 ・親子関係が明確なため、親ディレクトリをリネームすれば
  子のファイルには何もしなくてよい。
 ・tar で固めればバックアップ完了
などなど。

一方、デメリットも存在します。
 ・アクセスが簡単なため、ファイル操作をミスするとデータが壊れる
 ・複数へのリンクが張れない
 ・ファイルの順番を保持できない (2_1_** などと自分でナンバリング
  しないといけない。順番の並び変えが面倒)
 ・1 ファイルにつき、最低 512 バイト (ブロックサイズ) を消費する
 ・ファイル名に好きな名前を付けづらい (例えば `/' を含めることができない)
 ・ディレクトリをなめるような処理はそれなりに重い。全ての一覧をリスト
  アップしたり、ある下層フォルダを検索するのはそこそこ時間がかかる。
 ・親ディレクトリをリネームすれば、その結果 子のフルパスが変わってしまう。
  子を特定するのが難しくなる。

というわけで、利点・欠点を考えると、
 ・リネーム
 ・移動
 ・リストアップ
 ・検索
 ・順序
 ・名前
 ・容量
 ・速度
 ・リンク・別名
 ・バックアップ
などの機能がだんだん見えてきます。

で、これらの機能について、自分はどれを重要視しているのかを考えては
どうでしょうか。例えば、リンクの参照数によって表示順序を変えるならば、
「順序を保持できない」という欠点はかなり致命的です。しかし、500 件
程度ならば問題ないという見方もできます。

で、比較対象の RDB だとどの点がまさっていて、どの点が劣っているか。
その他の方法、例えば XML ではどうか…などを検討してみてはいかがでしょうか。


2:[完了] atusi [2002/04/27 12:55 ]

とてもご丁寧なご教授を頂き、感謝に堪えません。

とりあえずは、ディレクトリを作成していくことにいたしました。ありがとうございました。
本当に助かりました。

これからもどうぞよろしくお願いいたします。


3:[質問] atusi [2002/05/01 12:37 ]

> ・親ディレクトリをリネームすれば、その結果 子のフルパスが変わってしまう。
>   子を特定するのが難しくなる。

何度も申し訳ございません。

ディレクトリのリネームについてお尋ねしたいのですが、
rename関数はファイルに対して行うものですよね?

ディレクトリのリネームは、何か決まった関数だったり
アルゴリズムのようなものがあるのでしょうか?

良いやり方がありましたら、教えて頂けませんでしょうか?


4:[回答] andi [2002/05/01 13:44 ]

Perl5で次のようなやり方が出来ると思います。

use File::Copy;
move('リネーム前ディレクトリ名','リネーム後ディレクトリ名');


5:[回答] ふじ [URL] [2002/05/01 15:28 ]

> rename関数はファイルに対して行うものですよね?
ディレクトリにも使えますよ。


6:[回答] atusi [2002/05/01 18:42 ]

すいません、
お恥ずかしい事ながら die 文で二重引用符を
忘れており、エラーになってしまいました。

本当にお騒がせしました、すいません。

rename("$originaldir","$newdir") || die ("can't rename directory$!\n");

そしてどうもありがとうございました。
モジュールまで教えていただき、非常に助かりました。


回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World