Azure Blob拷贝操作便宜吗?

Azure Blob拷贝操作便宜吗?,azure,blob,azure-storage-blobs,Azure,Blob,Azure Storage Blobs,Azure Blob存储没有公开任何类型的“Blob重命名”操作—这听起来很荒谬,因为重命名实体的想法在几乎所有存储系统中都是一项基本操作—Azure的文档没有提及Blob名称在内部的使用方式(例如作为DHT密钥),但是,由于我们可以指定自己的名称,很明显Azure没有使用内容寻址存储模型(因此,一旦Azure存储团队决定允许重命名,应该可以进行重命名) 微软主张,要“重命名”一个blob,你只需复制它,然后删除原来的blob——这似乎效率极低——例如,如果你有一个200GB的视频文件blob,

Azure Blob存储没有公开任何类型的“Blob重命名”操作—这听起来很荒谬,因为重命名实体的想法在几乎所有存储系统中都是一项基本操作—Azure的文档没有提及Blob名称在内部的使用方式(例如作为DHT密钥),但是,由于我们可以指定自己的名称,很明显Azure没有使用内容寻址存储模型(因此,一旦Azure存储团队决定允许重命名,应该可以进行重命名)

微软主张,要“重命名”一个blob,你只需复制它,然后删除原来的blob——这似乎效率极低——例如,如果你有一个200GB的视频文件blob,blob名称中有一个拼写错误——除非Azure内部有某种重复数据消除系统——在这种情况下,消除“blob重命名”,因为在内部它实际上是一个“名称复制”操作

不幸的是,blob copy()的当前文档没有描述任何内部流程,事实上,表明blob复制可能是一个非常长的操作:

复制操作的状态,具有以下值:

  • 成功
    :复制成功完成
  • 挂起
    :正在进行复制
如果它在内部使用重复数据消除系统,则所有blob复制操作都是即时的,因此不需要“进行中”状态;同样令人困惑的是,它使用“挂起”来表示“进行中”——通常情况下,“挂起”指的是“排队,尚未启动”

令人震惊的是,文件中还指出:

两周后仍未完成的复制尝试超时,并留下一个空blob

…这可以理解为对复制blob所需的时间没有任何保证。页面中没有任何内容表明较小的blob比较大的blob复制得更快-因此出于某些原因(例如长队列、不幸的中断等)纠正我假设的200GB视频文件中的假设性输入错误可能需要2周的时间——不要忘记,在复制操作完成之前,我无法删除我原来的错误命名的blob,这意味着需要设计我的客户端软件以不断检查并最终发出删除操作(并确保我的软件连续运行长达2周…)


是否有任何关于Azure Blob复制操作的运行时特征和性质的权威信息?

因为您可能已经知道,
复制Blob
操作是一个异步操作,您上面提到的所有事情都是正确的,但有一点需要注意。复制操作在涉及到copyin时是同步的g在同一个存储帐户中。即使在跨存储帐户或在存储帐户中复制Blob时获得相同的状态,但当在同一个存储帐户中执行此操作时,它几乎是瞬间发生的

因此,当您重命名一个blob时,您正在同一个存储帐户(甚至是同一个容器)中创建blob的副本,这是即时的。我不是100%确定内部实现,但是如果我没有弄错的话,在同一个存储帐户中复制blob时,它不会在某个单独的位置复制字节。它只创建两个指针(新blob和旧blob)指向相同的存储数据。一旦你开始对blob进行更改,我想那时它会去更改这些字节


对于Azure存储的内部理解,我强烈建议您阅读该团队几年前发表的论文。请查看我在此处的答案,其中包含本文的链接:。

,因为您可能已经知道,
Copy Blob
操作是一种异步操作,您上面提到的所有事情都是正确的一个警告。在同一存储帐户内复制时,复制操作是同步的。即使在跨存储帐户或在存储帐户内复制blob时获得相同的状态,但在同一存储帐户中执行此操作时,复制操作几乎是瞬时发生的

因此,当您重命名一个blob时,您正在同一个存储帐户(甚至是同一个容器)中创建blob的副本,这是即时的。我不是100%确定内部实现,但是如果我没有弄错的话,在同一个存储帐户中复制blob时,它不会在某个单独的位置复制字节。它只创建两个指针(新blob和旧blob)指向相同的存储数据。一旦你开始对blob进行更改,我想那时它会去更改这些字节

对于Azure存储的内部理解,我强烈建议您阅读该团队几年前发表的论文。请查看我在此处的答案,其中有指向该论文的链接: