【发布时间】: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