首页 文章

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

提问于
浏览
1

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

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

Microsoft文档https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-activity-performance提到从cosmos到数据湖存储的最大速度为1MB / s . 即使这样,性能仍然对我们不利 .

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

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

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

1 回答

  • 0

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

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

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

    所以你可以设置的最大DMU是4 .

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

    我建议你可以编写自己的逻辑来将documentdb复制到data lake .

    您可以创建多个webjobs,可以使用从documentdb到data lake的并行副本 .

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

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

    据我所知,你可以直接使用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
            }
        }
    ]
    

    webjob可以通过三种方式在Azure App Service Web应用程序中运行WebJobs中的程序或脚本:按需,连续或按计划 .

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

相关问题