Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure DML数据片?_Azure_Azure Blob Storage - Fatal编程技术网

Azure DML数据片?

Azure DML数据片?,azure,azure-blob-storage,Azure,Azure Blob Storage,我的blob存储中有40百万个10 TB的blob。我正在使用CopyDirectory将这些文件复制到另一个存储帐户中以进行备份。它花了将近两周的时间才完成。现在我担心的是,直到哪一天这些blob才会被复制到目标目录。是作业开始的日期还是作业完成的日期 DML是否使用类似于数据片的东西 现在我担心的是,直到哪一天这些blob才会被复制到目标目录。是作业开始的日期还是作业完成的日期 据我所知,当您启动CopyDirectory方法时,它只会发送请求,告诉azure存储帐户从另一个存储帐户复制文件

我的blob存储中有40百万个10 TB的blob。我正在使用
CopyDirectory
将这些文件复制到另一个存储帐户中以进行备份。它花了将近两周的时间才完成。现在我担心的是,直到哪一天这些blob才会被复制到目标目录。是作业开始的日期还是作业完成的日期

DML是否使用类似于数据片的东西

现在我担心的是,直到哪一天这些blob才会被复制到目标目录。是作业开始的日期还是作业完成的日期

据我所知,当您启动CopyDirectory方法时,它只会发送请求,告诉azure存储帐户从另一个存储帐户复制文件。所有复制操作都是azure存储

如果我们运行方法开始复制目录,azure存储将首先创建大小为0的文件,如下所示:

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

因此,结果是,如果作业启动,它将在目标目录中创建文件,但文件大小为0。您上次可以看到image1的文件

azure存储将继续将文件内容复制到目标目录

如果作业完成,它将在上次修改时更改文件

因此,DML SDK只需告诉存储复制文件,然后它将继续向azure存储发送请求,以检查每个文件的复制状态

如下图所示:


谢谢。但是,如果在复制操作期间将文件添加到源目录,会发生什么情况?新文件是否也被复制到目标目录

简言之,答案是肯定的

DML不会获取整个blob列表,并一次发送复制所有文件的请求

它将首先获取文件名列表的一部分,并发送请求以告知存储副本文件

列表按文件名排序

比如说

如果DML已经复制了文件名(如0),则如下所示

此目标blob文件夹

如果将0开始文件添加到文件夹中,它将不会复制

这是从blob文件夹复制的

完全复制blob文件夹:

如果将文件添加到blob文件夹的末尾,而DML未对其进行扫描,则会将其复制到新文件夹中


因此,在这两周内,至少有一百万个blob以非常随机的名称添加到容器中。所以我认为DML在大型集装箱中不起作用

据我所知,DML是为高性能上传、下载和复制Azure存储Blob和文件而设计的

当您使用DML CopyDirectorySync复制blob文件时。它将首先发送一个列出文件夹当前文件的请求,然后发送复制该文件的请求

发送列出文件夹当前文件号请求的操作的默认值为250

获取列表后,它将生成一个标记,该标记是下一个blob搜索文件名。它将开始列出文件夹中的下一个文件名,然后再次开始复制

默认情况下,.Net HTTP连接限制为2。这意味着只能维护两个并发连接

这意味着如果不设置.Net HTTP连接限制,CopyDirectorySync将只获得500条记录并开始复制

复制完成后,操作将开始复制下一个文件

您可以看到以下图像:

标记:

我建议您首先设置最大http连接以检测更多blob文件

ServicePointManager.DefaultConnectionLimit = Environment.ProcessorCount * 8;
此外,我建议您可以创建多个文件夹来存储文件

例如,您可以创建一个文件夹来存储一周的文件

下周,你可以开始一个新文件夹

然后,您可以备份旧文件夹的文件,而无需将新文件存储到该文件夹中

最后,您还可以编写自己的代码来实现您的需求,您首先需要获得文件夹文件的列表

获取列表的一个请求的最大结果是5000

然后,您可以发送请求,告知存储拷贝每个文件


如果在您获得列表后将文件上载到文件夹,它将不会复制到新文件夹。

谢谢。但是,如果在复制操作期间将文件添加到源目录,会发生什么情况?新文件也会被复制到目标目录吗?谢谢你的详细解释。但是,正如我所说,我在一个容器中有超过4000万个水滴。因此,不可能知道新文件添加到了哪里。正如我也说过的,容器的完整备份需要2周的时间。因此,在这两周内,至少有一百万个blob以非常随机的名称添加到容器中。所以我认为DML在大型集装箱中不起作用?