将文件从Azure Blob同步到本地

时间:2012-04-01 17:02:07

标签: c# azure-storage azure-storage-blobs

我喜欢在Worker角色中编写一个进程,将文件夹(目录)下的一批文件下载(同步)到本地镜像文件夹(目录)

上次文件夹(目录)的更新时间是否有时间戳(或获取方式)?

由于文件夹(目录)结构不确定,但只需将下载到本地,只要它更改即可。除了递归和设置计时器反复检查它,你有另一个聪明的主意吗?

(编辑)p.s.我发现了从本地到Azure存储的同步文件的许多解决方案,但是本地文件的相同原则不适用于Azure blob,我仍然在寻找一种最容易将文件下载(同步)到本地的方法

2 个答案:

答案 0 :(得分:1)

我的建议是在blob存储之上创建一个抽象,这样就没有人直接写入blob。然后在写入新文件时向Azure的队列服务提交消息。让文件接收器轮询该队列的更改。无需递归扫描整个blob存储区。

就抽象而言,使用Azure Web角色或辅助角色来验证和授权您的客户端。让它写入Blob商店。您可以使用HTTPHandlers或WCF实现抽象,以直接处理IO请求。

此抽象将允许您克服上述评论中提到的5000个文件的blob限制,并允许您向外扩展并为客户提供其他功能。

我有兴趣在有机会时看到你的代码。也许我可以给你一些提示或代码修复。

答案 1 :(得分:1)

Eric,我相信如果我理解正确的话,你试图实施的概念对你的核心要求并没有那么有效。

考虑以下情况:

  1. 将您的观点保存在Blob存储空间中。
  2. 实施Azure(AppFabric)缓存。
  3. 将任何视图文件存储到缓存中,如果它在具有无限(或很长)到期时间的Web请求中尚未存在。
  4. 使用较短的到期时间(例如5分钟)在您的Web角色实例上启用本地缓存
  5. 在Web角色之外创建(单个,分离的)辅助角色,该角色扫描blob的ETag以查找间隔的更改。重置视图的缓存键以更改任何blob
  6. 摆脱网络角色中那些丑陋的“工人”: - )
  7. 在这种情况下,有几点需要考虑:

    • 您更新的视图将在“本地缓存过期时间+工作人员扫描间隔”内到达Web角色实例。值越低,分布式缓存请求和blob存储事务就越多。
    • Azure AppFabric Cache是​​唯一阻止整个平台真正可扩展的Azure服务。您必须根据视图的总大小(以MB为单位),实例数以及每个实例所需的同时缓存请求数来选择最佳缓存计划。
    • 考虑在实例内(而不是在AppFabric缓存中)缓存已编译的视图。根据专用的AppFabric缓存键/键重置此本地缓存。这将大大提高您的性能,因为渲染输出html就像将模型注入预编译视图一样简单。
    • 当然,如果无论出于何种原因无法从缓存中检索视图,则Web角色中的缓存检索代码必须能够从主源(存储)检索视图。
相关问题