2014-02-23 41 views
1

我們正在處理圖像庫,我們期望有一百萬到四千萬張照片,但我們正在考慮將它們保留在照片文件夾 中,但是可以將一張照片文件夾保留4000萬張照片。如果我直接將它們保存在照片文件夾中而不創建任何子文件夾,是否有任何問題需要根據上傳日期創建文件夾,以便對於任何給定日期,當天上傳的照片將會在當天上傳文件夾。文件夾上的圖像的最大數量

我在創建該結構時沒有任何問題,但從知識角度來看,我想知道如果我們將幾百萬張照片直接保存在一個文件夾中,會出現什麼問題。我看過幾個網站正在做這件事,例如,如果你會看到這個網頁,所有的圖像都在圖像文件夾下。

東西約500萬images.all圖像是有 4132808下例中各個ID下,因此表明images目錄下有超過500萬次folder.is就OK保持那麼多的文件夾,一個目錄下

http://www.listal.com/viewimage/4132808 http://iv1.lisimg.com/image/4132808/600full-the-hobbit%3A-an-unexpected-journey-photo.jpg

+1

4000萬張照片á0.5MB(這不是很多)會下降到大約20TB。你確定你不會達到硬盤限制嗎? –

+0

@IngoBürk是的硬盤是沒有問題 – sachin

+0

好的,只是想指出這一點。但請記住,單個文件夾解決方案如果不將硬盤放入您的機器(這也不能很好地擴展),則不能很好地擴展。 –

回答

2

依賴於文件系統檢查the file system comparison page on Wikipedia進行比較。 然而,你可能希望在一些結構有點像

images/[1st 2 char of some kind of hash/[2nd 2 char of hash]/... 

有了這個,你創建大幅度減少一個文件夾中的文件數易可再現的路徑。 您希望這樣做,因爲無論如何,如果您想要列出文件夾的內容(或任何應用程序需要這樣做),它會導致巨大的性能問題。

你可以在其他網站上看到的只是你如何發佈這些圖像。當然,他們可以從安全的url看起來像,但在你想要以某種方式分割文件的底層結構。

一些計算: 假設您使用文件名的sha256散列來創建路徑。這給你40個字符[0-9a-f]。所以如果你選擇了2個字母的子文件夾,那麼你將在每個級別上有256個文件夾。現在讓我們假設你做了3個級別:ab/cd/ef/1234...png。這是256^3文件夾的含義1600萬。所以,即使你能夠拍好幾十億張圖片。

至於服務的文件,你可以做這樣的事情用Apache + mod_rewrite的:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/images/../../../.* 
RewriteRule ^/images/(..)(..)(..)(.*)$ /images/$1/$2/$3/$4 [L] 

這將重新路由圖像的請求到正確的位置

+0

我可以在一個子文件夾中保留100000個圖像,這樣我就可以在照片文件夾下有4000個子文件夾。 – sachin

+0

我建議加深你的結構,以便在任何特定級別只有幾千或最多幾萬個文件/文件夾 – fejese

2

How many files can I put in a directory?

不要將所有文件放到一個文件夾中,它不會縮放。如果您不想從深層文件夾層次結構開始,請啓動簡單步驟,並將邏輯放置到您在一個類或方法中構建文件夾路徑的位置。這可以在需要時簡單重新排列。

相關問題