Как устранить проблему с запросом в Azure CosmosDB, которая возникает только для коллекций с большими данными? - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь прочитать из коллекции CosmosDB (MachineCollection) с большим объемом данных (58 ГБ данных; размер индекса 9 ГБ).Пропускная способность установлена ​​на 1000 РУ / с.Коллекция разделена с помощью Серийного номера, Чтения Местоположения (Западная Европа, Северная Европа), Писания Местоположение (Западная Европа).Одновременно с моими попытками чтения, MachineCollection подается с данными каждые 20 секунд.

Проблема в том, что я не могу запросить данные через Python.Если я выполню запрос в CosmosDB Data Explorer, я получу результаты в кратчайшие сроки.(например, запрос определенного серийного номера).

В целях устранения неполадок я создал новую базу данных (TestDB) и TestCollection.В этом TestCollection имеется 10 наборов данных MachineCollection.Если я попытаюсь прочитать из этого MachineCollection через Python, то это удастся, и я смогу сохранить данные в CSV.

Это заставляет меня задуматься, почему я не могу запрашивать данные из MachineCollection при настройке TestDB и TestCollectionс точно такими же свойствами.

То, что я уже пробовал для запросов через Python:

options['enableCrossPartitionQuery'] = True
Querying using PartitionKey:   options['partitionKey'] = 'certainSerialnumber'

То же, что и всегда.Работает с TestCollection, но не с MachineCollection.

Любые идеи о том, как решить эту проблему, высоко ценятся!

1 Ответ

2 голосов
/ 18 апреля 2019

Во-первых, вам нужно знать, что Document DB накладывает ограничения на Response page size.Эта ссылка суммирует некоторые из этих ограничений: Пределы хранилища Azure DocumentDb - что именно они означают?

Во-вторых, если вы хотите запрашивать большие данные из БД документов, вы должны рассмотреть запроспроблема производительности, обратитесь к этой статье: Настройка производительности запросов с помощью Azure Cosmos DB .

Рассматривая Document DB REST API , вы можете наблюдать несколько важных параметровчто существенно влияет на операции запросов: x-ms-max-item-count, x-ms-continuation.

Как я знаю, портал Azure не помогает автоматически оптимизировать SQL, поэтому вам нужно обрабатывать это в API sdk или rest.

Вы можете установить значение Макс. Количество элементов и разбить данные на страницы, используя continuation token.Document Db SDK поддерживает плавное чтение разбитых на страницы данных.Вы можете сослаться на фрагмент кода Python, как показано ниже:

q = client.QueryDocuments(collection_link, query, {'maxItemCount':10})
results_1 = q._fetch_function({'maxItemCount':10})
#this is a string representing a JSON object
token = results_1[1]['x-ms-continuation']
results_2 = q._fetch_function({'maxItemCount':10,'continuation':token})

В другом случае вы можете сослаться на: Как установить токены продолжения для запросов к базе данных Cosmos, отправляемых объектами document_client в Python?

...