【问题标题】:Azure CosmosDB: get the last month's documents by dayAzure CosmosDB:按天获取上个月的文档
【发布时间】:2019-01-07 10:47:37
【问题描述】:

我将 Azure CosmosDB 与 SQL api 结合使用,并尝试在我的前端创建一个图表,该图表表示一个月内每个特定日期已上传的所有文档。该图表最多应为一个月。下面我附上了我的想法的模拟截图。在 cmets 中进行一些讨论后,我也会添加数据模式。

数据消息示例(分区键为/message/deviceId

{
    "message": {
        "deviceId": "device01",
        "timestamp": "2018-07-25T08:47:16,094",
        "payload": "6c,65,33",
    },
    "id": "ff670801-de08-422c-be0a-fa67e6324bb8",
    "_rid": "75klAPTTTHADAAAAAAAAAA==",
    "_self": "dbs/75klAA==/colls/75klAPTTTHA=/docs/75klAPTTTHADAAAAAAAAAA==/",
    "_etag": "\"0000bc1d-0000-0000-0000-5c112e5a0000\"",
    "_attachments": "attachments/",
    "_ts": 1544629850
}

现在我的问题是:获取此类数据的最佳方式是什么?我通常会选择更简单、更快速的函数,但我认为这种方法不会真正起作用,因为我需要获取上个月几乎所有的数据来获取上传了多少次;这样做也将花费大量时间和金钱。

是否有其他方法可以收集此类数据?你们会推荐另一种方法吗?如果有,是哪一个?我不想再添加任何服务,因为我已经在从事一个相对较大的项目,并且我正在熟悉所有这些服务。

编辑:创建某种文档来保存有关当前月份的所有信息(例如天数组)是不是一个坏主意?因此,查询将只在数组之外的日期运行。

非常感谢您的帮助!

【问题讨论】:

  • 你为什么不为此添加一个javascript存储过程呢?他们使用更少的 RU,并保证快速响应
  • @monstertjie_za - 存储过程有什么帮助?它们的范围仅限于单个分区,因此该解决方案仅适用于单个分区集合。另外,为什么存储过程会使用更少的 RU?它仍然必须在存储过程中执行查询。可能会节省往返带宽。
  • 如果没有关于您的数据模型的任何详细信息,很难对此提供任何答案。至于“获取所有数据” - 同样,如果没有看到您的数据模型,就不可能知道这是否有必要,而不是利用诸如 SUM()COUNT() 之类的聚合函数。至于您将摘要数据存储在单个文档中的想法,这可能可行,但您需要保证为您上传的每个新文档执行任何更新逻辑。
  • @DavidMakogon 您会将什么归类为数据模型?我可以告诉你,我的数据是存储在同一个数据库、同一个集合和显然是同一个分区中的简单 JSON,它们报告一个 timestamp、一个 deviceId 和一个值(将其视为温度)。这些是非常简单的数据结构,我只是想知道是否有一种更简单的方法可以每天获取COUNT(),而不必创建自定义函数。顺便说一句,我可以确保更新逻辑可以 100% 工作,因为我会将它放在从 IoTHub 获取数据到 CosmosDB 的函数中。
  • @Eugenio - 我建议编辑您的问题以显示示例文档、示例摘要输出以及您尝试过的内容。另请注意:所有数据都在同一个分区中并不明显,即使您在评论中提到的属性也是如此;你还没有分享你的分区键是什么。这是否意味着您正在使用固定分区集合?

标签: azure-cosmosdb


【解决方案1】:

我来自 CosmosDB 工程团队。根据您的问题,我了解到您需要上个月每天更新的文档数量。

您可以通过两种方式做到这一点:

  1. 针对您感兴趣的日期发出一个带有 _ts 过滤器的 COUNT() 查询。这目前不是最理想的 - 我们正在努力更有效地提供聚合服务,并且也支持 GROUP BY,但我们不还没有这些功能的固定日期。如果文档数量足够少并且您的集合没有繁重的工作量,您仍然可以坚持使用此选项。
  2. 您可以从源集合中设置更改提要管道,捕获所有更改并更新一个单独的元数据文档,该文档指示每天的更新次数以及来自提要的更改。这是使用更改提要处理器的链接:https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed

【讨论】:

  • 非常感谢,非常准确和直接,不胜感激。我可能会使用第一个选项,因为现在我们的工作量很小,但是如果我们将来扩展,我会继续关注它,再次感谢!
  • @Krishnan 在更改提要中有什么方法可以识别文档是否已更新或创建?
猜你喜欢
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多