Mis*_*r_L 7 amazon-web-services amazon-dynamodb
我有一个包含字段(不是关键字段)的表,名为appsMap,它看起来像这样:
appsMap = { "qa-app": "abc", "another-app": "xyz" }
Run Code Online (Sandbox Code Playgroud)
我想扫描其appsMap包含密钥"qa-app"的所有行(值不重要,只是键).我试过这样的东西,但它不能按照我需要的方式工作:
FilterExpression = '#appsMap.#app <> :v',
ExpressionAttributeNames = {
"#app": "qa-app",
"#appsMap": "appsMap"
},
ExpressionAttributeValues = {
":v": { "NULL": True }
},
ProjectionExpression = "deviceID"
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
谢谢.
这里有关于该主题的讨论: https://forums.aws.amazon.com/thread.jspa ?threadID=164470
您可能在示例中缺少这部分:ExpressionAttributeValues: {":name":{"S":"Jeff"}}
然而,只是想呼应已经说过的内容,扫描是一个昂贵的过程,它会遍历每个项目,从而使您的数据库难以扩展。
与其他数据库不同,您必须对 Dynamo 进行大量设置才能使其发挥最佳水平,这里有一个建议:1)将其转换为根值,例如添加到根:qaExist,使用可能的值为 0|1 或 true|false。2)为新创建的值创建二级索引。3) 对新索引进行查询,指定 0 作为搜索参数。
这将使您的系统非常快速且非常可扩展,无论您稍后获得多少记录。
由于您对自己的期望和正在发生的事情没有一点模糊(“我尝试了类似的方法,但它没有按照我需要的方式工作”),我想提一下,使用过滤器进行扫描是非常不同的比查询。
过滤器仅在执行扫描请求后应用在服务器上,这意味着它仍然会迭代表中的所有数据,而不是返回每个项目,而是对每个响应应用过滤器,从而节省一些网络带宽,但是当您翻阅整个表格时,可能会返回空结果。
如果这是您需要经常运行的查询,您可以考虑在表上创建 GSI。
| 归档时间: |
|
| 查看次数: |
5316 次 |
| 最近记录: |