DynamoDb文档中指定的查询操作:
查询操作仅搜索主键属性值,并支持关键属性值上的比较运算符子集,以优化搜索过程.
和扫描操作:
扫描操作扫描整个表.您可以指定过滤器以应用于结果,以在完整扫描后优化返回给您的值.
哪种情况最好基于性能和成本考虑因素.
OK2*_*200 31
你有dynamodb表分区键/主键作为customer_country.如果使用查询,customer_country则是进行查询操作的必填字段.所有过滤器只能是属于的项目customer_country.
如果执行表扫描,将在所有分区键/主键上执行过滤器.首先,它从表中获取后获取所有数据并应用过滤器.
这customer_country是分区键/主键
,id是sort_key
-----------------------------------
customer_country | name | id
-----------------------------------
VV | Tom | 1
VV | Jack | 2
VV | Mary | 4
BB | Nancy | 5
BB | Lom | 6
BB | XX | 7
CC | YY | 8
CC | ZZ | 9
------------------------------------
Run Code Online (Sandbox Code Playgroud)
如果执行查询操作,则仅适用于customer_country值.该值应仅等于operator(=).
因此,仅获取与该分区键/主键值相等的项.
如果执行扫描操作,它将获取该表中的所有项目,并在获取该数据后过滤掉数据.
注意:请勿执行超出RCU的扫描操作.
Kin*_*man 29
创建Dynamodb表时,请选择"主键和本地二级索引"(LSI),以便"查询"操作返回所需的项目.
查询操作仅支持主键的相等运算符评估,但在排序键上有条件(=,<,<=,>,> =,Between,Begin).
扫描操作通常较慢且更昂贵,因为操作必须遍历表中的每个项目以获取您请求的项目.
例:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
Run Code Online (Sandbox Code Playgroud)
在此示例中,您可以使用Query操作来获取:
需要使用扫描操作返回:
避免对常用操作进行扫描操作,创建本地二级索引(LSI)或全局二级索引(GSI).
例:
Table: CustomerId, AccountType, Country, LastPurchase
Primary Key: CustomerId + AccountType
GSI: AccountType + CustomerId
LSI: CustomerId + LastPurchase
Run Code Online (Sandbox Code Playgroud)
在此示例中,Query操作可以允许您获取:
Ope*_*oip 10
查询比扫描好得多 - 性能明智。scan,顾名思义,将扫描整个表。但是您必须清楚地了解表键、排序键、索引和相关排序索引,才能知道您可以使用 Query。如果您使用以下方法过滤查询:
使用查询!否则使用 scan ,它可以更灵活地过滤哪些列。
您不能查询:
一个很好的解释:https : //medium.com/@amos.shahar/dynamodb-query-vs-scan-sql-syntax-and-join-tables-part-1-371288a7cb8f
Joe*_*ang 10
它与关系数据库中的类似。
让query你在where条件下使用主键,计算复杂度是log(n)因为大多数键结构是二叉树。
而scan查询你要扫描整个表,然后应用在每一个过滤器row,以找到合适的结果。表现是O(n)。如果你的桌子很大,它会慢得多。
简而言之,query如果您知道主键,请尝试使用。只scan针对最坏的情况。
另外,考虑使用全局二级索引来支持对不同键的不同类型的查询以获得性能目标
| 归档时间: |
|
| 查看次数: |
31804 次 |
| 最近记录: |