2012-02-17 87 views
4

我正在爲網站編寫一個基本畫廊,在任何時候都有大約40,000名在線人員。用戶將能夠創建畫廊和上傳圖像。什麼是最有效的方式來存儲500.000圖像?

我的問題是,我應該爲每個圖庫製作一個單獨的文件夾,並將圖像放入其中,或者製作一個文件夾並將所有圖像放入其中,但是將數據庫中每個圖像的gallery_id保留下來?或者,我應該爲每個用戶製作一個目錄,然後爲其中的圖庫名稱添加另一個目錄?

你會如何做到這一點?

Ps。我需要它儘可能輕。

+1

什麼操作系統和文件系統? – 2012-02-17 01:28:00

+0

Linux。 (Cent OS)我不知道文件系統,因爲我沒有訪問他們的服務器。 – Aristona 2012-02-17 01:31:11

+1

我會考慮使用亞馬遜S3和他們的API,不存儲文件夾,只使用數據庫中的關係表來跟蹤它們。 – 2012-02-17 01:33:01

回答

8

我會通過ID 它們存儲和我將它們分割成文件夾(文件系統相關的,有些不夾中的文件有很多文件執行好),再加上它更容易找到他們,如果你有手動看點東西

給每個文件一個id,然後使用文件名的前3位數字,將它們分成文件夾。 (你可以在100000填零的ID啓動自動增長計數器,所以至少有3個級別

/photos/1/0/3/103456.jpg 
/photos/9/4/1/941000.jpg 
/photos/0/0/0/000001.jpg 

您可以照片到用戶/庫/等的關係存儲在數據庫中

或者,如果你想看到的大男孩怎麼做呢

Needle in a haystack: efficient storage of billions of photos

+1

+1這是一個很好的答案,但我會建議使用散列函數,就像我在我的答案中所說的那樣,以確保ID均勻分佈,並且不會在一個文件夾中包含太多文件 – hackartist 2012-02-17 01:36:26

+1

極好的建議。將其分開,可以在將來的日期進行分區。例如,第一個數字可以是它所在的服務器,而不是目錄。我管理一個擁有超過1000萬圖片的網站,我們使用類似的設置。 – 2012-02-17 01:37:52

+0

非常感謝你,答覆你的回答。 – Aristona 2012-02-18 03:19:03

3

典型的Web服務器不希望你有比在單個文件夾幾千圖片更多(我最近不得不面對7萬導致supe的圖像慢速讀取和排序,所以相信我)如果你認爲你將有成千上萬的圖像,那麼肯定不是一個文件夾。我建議最好的解決方案是將亞馬遜的S3連接到他們的CDN CloudFront,但如果這樣做不現實,您仍然可以在自己的服務器上執行幾件事情。

爲每個畫廊建立一個單獨的文件夾,就像你建議的,只有當你知道畫廊有多大可以獲得的一些界限並且有多少畫廊將被創建的想法。 (這是我現在建議你的具體問題)

把圖像名稱通過哈希函數,然後使用散列的前1-3個字符命名文件夾放入圖像。哈希確保圖像在文件夾中大致相同,並且您可以決定需要多少個文件夾。

無論如何,在實際路徑中有什麼畫廊和圖像ID的信息可能對您在代碼中以及每當人類需要在服務器上搜尋錯誤時都有用。我可能會根據圖庫ID命名這些文件夾,並確保沒有任何圖庫中有超過幾千幅圖像。

0

我存儲我的是這樣的:

images/userid/photoid 

這樣我可以快速隔離用戶的圖像,如果我需要在以後的日子來檢查什麼。看起來更有組織性,而不是將它們都放在一箇中央目錄中。

相關問題