我有4000万个10 TB的小斑点。为了备份目的,我使用DML CopyDirectory将它们复制到另一个存储帐户中。它花了将近两周的时间才完成。现在我担心,直到哪一天,这些blobs被复制到目标目录中。是作业开始的日期还是作业完成的日期?
DML是否使用类似于数据片的东西?
发布于 2017-06-16 05:26:24
现在我担心,直到哪一天,这些blobs被复制到目标目录中。是作业开始的日期还是作业完成的日期?
据我所知,当您启动CopyDirectory方法时,它只会发送请求,通知azure存储帐户从另一个存储帐户复制文件。所有的复制操作都是天蓝色存储。
如果我们运行启动复制目录的方法,azure存储将首先创建0大小的文件,如下所示:

作业完成后,您会发现它更改了大小,如下所示:

因此,如果作业启动,它将在目标目录中创建文件,但文件大小为0。您可以看到image1 1的文件最后修改时间。
天蓝色存储将继续将文件内容复制到目标目录。
如果作业完成,它将更改文件的最后修改时间。
因此,DML只是告诉存储复制文件,然后它将继续发送请求到蔚蓝存储,以检查每个文件的副本状态。
如下所示:

谢谢。但是,如果在此复制操作期间添加到源目录中的文件会发生什么呢?新文件是否也被复制到目标目录?
简单地说,是的。
DML不会一次获得整个blob列表并发送复制所有文件的请求。
它将首先获取文件名列表的一部分,并发送请求通知存储副本文件。
列表是按文件名排序的。
例如。
如果DML已经复制了像0这样的文件名,如下所示。
这个目标blob文件夹

如果将0开始文件添加到文件夹中,它将不会复制。
这是blob文件夹中的副本。

完全复制blob文件夹:

如果您在blob文件夹的末尾添加了文件,而DML没有扫描它,那么它将被复制到新文件夹中。
因此,在这两个星期里,至少有一百万个气泡被添加到容器中,并带有非常随机的名字。所以我认为DML不适用于大型容器?
据我所知,DML是为高性能的上传、下载和复制Azure存储块和文件而设计的。
当您使用DML CopyDirectoryAsync复制blob file.It时,首先会发送一个请求来列出文件夹的当前文件,然后它会发送复制文件的请求。
发送请求列出文件夹当前文件号的操作默认为250。
在get列表之后,它将生成一个标记,这是下一个blob搜索文件名。它将开始列出文件夹中的下一个文件名,然后重新开始复制。
默认情况下,.Net HTTP连接限制为2,这意味着只能维护两个并发连接。
这意味着如果您不设置.Net HTTP连接限制,CopyDirectoryAsync将只获得500个记录并开始复制。
完全复制后,操作将开始复制下一个文件。
你可以看到这些图片:

标记:

我建议您首先设置最大http连接以检测更多的blob文件。
ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 8;此外,我建议您可以创建多个文件夹来存储文件。
例如,您可以创建一个存储一个星期文件的文件夹。
下周,你可以开始一个新的文件夹。
然后,您可以备份旧文件夹的文件,而不需要将新文件存储到该文件夹中。
最后,您还可以编写自己的代码来实现您的要求,您首先需要获得文件夹的文件列表。
获得列表的一个请求的最大结果是5000。
然后,您可以发送通知存储副本每个文件的请求。
如果文件在收到列表后上载到文件夹,它将不会复制到新文件夹。
https://stackoverflow.com/questions/44564257
复制相似问题