正如标题所述,我想知道哪种方式是在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是解决方案,但我不知道它是如何工作的。
答案 0 :(得分:2)
就像您说的那样,扫描桌子并不是一个好主意,并且您已经阅读了它。我建议两件事。
使用复合主键(如果您尚未这样做)。结合使用分区键和排序键,您可以根据自己的频繁访问方式查询(而不扫描)表。
如果您仍然需要通过组合主键中所包含属性以外的属性查询表,那么可以肯定的是,GSI是解决方案。您可以查看有关GSI工作原理的信息。 Choose primary index for Global secondary index 您可以将GSI视为具有不同主键的表的副本。