【发布时间】:2017-07-08 00:48:06
【问题描述】:
我正在使用 AWS Mobile HUD 和连接的服务构建一个应用程序,主要是 Cognito 和 DynamoDB。目前,我在设置允许我在 DynamoDB 项目上存储用户相关信息(反之亦然)的方案时遇到问题。
场景
运行 1
- 用户 A 从 DynamoDB 中提取
[RootItem] = {RootItem_1, RootItem_2, RootItem_3}列表(检查:工作正常) - 用户 A 关闭
RootItem_1(在应用中标记为“不感兴趣”)
运行 2
- 用户 A 登录应用程序
- 用户 A 拉取
[RootItem] = {}的列表 - 用户 A 应该只得到
RootItems,它们没有被解雇 - 交付给客户的列表应该是
{RootItem_2, RootItem_3}
作为非关系数据/NoSQL 的新手,我不确定解决此问题的最佳方法是什么。可能的想法:
- 将用户 ID 存储在 RootItem_1 上以将其排除在扫描中 [问题:可能会有数千名用户关闭同一个项目]
- 将 RootItem_1 的 uuid 存储到 cognito 上的 userdata 中,在拉取之前缓存本地并从拉取中排除 uuid
- 使用排除/关闭 [userid, rootItem_uuid] 创建表,首先查询此表以获取用户排除列表。 > 潜在的性能问题?
如果能获得一些建议,在 NoSQL 环境中处理此问题的最佳方法是什么,那就太好了。
【问题讨论】:
-
很久以前我尝试过dynamodb,但如果可能的话,你应该避免SCAN操作,它很重。您是否查看过全球二级索引?这可能会减少对 SCAN 操作的需求,并允许您查询您的表。 docs.aws.amazon.com/amazondynamodb/latest/developerguide/…
-
我知道扫描并不完美,问题是我必须执行相当复杂的查询,而使用查询似乎是不可能的。又名 {property 1 == x && property 2 beween (a, b) or (c, d) && property 3 = a or b, ...} 我希望过滤 6-7 个不同的范围和匹配项属性,具有 OR 和 AND 操作,到目前为止,我认为通过查询这是不可能的
-
这就是我们离开 DynamoDB 的原因。当你不需要做“高级”查询时它非常好,但是当你需要更多的条件时你会碰壁。那个,连同这个:stackoverflow.com/questions/41520123/… 查看我关于那个问题的答案说明。由于您使用的是 Cognito 和 iOS,我假设您直接连接到 DynamoDB,这也是需要注意的事情(不要吓跑您)。
标签: ios swift amazon-web-services amazon-dynamodb nosql