COSMOS DB(DocumentDB API):通过分区ID查询最新文档的有效方法



我有一个基于设备ID的cosmos db集合。我经常有用例使用特定设备ID检索最新文档的用例。我目前正在使用DocumentDB API中可用的SELECT TOP 1功能来完成此操作:

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

正如人们所期望的那样,随着收集和各个分区的增加,这种方法会增加RU/S消耗和降低性能。作为对此问题的临时补救措施,我添加了其他条款来限制时间戳的查询范围的其他条款:

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选择最新文档,因为此条款可能会导致意外或丢失结果。

我也有类似的场景,其中我正在跟踪的资产ID形成了我的分区密钥,在该分区中,每天每天有2,880个事件,并且将继续增长时间。

虽然其他用例需要完整的事件历史记录,但此特殊用例需要提取最新事件。因此创建了使用同一分区密钥的替代集合,但包含当前状态,即该资产的最新事件。

当事件写入写入方面时,是持续资产的所有事件的集合,触发器会以最新值更新读取侧。

虽然这似乎是在写作上的努力,但在我们的用例中,读取方面的性能提高了。

我发现此MS文章用于使用Azure Cosmos DB

中的变更供稿支持。

最新更新