Как повысить производительность при копировании данных из cosmosdb?

Теперь я пытаюсь скопировать данные из cosmosdb в хранилище озера данных с помощью фабрики данных.

Однако производительность оставляет желать лучшего, около 100 КБ / с, а объем данных составляет 100+ ГБ и продолжает увеличиваться. На это уйдет 10+ дней, что недопустимо.

Документ Microsoft https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-activity-performance упомянул, что максимальная скорость от космоса до хранилища озера данных составляет 1 МБ / с. Даже в этом случае производительность для нас все равно плохая.

Инструмент миграции в космос не работает, данные не экспортируются, и нет журнала проблем.

Аналитика озера данных usql может извлекать внешние источники, но в настоящее время поддерживаются только Azure DB / DW и SQL Server, а не cosmosdb.

Как / какие инструменты могут улучшить производительность копирования?


person Azure.H    schedule 11.07.2017    source источник


Ответы (1)


Согласно вашему описанию, я предлагаю вам попробовать установить высокий cloudDataMovementUnits, чтобы повысить производительность.

Единица перемещения облачных данных (DMU) - это мера, которая представляет мощность (комбинацию распределения ресурсов ЦП, памяти и сетевых ресурсов) одной единицы в фабрике данных. DMU можно использовать в операции копирования из облака в облако, но не в гибридной копии. По умолчанию фабрика данных использует один облачный DMU для выполнения одного запуска операции копирования. Чтобы переопределить это значение по умолчанию, укажите значение свойства cloudDataMovementUnits следующим образом. Для получения информации об уровне прироста производительности, который вы можете получить при настройке большего количества единиц для определенного источника и приемника копирования, см. Справочник по производительности.

Примечание. Значение 8 и выше в настоящее время работает только при копировании нескольких файлов из хранилища BLOB-объектов / Data Lake Store / Amazon S3 / облачного FTP / облачного SFTP в хранилище BLOB-объектов / Data Lake Store / базу данных SQL Azure.

Таким образом, максимальное значение DMU, ​​которое вы можете установить, составляет 4.

Кроме того, если эта скорость не соответствует вашим текущим требованиям.

Я предлагаю вам написать свою собственную логику для копирования documentdb в озеро данных.

Вы можете создать несколько веб-заданий, которые могут использовать параллельное копирование из documentdb в озеро данных.

Вы можете преобразовать документ в соответствии с диапазоном индекса или разделом, а затем вы можете сделать каждую копию веб-задания отдельной частью. На мой взгляд, так будет быстрее.

Что касается dmu, могу ли я использовать его напрямую или мне нужно сначала подать заявку? Вы имеете в виду, что веб-вакансии - это активность dotnet? Вы можете подробнее рассказать?

Насколько я знаю, вы можете напрямую использовать dmu, вы можете напрямую добавить значение dmu в файл json, как показано ниже:

"activities":[  
    {
        "name": "Sample copy activity",
        "description": "",
        "type": "Copy",
        "inputs": [{ "name": "InputDataset" }],
        "outputs": [{ "name": "OutputDataset" }],
        "typeProperties": {
            "source": {
                "type": "BlobSource",
            },
            "sink": {
                "type": "AzureDataLakeStoreSink"
            },
            "cloudDataMovementUnits": 32
        }
    }
]

веб-задание который может запускать программы или сценарии в веб-заданиях в веб-приложении службы приложений Azure тремя способами: по запросу, непрерывно или по расписанию.

Это означает, что вы можете написать программу C # (или использовать другой язык кода) для запуска программ или сценариев для копирования данных из documentdb в озеро данных (вся логика должна быть написана вами).

person Brando Zhang    schedule 12.07.2017
comment
Что касается dmu, могу ли я использовать его напрямую или мне нужно сначала подать заявку? Вы имеете в виду, что веб-вакансии - это активность dotnet? Вы можете подробнее рассказать? Спасибо! - person Azure.H; 12.07.2017
comment
Вы можете напрямую использовать dmu, изменив настройку ADF. Веб-задания означают, что вы можете запускать свою собственную программу в лазурном режиме. Таким образом, вы можете писать коды для параллельного копирования из documentdb в озеро данных для повышения производительности без использования ADF. - person Brando Zhang; 13.07.2017
comment
Я пробовал DMU = 4, однако производительность такая же, как и раньше. Итак, я попробовал программу на C #. Есть ли у вас предложения, как сделать копию на C #? Я вижу, что в коллекции есть метод сохранения в поток, но озеро данных, похоже, не поддерживает загрузку потока, какие-либо предложения по этому поводу? Спасибо! - person Azure.H; 13.07.2017
comment
Насколько мне известно, поток поддержки метода DataLakeStoreFileSystemManagementClient.FileSystem.Append ADLS C # sdk. Я также предлагаю вам использовать метод async для запроса documentdb в соответствии с другим индексом, а затем загрузить их в хранилище озера данных. - person Brando Zhang; 14.07.2017
comment
Я вижу, что DocumentClient.ReadDocumentCollectionAsync может читать коллекцию и возвращать класс DocumentCollection, у которого есть метод SaveTo (), который может сохранять в поток. Если бы озеро данных можно было записать из потока, это было бы легко. На данный момент я вижу, что файловая система озера данных имеет метод Open, но может только читать, без письменного доступа. Метод Append загружается из потока, в то время как наши данные огромны, и нецелесообразно загружать его без локального файла, а затем загружать в озеро данных из-за ограничения скорости из космоса. - person Azure.H; 14.07.2017
comment
Согласно вашему описанию, теперь вы хотите напрямую загрузить всю коллекцию, а затем напрямую загрузить в ADLS? Я не предлагаю вам это делать, идея моего предложения состоит в том, чтобы вы могли написать свою собственную логику, чтобы разделить всю коллекцию на несколько частей. На мой взгляд, вы также можете сделать это с помощью ADF. Вы можете создать несколько конвейеров, содержащих разные запросы. Кроме того, не могли бы вы назвать текущий RU вашего documentdb? - person Brando Zhang; 17.07.2017