在DynamoDB上扫描表的正确方法是哪种?

时间:2019-06-27 03:01:43

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

正如标题所述,我想知道哪种方式是在Amazon DynamoDB中扫描表的最佳方法,即通过除主键之外的另一个字段进行搜索。

我对此进行了搜索并阅读了很多东西,但是我找到了这个解决方案:

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');

这对我有用,但我还读到,对性能和价格而言,在桌子上执行扫描是个坏主意。但是,那怎么办呢?

  • 哪种扫描表的方法是正确的,而不是通过除主键之外的另一种来搜索的?

  • DocumentClient DynamoDB对象有什么区别?

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

我阅读了这些文章,我认为GSI是解决方案,但我不知道它是如何工作的。

1 个答案:

答案 0 :(得分:2)

就像您说的那样,扫描桌子并不是一个好主意,并且您已经阅读了它。我建议两件事。

  1. 使用复合主键(如果您尚未这样做)。结合使用分区键和排序键,您可以根据自己的频繁访问方式查询(而不扫描)表。

  2. 如果您仍然需要通过组合主键中所包含属性以外的属性查询表,那么可以肯定的是,GSI是解决方案。您可以查看有关GSI工作原理的信息。 Choose primary index for Global secondary index 您可以将GSI视为具有不同主键的表的副本。

相关问题