或許這個問題一拋出來就有人立刻說存路徑。
但是想想這個問題,如果存路徑的話,那麼無論在db中還是cache中只能儲存一個路徑,調用的時候就屬於檔案調用。在項目圖片特別多的時候,影響不是很大嗎?
而如果存二進位的話,可以直接把圖片資料轉成二進位存在db和cache中。取的時候直接轉就好
那麼究竟哪個比較好呢?為什麼人們都說存路徑呢?因為二進位轉換演算法特別消耗嗎?
回複內容:
或許這個問題一拋出來就有人立刻說存路徑。
但是想想這個問題,如果存路徑的話,那麼無論在db中還是cache中只能儲存一個路徑,調用的時候就屬於檔案調用。在項目圖片特別多的時候,影響不是很大嗎?
而如果存二進位的話,可以直接把圖片資料轉成二進位存在db和cache中。取的時候直接轉就好
那麼究竟哪個比較好呢?為什麼人們都說存路徑呢?因為二進位轉換演算法特別消耗嗎?
1.資料庫不光有儲存,還有查詢,我想你應該不會去查詢那些位元據吧,在資料庫上存入一個很大的欄位非常影響資料庫效能開銷。
2.資料庫底層也是檔案儲存體,將二進位檔案儲存到資料庫比直接放到檔案系統上會有更多計算或者io。(原答案是更多的io,考慮到資料庫儲存時的資料壓縮和最佳化,更改原答案。)
3.圖片檔案作為靜態檔案,在web伺服器以及其他應用在讀取時基本上是io操作,放在資料庫中則需要額外的計算。
4.如果你覺得檔案很多,你可以嘗試分檔案夾存放,比如按首字母,按使用者id,或者使用cdn,這些都是比放在資料庫更好的方法。
http://www.cnblogs.com/wangtao_20/p/3440570.html
http://www.oschina.net/question/253614_78251
你的理解沒錯,檔案數量較多的時候,存在預設的檔案系統中就會顯著影響速度,這主要是系統預設的檔案系統並不是針對大數量檔案儲存體而設計的,沒有路徑索引,檔案一多效率就指數級降低。
但也並不能和其他資料一樣單純的存入資料庫,最好是將檔案資料庫單獨存放,單獨處理,因為檔案請求一般都是單純的IO操作,不需要複雜的邏輯和程式處理,最好單獨開闢通道,讓請求繞過伺服器程式,減少伺服器程式的負擔。
另外的資料庫選擇上,可以考慮專門為檔案而設計的資料庫,如mongodb的gridfs。
資料庫多跑個指標和拓展記憶體空間!何況一個伺服器應用需要考慮平衡匯流排和IO!檔案儲存體相對成本更低,包括開發成本和拓展成本!
“在項目圖片特別多的時候”,資料庫查詢應該會成為瓶頸吧。如果真的特別多,一般會放在次層網域下,與主站隔離,或者使用第三方服務。
存URL擴充性什麼的更強一點,包括審核,備份,使用第三方服務,都會容易一點。
boss說,小王,有關部門說我們的圖片有不健康的,你給咱查查。存資料庫就需要費很大勁。
boss說,小王,咱們要擴充幾台伺服器,你把圖片這塊給咱整整。存資料庫就需要費很大勁。
boss說,小王,咱和七牛/又拍有合作了,把咱的圖片放他們那。存資料庫就需要費很大勁。
以上個人看法。
304 Not modified,這個理由足夠強大了吧?如果存放在資料庫裡你怎麼證明呢?額外再加一個version,如同/getfile.php?key=dassafs23fdsa&v=20150109231820嗎?但是不可避免的這需要額外的資料庫查詢才能校正吧?