当前位置: 首页 > 知识库问答 >
问题:

在DynamoDB上扫描表格的正确方法是什么?

曹理
2023-03-14

正如标题所说,我想知道在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是解决方案,但我不明白它是如何工作的。

  • 全球二级指数(GSI)

共有1个答案

邹正阳
2023-03-14

就像你说的,扫描表格不是一个好主意,你已经读过了。我建议两件事。

>

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

    如果仍然需要按组合主键中包含的属性以外的属性查询表,那么GSI就是解决方案,这是正确的。你可以查看这篇关于GSI如何工作的帖子。为全局二级索引选择主索引您可以将GSI视为具有不同主键的表的副本。

  •  类似资料:
    • 问题内容: Go扫描程序包中使用技巧来查找空白: 然后: 由于字符值向左移超过31,因此在某些情况下这不是唯一的吗?我的意思是,当某些char与制表符模数32相同时,它将被识别为空格吗? 问题答案: 完全答案: Spec明确表示,对于无符号操作,我们会屏蔽掉高位,因此低位实际上是“环绕”的。 它起作用的原因是: 实际上是完全适合的价值 在运行时对无符号整数进行的运算可以具有任意大的中间值,并且会回

    • 我使用jSerialComm库和扫描仪类。当我尝试运行我的程序时,我得到以下错误: 线程“main”中出现异常Java . lang . nullpointerexception < br >位于java.io.Reader .(未知源)< br >位于java.io.InputStreamReader .(未知源)< br >位于java.util.Scanner .(未知源)< br >位于s

    • 这是我的用例: 我有一个带有200k对象的JSON Api。数据集看起来有点像这样:日期、自行车型号、以分钟为单位的生产时间。我使用Lambda从JSON Api中读取并通过超文本传输协议请求在DynamoDB中写入。Lambda函数每天运行并使用最新数据更新DynamoDB。 然后,我按日期检索数据,因为我想计算每天的平均生产时间,并将其放在第二个表中。Alexa技能连接到第二个表,并读取每天的

    • 对于何时选择GSI或其他方式的全表扫描,是否有任何衡量标准? 我知道两者背后的基本概念,但GSI的定价模型非常依赖于表格本身,我很难决定 更重要的是,如何在不同的表大小下进行扩展,或者多少扫描效率太低,而需要GSI 顺便说一下,我很难找到好的资源来过滤表达式,以便在dynamodb上进行查询和扫描,有什么好的建议吗?(“#v

    • 我试图在电子表格(谷歌表格)API中逐列搜索值谷歌文档中有用于查找的API 我已经尝试过在电子表格中实现按值搜索的一些方法。 > GoogleVisualizationAPI查询语言:这种方法返回匹配值的行。 回应的一些问题: a) 不返回行号(无索引) b) 搜索区分大小写 是否有可能得到行号的结果,这种方法? 设置列 有行号,例如:2 然后按范围获取行:https://sheets.googl

    • 我们有一个设置,其中各种工作节点执行计算并更新DynamoDB表中的相对状态。该表充当工作节点活动的一种历史记录。看门狗节点需要定期扫描表,并构建一个表示工作节点及其作业的当前状态的对象。因此,我们的应用程序能够扫描表并按时间顺序检索数据(即按时间戳排序)是很重要的。表最终会太大,无法扫描到本地内存进行后期排序,所以我们扫描后无法排序。 从AWS留档读取主键: DynamoDB使用分区键值作为内部