如何使用Dynamodb进行基本聚合?
用dynamodb如何实现聚合? Mongodb和couchbase有地图减少支持。
比方说,我们正在建立一个科技博客,用户可以发布文章。 并说文章可以被标记。
user
{
id : 1235,
name : "John",
...
}
article
{
id : 789,
title: "dynamodb use cases",
author : 12345 //userid
tags : ["dynamodb","aws","nosql","document database"]
}
在用户界面中,我们想要显示当前用户标签和相应的计数。
如何实现以下聚合?
{
userid : 12,
tag_stats:{
"dynamodb" : 3,
"nosql" : 8
}
}
我们将通过rest api提供这些数据,并且会经常调用它。 就像这个信息显示在应用程序主页面。
我想知道实现这一目标的其他更好方法。 人们如何实现像这些动态简单查询,选择dynamodb作为考虑成本和响应时间的主数据存储。
长话短说:迪纳摩不支持这一点。 它不是为这个用例而构建的。 它旨在以低延迟快速访问数据。 它根本不支持任何聚合功能。
您有三个主要选项:
将DynamoDB数据导出到Redshift或EMR Hive。 然后你可以对陈旧的数据执行SQL查询。 这种方法的好处是它只消耗一次RCU,但是你会坚持使用过时的数据。
为Hive使用DynamoDB连接器并直接查询DynamoDB。 您可以再次编写任意SQL查询,但在这种情况下,它将直接访问DynamoDB中的数据。 缺点是,它会消耗每个查询的读取容量。
使用DynamoDB流在单独的表中维护聚合数据。 例如,您可以将一个表UserId作为分区键,并将嵌套地图与标记和计数作为属性。 在原始数据的每个更新中,DynamoDB流将执行Lambda函数或主机上的某些代码来更新聚合表。 这是最具成本效益的方法,但您需要为每个新查询实现附加代码。
当然,您可以在应用程序级别提取数据并将其聚合在那里,但我不建议这样做。 除非你有一张小桌子,否则你需要考虑限制,只使用一部分预置容量(例如,要消耗20%的RCU进行聚合,而不是100%),以及如何将工作分配给多个工作人员。
Redshift和Hive都已经知道如何做到这一点。 Redshift在执行查询时依赖于多个工作节点,而Hive则基于Map-Reduce的顶层。 此外,Redshift和Hive都可以使用预定义的RCU吞吐量百分比。
链接地址: http://www.djcxy.com/p/96311.html