Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何缓存需要几分钟才能返回的大型数据集?_.net_Xml_Caching - Fatal编程技术网

.net 如何缓存需要几分钟才能返回的大型数据集?

.net 如何缓存需要几分钟才能返回的大型数据集?,.net,xml,caching,.net,Xml,Caching,这里是背景,我有一个来自供应商/合作伙伴的Web服务,它返回一个用于显示数据的大型XML文档。很简单。问题是服务需要几分钟才能执行。供应商在一次方法调用中以XML文档的形式返回整个规范化数据库,速度很慢。愚蠢的卖主,但我无法控制 我有两个问题: 我在哪里缓存它?磁盘,数据库,内存我倾向于把它放到磁盘上。它太大,访问量不足,无法存储在内存中。将它放在DB中可能是正确的,但我不想编写ETL并在某处运行作业 如何缓存它?我不能让它过期,让下一个请求刷新缓存,因为这需要很长时间。我需要在缓存重建时提供过

这里是背景,我有一个来自供应商/合作伙伴的Web服务,它返回一个用于显示数据的大型XML文档。很简单。问题是服务需要几分钟才能执行。供应商在一次方法调用中以XML文档的形式返回整个规范化数据库,速度很慢。愚蠢的卖主,但我无法控制

我有两个问题:

我在哪里缓存它?磁盘,数据库,内存我倾向于把它放到磁盘上。它太大,访问量不足,无法存储在内存中。将它放在DB中可能是正确的,但我不想编写ETL并在某处运行作业

如何缓存它?我不能让它过期,让下一个请求刷新缓存,因为这需要很长时间。我需要在缓存重建时提供过时数据。我可以想出几种方法来做这件事,但没有一种方法看起来简单或优雅。我想做一些简单的事情;我不是在寻找最好的工程解决方案

这是我的计划…请告诉我我是个白痴,并提出一些我忽略的更简单的建议

将XML写入磁盘 同时,将文件名和某种类型的过期炸弹写入缓存,显然文件名在很长时间内不会过期 在我的工作线程中,尝试从缓存中读取炸弹 如果缓存过期,我的炸弹就会爆炸,然后生成一个线程来获取并保存XML 同时,从缓存中获取文件名,并在生成新XML时读入旧XML 完成新文件后,从缓存中终止旧文件名,并将该文件名写入缓存 对我来说这听起来很荒谬,必须有更好的方法


我使用的是.Net和IIS6,如果需要,我可以将XML粘贴到SQL Server中。

您可以创建一个新数据库和一个计划作业,定期获取这些数据并将其存储到数据库中。然后,您可以直接从数据库而不是web服务提供实际需要的数据。

为什么不能将这些数据存储在内存中?您要存储的对象有多大?为什么不能为iis设置连接超时,以便有足够的时间下载整个文件?这个文件到底有多大?!该对象的大小为几MB,我承认这并不庞大,但它的访问次数也不够频繁,因此我希望将其缓存在内存中。我已经考虑过接受打击,我仍然可能朝着这个方向走。我已经更改了超时时间,但我不能让用户等待90秒来呈现数据,因此我需要在缓存重建时为用户提供一些服务。我已经考虑过这样做,但SQL作业是另一个需要管理的失败点,添加另一个DB是另一个需要维护的对象。直到一年前,这些数据还在内部托管。与供应商合作的部分原因是不必在内部维护数据或构建接口来管理数据。我们要做的就是呈现数据。另一件很快的事情是,如果我将数据粘贴到SQL中,那么我将把整个对象粘贴到SQL中。我不会把它解构成规范化的形式。这是一个我几乎没有时间或资源的项目。除了缓存,我已经完成了所有工作,我不想花时间重建数据访问层。我不是想偷懒,而是想务实一点。@Jay,你能告诉我们更多关于那个物体的情况吗?你说那个物体有好几MB大?您需要在视图中显示整个对象,还是只需要显示该对象的某些部分?90秒用于呈现数据的时间太多了。当然,该对象本质上是一个序列化为XML并通过web服务提供的规范化数据库。数据模型将是一个主表,它与其他表具有若干外键关系,其中一些表具有自己的外键关系。筑巢的层次可能是4-5深。坦率地说,它不是一个伟大的web服务,也不是一个伟大的供应商。我不需要一次获取所有的数据,但是没有有效的方法来提取我所需要的数据。返回数据子集的方法省略了重要字段或需要在循环中进行调用。其中一个例子是返回联系人列表。很抱歉,必须继续…无论如何,我可以获得一个筛选过的联系人列表,但我无法获得该列表的元数据,因此我必须进行后续调用以获取该联系人的关联元数据。老实说,这是一个蹩脚的服务,可能位于一个设计不当的数据库上。我不确定为什么服务返回基本对象的速度如此之慢,但事实确实如此。最好的情况是45秒,最坏的情况几乎是两分钟。一旦我从他们那里得到了对象,并且正在处理磁盘上或数据库中的本地副本,它就会飞起来,因此我的问题是如何缓存该对象。