[英]Incrementally process large XML file over HTTPS?
我必须从安全的Web服务器下载,处理和存储8GB的XML文件。 我可以使用WebRequest
类下载该文件,但这将花费很长时间。 此外,我知道该文件的结构使其适合离散块中的处理。
我如何'流式传输'这个文件,这样我只能获得一些可以处理的小块,而不必一次得到整个流?
编辑
我忘了提 - 我们托管在Azure上。 想到的一个想法是提供一个工作者角色,它只下载大文件并且可以根据需要进行。 这有多可行?
8 GB是一个很大的工作量。 为了保护自己免于返工和有效扩展,我会将XML文件下载与其处理分离。
在作为流下载时,我会将某种流标识符写入持久存储,并通过将包含其相关数据的消息放入队列来安排完成每个原子工作单元。 这将允许由于任何原因从下载向南恢复,或者单元工作不成功和/或干扰下载。
我正在使用HttpWebRequest,BeginGetResponse然后使用GetResponseStream
然后,当它通过stream.BeginRead向下滴时,可以读取块中的流
这是一个非常复杂的例子: http : //stuff.seans.com/2009/01/05/using-httpwebrequest-for-asynchronous-downloads/
如果需要按顺序处理文件,只需在响应流上打开XMLReader并根据需要读取数据。
如果您需要随机访问该文件(即在中间读取),您可能需要做更多工作来创建可搜索流(如果服务器在请求中支持RANGE选项)或者只是像现在一样下载整个文件。
请注意,8GB是大量数据,完全下载将花费大量时间,无论读取方法如何。
您可以将xml文件上传到块blob并从那里下载。这篇博客文章可能有所帮助http://blogs.msdn.com/b/kwill/archive/2011/05/30/asynchronous-parallel-block-blob -transfers,与正在进行的变化,notification.aspx
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.