2011-03-20 19 views
1

我正在建設一個網絡購物網站。每個銷售的產品都可以附帶多張圖片以及任意附件(如PDF和手冊等)。這些資源存儲在我們自己的ERP系統中,並通過它的遠程API進行訪問。實際上,文件可以駐留在任何地方 - 在數據庫中,在硬盤上,在網絡共享上等。API提供了訪問它的統一接口。如何高效地將元數據添加到.NET中的任意文件?

爲了提高性能,我打算將這些文件緩存在網絡服務器上。有一個版本計數器機制,可以讓我有效地確定文件何時發生變化並使緩存項無效。但是,我在哪裏存儲當前在緩存中的文件的版本號?緩存基本上是單個文件夾,可以通過Web服務器上的多個ASP.NET工作進程訪問。網站本身沒有數據庫 - 所有數據都來自ERP API。

理想情況下,這個數字將與文件本身以某種方式存儲在一起。所以,當文件被刪除(比如管理員決定清除緩存以提高磁盤使用率)時,元數據不會流連忘返。到目前爲止,我有兩個想法:

  1. 寫在一個ADS(備用數據流)。儘管通過.NET訪問它並不容易。圖書館存在,但我更喜歡更優雅的解決方案(我也不知道有關性能)。
  2. 將其追加到文件本身。我所知道的所有文件格式對於附加到文件的數據都很放鬆。但是,在傳輸內容之前,我需要將其刪除,這意味着我無法使用內置的TransmitFile-再次讓我擔心性能。

有沒有更好的辦法?

回答

3

如果它只是一個版本號,你有沒有想過把它包含在文件名中?例如:

foo.txt.v131 

foo.txt的版本131。這種方法的一個很好的功能是你可以編寫文件的新版本(例如132),而Web服務器仍然可以讀取131.你仍然需要制定出所有的交換語義。 。

+0

我曾考慮過這個問題,甚至試圖實現它,但是當版本號發生變化時它變得非常混亂。如果我不知道版本號(只是文件名),那麼我必須枚舉文件夾。更不用說潛在的併發問題了...... – 2011-03-20 09:52:14

0

如果您知道產品經常發生變化,您可以每隔一小時使緩存失效。

更高級的方法是將每個緩存文件的CRC值存儲在數據庫版本中。然後有一個後臺服務運行(例如通過Cron)來檢查文件是否正在改變,然後失效。

+0

他們並沒有經常改變。但每隔一段時間事情都會改變。如果已經有計數器,比較每個文件等都沒有意義。當我渲染產品頁面(或列表)時,我會得到最新的計數器,因此我可以即時進行失效處理,並且只在真正需要的時候執行。 – 2011-03-20 11:59:15

相關問題