Azure cosmosdb 如何提高从cosmosdb复制数据时的性能?

Azure cosmosdb 如何提高从cosmosdb复制数据时的性能?,azure-cosmosdb,azure-data-factory,azure-data-lake,u-sql,Azure Cosmosdb,Azure Data Factory,Azure Data Lake,U Sql,我现在正试图通过数据工厂将数据从cosmosdb复制到数据湖存储区 但是,性能很差,大约为100KB/s,数据量为100+GB,并且不断增加。这将需要10多天才能完成,这是不可接受的 Microsoft文档提到,从cosmos到data lake store的最大速度为1MB/s。即使这样,表现对我们来说还是很糟糕 cosmos迁移工具不工作,没有导出数据,也没有问题日志 Data lake analytics usql可以提取外部源,但目前仅支持Azure DB/DW和SQL Server,不

我现在正试图通过数据工厂将数据从cosmosdb复制到数据湖存储区

但是,性能很差,大约为100KB/s,数据量为100+GB,并且不断增加。这将需要10多天才能完成,这是不可接受的

Microsoft文档提到,从cosmos到data lake store的最大速度为1MB/s。即使这样,表现对我们来说还是很糟糕

cosmos迁移工具不工作,没有导出数据,也没有问题日志

Data lake analytics usql可以提取外部源,但目前仅支持Azure DB/DW和SQL Server,不支持cosmosdb


如何/哪些工具可以提高复制性能?

根据您的描述,我建议您可以尝试设置高以提高性能

云数据移动单元(DMU)是表示数据工厂中单个单元的功率(CPU、内存和网络资源分配的组合)的度量。DMU可以用于云到云拷贝操作,但不能用于混合拷贝。 默认情况下,Data Factory使用单个云DMU执行单个复制活动运行。要覆盖此默认值,请按如下所示指定cloudDataMovementUnits属性的值。有关为特定拷贝源和接收器配置更多单元时可能获得的性能增益级别的信息,请参阅性能参考

注意:当前只有当您将多个文件从Blob storage/Data Lake Store/Amazon S3/cloud FTP/cloud SFTP复制到Blob storage/Data Lake Store/Azure SQL数据库时,8及以上的设置才有效

因此,您可以设置的最大DMU为4

此外,如果此速度不符合您当前的要求

我建议您可以编写自己的逻辑,将documentdb复制到data lake

您可以创建多个WebJob,这些WebJob可以使用从documentdb到data lake的并行拷贝

您可以根据索引范围或分区转换文档,然后您可以使每个webjob拷贝不同的部分。在我看来,这会更快


关于dmu,我可以直接使用它还是应该先申请?你说的网络工作是指网络活动?你能提供更多的细节吗

据我所知,您可以直接使用dmu,您可以直接在json文件中添加dmu值,如下所示:

"activities":[  
    {
        "name": "Sample copy activity",
        "description": "",
        "type": "Copy",
        "inputs": [{ "name": "InputDataset" }],
        "outputs": [{ "name": "OutputDataset" }],
        "typeProperties": {
            "source": {
                "type": "BlobSource",
            },
            "sink": {
                "type": "AzureDataLakeStoreSink"
            },
            "cloudDataMovementUnits": 32
        }
    }
]
可以通过三种方式在Azure应用程序服务web应用程序的WebJobs中运行程序或脚本:按需、连续或按计划


这意味着您可以编写一个C#程序(或使用其他代码语言)来运行程序或脚本,将数据从documentdb复制到data lake(所有逻辑都应该由您自己编写)。

根据您的描述,我建议您可以尝试设置高以提高性能

云数据移动单元(DMU)是表示数据工厂中单个单元的功率(CPU、内存和网络资源分配的组合)的度量。DMU可以用于云到云拷贝操作,但不能用于混合拷贝。 默认情况下,Data Factory使用单个云DMU执行单个复制活动运行。要覆盖此默认值,请按如下所示指定cloudDataMovementUnits属性的值。有关为特定拷贝源和接收器配置更多单元时可能获得的性能增益级别的信息,请参阅性能参考

注意:当前只有当您将多个文件从Blob storage/Data Lake Store/Amazon S3/cloud FTP/cloud SFTP复制到Blob storage/Data Lake Store/Azure SQL数据库时,8及以上的设置才有效

因此,您可以设置的最大DMU为4

此外,如果此速度不符合您当前的要求

我建议您可以编写自己的逻辑,将documentdb复制到data lake

您可以创建多个WebJob,这些WebJob可以使用从documentdb到data lake的并行拷贝

您可以根据索引范围或分区转换文档,然后您可以使每个webjob拷贝不同的部分。在我看来,这会更快


关于dmu,我可以直接使用它还是应该先申请?你说的网络工作是指网络活动?你能提供更多的细节吗

据我所知,您可以直接使用dmu,您可以直接在json文件中添加dmu值,如下所示:

"activities":[  
    {
        "name": "Sample copy activity",
        "description": "",
        "type": "Copy",
        "inputs": [{ "name": "InputDataset" }],
        "outputs": [{ "name": "OutputDataset" }],
        "typeProperties": {
            "source": {
                "type": "BlobSource",
            },
            "sink": {
                "type": "AzureDataLakeStoreSink"
            },
            "cloudDataMovementUnits": 32
        }
    }
]
可以通过三种方式在Azure应用程序服务web应用程序的WebJobs中运行程序或脚本:按需、连续或按计划


这意味着您可以编写一个C#程序(或使用其他代码语言)来运行程序或脚本,将数据从documentdb复制到data lake(所有逻辑都应该由您自己编写)。

关于dmu,我可以直接使用它吗,还是先申请?你说的网络工作是指网络活动?你能提供更多的细节吗?谢谢您可以通过更改ADF设置直接使用dmu。web作业意味着您可以在azure中运行自己的程序。因此,您可以编写代码将documentdb并行复制到data lake,以提高性能,而无需使用ADF。我尝试了DMU=4,但性能与以前相同。所以我尝试了C#程序。你对如何用C语言复制有什么建议吗?我看到集合有保存到流的方法,但data lake似乎不支持流加载,对此有何建议?谢谢据我所知,ADLS C#sdk的DataLakeStoreFileSystemManagementClient.FileSystem.Append方法支持流。我还建议您可以使用async方法根据不同的索引查询documentdb,然后将它们上载到data lake store。我看到DocumentClient.ReadDocumentCollectionAsync可以读取集合,并返回DocumentCollection类,该类具有可以保存到流的方法SaveTo()。如果数据湖可以从流中写入,那就很容易了。现在,我看到DataLake文件系统有开放的方法,但只能读,不能写访问。