amazon-web-services - 在 nosql dynamodb 表中使用分区键查找总记录数的复杂性?
问题描述
我正在设计一个 DynamoDB 数据库表。在一个表中,比如说test_table
,我定义了一个组合键,它包含一个分区键,比如说partition_id
和一个排序键,比如说sort_id
。两者partition_id
和sort_id
可能在它们的条目中有一些重复的值,但两者的组合partition_id
和sort_id
一起将始终是唯一的。
我很想知道,总记录的检索效率有多高partition_id
,比如说partition_id = x
?
解决方案
您的实际问题的答案是......非常低效。
与 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
推荐阅读
- cordova - 添加平台并使用离子科尔多瓦构建时出错?
- python - cmd和IDLE python的不同结果
- r - R:数字精度,如何防止四舍五入?
- c# - WebRequest 中的堆栈缓冲区溢出导致
- tidb - PD集群的时间同步需要多精确?如果 PD 服务器中的时间不一致怎么办?
- c - 如何使用命令或调试文件在 open-vswitch 的内存池中查找空闲元素的大小?
- append - 我正在尝试向现有的 excel 文件添加更多内容,谁能告诉我 gembox.speadsheet 有什么方法可以使用吗?
- javascript - 在滚动容器内使用 React-dates 的 DateRangePicker
- parameter-passing - 将信息传递到在 Vaadin 8 中使用 BrowserWindowOpener 打开的新 Web 浏览器窗口/选项卡
- android - 显示多个从 Firebase 发送的活动通知