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

DynamoDB对相同数据的扫描与查询

劳灵均
2023-03-14

我有一个用例,我必须在Dynamo DB中返回表的所有元素。

假设我的表有一个分区键(列X),所有行中的值都相同,比如“monitor”和排序键(列Y),元素不同。

以下方法的执行时间是否会有任何差异,还是相同?

  1. 扫描整张桌子。
  2. 基于具有“监视器”的分区键查询数据。

共有3个答案

爱唯
2023-03-14

据我所知,在您描述的特定情况下,扫描会稍微慢一点(特别是在第一次响应中)。这是假设您不进行任何过滤时(即FilterExpression为空)。

DynamoDB可能存储大量数据。我所说的“巨大”是指“任何机器的RAM都装不下”。如果需要“返回表的所有元素”,您应该问问自己:如果该表增长到所有元素都无法再放入内存,会发生什么情况?您现在不必处理这个问题(我认为目前的表相当小),但您需要记住返回此代码并修复它以解决此问题的可能性。

如果我处在你的位置,我会问自己的问题:

(1) 我是否可以对我需要阅读的项目数量设置一个限制(例如,只阅读前1000个项目)?

(2) 如何使用此信息(项目列表)?是否将其发送回运行在浏览器中的JS应用程序,并将其显示给用户?如果答案是肯定的,那么用户将如何处理庞大的项目列表?

(3) 你能一次处理一个项目(或者一次处理10个或100个)吗?如果答案是肯定的,那么您只需要在内存中存储一个(或10个或100个)项目,而不需要存储整个项目列表

一般来说,在DDB扫描操作中使用如(3)中所述:一次读取一个项目(或多个项目),进行一些处理,然后继续下一个项目。

陶和歌
2023-03-14

尽量避免使用扫描。

扫描将从表中获取所有行,您还必须使用分页来迭代所有行。它更像是从表中选择* sql操作。

如果要根据分区键获取所有行,请使用query。如果您知道要为哪个分区键获取结果,那么应该使用query,因为它会使用索引来获取只有特定分区键的行

慕健
2023-03-14

您应该使用并行扫描概念。基本上,您一次对表的不同部分进行多次扫描。不过,请注意更高的RCU使用率。

 类似资料:
  • 我正在尝试使用DynamoDB并行扫描示例: <代码>http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelJavaScanning.html 我有200,000个项目,我已经进行了顺序代码扫描,并根据我的使用对其进行了稍微修改: 当这个代码完成时,计数器给出的正好是200000,然而,我还想尝试并行扫描。

  • 我有一个DynamoDB表,如下所示: 是表的简单主键 是一个属性,它对表中的所有项目都具有相同的值 桌子变得很大了。我希望能够根据日期时间按范围过滤数据。我脑海中有两个快速实施的选项,但我不确定这是否会在成本方面产生很大的影响。 扫描整个表,然后按日期时间过滤(因为dynamodb不允许在扫描之前过滤) 所以,我的问题是,由于我的分区键对每个项目都是相同的,因此是一个大分区,我不确定当使用过滤器

  • DynamoDb文档中指定的查询操作: 查询操作仅搜索主键属性值,并支持对键属性值的比较运算符子集以优化搜索过程。 和扫描操作: 扫描操作扫描整个表。您可以指定要应用于结果的过滤器,以在完成扫描后优化返回给您的值。 这是基于性能和成本考虑的最佳选择。

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

  • 我对DynamoDB的性能有问题,我想澄清一下我有点困惑的地方。 执行扫描表中的100条记录,条件是使用(例如)。如果在表中找到20条记录,DynamoDB是否还扫描其他80条记录? 扫描时分页是如何工作的? 消耗超过分配的RCU和WCU的后果是什么?

  • 我已经在该表上创建了DynamoDB表和全局辅助索引。我需要从该表的GSI中获取所有数据。 有两种选择: 无筛选表达式的扫描操作 我需要找出哪一个性能更好,以便我开始我的实现。 我已经读了很多关于DynamoDB扫描和查询操作,但可以解决我的查询。 请帮我解决我的问题。 提前谢谢。 阿披实