2011年11月28日月曜日

大量のファイルを複数のディレクトリに分散して格納する方法

最近はハードディスクもテラバイトクラスの容量なので、大量のファイルを作ることができる。

以前、linux上でPHPを使いウェブサイトのプログラムを書いた。
それは、使っているとファイルがどんどん増えてくるシステムだ。
linuxの場合、ひとつのディレクトリに作れるファイルは最大3万とか、そういう値だったと思う。
いずれにしてもひとつのディレクトリに何万もファイルがあれば、いい加減多すぎるし、何かの時に問題が起こりかねない。
そこで、増えてくるファイルを複数のディレクトリに分散する形をとることを思いつく。

最初はディレクトリ「00001」にファイルを入れていく。1万個まで達したら、次は「00002」というディレクトリを作ってそちらに入れる。というような手法だ。
これでは、ディレクトリにいくつファイルが入っているか、どこまでディレクトリを作ったか等の管理が必要になる。例えばそのカウンターをデータベースに記録しておくといったようにだ。その場合、ウェブシステムなら連番管理の排他制御も考えなければならないかもしれない。

少し面倒なので別の方法を考えた
まず年でディレクトリを作り、その下に月日でディレクトリを作る。実際のファイルはその月日ディレクトリの下に入れる。一日に数千個程度までのファイル数であれば、これで対処できる。まだ無理なら時刻でサブディレクトリを作っても良い。
ファイル名は時刻やuniqid()を使う。

しかしながら、このことは今のシステムを作ってから思いついた。
よく考えず、別の方法で作ってしまったのだ。
たぶん大丈夫だと思うが、自分の納得のいかない状態になっているのが、ちょっと気分が悪い。

1 件のコメント:

匿名 さんのコメント...

2chまとめアンテナを運営していて、RSSから取得したサムネイルをどうやって管理しようかと悩んでいました。

./thumbnail/YYYY/MM/DD

この方式でやってみたいと思います。
参考になりました。