2012-03-25 10 views
1

イムこの質問はそうここに私のバージョンが行く、倍の千を依頼されていることを確認...アップロード画像均等にディレクトリ構造に

私は、画像をアップロードフォームを持っている... すべての画像は、一意のIDが含まれています。私は私のUNID IDを生成するには、次の機能を使用します。

function generateUnid($key) { 
    $name = $_FILES[$key]['name']; //get image name from global variable $_FILES 
    $ext = pathinfo($name, PATHINFO_EXTENSION); //get image extension 
    $prefix = 'fc'; //prefix for unid 

    do { 
     $unid = uniqid($prefix, true); //generate a unid 
     $filename = $unid . '.' . $ext; //replace image name with unid 
     $path = PATH_UPLOAD_ARTWORK . $filename; // image path 
    } while (file_exists($path)); // check if the image name exists 

    return $filename; 
} 

は、戻り値のサンプルです:

fc4e7801523a04e6.06876802.jpg 

これまでのところは良いです。さて、私は私の画像のためのディレクトリ構造のいくつかの並べ替えを作成したい。似たような何か:私はおそらく正しいディレクトリに画像を提出するための私の固有のIDの最後の2つの整数を得ることができ

0 
    0 
    1 
    2 
     fc4e7801523a04e6.06876802.jpg 
     ... 
    3 
    ... 
1 
    0 
    1 
    2 
    3 
    ... 
2 
    0 
    1 
    ... 

。しかし、私はそれが正しい戦略であるかどうかわからないようだ... にはどうすれば画像がフォルダに均等に提出されていることを確認することができます。私は、私はそれを私のUNIQの最後の2つの数値を抽出することにより、正しい道をやっている

... 12枚の000の画像と1枚の500画像をひとつのフォルダが含まれている一つのフォルダと私の自己を見つけることしたくないですか?イメージを均等に提出するためのより良い方法はありますか?

おかげ

+0

あなたは、このような任意のバケットにファイルを置きたい私はなぜだろうか?非常に多数のファイルを予測し、同じディレクトリに多数のファイルが格納されている場合にOSのパフォーマンスの問題が発生するのを避けるためですか?なぜ、日付やユーザー名などのように保存しないのですか? – aaaidan

+0

正確に!私は事前に予測して計画したい。私はこのメソッドを多くの場合に使用するのを見てきました。私は写真が非常に多く、後で性能問題に遭遇しないという事実が好きです。一つだけのアップロード画像を - 私、そして私は数日または数ヶ月のための束一日と何をアップロードすることができ...だから私は、名前のOの日付を使用can't ... – Marco

+1

そう...あなたが潜在的にアップロードすることができることを考えますあなたのOSのファイルシステムで快適に処理できるよりも、1日で多くのファイルがありますか? – aaaidan

答えて

1

は、一意のIDが、私はそれだと思うこれは、(擬似)ランダム一様であると仮定すると、この戦略は、私が考えるかなりうまく動作します。必然的に、平均よりも多く、または多くの数が少なく、normal distributionで予測されるいくつかのフォルダがあります。

画像を「ビニングする」というやや優れた方法は、選択した数字に何らかのパターンがある場合に、最後の2桁を使用するのではなく、uidのモジュロ(%)を使用することです。

私のアドバイスはそれをやってみると、それはあなたのために働くかを確認することです。理想的には、あなたは、ディレクトリ構造内のファイルの配布は、あなたの目的のために適切であるかどうかを評価することができた後に数千倍のアルゴリズム数百人を呼び出し、「テストハーネス」を作成することができます。

+0

私はあなたのアドバイスを使用し、いくつかのテストを行った。驚いたことに、それはうまくいった!私は15万000のファイルをアップロードし、すべてのファイルはフォルダ内で均等にbinningされました。 – Marco

+0

Cool!そして、最大数のファイルを持つフォルダはあなたの好みにあまりにも多くありませんか?重要なことに、フォルダーが3,000億のファイルを取得することを100%保証することはできません。 (あなたは99.999999999999999%にしかなりません) 各フォルダのファイル数を数えている間に、ヒストグラムにデータをプロットすることもできます。 Xファイルを持ち、それをプロットするフォルダの数を数えます(X軸はX、Y軸はカウント)。 1500を中心にかなりベルグラフを取得する必要があります(150kファイル用に100個のフォルダがある場合)。 – aaaidan

関連する問題