2011-03-17 35 views
3

我們使用的名爲Kentico的CMS在文件系統上存儲媒體庫文件,並且還在數據庫中存儲文件元數據(標題,描述等)的記錄。當您使用媒體庫控件列出這些項目時,它將從文件系統讀取文件以顯示它們。從文件系統讀取然後查詢數據庫是否更快?或者,在媒體文件元數據數據庫表上運行簡單查詢會更快嗎?基於文件系統的讀取與簡單的數據庫查詢?

假設:

  • Kentico是一個ASP.NET應用程序,因此該代碼是在C#。他們使用簡單的DataSets來傳遞數據。
  • 只有元數據才能從文件名和大小等直接文件中讀取。
  • 每個文件夾最多100個文件。
  • 數據庫查詢將被正確索引。
  • 查詢會是這樣的:

    SELECT *
    FROM Media_File
    其中,filepath LIKE '路徑/要/電流/媒體/文件夾/%'

回答

6

簡短的回答是它取決於許多可變因素,但文件系統通常比數據庫更快。

較長的答案是:在已知位置掃描本地文件系統通常很快,因爲資源離家很近,計算機被設計爲非常有效地執行這些操作。然而,它是否比數據庫更快取決於數據庫的實現,它的位置以及我們談論的數據量。總體而言,DBMS經過優化,可以非常有效地存儲和查詢大型數據集,而「扁平」文件系統只能像硬件一樣快速掃描驅動器。通信方案(通過網絡傳輸文件是計算機定期執行的最慢的事情;相比之下,命名管道提供非常快速的進程間通信)以及您投擲的硬件數量(帶有SATA-RAID條帶的四路至強刀片式服務器將比您的賽揚筆記本電腦快得多)。

2

除了其他人在這裏所說的內容之外,緩存也可以發揮作用,具體取決於您的緩存設置。不要忘記考慮這些因素,因爲Kentico,SQL和IIS都有很多不同級別的緩存,並根據您的設置,配置和您正在優化的哪些用例在不同時間使用。

當談到這個級別的性能問題時,答案往往是:取決於。因此,請對您自己的解決方案進行基準測試,以瞭解哪一個解決方案對您的特定用戶的情境需求最有幫助

Kentico確實發佈了一些性能指南(對於5.0和另一個對5.5)可能有幫助,但在您自己測試之前,它們仍然不會給出明確的答案。