繁体   English   中英

将Blob中的特定文件从一个存储帐户复制到另一个存储帐户

[英]Copy Specific files in a blob from a storage account to a different storage account

我在一个存储帐户的Blob中有一个文件列表,需要将其移至另一个存储帐户。 有没有一种方法可以专门选择blob文件并将仅选定的子集移动到另一个存储帐户? 如果是这样,我该怎么办?

编辑:需要移动的Blob列表将被更新,并且功能过程将需要持续运行

您可以使用递归逻辑应用程序来实现它:

  1. 每X次运行
  2. 调用您的存储过程以获取文件列表
  3. 对于每个文件,使用复制Blob组件将源Blob移动到目标Blob。

如果您要为此使用Azure函数,我建议的最基本的方法是基于这样一个事实,即问题实际上与I / O有关,而与计算无关。 因此,尽管有一些模式可用于扩展Azure函数的工作,但对于此类问题,这些模式可能没有多大意义。

这里最简单的方法是使用基于单个计时器触发的功能。 您将安排此功能根据需要频繁运行。 它的工作是执行您的存储过程,枚举结果,然后将每个结果排队,以便通过TransferManager从Azure Blob存储SDK复制。

如果您还不熟悉TransferManager类,它将为您跟踪和优化I / O操作的并发吞吐量。 您可能希望创建一个表示该函数正在处理的工作的单个TransferContext ,以便您可以跟踪进度,处理故障,处理覆盖情况等。您将使用CopyAsync方法,如果要不熟悉此API,此方法上有一个名为isServiceCopy的参数。 由于要在两个Azure存储服务帐户之间进行复制,因此您肯定要利用它,以便它是纯服务器<->服务器副本,并且I / O不必通过运行功能实例的服务器根本 您的功能最终仅是复制的协调器。

现在,就像我说的那样,这是我建议的最基本的方法。 还有其他需要考虑的事情,例如面对任何失败而保持幂等。 例如,如果您正在调用的存储过程仅返回一次特定的Blob URI(例如,SQL Server中的穷人队列)并且您的Azure函数由于某种原因而失败,那么您将丢失该工作。 我确实需要了解有关此操作的更多详细信息,以便为它指定一个更持久的替代方法,但是您肯定希望更改此方法,以便将实际复制与存储过程的执行分离,以减少存储过程失败的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM