我试图从一个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。在
任何关于如何解决这个问题的想法都是非常感谢的!在
首先,您需要知道的是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代码片段:你可以参考另一个例子:How do I set continuation tokens for Cosmos DB queries sent by document_client objects in Python?
相关问题 更多 >
编程相关推荐