Создать коллекцию на лазурном космосе слишком медленно - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь автоматически загрузить документ CSV в базу данных SQL API Azure Cosmos с Python, используя pydocumentdb. Я использую панды для выполнения некоторой предварительной обработки данных, а затем преобразовываю каждую строку в формате JSON. Наконец, я создаю документ для каждой преобразованной строки CSV.

Исходный csv составляет около 431 МБ и 5173620 регистров (строк), что означает, что мне нужно использовать каждый регистр (строку) в качестве нового документа. Я обнаружил, что функция createDocument () работает очень медленно (более одного дня для всех регистров). В то время как для односегментной базы данных Cosmos db ограничено 10000 RU, на запрос «Подсчитать все документы» затрачивается 29025,92 RU, и результат кажется неточным.

Интересно, есть ли способ повысить производительность функции createDocument. Также я хотел бы знать, как определить RU в функции createCollection. Любой совет будет приветствоваться.

# create document
coll_link = createColl(client, db_link, coll_id)

... preprocess a pandas Dataframe df...

# create a collection
for index, row in df.iterrows():
    doc = row.to_dict()
    client.CreateDocument(coll_link, doc)

1 Ответ

0 голосов
/ 25 июня 2018

1.Я хотел бы узнать, как определить RU в функции createCollection.

Добавить offerThroughput параметр.

databaseLink = "dbs/db"
coll = {
        "id": "testCreate",
        "indexingPolicy": {
            "indexingMode": "lazy",
            "automatic": False
        },
        "partitionKey": {
            "paths": [
              "/AccountNumber"
            ],
            "kind": "Hash"
        }
       }
collection_options = { 'offerThroughput': 2000}
client.CreateCollection(databaseLink , coll, collection_options)

2. Интересно, есть ли способ повысить производительность функции createDocument.

Во-первых, я не думаю, что функция createDocument() очень медленная, вместо этого должен быть весь процесс импорта.медленно из-за ваших данных.Основываясь на вашем описании, вы не столкнетесь с ошибкой, такой как Частота запросов слишком велика . Учитывая ваши экономические проблемы, я не рекомендую вам бесконечно увеличивать настройки RU. Можно рассмотреть возможность использования хранимой процедуры для массового импорта вашегоданные. Пожалуйста, обратитесь к образцу в официальном документе .

3.Другой выбор.

Вы можете использовать Azure Data Factory для импорта данных из CSV-файла непосредственно в dos cosmos. Пожалуйста, обратитесь к шагам в моем предыдущем ответе: Преобразование JSON в CSV в Azure Cosmos DB или Azure Blob .Просто конвертируйте ввод и вывод.


Обновление:

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

Хранимая процедура Cosmos db - это фрагмент кода js, который выполняется на стороне сервера cosmos db.Поэтому, если вы используете его для массового импорта данных, это может снизить нагрузку на вашу клиентскую сторону.

Могу ли я добавить процедуру хранения в Java-коде в мой код Python?

Cosmos DB Хранимая процедура представляет собой фрагмент кода js, выполняемого на стороне сервера cosmos db.Вы можете вызвать хранимую процедуру в cosmos db python sdk .

Что касается фабрики данных, возможно ли автоматизировать процесс, чтобы обобщить его для различных коллекций и БД?

Исходя из свойств набора данных базы данных Cosmos DB фабрики Azure , необходимо настроить имя коллекции.Таким образом, вы не можете создать набор данных для разных коллекций.Конечно, вы можете изменить имя коллекции в sdk по своему усмотрению вместо создания нескольких наборов данных.

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

...