2012-10-16 45 views
2

我创建了一个提供图像的web服务。它将永远是单向的沟通。图像永远不会改变,从服务中获取他们的一面。为web服务创建光盘缓存的最佳方式

它有多个来源,有些可能很远,连接不好。 我已经为它创建了一个内存缓存,但是我还想要一个光盘缓存,用于存储更长时间的图像。 我有点不确定最好的方法来做到这一点。

首先,我的所有来源都是web服务器,所以我不知道如何检查我想要使用的图像的最后修改日期(作为示例),以查看文件已经改变。

二,如何最好地存储我的本地缓存?只需将文件放在一个文件夹中,并将日期与原始来源进行比较? 或者,也许将所有图像的所有时间戳存储在txt文件中,以避免检查文件。 或者,也许将它们存储在本地的SQL Express数据库中?

图像一般不是很大。大多数都在200kb左右。然而,每隔一段时间,将会有7+ MB。 最大的问题是,某些位置(服务将托管在哪个位置)的连接非常糟糕,他们需要多次使用相同的图像。 没有真正的性能要求,我只是想尽可能快地对我们的中央服务器产生可怕连接的位置作出响应。

我无法安装任何“真实”缓存系统。它必须是我可以在我的代码中处理的东西。

+0

你需要给出一些相关的细节,如数据量,期望的性能预期,任何需要“聚类”,数据完整性的重要性等! – Yahia

+0

这些都是非问题。图像永远不会在源代码上发生变化。一旦他们在源头上,他们被批准并不会改变。聚类也是不相关的。该服务将在本地网络服务器上运行,位于我们所有的位置,从中央位置获取图像。 – Nicolai

回答

2

为什么不在服务器上安装代理服务器,并通过它来访问所有远程Web服务器?代理服务器将为您处理缓存。

编辑:由于你不能安装任何东西,并没有数据库可用,恐怕你自己实现磁盘缓存卡。

好消息是 - 它相对容易。您需要选择一个文件夹并将图像文件放在那里。而且您需要在图像标识和文件名称之间有唯一的映射。如果您的图像ID是数字,则映射非常简单...

当您收到图像请求时,请首先在磁盘上检查它。如果它在那里,你已经有了。如果没有,请从远程服务器下载并存储在那里,然后从那里提供。

您需要考虑并发请求。确保将文件写入磁盘是一个相对简单的过程(您可以在完成下载后编写它们)。将文件写入磁盘时,确保没有人可以打开它进行读取,这样可以避免发送不完整的文件。

现在,您只需处理文件不在缓存中的情况,并且一次接收到两个请求。如果性能不是真正的问题,只需下载两次。

+0

我无法安装我很害怕的代理服务器。它必须是我可以在我的代码中处理的东西。 – Nicolai

+0

你可以安装别的东西吗?你有没有安装数据库? – zmbq

+0

我有一个数据库,但不是在每个位置。数据库与图像源位于同一位置。 – Nicolai