【问题标题】:AWS DynamoDB response size different between CLI and Node SDKCLI 和 Node SDK 之间的 AWS DynamoDB 响应大小不同
【发布时间】:2021-12-01 09:41:36
【问题描述】:

我正在尝试优化对 dynamodb 的查询以返回所有匹配项。从 cli 我可以查询该表并返回所有 303 项。

CLI 请求:

aws dynamodb 查询 --table-name my-table --index-name "myGsi" --key-condition-expression 'myId=:someId' --expression-attribute-values '{":someId":{ "S":"86c10962-6444-4f09-8f6c-dc6b30abac25"}}' 回应:

{
    "Items": [
         { ... },
         { ... }
     ],
    "Count": 303,
    "ScannedCount": 303,
    "ConsumedCapacity": null
}

问题在于,当我尝试在我的 Typescript 应用程序中重新创建该查询时,我在响应中只得到了大约 60 个项目(并不总是一致的)。

代码:

const params: DocumentClient.QueryInput = {
  TableName: 'my-table',
  IndexName: 'myGsi',
  KeyConditionExpression: 'myId = :someId',
  ExpressionAttributeValues: {
    ':someId': '86c10962-6444-4f09-8f6c-dc6b30abac25',
  }
};
const result: DocumentClient.QueryOutput = await dynamoClient.query(params).promise();

但是,这里的结果要小很多,我需要分页:

{
    "Items": [
         { ... },
         { ... }
     ],
    "Count": 59,
    "ScannedCount": 59,
    "LastEvaluatedKey": "xyz"
}

关于如何从 SDK 的单个请求中获取所有/更多内容的任何想法?为什么结果会与我的 CLI 请求不同?

【问题讨论】:

    标签: pagination secondary-indexes aws-dynamodb


    【解决方案1】:

    来自docs

    单个Query 操作将读取最多设置的最大项目数(如果使用Limit 参数)或最多1 MB数据,然后应用 使用FilterExpression 对结果进行任何过滤。如果LastEvaluatedKey 出现在响应中,您需要对结果集进行分页。有关更多信息,请参阅 Amazon DynamoDB 开发人员指南中的 Paginating the Results

    不知道我是否可以添加其他内容。这是预期的行为。

    关于如何从 SDK 的单个请求中获取所有/更多内容的任何想法?

    看起来好像用原始库是不可能的。除非你分叉并破解它。但还有其他 2 个选项:

    • 您可以尝试将Limit 设置为某个非常大的值,这样可能会覆盖库中硬编码的1 MB 限制。不知道 - 没试过。
    • 或者如果你真的需要,你可以使用aws dynamodb queryexec()(或一些类似的child_process 的函数)。

    在任何一种情况下,请注意 - 这可能会花费您金钱。所以也许还是坚持分页比较好。

    【讨论】:

    • 是的,我了解文档,并且您提到的是最新的。但是,我仍然不明白为什么 CLI 的结果会有所不同。调用 child_process 会起作用,但它是一个 hack!感谢您的反馈!
    • 我想这正是因为它是一个 hack - 似乎这个 CLI 应该是手动使用的,所以 AWS 并不关心防止过度收费。但是,正如我所说,如果您不使用分页,它可能意外导致大量配额使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多