我正在開發一個允許用戶上傳文件(圖片和其他文件)的網站。我在這方面沒有任何經驗,希望能夠通過正確的方式來存儲和索引這些文件。在網絡服務器上存儲用戶上傳的文件
雖然我想有一個很好地擴展到大容量數據的架構,我目前沒有擔心極高(facebook-,谷歌規模的)卷。
我在
/files/{username}/
思維存儲在文件系統中的文件,然後有一個數據庫uploads
每個用戶都有自己的表,每個文件的他已經上傳的文件名(因此URL)的(以及我可能想要存儲的任何其他額外信息)。 這樣的數據庫結束(給每個用戶他自己的表)似乎對我來說效率很低,但是在單個表中保存所有文件的記錄似乎並不正確,而且每次單個文件時都需要搜索整個表被訪問。
我的背後考慮給每個用戶自己的桌子,這是找給用戶一個文件時跨分片表中的數據,減少搜索時間整潔和獨特的方式推理。
它確實有幫助。但是,有幾個問題。目前,我們使用的共享網絡服務器將每臺數據庫限制在1GB,因此將圖片/文件存儲爲數據庫本身並不可行。另外,不會讓一張桌子上的所有圖片都增加一張特定圖片的搜索時間?我每個用戶的表格背後的推理是,知道用戶,我會知道要搜索哪個表,並因此必須搜索較少的記錄(將其視爲基於用戶標識的分片)。這不合理嗎?有什麼我失蹤? – xbonez
索引的大小影響SQL執行,但大量未編制索引的blob不會引起注意。但是如果你沒有空間,這是一個有爭議的問題。在這種情況下,您需要將它們存儲在文件系統中。一個userid/photos文件夾結構是好的,如果你有很多,因爲避免一個文件夾中的大文件計數是一個好習慣。我會放置一個.htaccess以避免直接訪問(假設您需要auth來訪問它們),並使用photo?id =無論如何將標題更改爲image/jpeg或其他內容,並且echo readfile的圖像。 –