c# - 将文件从 Azure Blob 同步到本地

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

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

由于文件夹(目录)结构不确定,但简单地说就是一旦发生变化就将那里的任何内容下载到本地。除了递归和设置一个定时器来反复检查它,你还有什么聪明的想法?

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

最佳答案

Eric,如果我理解正确的话,我相信你试图实现的概念对于你的核心需求来说并不是那么有效。

考虑以下场景:

  1. 将您的 View 保存在 blob 存储中。
  2. 实现 Azure (AppFabric) 缓存。
  3. 将任何 View 文件存储到缓存中,如果它在具有无限(或非常长)到期时间的 Web 请求中尚不存在。
  4. 在您的 Web 角色实例上启用具有较短到期时间(例如 5 分钟)的本地缓存
  5. 在您的 Web 角色之外创建一个(单一的、独立的) worker 角色,该角色会扫描您的 blob 的 ETag 以了解时间间隔的变化。为任何更改的 blob 重置 View 的缓存键
  6. 摆脱网络角色中那些丑陋的“ worker ”:-)

在这种情况下需要考虑以下几点:

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

https://stackoverflow.com/questions/9966317/

相关文章:

assembly - MIPS 从内存地址返回值

c# - StackOverflow 与 TryValidateObject 如果对象是有效的

shell - 映射 lynx 中的键以运行 shell 命令

spring-mvc - 如何在 spring MVC 应用程序中的真实请求之外激活请求范围?

php - 根据下拉列表中的更改更改 GridView 中的数据

ruby-on-rails - Rails Association Validations : Th

typo3 - 将 locallang 值插入 TypoScript [stdWrap]

c# - 在 BackgroundWorker 线程上创建 FlowDocument

qt - 来自 QProcess 的标准输出离实时很远

php - 谷歌图像搜索 API