amazon-dynamodb - 如何在 DynamoDB 中使用 where 条件获得计数
问题描述
让我们说,我们有一种情况,不是获取表中的总计数,而是获取具有特定状态的记录计数。我们知道 DynamoDb 是无模式的,并且仍然必须对每条记录逐一计数才能获得总计数。然而,我们如何使用 dynamoDb 查询来利用上述需求?
解决方案
虽然通常“查询”或“扫描”请求会返回所有匹配项目,但您可以传递 Select=COUNT 参数并要求仅检索匹配项目的数量,而不是实际项目。但在你这样做之前,你应该知道一些事情:
DynamoDB 仍将读取 - 您仍将支付- 所有数据,即使只是为了被计算在内。使用过滤器进行“扫描”几乎在所有情况下都是不可能的,因为它每次都会读取整个数据集。使用“查询”,您可以要求仅读取一个分区,或一个分区中的一系列连续排序键,这在某些情况下可能是足够合理的(但请在您的用例中考虑是否如此)。
即使您实际上并没有读取数据,只是计数,DynamoDB 仍然使用“分页”进行扫描和查询,即您的读取请求将仅从磁盘读取 1MB 数据,返回部分计数,并要求您提交另一个请求以恢复扫描。您的 DynamoDB 库可能有一种方法可以自动执行此恢复,例如,它可以运行数千个或任何所需数量的查询,直到最终完成扫描并计算总和。
在某些情况下,除了数据之外,维护一个计数器可能是有意义的。写入会更昂贵(例如,每次写入都会添加数据并递增计数器),但需要此计数器的读取会非常便宜 - 所以这完全取决于您的工作负载需要多少。
推荐阅读
- windows - 错误:TLS 配置无效 - 确保您的 DOCKER_TLS_VERIFY 和 DOCKER_CERT_PATH 设置正确。在窗户上
- c++ - 使用带有 WH_CALLWNDPROCRET 或 WH_CALLWNDPROC 的 SetwindowsHookEX 打开超链接时如何在 Outlook 中获取超链接的 URL
- azure - 从 Azure 成本中心获取数据
- css - 为什么“Live Sass Compiler”扩展正在编译所有 sass 文件?
- dotnetnuke - DNN + uploadcare + prerender.io
- jquery - ActiveX 控件不适用于在 VB.Net 项目中创建的 Edge 和 Chrome 浏览器
- c# - 单例服务中的多个上下文
- amazon-web-services - 是什么限制了我的 EC2 节点之间的网络带宽?
- django - 如何在注册表格django中添加带有sqlite中组的组合框
- python - 如果 URL 的查询字符串具有多值参数,例如 ?name=a&name=b,flask 中的第二个值会发生什么情况?