我有一个用例,其中我必须返回Dynamo DB中表的所有元素。
假设我的表的分区键(X列)在所有行中都具有相同的值,例如“ monitor”(监视),而排序键(Y列)具有不同的元素。
以下方法执行时间会有所不同还是相同?
答案 0 :(得分:0)
据我所知,在您描述的特定情况下,scan
会稍微慢一些(尤其是在第一个响应中)。假设您不进行任何过滤(即FilterExpression
为空)。
DynamoDB可以潜在地存储大量数据。 “巨大”的意思是“超出了任何机器的RAM的容量”。如果您需要“返回表的所有元素”,您应该问自己:如果该表增长而导致所有元素不再适合内存,会发生什么?您不必立即处理此问题(我相信到目前为止,该表还很小),但是您确实需要牢记回到此代码并对其进行修复以解决此问题的可能性。
问题,我会问自己我是否在你的位置:
(1)我可以以某种方式设置我需要阅读的项目数量的限制(例如, 仅读取前1000个项目)?
(2)此信息如何(列表 项目)使用?它是否发送回运行在 浏览器向用户显示它?如果答案是肯定的,那 用户会使用大量商品吗?
(3)您可以一次处理一个项目(或一次处理10或100)吗?如果答案是肯定的,那么您只需要在内存中存储一个(或10或100)个项目,而不是整个项目列表
通常,在DDB scan
中的操作如(3)中所述:一次读取一个(或多个)项目,进行一些处理,然后继续进行下一个项目。
答案 1 :(得分:0)
您应该使用parallell scans概念。基本上,您要一次对Table的不同部分进行多次扫描。不过请注意更高的RCU使用率。
答案 2 :(得分:0)
尽量避免使用扫描。
扫描将从表中获取所有行,您还必须使用分页对所有行进行迭代。它更像是select * from table;
sql操作。
如果要基于分区键获取所有行,请使用查询。如果知道要用于结果的分区键,则应该使用查询,因为它会使用索引来仅使用特定分区键来获取行