Как максимизировать скорость загрузки БД с помощью Azure Cosmos db - PullRequest
0 голосов
/ 25 августа 2018

Вот моя проблема. Я пытаюсь загрузить большой CSV-файл в космос db (~ 14 ГБ), но мне трудно максимизировать пропускную способность, за которую я плачу. В пользовательском интерфейсе обзора метрик портала Azure говорится, что я использую 73 RU / s, когда я плачу за 16600 RU / s. Прямо сейчас я использую функцию массовой записи pymongo для загрузки в базу данных, но я обнаружил, что любая длина bulk_write, превышающая 5, вызовет жесткое исключение Request rate is large.. Я делаю это неправильно? Есть ли более эффективный способ загрузки данных в этом сценарии? Пропускная способность интернета, вероятно, не проблема, потому что я загружаю из лазурного виртуального диска в космос db.

Структура того, как я сейчас загружаю в python:

for row in csv.reader:
    row[id_index_1] = convert_id_to_useful_id(row[id_index_1])

    find_criteria = {
        # find query
    }

    upsert_dict = {
        # row data
    }
    operations.append(pymongo.UpdateOne(find_criteria, upsert_dict, upsert=True))

    if len(operations) > 5:

        results = collection.bulk_write(operations)

        operations = []

Любые предложения будут с благодарностью.

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Аарон.Да, как вы сказали в комментарии, инструмент миграции поддерживается API Azure Cosmos DB MongoDB.Вы можете найти оператор удара в официальном документе .

. В настоящее время инструмент переноса данных не поддерживает API-интерфейс Azure Cosmos DB MongoDB в качестве источника или цели.Если вы хотите перенести данные в или из коллекций API MongoDB в Azure Cosmos DB, обратитесь к инструкции Azure Cosmos DB: Как перенести данные для API MongoDB.Вы по-прежнему можете использовать инструмент переноса данных для экспорта данных из MongoDB в коллекции API SQL Azure Cosmos DB для использования с SQL API.

Я просто предоставляю вам обходной путь, который вы можете использовать Фабрика данных Azure .Обратитесь к этому doc , чтобы сделать космическую базу данных в качестве приемника. И обратитесь к этому doc , чтобы сделать файл csv в хранилище BLOB-объектов Azure в качестве источника. В конвейере вы можете настроитьразмер партии.

enter image description here

Конечно, вы можете сделать это программно.Вы что-то не пропустили, ошибка Request rate is large просто означает, что вы превысили установленную квоту RU.Вы можете увеличить значение настройки RU.Пожалуйста, обратитесь к этому документ .

Любая проблема, пожалуйста, дайте мне знать.

0 голосов
/ 29 августа 2018

Мне удалось улучшить скорость загрузки. Я заметил, что у каждого физического раздела был предел пропускной способности (который по какой-то причине число физических разделов, умноженных на пропускную способность на раздел, все еще не является общей пропускной способностью для коллекции), поэтому я разделил данные по каждому разделу и затем создал отдельный процесс загрузки для каждого ключа раздела. Это увеличило мою скорость загрузки в (# количество физических разделов) раз.

0 голосов
/ 25 августа 2018

Я бы посмотрел на Cosmos DB: инструмент миграции данных . Я не использовал это с MongoDB API, но это поддерживается. Я использовал это, чтобы с большим успехом переместить множество документов с моего локального компьютера в Azure, и он будет использовать доступные RU / s.

Если вам нужно сделать это программно, я предлагаю взглянуть на исходный код для DB Migration Tool. Это с открытым исходным кодом. Вы можете найти код здесь .

...