如何在DynamoDB中为数据构建适当的分析仪表板?

问题描述 投票:3回答:4

我有一组Dynamo数据库表。我想设计一个适当的解决方案来为这些表中的数据构建动态实时(或接近实时)的仪表板。

例如,如果我有表“users”,并且每个用户项都有“gender”属性。我想建立一个实时仪表板,监控男性/女性用户的数量,看看它在发布功能后如何增加/减少。

经过一番研究后,我提出了以下解决方案: - 使用连接到DynamoDB的EMR集群。 - 将EMR的输出连接到Amazon QuickSight。

这个解决方案有效吗?如果我有大量数据(例如100M行),它会正常工作吗?

amazon-web-services amazon-dynamodb analytics dashboard amazon-emr
4个回答
5
投票

如果您计划将整个DynamoDB表转储到EMR,那么哇浪费带宽,资源等等。您需要为所有Dynamodb读取容量付费。

在最简单的形式,您可以只查询表并让查询计数“男性”/“女性”(但不要这样做)。

重新思考你的设计。如果我需要知道不断变化的事物的总和,我会创建另一个表并更新每次在主表中添加/删除/修改项目。然后我可以做一个只涉及一行而不是扫描整个数据库的简单查询。

如果您确实需要转储DynamoDB,我会将其转储到S3,然后使用Amazon Athena直接从S3处理数据。对于这么简单的任务,亚马逊EMR是一个很大的过度杀伤力。


1
投票

“实时”是什么意思?像延迟5秒或5小时?因为如果是5秒或5分钟,EMR将无法工作;因为EMR基于hadoop而且是批处理。

DynamoDB本身就是一个NoSQL数据库;为什么不让这个仪表板直接查询DynamoDB表?


1
投票

正确识别后,您需要在针对分析查询优化的系统中复制数据。听起来您希望DynamoDB写入尽快反映在分析系统中。您可以通过两种方式实现这一目标:

1)将所有更新发送到分布式日志(如Kafka),并从Kafka获得DynamoDB和分析系统尾部更新。这是Kappa架构:http://milinda.pathirage.org/kappa-architecture.com/

2)使用DynamoDB's change streams从DynamoDB进行尾部更新,并将这些更新转发到另一个系统。

Rockset是系统的一个示例,它利用第二种技术自动保持Rockset中的DynamoDB和表同步。它针对分析和搜索查询进行了优化,并支持全功能SQL,这意味着它可以本机连接到仪表板解决方案,如Tableu,Apache Superset或Redash。如果您想了解更多信息,请查看此博客文章:https://rockset.com/blog/running-fast-sql-on-dynamodb-tables/

披露:我在Rockset工作。


0
投票

我将研究使用DynamoDB流,并将更改连接到Lambda函数以提取您要用作度量的信息,并将其推送到更合适的解决方案中。

对于可视化解决方案,您可以查看使用自定义Cloudwatch指标 - 您可以创建“性别”指标,并在创建用户记录时,将公/母/非二进制值推送到指标中,并让Cloudwatch汇总您的值。

然后,根据这些指标创建仪表板变得更加容易,您可以将它们存储长达15个月。如果您想要查看数天,数周等的趋势,这也会为您提供更多灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.