amazon-dynamodb - AWS AppSync 未从 DynamoDB 返回所有记录
问题描述
在使用 DynamoDB 作为数据源时,我展示了 135 行样本数据的总记录数。但是,当我运行listAll
查询时,我在屏幕上看到非常随机的数据,限制为 20 条记录。
当我通过将limit
参数设置为 150 进行调查时,我得到了所有数据。如果我将限制保持在两个或三个并尝试添加一个过滤器来查询结果,我没有得到任何.
当我继续检查请求映射模板时,我发现 limit 的默认值被传递为 20。因此,我们看到随机的 20 条记录。
"limit": $util.defaultIfNull($ctx.args.limit, 20)
因此,如果您的过滤器有这 20 条记录中的任何一条的记录详细信息,您就会得到结果。如果 DynamoDB 中还有其他内容,则不会返回。
如果您从 RequestMappingTemplate 中删除此限制属性,则会收到所有数据。但是,任何时候你超过了限制,它都不会被计算在内,你会得到所有的结果。
我从这个练习中看到的是限制与行索引之类的东西直接相关。
我这样说的原因:假设您正在使用过滤器运行查询,并且您没有得到任何结果,但是 anextToken
是可用的。如果您再次使用 this 查询nextToken
,限制为两个,如果您要查找的这些记录不属于查询检索的 20 条记录,您将不会再次获得任何结果。
换句话说,它似乎首先获取然后limit
才应用过滤器。
我还在 DynamoDB 中检查了相同的内容,我在过滤时没有遇到任何此类问题。
谁能帮我这个?我在这里浏览过其他类似的帖子,但它们没有解决limit
限制查询池的场景,而不是返回结果的数量。
解决方案
当您查询或扫描 DynamoDB 表时,您可以限制返回的项目数。但是,任何过滤都是在限制之后完成的,这可以在找到您正在寻找的项目之前为您提供“无数据”页面,正如您所描述的那样。
请注意,尽管您可以取消限制,但 DynamoDB 仍将强制执行 1MB 的最大页面。物品的数量将取决于您的物品有多大。因此,除非您的表中始终有 <1MB 的数据,否则您将需要在前端实现分页,否则一旦页面大小(项目数)太大,您的查询将不会检查所有项目。
如果您希望过滤后每页的结果数量更加一致,您可能希望查询索引而不是过滤。您可以尝试添加 GSI,以便仅查询您正在寻找的那些项目。这将使您的查询更有效率,并使您的前端在每个页面响应中的项目计数更加一致。
推荐阅读
- ssl - 如何使用中间证书和根证书创建 Kubernetes TLS 机密
- python - ValueError:形状必须为 2 级,但对于 'in_top_k/InTopKV2'(操作:'InTopKV2')为 4 级,输入形状为:[?,28,28,10], [?], []
- python-3.x - 如何在 Python/Pandas 中的字典列表中过滤掉值
- jenkins - 卷曲命令无法按预期与 jenkins 文件一起使用
- javascript - 用于同时保存文档和集合的结构 Firestore 查询
- python - 无法使用 tkinter 和 pytorch 模型制作 exe 文件
- css - React Material-UI - 在 TablePagination 组件中样式化显示的行标签
- python - 搅拌机多线程
- typescript - 如何在 typegoose 中使用 mongoosastic 插件
- c# - 将一个动作应用于多个对象 C#