【问题标题】:Cosmos db to store and retrieve thousands of documents with in secondsCosmos db 在几秒钟内存储和检索数千个文档
【发布时间】:2021-01-27 15:53:20
【问题描述】:

我在 cosmos db 中使用适当的分区键存储数百万个文档。我需要检索 500,000 个文档来进行一些计算并在 UI 中显示输出,这应该在 10 秒内发生。 这可能吗?我已经尝试过了,但花了将近一分钟。那么对于这种需求,这样的做法是否正确?

"id": "Latest_100_Sku1_1496188800",
    "PartitionKey": "Latest_100_Sku1
    "SnapshotType": 2,
    "AccountCode": "100",
    "SkuCode": "Sku1",
    "Date": "2017-05-31T00:00:00",
    "DateEpoch": 1496188800,
    "Body": "rVNBa4MwFP4v72xHElxbvYkbo4dBwXaX0UOw6ZRFIyaBFfG/7zlT0EkPrYUcku+9fO/7kvca"

一个文档的大小:825 字节

我正在使用自动缩放 4000 吞吐量

查询统计信息 - 我正在使用 2 个查询。

查询 1 - select * from c where c.id in ({ids}) 这里我在查询选项中使用了 PartitionKey。

查询统计 公制 价值 要求收费 102.11 RU 显示结果 1 - 100 检索到的文档计数 更多信息 200 检索到的文档大小 更多信息 221672 字节 输出文档计数 更多信息 200 输出文档大小 更多信息 221972 字节 索引命中文档计数 更多信息 200 索引查找时间 更多信息 17.0499 毫秒 文件加载时间 更多信息 1.59 毫秒 查询引擎执行时间更多信息 0.3401 毫秒 系统函数执行时间 更多信息 0.060000000000000005 毫秒 用户定义函数执行时间 更多信息 0 毫秒 文档写入时间 更多信息 0.16 毫秒 往返 1

查询 2 -- select * from c where c.PartitionKey in ({keys}) and c.DateEpoch>={startDate.ToEpoch()} and c.DateEpoch

查询统计 公制 价值 要求收费 226.32 RU 显示结果 1 - 100 检索到的文档计数 更多信息 200 检索到的文档大小 更多信息 176580 字节 输出文档计数 更多信息 200 输出文档大小 更多信息 176880 字节 索引命中文档计数 更多信息 200 索引查找时间 更多信息 88.31 毫秒 文件加载时间 更多信息 4.2399000000000004 毫秒 查询引擎执行时间更多信息 0.4701 毫秒 系统函数执行时间 更多信息 0.060000000000000005 毫秒 用户定义函数执行时间 更多信息 0 毫秒 文档写入时间 更多信息 0.19 毫秒 往返 1

【问题讨论】:

  • 没有足够的信息来回答这个问题。请在您的容器中包含示例文档、您尝试运行的查询、容器的分区键、预置的 RU/s 数量以及显示查询统计信息的数据资源管理器的输出。
  • 我已经根据您的要求编辑了详细信息。

标签: azure-cosmosdb


【解决方案1】:

查询 #1 看起来不错。查询 #2 很可能会受益于 DateEpoch 上的复合索引。我不确定 UDF 是什么,但如果您要将日期转换为纪元,您想阅读新的博客文章 New date and time system functions in Azure Cosmos DB

总体而言,在 1-2 次查询中检索 500K 文档以进行一些计算似乎是一个奇怪的用例。通常,大多数人会使用change feed 使用物化视图模式预先计算值并持久化它们。根据您运行这两个查询的频率,这通常可以更有效地利用计算资源。

【讨论】:

  • 感谢 Mark,我在 DateEpoch 上尝试了复合索引,但没有多大帮助。我无法存储预先计算的结果,因为我的场景是用户可以选择 4 年的任何日期范围,我会为这些选定的日期加载文档并进行计算。我增加了吞吐量,但没有提高。当我将服务转移到 P3V2 时,具有更多计算能力的更好的应用程序计划得到了更好的响应。我同时调用这两个查询。
  • 此方案更适合 Synapse Link,而不是 Cosmos DB。 Cosmos 是一个可操作的数据库,与大型 OLAP 类型的查询相比,它更适合于大容量 OLTP。我会看看 Synapse Link,看看它是否更适合你。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2021-04-13
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
相关资源
最近更新 更多