首页 > 解决方案 > 在 nosql dynamodb 表中使用分区键查找总记录数的复杂性?

问题描述

我正在设计一个 DynamoDB 数据库表。在一个表中,比如说test_table,我定义了一个组合键,它包含一个分区键,比如说partition_id和一个排序键,比如说sort_id。两者partition_idsort_id可能在它们的条目中有一些重复的值,但两者的组合partition_idsort_id一起将始终是唯一的。

我很想知道,总记录的检索效率有多高partition_id,比如说partition_id = x

标签: amazon-web-servicesnosqlamazon-dynamodb

解决方案


您的实际问题的答案是......非常低效。

与 RDBMS 不同,DDB 没有COUNT聚合函数或任何其他聚合函数……因此,获取计数的唯一方法是返回数据Query()Scan()您的数据,将数据返回到您的应用程序并自己计算行数。

如果您需要聚合,最佳实践是启用 DDB Streams,并将 Lambda 绑定到它,以计算和存储您感兴趣的聚合(计数)。

所以在你问的情况下,

partition_id = x

您可以向表中添加另一行,(pk=X, sk="COUNT")并且每次pk=x插入或删除记录时,lambda 都会更新该行。

然后你可以通过一个简单的方法有效地获得计数GetItem(pk=X, sk="COUNT")

文档中的更多信息Using Global Secondary Indexes for Materialized Aggregation Queries


推荐阅读