首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DynamoDB中选择时间序列数据的复合键

在DynamoDB中选择时间序列数据的复合键
EN

Stack Overflow用户
提问于 2019-09-24 14:56:31
回答 1查看 1K关注 0票数 2

我有一个时间序列数据,我想存储在DynamoDB上,关于开发人员任务的事件(包含在数据中)。我很难决定选择哪个分区键和排序键来服务我的访问,需要最好的方式。我应该选择哪些密钥/ GSI来满足我的访问需求,下面将对此进行解释。

数据:

代码语言:javascript
复制
TaskId   Date/Time  TeamId         Data
1            3/21/2018   teamA          Data
1            3/22/2018   teamA          Data
1            3/23/2019   teamA          Data
5            7/13/2019   teamA          Data
5            7/15/2019   teamA          Data
3            7/17/2019   teamA          Data
4            7/22/2019   teamC          Data
3            7/24/2019   teamA          Data
4            7/24/2019   teamC          Data
2            7/24/2019   teamB          Data
5            7/24/2019   teamA          Data
6            8/16/2019   teamA          Data
6            8/19/2019   teamA          Data
6            8/28/2019   teamA          Data

存储:

时间序列。

访问:

  1. 我希望在一个特定TeamId的时间框架内获得所有结果。例如,通过在teamA之间查询7/16/2019-8/20/2019,我将得到:
代码语言:javascript
复制
3            7/17/2019   teamA          Data
3            7/24/2019   teamA          Data
5            7/24/2019   teamA          Data
6            8/16/2019   teamA          Data
6            8/19/2019   teamA          Data
  1. 我希望在一个有specificTeamId的时间框架内为每个TaskId获得最新的结果。例如,通过在teamA之间查询3/1/2019-8/1/2019,我将得到:
代码语言:javascript
复制
1            3/23/2019   teamA          Data
3            7/24/2019   teamA          Data
5            7/24/2019   teamA          Data
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 06:34:37

通过使用TeamId作为散列键和Date/Time作为排序键,您的第一个查询很容易解决。如果您希望在写入表时使用不同的键,也可以使用这些键创建GSI。

您的第二个查询不可能完全在DynamoDB中运行。您想要的在SQL中很容易地表示为:

代码语言:javascript
复制
SELECT taskId, MAX(dateTime), teamId, data FROM tasks WHERE teamId=123 AND dateTime > earlierDate AND dateTime < laterDate GROUP BY taskId

在DynamoDB中,可以为单个特定任务在日期范围内选择最新事件。还可以使用表的物化聚合为属于特定团队的所有任务选择所有时间的最新事件。

您可以对此查询使用DynamoDB,但为了获得所需的结果,需要在给定的时间范围内为团队选择所有任务事件,然后在应用程序中需要处理每个taskId的最新事件。这是可能的,但它不会有很好的性能,它将是非常昂贵的。

我看到你还有两种选择。第一种方法是将数据复制到另一个可以支持分析和/或搜索查询的数据库中。您可以在近乎实时的使用DynamoDB流、“连续”(根据AWS文档)使用AWS数据库迁移服务或定期使用AWS DataPipelines执行此操作。您可以将数据发送到分析数据库(如亚马逊红移 )、搜索数据库(如ElasticSearch )或数据库排序方案(即S3上的雅典娜 )。

另一种选择是使用不同的主数据库。您可能对亚马逊QLDB感兴趣,它是一个完全管理的、无服务器的数据库,它支持PartiQL (几乎是SQL的超集)和离子 (json的超集)文档。您还可以考虑亚马逊Aurora亚马逊DocumentDB

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58083114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档