如何修复Azure CosmosDB上仅在具有大数据的集合上出现的查询问题?

2024-09-28 17:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个CosmosDB集合(MachineCollection)读取大量数据(58gb数据;索引大小9gb)。吞吐量设置为1000 RU/s。收集使用序列号、读取位置(西欧、北欧)、写入位置(西欧)进行分区。在我尝试阅读的同时,MachineCollection每隔20秒就会收到一次数据。在

问题是我不能通过Python查询任何数据。如果我在cosmsdb dataexplorer上执行查询,很快就会得到结果。(例如查询某个序列号)。在

为了进行故障排除,我创建了一个新的数据库(TestDB)和一个TestCollection。在这个TestCollection中,有10个MachineCollection的数据集。如果我尝试通过Python从这个MachineCollection中读取,它会成功,并且我可以将数据保存到CSV。在

这让我想知道,当配置TestDB和TestCollection时,为什么不能从machinecolection查询数据。在

我已经尝试通过Python进行查询:

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

一如既往。可用于TestCollection,但不适用于MachineCollection。在

任何关于如何解决这个问题的想法都是非常感谢的!在


Tags: csv数据数据库ru吞吐量故障options序列号
1条回答
网友
1楼 · 发布于 2024-09-28 17:22:21

首先,您需要知道的是documentdb对Response page size施加了限制。这个链接总结了其中的一些限制:Azure DocumentDb Storage Limits - what exactly do they mean?

其次,如果要从documentdb查询大数据,就必须考虑查询性能问题,请参考本文:Tuning query performance with Azure Cosmos DB。在

通过查看Document DB REST API,可以观察到几个对查询操作有重大影响的重要参数:x-ms-max-item-count, x-ms-continuation.

我知道,azureportal不会自动帮助您优化SQL,所以您需要在sdk或restapi中处理这个问题。在

您可以设置Max Item Count的值并使用continuation token对数据进行分页。documentdbsdk支持无缝读取分页数据。您可以参考下面的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})

你可以参考另一个例子:How do I set continuation tokens for Cosmos DB queries sent by document_client objects in Python?

相关问题 更多 >