【问题标题】:Querying large collections in cosmos db在 cosmos db 中查询大型集合
【发布时间】:2018-02-22 22:26:40
【问题描述】:

我们目前在我们的文档数据库中有一个非常大的集合。 我们希望能够根据集合中文档中的某些字段来过滤集合。

当我通过门户执行此查询时,它需要很长时间,因为数据太多。 当我通过函数应用执行此查询时,由于超时,它会在五分钟后中断。

执行此搜索的最佳方式是什么? 是否可以通过 Application Insights 或某种方式执行此搜索? 我知道查询本身可能需要很长时间,但不应阻塞。通过门户进行查询会阻止所有其他操作。

提前致谢。 问候

【问题讨论】:

  • 正如所写,这个问题不清楚而且太宽泛:我们不知道您要查询什么数据,您要执行的查询,您的索引,您要尝试多少数据返回,如果您使用 DocumentDB SQL API 或 MongoDB API,您对“大型集合”的定义 - 10GB 单分区集合?带有分区键的多分区集合?基本上,我们只知道您遇到了超时情况。因此,如果没有更详细的信息,就无法给您任何建议。请编辑您的问题,使其更加具体,包括我提到的细节。
  • @GauravMantri - 老实说,由于问题中提供的信息很少,我认为工具推荐并不重要。
  • @DavidMakogon ...同意并删除了我的评论。平心而论,我阅读这个问题的方式是 OP 知道该查询是一个耗时的查询,但想要一种非阻塞的方式来执行它。这就是我提出工具推荐的原因。
  • 有什么更新吗?我的回答对你有帮助吗?
  • @JayGong 你的回答是让我找到正确的解决方案。我今天将尝试实施您的建议。如果它不起作用,我会在这里通知你。

标签: azure azure-cosmosdb


【解决方案1】:

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

其次,如果要从Document DB中查询大数据,则要考虑查询性能问题,请参考这篇文章:Tuning query performance with Azure Cosmos DB。

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

Azure 门户不会自动帮助您优化 SQL,因此您需要在 sdk 或 rest api 中进行处理。

您可以设置Max Item Count 的值并使用continuation tokens 对数据进行分页。 Document Db sdk 支持无缝读取分页数据。可以参考python代码的sn-p如下:

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})

希望对你有帮助。

【讨论】:

    【解决方案2】:

    CosmosDB 具有极低的延迟和极低的可预测性,但在返回大型结果集时,使用起来确实很麻烦,除非您可以在其上花费大量美元。您的一种方法可能是将 CosmosDb 用于您的域模型,然后使用 ChangeFeed 来处理您需要的读取模型,在我的情况下,我拥有处理所有插入/更新的域模型。然后作为第二步,它启动一个获取结果集的 ChangeFeedProcessing,并查看该模型是否需要一个或多个 readmodel,如果需要,它需要什么存储,目前我可以持久化并将 readmodel 更新为TableStorage 或 Azure 搜索或两者兼而有之。 https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed

    【讨论】:

    • 我还发现 cosmos db 不擅长聚合。这也是你的经历吗?我的意思是存在一些已知问题,比如一次只能对一列求和,除非你在一个分区中,但即使考虑到这些限制,性能也比我希望的要低。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2018-12-17
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多