首先,我不是數據庫專家,而是承包商。我聘請了一位(優秀)程序員,但由於我們遇到的一些問題以及我正在閱讀的所有信息,現在對數據庫設計的某個部分有些懷疑。開始吧。使用blob與否,性能問題
我們建立了一個房屋網站,它使用解析器來處理所有數據並將其存儲在ms-sql數據庫中。每天飼料中都包含大約70,000條記錄,其中大部分都附有照片(平均3張)。圖片大小從30kb到400kb不等。 該數據庫具有大約相同數量的記錄。大約有400個新對象需要處理。這意味着每天都必須輸入數據庫中的所有記錄,以查看數據是否已更改,對象是否已被刪除,或者是否爲新對象,因此必須插入。 圖片存儲在數據庫中。這些訂閱源在具有32GB內存和SSA磁盤的雙核四核機器上進行處理。該數據庫現在大小爲600GB。
目前,我們每天約有3000位用戶查看6個房屋,平均每個用戶查看10個圖像。
這就是我們所遇到的: - 整個解析過程大約需要13個小時。 - 我們在日誌中發現了很多超時錯誤 - 我們得到了一些死鎖錯誤 - Google抱怨超時錯誤,結果索引的頁面不多。 - 由於某些目錄的加載時間超過10秒,Google對該網站的評分較慢。
我個人認爲它與數據庫中的圖片和一些不好的查詢有關。但在我開始向我的程序員抱怨之前,我想聽聽你對此的看法。 預先感謝您的時間。
來自我的程序員的更新: 以下是關於表格結構的一些信息。有2個圖像表,一個叫做imageinfo,用於在圖像上進行查詢(例如獲取imageid和content-type的列表)以及一個包含圖像id和BLOB的圖像表。 imageinfo表具有與圖像表(1:1關係)相同的id,並且具有一些額外的信息,例如圖像的名稱,類型和散列。該分析程序使用該散列來確定圖像是否已更改。因此,觸摸圖像表的唯一時間是從解析器插入/更新/刪除並且站點訪問圖像的時間。 訪問和下載一個圖像所需的時間約爲350毫秒。
無論什麼執行速度都很慢......通常我不會使用blob並將文件/圖像託管在單獨的服務器上。數據庫然後只是保存圖片的位置。減少數據庫大小,並減少一個服務器上的一切負擔,即s3存儲爲您的圖片 –