網站開發中的文件存儲目錄結構的探討
2024-07-21 02:02:20
供稿:網友
對于少量用戶寫信息,大量用戶都是在看信息的網站:例如CMS系統,編輯發咨詢,用戶看,例如中小企業產品發布網站。 對于這類需求我們可以把文件專門放到一個目錄下,例如放到網站根目錄的upload目錄下,然后按天建文件夾,將每天的文件放到一個目錄下,文件名可采用數字生成。例如:upload/20100612/1224455.jpg;通常的情況下這種目錄結構就可以保證每個目錄下不會有太多的文件。
對于博客,論壇應用,需要對每個用戶分配文件存儲空間,如果有需求的話還要限制用戶的存儲空間,對于一般規模的網站目錄結構可以用用戶id+日期的形式;例如upload/234/20100612/abc.jpg。如果規模較大,可以將文件分布到幾臺不同的服務器上,可以根據用戶id制定一個分布的規則,每臺服務器用不同的域名,并在數據庫中存儲文件的完整url地址,這種情況下的路徑結構通常是:http://file1.abc.com/upload/234/20100612/abc.jpg。
我曾經觀察過微軟的文件下載文件存儲的路徑結構,他是用guid生成的一個路徑,例如:http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe ;它這個結構目錄是guid的前三位和guid做了一個4級的目錄,這種情況下,就保證了,每個目錄下不會有很多目錄,因為是guid所以每一個文件都放到一個單一的目錄下了,這種結構對于做下載的網站應該是一種不錯的選擇。
還有web2.0的網站會涉及到用戶頭像的存儲,頭像的存儲比較特殊,一個用戶固定有那么幾個尺寸的圖片,我們分析一下開心網和sina的頭像地址,看他們是如何做的存儲
1. 開心網的存儲,如下是兩對鏈接地址,每對中的第一個是頭像地址,第二個是用戶首頁,首頁中的參數是用戶id
http://pic1.kaixin001.com.cn/logo/13/39/50_133973_82.jpg
http://www.kaixin001.com/home/?uid=133973
http://www.kaixin001.com/home/?uid=36131662
http://pic.kaixin001.com.cn/logo/13/16/50_36131662_2.jpg
可以看出開心網的存儲方式是存儲到幾臺不同的服務器上,頭像的地址是根據用戶的id去劃分目錄做的存儲,id的前4位被分成兩個目錄,文件名用的是包含前綴+用戶id+后綴的方式做的存儲。
2. 如下是兩對sina的空間地址,和博客頭像的地址
http://space.sina.com.cn/u/1642511512
http://portrait1.sinaimg.cn/1642511512/blog/180
http://space.sina.com.cn/u/1725778305
http://portrait2.sinaimg.cn/1725778305/blog/180
Sina博客頭像的存儲方式和開心不同,是用戶id做一級目錄,然后加上blog(應該是應用的名字)再加上一個數字180(猜想可能是頭像類型的數字);sina和開心的區別是沒有圖片擴展名,猜想它可能是把頭像放到了一個鍵值對的數據庫中,根據url參數從鍵值對數據庫中取出頭像的圖片數據,然后輸出給客戶端
從上面的分析可以猜想開心可能是直接存的文件,而sina可能存儲在鍵值對數據庫中,如果數據量很大的話,應該是新浪的方式根據伸縮性。
最后我們還得提一下為我們提供服務的博客園的存儲方式,如下地址:
http://pic.cnblogs.com/face/u15230.jpg
http://pic.cnblogs.com/face/u105416.png
http://pic.cnblogs.com/face/u40200.png
很簡單直觀應該是放到了一個目錄下,直接用戶id做的文件名,沒有分目錄結構,這樣在文件夾中文件過多時是否會引起性能問題呢?