プロが教える店舗&オフィスのセキュリティ対策術

Webシステムのセッションデータをファイルで持とうと思うのですが、
1ディレクトリに作れる最大ファイル数に上限はありますか?

無限という人もいれば、数千個くらいで辞めておいた方がいいという人も
いますが、どちらなんでしょう?

CentOS 5です。
(すいません。ファイルシステムは不明です。)

A 回答 (3件)

OS上の制約は#1さんの回答の通り事実上無限ですが、ディレクトリ中のファイル検索は、データベースじゃなくて、ディレクトリファイルをシーケンシャルに読み込んでの検索なので、既存ファイルのオープン処理はファイル数が増えるだけ遅くなります。


そういった意味では数千個くらいというのは目安でしょう。具体的な時間は実環境で実測するしかないです。
    • good
    • 1
この回答へのお礼

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

> ディレクトリファイルをシーケンシャルに読み込んでの検索
勉強になりました。つまり、インデックスがないということですね?

> 既存ファイルのオープン処理はファイル数が増えるだけ遅くなります。
セッションはDBに格納する方向で検討してみます。

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

お礼日時:2008/05/13 21:51

ext2 や ext3 はシーケンシャルに見ていきますが, その他のファイルシステムはほとんどもっと賢い方法を使ってると思います.

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考になりました。

セッションデータの保持が理由でしたので、DBに任せようと思います。

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

お礼日時:2008/05/14 23:45

カーネル付属文書にext2の説明がありました。


以下引用です。
============================================
現行の単方向リンクのリストによるディレクトリの実装で、
一つのディレクトリ内のファイル数は、
実運用上約 10-15k 個が上限になります。
この制限はこのような大きなディレクトリ内のファイルを作成および削除 (さらに検索) する時のパフォーマンスの問題のためです。
ディレクトリインデックスのハッシング (開発中) を使用すれば、
パフォーマンスの問題なしに一つのディレクトリに 100k-1M+ 個のファイルが置けます (この時には RAM サイズが問題になります)。

一つのディレクトリ内のファイルの (無意味な) 絶対的な上限 (ファイルサイズによって課されるもので、
現実的な制限は明白にはるかに少ない) は 130兆ファイル以上です。
ユニークなディレクトリエントリを構築するための名前は 4 文字では足りないので、
8 文字のファイル名にしなければならないということを考慮しなければもっと多くできますが、
考慮してすらユニークなファイル名を使い果たしてしまいそうです。

参考URL:http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6 …
    • good
    • 0
この回答へのお礼

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

> 現行の単方向リンクのリストによるディレクトリの実装で、
> 一つのディレクトリ内のファイル数は、
> 実運用上約 10-15k 個が上限になります。
やっぱり少ないんですね。

> ディレクトリインデックスのハッシング (開発中) を使用すれば、
こちらを検討するよりかは、ファイルでなくDBに格納する方を
考えて見ます。

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

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

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