我有一个DynamoDB,其中有50个不同的列,分别标记为问题1-问题50。这些列中的每一个都有a
,b
,c
或d
作为答案选择题。获取对问题1回答“ a”的人数的最有效方法是什么?
我正在尝试针对所有问题返回a
,b
,c
,d
的数量,所以我想看看有多少回答{{1 }}代表问题1,有多少回答a
代表问题1,依此类推。因此,最后我应该对每个问题及其答案进行计数。
目前我有这个,但我觉得输入所有内容并不高效。有简化的方法吗?
b
答案 0 :(得分:0)
RDBMS的聚合非常容易... DDB没那么多。
DDB通常的答案是启用流,并在流上附加一个lambda,以计算所需的聚合并将其存储在DDB的单独记录中。
通读文档的Using Global Secondary Indexes for Materialized Aggregation Queries部分。
答案 1 :(得分:0)
您错过了提及两件事-这是您的一次性手术还是您需要定期进行?你有几条记录?
如果这是一次操作:
由于您有50个问题,每个问题有4个选项(200个组合),并且假设您有很多数据,所以最简单的解决方案是导出entire data to a csv并在那里做数据透视表。这比扫描整个表并在内存中执行聚合操作要容易。或者,您可以将表作为json导出到s3并使用athena对数据运行查询。
如果需要定期执行此操作,则可以执行以下操作之一:
答案 2 :(得分:-1)
如此处https://stackoverflow.com/a/55553744/6723229所述,如果您想执行一次操作,则可以将其导出到S3并使用AWS Athena来运行查询。这很好,但代价昂贵,并且如果您希望将来会发生变化,则需要执行模式。
如果您要定期执行此操作,有更多数据输入并且不想每次都导出,则可以使用Rockset之类的服务。 Rockset与DynamoDB进行了实时集成,可用于使DynamoDB和Rockset之间的数据保持同步。数据放入Rockset后,您可以使用SQL进行有效查询。 Rockset将索引所有字段并执行快速聚合。
在此处https://rockset.com/blog/running-fast-sql-on-dynamodb-tables/有关如何进行设置。
免责声明:我在Rockset工作。