我想增加在 dynamoDB 中使用 queryPage 读取的记录数

I want to increase number of records read using queryPage in dynamoDB

我有一个要求,在查询 DynamoDB table 时,我只需要从匹配记录中获取某个属性。我已经使用 withSelect(Select.SPECIFIC_ATTRIBUTES).withProjectionExpression(<attribute_name>) 来获取该属性。但是 queryPage 操作读取的记录数在两种情况下都是相同的(1. 使用 withSelect 和 2. 不使用 withSelect)。唯一的优势是通过使用 withSelect,这些操作的处理速度非常快。但这反过来会导致大量的 DynamoDB 读取。有什么方法可以在单个查询中读取更多记录,从而减少我的数据库读取次数?

您看到读取次数相同的原因是投影表达式被应用从存储节点检索每个项目之后,但是before它被收集到响应对象中。投影表达式的净收益是节省网络带宽,这反过来又可以减少延迟。但它不会导致消耗的容量节省。

如果您想节省消耗的容量并能够在每个请求中检索更多项目,您唯一的选择是:

  1. 创建一个索引,只投影你需要查询的属性;这可以是本地二级索引,也可以是全局二级索引,具体取决于您是否需要更改索引的分区键
  2. 尝试优化存储在 table 中的数据架构;也许你可以压缩你的项目,或者只是一般地计算出导致更小文档的编码

如果您决定使用索引,请记住以下几点:本地二级索引在您的示例中可能效果最好,但您需要为此创建一个新的 table(本地二级索引索引只能在您创建 table) 时创建);全局二级索引也可以工作,但前提是您的应用程序可以容忍对索引的最终一致读取(当然,与这些相关的成本更高)。

在此处阅读有关使用 DynamoDB 索引的更多信息:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes.html