【发布时间】:2017-09-29 14:57:03
【问题描述】:
我有一个 Cosmos DB 集合,其中包含基于设备 ID 的多个分区。我经常遇到需要通过特定设备 ID 检索最新文档的用例。我目前正在使用 DocumentDB API 中提供的SELECT TOP 1 功能,如下所示:
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 子句可能会导致意外或丢失结果。
【问题讨论】:
标签: azure-cosmosdb