如何在.NET中有效地将元数据添加到任意文件?

时间:2011-03-20 09:36:49

标签: .net performance file metadata

我正在建立一个网站购物网站。每个销售的产品都可以附加几张图片以及任意附件(如带有手册的PDF等)。这些资源存储在我们自己的ERP系统中,并通过它的远程API访问。实际上,该文件可以驻留在任何地方 - 在数据库中,在硬盘驱动器上,在网络共享上等.API提供了访问它的统一接口。

为了提高性能,我打算在Web服务器上缓存这些文件。有一个版本计数器机制,可以让我有效地确定文件何时更改并使缓存条目无效。但是,我在哪里存储当前在缓存中的文件的版本号?缓存本质上是一个文件夹,可以由Web服务器上的多个ASP.NET工作进程访问。网站本身没有数据库 - 所有数据都来自ERP API。

理想情况下,这个数字会以某种方式与文件本身一起存储。因此,当文件被删除时(例如,管理员决定清除缓存以提高磁盘使用率),元数据不会留下来。到目前为止,我有两个想法:

  1. 将其写入ADS(备用数据流)。但是,通过.NET访问它并不容易。库存在,但我更喜欢更优雅的解决方案(我也不了解性能)。
  2. 将其附加到文件本身。我所知道的所有文件格式都非常轻松地附加到文件中的数据。但是我需要在传输内容之前删除它,这意味着我无法使用内置的TransmitFile - 再次让我担心性能。
  3. 还有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

如果它只是一个版本号,您是否考虑将其包含在文件名中?例如:

foo.txt.v131

对于foo.txt的第131版。这种方法的一个很好的特性是你可以编写文件的新版本(例如132),而网络服务器仍然可以读取131.你仍然需要解决所有的交换语义当然..

答案 1 :(得分:0)

如果您知道产品正在发生变化,通常可以每小时使缓存无效。

更高级的方法是在DB版本中存储每个缓存文件的CRC值。然后运行后台服务(例如,通过Cron)来检查文件是否正在发生变化然后无效。

相关问题