【问题标题】:Which is the correct way to scan a table on DynamoDB?在 DynamoDB 上扫描表的正确方法是什么?
【发布时间】:2019-11-09 00:28:14
【问题描述】:

正如标题所说,我想知道在 Amazon DynamoDB 中扫描表的最佳方法是通过 another 字段而不是主键进行搜索。

我对此进行了搜索并阅读了很多内容,但我找到了适合我的解决方案:

let DynamoDBServiceObj = new AWS.DynamoDB({apiVersion: '2012-08-10'});

let params = {
   ExpressionAttributeValues: {
       ':hash' : { S: req.param('wildcard') }
   },
   ProjectionExpression: 'directory',
   FilterExpression: 'qrCode = :hash',
   TableName: 'business'
};

let business = await DynamoDBServiceObj.scan(params).promise();
if (business.Count == 1) return res.ok();
else return res.view('404');

这对我有用,但我也读到对表执行 scan 是个坏主意,对于性能和定价而言。但是,那该怎么做呢?

  • 哪种扫描表的正确方法是按主键以外的another搜索?

  • DocumentClientDynamoDB Object有什么区别?

  • 我总是使用 .get() 在 DynamoDB 上获取我想要的内容。这是还是 做法

我阅读了这些帖子,我认为 GSI 是解决方案,但我不明白它是如何工作的。

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb sails.js dynamodb-queries


    【解决方案1】:

    正如您所说,扫描表格不是一个好主意,您已经阅读过它。我会建议两件事。

    1. 使用复合主键(如果您还没有这样做的话)。根据您的频繁访问模式,使用分区键和排序键的组合为您提供了更多查询(而不是扫描)表的可能性。

    2. 如果您仍然需要通过复合主键中包含的属性以外的属性来查询表,那么 GSI 是解决方案是对的。您可以查看这篇文章,了解 GSI 的工作原理。 Choose primary index for Global secondary index 您可以将 GSI 视为具有不同主键的表的副本。

    【讨论】:

    • 谢谢,我现在正在检查如何在我的表上创建 GSI。你能告诉我使用 .get() 方法是个好主意还是坏主意?例如,我使用它仅从一个或几个用户那里获取一些数据。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多