gpt4 book ai didi

azure-cosmosdb - Cosmos DB (DocumentDB API) : Efficient way to query most recent document by partition ID?

转载 作者:行者123 更新时间:2023-12-04 15:40:03 25 4
gpt4 key购买 nike

我有一个 Cosmos DB 集合,其中包含基于设备 ID 的多个分区。我经常遇到需要通过特定设备 ID 检索最新文档的用例。我目前正在使用 SELECT TOP 1 DocumentDB API 中可用的功能如下所示:

SELECT TOP 1 *
FROM c
WHERE c.deviceId = 5
ORDER BY c.timeStamp DESC

这种方法会导致 RU/s 消耗增加并随着集合和单个分区大小的增长而降低性能,正如人们所期望的那样。作为对这个问题的临时补救措施,我添加了额外的 where 子句以通过时间戳限制查询的范围:
SELECT TOP 1 *
FROM c
WHERE c.deviceId = 5
AND c.timeStamp >= 1506608558 --timestamps are unix/epoch based to optimize indexing
AND c.timeStamp <= 1506694958
ORDER BY c.timeStamp DESC

我想知道是否有更好的方法来通过分区 id 选择最新的文档,因为添加这个 where 子句可能会导致意外或丢失的结果。

最佳答案

我有一个类似的场景,我正在跟踪的 Assets 的 Id 形成了我的分区键,在该分区内,每个 Assets 每天有 2,880 个事件,并且会随着时间的推移继续增长。

虽然其他用例需要完整的事件历史记录,但这个特定的用例需要提取最新的事件。因此创建了一个备用集合,它使用相同的分区键,但包含 CURRENT 状态,即该 Assets 的最新事件。

当一个事件被写入 WRITE 端时,它是一个持久化 Assets 的所有事件的集合,一个触发器用最新的值更新 READ 端。

虽然这似乎使写入的工作量加倍,但在我们的用例中,读取端的性能提升弥补了这一点。

我发现这篇 MS 文章很有用 Working with the change feed support in Azure Cosmos DB

关于azure-cosmosdb - Cosmos DB (DocumentDB API) : Efficient way to query most recent document by partition ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com