【问题标题】:AWS DynamoDB remember item for userAWS DynamoDB 为用户记住项目
【发布时间】:2017-07-08 00:48:06
【问题描述】:

我正在使用 AWS Mobile HUD 和连接的服务构建一个应用程序,主要是 Cognito 和 DynamoDB。目前,我在设置允许我在 DynamoDB 项目上存储用户相关信息(反之亦然)的方案时遇到问题。

场景

运行 1

  1. 用户 A 从 DynamoDB 中提取 [RootItem] = {RootItem_1, RootItem_2, RootItem_3} 列表(检查:工作正常)
  2. 用户 A 关闭 RootItem_1(在应用中标记为“不感兴趣”)

运行 2

  1. 用户 A 登录应用程序
  2. 用户 A 拉取[RootItem] = {} 的列表
  3. 用户 A 应该只得到RootItems,它们没有被解雇
  4. 交付给客户的列表应该是{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


【解决方案1】:

这当然取决于数量或 RootItem,以及每个用户存在多少活动(未解除)RootItem。但我会维护一个 RootItems 列表(或引用它)并将其存储在每个用户的表中,并在用户关闭项目时维护该列表。或者甚至有可能大多数项目都被解除了,然后它会成为用户保存的项目列表?

【讨论】:

  • 基本上,用户会看到未来符合他的标准的所有项目的列表。然后,他继续遍历所有这些,要么忽略它们,要么“记住”它们。在一个完美的世界(成功的冒险)中,可能会有大约 1000 多个符合用户标准的 rootItems。我也倾向于这个解决方案,有一个额外的表,其中 userID 是关键,我存储 {userId, rootItemID, date} 并且可以定期清理“旧”被解雇的项目,因为它们不再需要了,因为过去的数据不感兴趣应用程序。我会尝试以这种方式设置它,看看它是否有效。
  • 它工作正常,如果它是最高效的方式,还不是 100%。我选择在 DynamoDB 上创建引用,登录时下载 1 次,然后保留本地引用并在本地进行过滤
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 2023-01-20
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多